@pepperi-addons/ngx-lib 0.4.2-beta.98 → 0.4.2-storybook.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 (58) hide show
  1. package/chips/chips.component.d.ts +1 -3
  2. package/esm2020/checkbox/checkbox.component.mjs +3 -3
  3. package/esm2020/chips/chips.component.mjs +8 -11
  4. package/esm2020/draggable-items/draggable-items.component.mjs +3 -3
  5. package/esm2020/form/internal-page.component.mjs +3 -4
  6. package/esm2020/list/list.component.mjs +14 -5
  7. package/esm2020/list/list.model.mjs +1 -1
  8. package/esm2020/menu/menu-item.component.mjs +3 -3
  9. package/esm2020/quantity-selector/quantity-selector.component.mjs +7 -3
  10. package/esm2020/remote-loader/remote-loader.service.mjs +16 -16
  11. package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +3 -3
  12. package/esm2020/signature/signature-dialog.component.mjs +2 -1
  13. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +2 -2
  14. package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  15. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +7 -10
  16. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  17. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +2 -2
  18. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  19. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +2 -3
  20. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  21. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +13 -4
  22. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  23. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +2 -2
  24. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  25. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +7 -2
  26. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  27. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +16 -16
  28. package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  29. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
  30. package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  31. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +1 -0
  32. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  33. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +2 -2
  34. package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
  35. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +7 -10
  36. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  37. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +2 -2
  38. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  39. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +2 -3
  40. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  41. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +13 -4
  42. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  43. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +2 -2
  44. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  45. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +6 -2
  46. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  47. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +15 -15
  48. package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
  49. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
  50. package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
  51. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +1 -0
  52. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  53. package/list/list.model.d.ts +1 -2
  54. package/package.json +1 -1
  55. package/remote-loader/remote-loader.service.d.ts +1 -1
  56. package/rich-html-textarea/rich-html-textarea.component.theme.scss +2 -0
  57. package/src/core/style/components/general.scss +2 -4
  58. package/src/core/style/abstracts/AbstractsIntro.stories.mdx +0 -7
@@ -1,4 +1,4 @@
1
1
  export class PepSelectionData {
2
2
  }
3
3
  export const DEFAULT_PAGE_SIZE = 50;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvbGlzdC9saXN0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CQSxNQUFNLE9BQU8sZ0JBQWdCO0NBSTVCO0FBa0JELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdHNEYXRhUm93IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0U2VsZWN0aW9uVHlwZSA9XG4gICAgfCAnbm9uZSdcbiAgICB8ICdzaW5nbGUnXG4gICAgfCAnbXVsdGknO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0UGFnZXJUeXBlID0gJ3BhZ2VzJyB8ICdzY3JvbGwnO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0Vmlld1R5cGUgPSAnJyB8ICdjYXJkcycgfCAnbGluZXMnIHwgJ3RhYmxlJzsgLy8gfCAnbWFwJztcblxuZXhwb3J0IHR5cGUgUGVwTGlzdENhcmRTaXplVHlwZSA9ICdzbScgfCAnbWQnO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0VGFibGVWaWV3VHlwZSA9ICdjb21wYWN0JyB8ICdyZWd1bGFyJztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVwTGlzdEl0ZW1DbGlja0V2ZW50IHtcbiAgICBzb3VyY2U6IE9iamVjdHNEYXRhUm93O1xuICAgIHZpZXdUeXBlOiBQZXBMaXN0Vmlld1R5cGU7XG59XG5cbmV4cG9ydCBjbGFzcyBQZXBTZWxlY3Rpb25EYXRhIHtcbiAgICBzZWxlY3Rpb25UeXBlOiBudW1iZXI7XG4gICAgcm93czogQXJyYXk8YW55PjtcbiAgICByb3dUeXBlczogQXJyYXk8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwTGlzdExvYWRJdGVtc0V2ZW50IHtcbiAgICBmcm9tSW5kZXg6IG51bWJlcjtcbiAgICB0b0luZGV4OiBudW1iZXI7XG4gICAgLy8gdXBkYXRlSXRlbXNGdW5jOiAoKSA9PiB2b2lkOyAvLygpID0+IGFueTsgXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RMb2FkUGFnZUV2ZW50IHtcbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIC8vIHVwZGF0ZVBhZ2VGdW5jOiAoKSA9PiB2b2lkOyAvLygpID0+IGFueTsgXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RTdGFydEluZGV4Q2hhbmdlRXZlbnQge1xuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gNTA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RTb3J0aW5nRGF0YSB7XG4gICAgc29ydEJ5OiBzdHJpbmc7XG4gICAgaXNBc2M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RTb3J0aW5nQ2hhbmdlRXZlbnQgZXh0ZW5kcyBJUGVwTGlzdFNvcnRpbmdEYXRhIHtcbiAgIFxufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvbGlzdC9saXN0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CQSxNQUFNLE9BQU8sZ0JBQWdCO0NBSTVCO0FBa0JELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9iamVjdHNEYXRhUm93IH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0U2VsZWN0aW9uVHlwZSA9XG4gICAgfCAnbm9uZSdcbiAgICB8ICdzaW5nbGUnXG4gICAgfCAnbXVsdGknO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0UGFnZXJUeXBlID0gJ3BhZ2VzJyB8ICdzY3JvbGwnO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0Vmlld1R5cGUgPSAnJyB8ICdjYXJkcycgfCAnbGluZXMnIHwgJ3RhYmxlJzsgLy8gfCAnbWFwJztcblxuZXhwb3J0IHR5cGUgUGVwTGlzdENhcmRTaXplVHlwZSA9ICdzbScgfCAnbWQnO1xuXG5leHBvcnQgdHlwZSBQZXBMaXN0VGFibGVWaWV3VHlwZSA9ICdjb21wYWN0JyB8ICdyZWd1bGFyJztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVwTGlzdEl0ZW1DbGlja0V2ZW50IHtcbiAgICBzb3VyY2U6IE9iamVjdHNEYXRhUm93O1xuICAgIHZpZXdUeXBlOiBQZXBMaXN0Vmlld1R5cGU7XG59XG5cbmV4cG9ydCBjbGFzcyBQZXBTZWxlY3Rpb25EYXRhIHtcbiAgICBzZWxlY3Rpb25UeXBlOiBudW1iZXI7XG4gICAgcm93czogQXJyYXk8YW55PjtcbiAgICByb3dUeXBlczogQXJyYXk8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwTGlzdExvYWRJdGVtc0V2ZW50IHtcbiAgICBmcm9tSW5kZXg6IG51bWJlcjtcbiAgICB0b0luZGV4OiBudW1iZXI7XG4gICAgLy8gdXBkYXRlSXRlbXNGdW5jOiAoKSA9PiB2b2lkOyAvLygpID0+IGFueTsgXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RMb2FkUGFnZUV2ZW50IHtcbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIC8vIHVwZGF0ZVBhZ2VGdW5jOiAoKSA9PiB2b2lkOyAvLygpID0+IGFueTsgXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RTdGFydEluZGV4Q2hhbmdlRXZlbnQge1xuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gNTA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcExpc3RTb3J0aW5nRGF0YSB7XG4gICAgc29ydEJ5OiBzdHJpbmc7XG4gICAgaXNBc2M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIElQZXBMaXN0U29ydGluZ0NoYW5nZUV2ZW50ID0gSVBlcExpc3RTb3J0aW5nRGF0YVxuIl19
@@ -90,10 +90,10 @@ export class PepMenuItemComponent {
90
90
  }
91
91
  }
92
92
  PepMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
93
- PepMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepMenuItemComponent, selector: "pep-menu-item", inputs: { type: "type", parent: "parent", items: "items", selectedItem: "selectedItem", xPosition: "xPosition", subMenuIconName: "subMenuIconName" }, outputs: { menuItemClick: "menuItemClick" }, viewQueries: [{ propertyName: "childMenu", first: true, predicate: ["childMenu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #childMenu=\"matMenu\" xPosition=\"{{ xPosition }}\" class=\"pep-{{type}}-menu\">\n <ng-container *ngFor=\"let menuItem of items\">\n <ng-container *ngIf=\"!menuItem.hidden\">\n <ng-container *ngIf=\"menuItem.type === 'splitter'; then splitterBlock; else buttonBlock\"></ng-container>\n <ng-template #splitterBlock>\n <div mat-menu-item class=\"splitter\"></div>\n </ng-template>\n\n <ng-template #buttonBlock>\n <ng-container\n *ngIf=\"type !== 'select' && menuItem.children?.length > 0; then childrenBlock; else regularBlock\">\n </ng-container>\n <ng-template #childrenBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" [matMenuTriggerFor]=\"menu.childMenu\"\n title=\"{{ menuItem.text }}\" pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: type === 'action-select' && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: true\n }\"></ng-container>\n </button>\n <pep-menu-item #menu [type]=\"type\" [items]=\"menuItem.children\" [parent]=\"menuItem\"\n (menuItemClick)=\"onChildClicked($event)\">\n </pep-menu-item>\n </ng-template>\n <ng-template #regularBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" title=\"{{ menuItem.text }}\"\n pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: (type === 'select' || type === 'action-select') && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: false\n }\"></ng-container>\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<ng-template #itemTemplate let-itemIconName=\"itemIconName\" let-itemText=\"itemText\" let-itemType=\"itemType\"\n let-hasChildren=\"hasChildren\">\n <ng-container>\n <mat-icon *ngIf=\"itemIconName\" class=\"pull-left flip\">\n <pep-icon name=\"{{itemIconName}}\"></pep-icon>\n </mat-icon>\n <span *ngIf=\"itemText\" class=\"pull-left flip title ellipsis\"\n [ngClass]=\"{ 'spacing-from-icon': itemIconName, 'spacing-from-submenu-trigger': hasChildren }\"\n [title]=\"itemText\">\n {{ itemText }}\n </span>\n <mat-icon *ngIf=\"hasChildren\" class=\"pull-left flip submenu-trigger\"\n [ngClass]=\"{ 'rotate': xPosition === 'before' }\">\n <pep-icon name=\"{{ subMenuIconName }}\"></pep-icon>\n </mat-icon>\n </ng-container>\n</ng-template>", styles: [".mat-menu-item-submenu-trigger:after{display:none}.mat-menu-item .title{margin:0 var(--pep-spacing-xs, .25rem)}.mat-menu-item .title.spacing-from-icon{margin:0 var(--pep-spacing-sm, .5rem)}.mat-menu-item .title.spacing-from-submenu-trigger{padding-inline-end:var(--pep-spacing-lg, 1rem)}.mat-menu-item .mat-icon{margin:0}.mat-menu-item .submenu-trigger{position:absolute;right:var(--pep-spacing-sm, .5rem);width:1rem}.mat-menu-item .submenu-trigger.rotate{transform:rotate(180deg)}.mat-menu-item.splitter{height:1px!important;margin:var(--pep-spacing-sm, .5rem) 0}.mat-menu-item[dir=rtl] .submenu-trigger{right:unset;left:var(--pep-spacing-sm, .5rem);transform:rotate(180deg)}.mat-menu-item[dir=rtl] .submenu-trigger.rotate{transform:rotate(0)}.mat-menu-item-submenu-trigger:after{width:unset;height:unset;transform:unset}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.PepRtlDirectionDirective, selector: "[pepRtlDirection]" }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: PepMenuItemComponent, selector: "pep-menu-item", inputs: ["type", "parent", "items", "selectedItem", "xPosition", "subMenuIconName"], outputs: ["menuItemClick"] }] });
93
+ PepMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepMenuItemComponent, selector: "pep-menu-item", inputs: { type: "type", parent: "parent", items: "items", selectedItem: "selectedItem", xPosition: "xPosition", subMenuIconName: "subMenuIconName" }, outputs: { menuItemClick: "menuItemClick" }, viewQueries: [{ propertyName: "childMenu", first: true, predicate: ["childMenu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #childMenu=\"matMenu\" xPosition=\"{{ xPosition }}\" class=\"pep-{{type}}-menu\">\n <ng-container *ngFor=\"let menuItem of items\">\n <ng-container *ngIf=\"!menuItem.hidden\">\n <ng-container *ngIf=\"menuItem.type === 'splitter'; then splitterBlock; else buttonBlock\"></ng-container>\n <ng-template #splitterBlock>\n <div mat-menu-item class=\"splitter\"></div>\n </ng-template>\n\n <ng-template #buttonBlock>\n <ng-container\n *ngIf=\"type !== 'select' && menuItem.children?.length > 0; then childrenBlock; else regularBlock\">\n </ng-container>\n <ng-template #childrenBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" [matMenuTriggerFor]=\"menu.childMenu\"\n title=\"{{ menuItem.text }}\" pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: type === 'action-select' && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: true\n }\"></ng-container>\n </button>\n <pep-menu-item #menu [type]=\"type\" [items]=\"menuItem.children\" [parent]=\"menuItem\"\n (menuItemClick)=\"onChildClicked($event)\">\n </pep-menu-item>\n </ng-template>\n <ng-template #regularBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" title=\"{{ menuItem.text }}\"\n pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: (type === 'select' || type === 'action-select') && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: false\n }\"></ng-container>\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<ng-template #itemTemplate let-itemIconName=\"itemIconName\" let-itemText=\"itemText\" let-itemType=\"itemType\"\n let-hasChildren=\"hasChildren\">\n <ng-container>\n <mat-icon *ngIf=\"itemIconName\" class=\"pull-left flip\">\n <pep-icon name=\"{{itemIconName}}\"></pep-icon>\n </mat-icon>\n <span *ngIf=\"itemText\" class=\"pull-left flip title ellipsis\"\n [ngClass]=\"{ 'spacing-from-icon': itemIconName, 'spacing-from-submenu-trigger': hasChildren }\"\n [title]=\"itemText\">\n {{ itemText }}\n </span>\n <mat-icon *ngIf=\"hasChildren\" class=\"pull-left flip submenu-trigger\"\n [ngClass]=\"{ 'rotate': xPosition === 'before' }\">\n <pep-icon name=\"{{ subMenuIconName }}\"></pep-icon>\n </mat-icon>\n </ng-container>\n</ng-template>", styles: [".mat-menu-item .title{margin:0 var(--pep-spacing-xs, .25rem)}.mat-menu-item .title.spacing-from-icon{margin:0 var(--pep-spacing-sm, .5rem)}.mat-menu-item .title.spacing-from-submenu-trigger{padding-inline-end:var(--pep-spacing-lg, 1rem)}.mat-menu-item .mat-icon{margin:0}.mat-menu-item .submenu-trigger{position:absolute;right:var(--pep-spacing-sm, .5rem);width:1rem}.mat-menu-item .submenu-trigger.rotate{transform:rotate(180deg)}.mat-menu-item.splitter{height:1px!important;margin:var(--pep-spacing-sm, .5rem) 0}.mat-menu-item[dir=rtl] .submenu-trigger{right:unset;left:var(--pep-spacing-sm, .5rem);transform:rotate(180deg)}.mat-menu-item[dir=rtl] .submenu-trigger.rotate{transform:rotate(0)}.mat-menu-item ::ng-deep .mat-menu-submenu-icon{display:none}.mat-menu-item-submenu-trigger:after{display:none;width:unset;height:unset;transform:unset}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.PepRtlDirectionDirective, selector: "[pepRtlDirection]" }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }, { kind: "component", type: PepMenuItemComponent, selector: "pep-menu-item", inputs: ["type", "parent", "items", "selectedItem", "xPosition", "subMenuIconName"], outputs: ["menuItemClick"] }] });
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepMenuItemComponent, decorators: [{
95
95
  type: Component,
96
- args: [{ selector: 'pep-menu-item', template: "<mat-menu #childMenu=\"matMenu\" xPosition=\"{{ xPosition }}\" class=\"pep-{{type}}-menu\">\n <ng-container *ngFor=\"let menuItem of items\">\n <ng-container *ngIf=\"!menuItem.hidden\">\n <ng-container *ngIf=\"menuItem.type === 'splitter'; then splitterBlock; else buttonBlock\"></ng-container>\n <ng-template #splitterBlock>\n <div mat-menu-item class=\"splitter\"></div>\n </ng-template>\n\n <ng-template #buttonBlock>\n <ng-container\n *ngIf=\"type !== 'select' && menuItem.children?.length > 0; then childrenBlock; else regularBlock\">\n </ng-container>\n <ng-template #childrenBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" [matMenuTriggerFor]=\"menu.childMenu\"\n title=\"{{ menuItem.text }}\" pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: type === 'action-select' && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: true\n }\"></ng-container>\n </button>\n <pep-menu-item #menu [type]=\"type\" [items]=\"menuItem.children\" [parent]=\"menuItem\"\n (menuItemClick)=\"onChildClicked($event)\">\n </pep-menu-item>\n </ng-template>\n <ng-template #regularBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" title=\"{{ menuItem.text }}\"\n pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: (type === 'select' || type === 'action-select') && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: false\n }\"></ng-container>\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<ng-template #itemTemplate let-itemIconName=\"itemIconName\" let-itemText=\"itemText\" let-itemType=\"itemType\"\n let-hasChildren=\"hasChildren\">\n <ng-container>\n <mat-icon *ngIf=\"itemIconName\" class=\"pull-left flip\">\n <pep-icon name=\"{{itemIconName}}\"></pep-icon>\n </mat-icon>\n <span *ngIf=\"itemText\" class=\"pull-left flip title ellipsis\"\n [ngClass]=\"{ 'spacing-from-icon': itemIconName, 'spacing-from-submenu-trigger': hasChildren }\"\n [title]=\"itemText\">\n {{ itemText }}\n </span>\n <mat-icon *ngIf=\"hasChildren\" class=\"pull-left flip submenu-trigger\"\n [ngClass]=\"{ 'rotate': xPosition === 'before' }\">\n <pep-icon name=\"{{ subMenuIconName }}\"></pep-icon>\n </mat-icon>\n </ng-container>\n</ng-template>", styles: [".mat-menu-item-submenu-trigger:after{display:none}.mat-menu-item .title{margin:0 var(--pep-spacing-xs, .25rem)}.mat-menu-item .title.spacing-from-icon{margin:0 var(--pep-spacing-sm, .5rem)}.mat-menu-item .title.spacing-from-submenu-trigger{padding-inline-end:var(--pep-spacing-lg, 1rem)}.mat-menu-item .mat-icon{margin:0}.mat-menu-item .submenu-trigger{position:absolute;right:var(--pep-spacing-sm, .5rem);width:1rem}.mat-menu-item .submenu-trigger.rotate{transform:rotate(180deg)}.mat-menu-item.splitter{height:1px!important;margin:var(--pep-spacing-sm, .5rem) 0}.mat-menu-item[dir=rtl] .submenu-trigger{right:unset;left:var(--pep-spacing-sm, .5rem);transform:rotate(180deg)}.mat-menu-item[dir=rtl] .submenu-trigger.rotate{transform:rotate(0)}.mat-menu-item-submenu-trigger:after{width:unset;height:unset;transform:unset}\n"] }]
96
+ args: [{ selector: 'pep-menu-item', template: "<mat-menu #childMenu=\"matMenu\" xPosition=\"{{ xPosition }}\" class=\"pep-{{type}}-menu\">\n <ng-container *ngFor=\"let menuItem of items\">\n <ng-container *ngIf=\"!menuItem.hidden\">\n <ng-container *ngIf=\"menuItem.type === 'splitter'; then splitterBlock; else buttonBlock\"></ng-container>\n <ng-template #splitterBlock>\n <div mat-menu-item class=\"splitter\"></div>\n </ng-template>\n\n <ng-template #buttonBlock>\n <ng-container\n *ngIf=\"type !== 'select' && menuItem.children?.length > 0; then childrenBlock; else regularBlock\">\n </ng-container>\n <ng-template #childrenBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" [matMenuTriggerFor]=\"menu.childMenu\"\n title=\"{{ menuItem.text }}\" pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: type === 'action-select' && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: true\n }\"></ng-container>\n </button>\n <pep-menu-item #menu [type]=\"type\" [items]=\"menuItem.children\" [parent]=\"menuItem\"\n (menuItemClick)=\"onChildClicked($event)\">\n </pep-menu-item>\n </ng-template>\n <ng-template #regularBlock>\n <button mat-menu-item (click)=\"onMenuItemClicked(menuItem)\" title=\"{{ menuItem.text }}\"\n pepRtlDirection [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ selected: (type === 'select' || type === 'action-select') && menuItem.selected, disabled: menuItem.disabled }\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n itemIconName: menuItem.iconName,\n itemText: menuItem.text,\n itemType: menuItem.type,\n hasChildren: false\n }\"></ng-container>\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<ng-template #itemTemplate let-itemIconName=\"itemIconName\" let-itemText=\"itemText\" let-itemType=\"itemType\"\n let-hasChildren=\"hasChildren\">\n <ng-container>\n <mat-icon *ngIf=\"itemIconName\" class=\"pull-left flip\">\n <pep-icon name=\"{{itemIconName}}\"></pep-icon>\n </mat-icon>\n <span *ngIf=\"itemText\" class=\"pull-left flip title ellipsis\"\n [ngClass]=\"{ 'spacing-from-icon': itemIconName, 'spacing-from-submenu-trigger': hasChildren }\"\n [title]=\"itemText\">\n {{ itemText }}\n </span>\n <mat-icon *ngIf=\"hasChildren\" class=\"pull-left flip submenu-trigger\"\n [ngClass]=\"{ 'rotate': xPosition === 'before' }\">\n <pep-icon name=\"{{ subMenuIconName }}\"></pep-icon>\n </mat-icon>\n </ng-container>\n</ng-template>", styles: [".mat-menu-item .title{margin:0 var(--pep-spacing-xs, .25rem)}.mat-menu-item .title.spacing-from-icon{margin:0 var(--pep-spacing-sm, .5rem)}.mat-menu-item .title.spacing-from-submenu-trigger{padding-inline-end:var(--pep-spacing-lg, 1rem)}.mat-menu-item .mat-icon{margin:0}.mat-menu-item .submenu-trigger{position:absolute;right:var(--pep-spacing-sm, .5rem);width:1rem}.mat-menu-item .submenu-trigger.rotate{transform:rotate(180deg)}.mat-menu-item.splitter{height:1px!important;margin:var(--pep-spacing-sm, .5rem) 0}.mat-menu-item[dir=rtl] .submenu-trigger{right:unset;left:var(--pep-spacing-sm, .5rem);transform:rotate(180deg)}.mat-menu-item[dir=rtl] .submenu-trigger.rotate{transform:rotate(0)}.mat-menu-item ::ng-deep .mat-menu-submenu-icon{display:none}.mat-menu-item-submenu-trigger:after{display:none;width:unset;height:unset;transform:unset}\n"] }]
97
97
  }], propDecorators: { type: [{
98
98
  type: Input
99
99
  }], parent: [{
@@ -112,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
112
112
  }], menuItemClick: [{
113
113
  type: Output
114
114
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvbWVudS9tZW51LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9tZW51L21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQ0gsV0FBVyxHQUlkLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBRXRCLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUFXO0lBQXBEOztRQUNJLGFBQVEsR0FBYSxLQUFLLENBQUM7SUFDL0IsQ0FBQztDQUFBO0FBT0QsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1hLFNBQUksR0FBZ0IsUUFBUSxDQUFDO1FBRTdCLFdBQU0sR0FBc0IsSUFBSSxDQUFDO1FBQ2pDLFVBQUssR0FBK0IsRUFBRSxDQUFDO1FBRXhDLGtCQUFhLEdBQXdCLElBQUksQ0FBQztRQVN6QyxjQUFTLEdBQXVCLE9BQU8sQ0FBQztRQUN4QyxvQkFBZSxHQUFXLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUsxRCxrQkFBYSxHQUF5QyxJQUFJLFlBQVksRUFBMEIsQ0FBQztLQW9GcEc7SUFsR0csSUFDSSxZQUFZLENBQUMsWUFBaUM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQVVELFdBQVc7UUFDUCw0QkFBNEI7UUFDNUIsd0NBQXdDO1FBQ3hDLElBQUk7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b0I7MkZBQXBCLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDSSxlQUFlOzhCQUtoQixJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFJRixZQUFZO3NCQURmLEtBQUs7Z0JBUUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUUyQyxTQUFTO3NCQUF6RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3hDLGFBQWE7c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwZXBJY29uQXJyb3dSaWdodCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2ljb24nO1xuaW1wb3J0IHtcbiAgICBQZXBNZW51SXRlbSxcbiAgICBJUGVwTWVudUl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcE1lbnVUeXBlLFxuICAgIFBlcE1lbnVJdGVtUGFyZW50LFxufSBmcm9tICcuL21lbnUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgUGVwSW50ZXJuYWxNZW51SXRlbSBleHRlbmRzIFBlcE1lbnVJdGVtIHtcbiAgICBzZWxlY3RlZD86IGJvb2xlYW4gPSBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbWVudS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tZW51LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHR5cGU6IFBlcE1lbnVUeXBlID0gJ2FjdGlvbic7XG5cbiAgICBASW5wdXQoKSBwYXJlbnQ6IFBlcE1lbnVJdGVtUGFyZW50ID0gbnVsbDtcbiAgICBASW5wdXQoKSBpdGVtczogQXJyYXk8UGVwSW50ZXJuYWxNZW51SXRlbT4gPSBbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWRJdGVtKCk6IFBlcEludGVybmFsTWVudUl0ZW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHhQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2FmdGVyJztcbiAgICBASW5wdXQoKSBzdWJNZW51SWNvbk5hbWU6IHN0cmluZyA9IHBlcEljb25BcnJvd1JpZ2h0Lm5hbWU7XG5cbiAgICBAVmlld0NoaWxkKCdjaGlsZE1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY2hpbGRNZW51OiBhbnk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBtZW51SXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcE1lbnVJdGVtQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMubWVudUl0ZW1DbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51SXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkSXRlbT8ua2V5ID09PSBpdGVtLmtleTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZENoaWxkcmVuKGNoaWxkLCBzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJTZWxlY3RlZENoaWxkcmVuKFxuICAgICAgICBpdGVtOiBQZXBJbnRlcm5hbE1lbnVJdGVtLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IFBlcEludGVybmFsTWVudUl0ZW1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkSXRlbT8ua2V5ID09PSBpdGVtLmtleTtcblxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZENoaWxkcmVuKGNoaWxkLCBzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFBhcmVudEFuZENoaWxkcmVuKFxuICAgICAgICBpdGVtczogQXJyYXk8UGVwSW50ZXJuYWxNZW51SXRlbT4sXG4gICAgICAgIHBhcmVudHNLZXlzOiBBcnJheTxzdHJpbmc+XG4gICAgKSB7XG4gICAgICAgIGlmIChwYXJlbnRzS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwYXJlbnRzS2V5cy5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50ID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IGtleSk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFBhcmVudEFuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcmVudC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0tleXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFBhcmVudChcbiAgICAgICAgcGFyZW50SXRlbTogUGVwTWVudUl0ZW1QYXJlbnQsXG4gICAgICAgIHBhcmVudHNLZXlzOiBBcnJheTxzdHJpbmc+XG4gICAgKSB7XG4gICAgICAgIHBhcmVudHNLZXlzLnB1c2gocGFyZW50SXRlbS5rZXkpO1xuXG4gICAgICAgIGlmIChwYXJlbnRJdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFBhcmVudChwYXJlbnRJdGVtLnBhcmVudCwgcGFyZW50c0tleXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYXJlbnRBbmRDaGlsZHJlbih0aGlzLml0ZW1zLCBwYXJlbnRzS2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW06IFBlcEludGVybmFsTWVudUl0ZW0pIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSAmJiBzZWxlY3RlZEl0ZW0ucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUGFyZW50KHNlbGVjdGVkSXRlbS5wYXJlbnQsIFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hpbGRDbGlja2VkKGNsaWNrOiBJUGVwTWVudUl0ZW1DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGNsaWNrLnNvdXJjZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubWVudUl0ZW1DbGljay5lbWl0KGNsaWNrKTtcbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2tlZChpdGVtOiBQZXBNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZW51SXRlbUNsaWNrLmVtaXQoeyBzb3VyY2U6IGl0ZW0gfSk7XG4gICAgfVxufVxuIiwiPG1hdC1tZW51ICNjaGlsZE1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwie3sgeFBvc2l0aW9uIH19XCIgY2xhc3M9XCJwZXAte3t0eXBlfX0tbWVudVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnVJdGVtIG9mIGl0ZW1zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWVudUl0ZW0uaGlkZGVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udHlwZSA9PT0gJ3NwbGl0dGVyJzsgdGhlbiBzcGxpdHRlckJsb2NrOyBlbHNlIGJ1dHRvbkJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NwbGl0dGVyQmxvY2s+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXQtbWVudS1pdGVtIGNsYXNzPVwic3BsaXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uQmxvY2s+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdzZWxlY3QnICYmIG1lbnVJdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwOyB0aGVuIGNoaWxkcmVuQmxvY2s7IGVsc2UgcmVndWxhckJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGlsZHJlbkJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTWVudUl0ZW1DbGlja2VkKG1lbnVJdGVtKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51LmNoaWxkTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IG1lbnVJdGVtLnRleHQgfX1cIiBwZXBSdGxEaXJlY3Rpb24gW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHR5cGUgPT09ICdhY3Rpb24tc2VsZWN0JyAmJiBtZW51SXRlbS5zZWxlY3RlZCwgZGlzYWJsZWQ6IG1lbnVJdGVtLmRpc2FibGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWNvbk5hbWU6IG1lbnVJdGVtLmljb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0OiBtZW51SXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBtZW51SXRlbS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLW1lbnUtaXRlbSAjbWVudSBbdHlwZV09XCJ0eXBlXCIgW2l0ZW1zXT1cIm1lbnVJdGVtLmNoaWxkcmVuXCIgW3BhcmVudF09XCJtZW51SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkNoaWxkQ2xpY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcGVwLW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVndWxhckJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTWVudUl0ZW1DbGlja2VkKG1lbnVJdGVtKVwiIHRpdGxlPVwie3sgbWVudUl0ZW0udGV4dCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXBSdGxEaXJlY3Rpb24gW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6ICh0eXBlID09PSAnc2VsZWN0JyB8fCB0eXBlID09PSAnYWN0aW9uLXNlbGVjdCcpICYmIG1lbnVJdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogbWVudUl0ZW0uZGlzYWJsZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uTmFtZTogbWVudUl0ZW0uaWNvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRleHQ6IG1lbnVJdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IG1lbnVJdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LW1lbnU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtSWNvbk5hbWU9XCJpdGVtSWNvbk5hbWVcIiBsZXQtaXRlbVRleHQ9XCJpdGVtVGV4dFwiIGxldC1pdGVtVHlwZT1cIml0ZW1UeXBlXCJcbiAgICBsZXQtaGFzQ2hpbGRyZW49XCJoYXNDaGlsZHJlblwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIml0ZW1JY29uTmFtZVwiIGNsYXNzPVwicHVsbC1sZWZ0IGZsaXBcIj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwie3tpdGVtSWNvbk5hbWV9fVwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbVRleHRcIiBjbGFzcz1cInB1bGwtbGVmdCBmbGlwIHRpdGxlIGVsbGlwc2lzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NwYWNpbmctZnJvbS1pY29uJzogaXRlbUljb25OYW1lLCAnc3BhY2luZy1mcm9tLXN1Ym1lbnUtdHJpZ2dlcic6IGhhc0NoaWxkcmVuIH1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1UZXh0XCI+XG4gICAgICAgICAgICB7eyBpdGVtVGV4dCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImhhc0NoaWxkcmVuXCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcCBzdWJtZW51LXRyaWdnZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncm90YXRlJzogeFBvc2l0aW9uID09PSAnYmVmb3JlJyB9XCI+XG4gICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInt7IHN1Yk1lbnVJY29uTmFtZSB9fVwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvbWVudS9tZW51LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9tZW51L21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQ0gsV0FBVyxHQUlkLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBRXRCLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUFXO0lBQXBEOztRQUNJLGFBQVEsR0FBYSxLQUFLLENBQUM7SUFDL0IsQ0FBQztDQUFBO0FBT0QsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1hLFNBQUksR0FBZ0IsUUFBUSxDQUFDO1FBRTdCLFdBQU0sR0FBc0IsSUFBSSxDQUFDO1FBQ2pDLFVBQUssR0FBK0IsRUFBRSxDQUFDO1FBRXhDLGtCQUFhLEdBQXdCLElBQUksQ0FBQztRQVN6QyxjQUFTLEdBQXVCLE9BQU8sQ0FBQztRQUN4QyxvQkFBZSxHQUFXLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUsxRCxrQkFBYSxHQUF5QyxJQUFJLFlBQVksRUFBMEIsQ0FBQztLQW9GcEc7SUFsR0csSUFDSSxZQUFZLENBQUMsWUFBaUM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQVVELFdBQVc7UUFDUCw0QkFBNEI7UUFDNUIsd0NBQXdDO1FBQ3hDLElBQUk7SUFDUixDQUFDO0lBRU8saUJBQWlCLENBQUMsWUFBaUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBRS9DLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUM1QixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUNwRCxDQUFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8scUJBQXFCLENBQ3pCLElBQXlCLEVBQ3pCLFlBQWlDO1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FDM0IsS0FBaUMsRUFDakMsV0FBMEI7UUFFMUIsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUU5RCxJQUFJLGNBQWMsRUFBRTtnQkFDaEIsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FDeEIsY0FBYyxDQUFDLFFBQVEsRUFDdkIsV0FBVyxDQUNkLENBQUM7YUFDTDtTQUNKO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUN4QixVQUE2QixFQUM3QixXQUEwQjtRQUUxQixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFlBQWlDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUVsQyxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2QjtRQUN4QyxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQWlCO1FBQy9CLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2lIQXhHUSxvQkFBb0I7cUdBQXBCLG9CQUFvQiw4V0N6QmpDLG8zR0E0RGMseWpFRG5DRCxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDSSxlQUFlOzhCQUtoQixJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFJRixZQUFZO3NCQURmLEtBQUs7Z0JBUUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUUyQyxTQUFTO3NCQUF6RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3hDLGFBQWE7c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25EZXN0cm95LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwZXBJY29uQXJyb3dSaWdodCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2ljb24nO1xuaW1wb3J0IHtcbiAgICBQZXBNZW51SXRlbSxcbiAgICBJUGVwTWVudUl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcE1lbnVUeXBlLFxuICAgIFBlcE1lbnVJdGVtUGFyZW50LFxufSBmcm9tICcuL21lbnUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgUGVwSW50ZXJuYWxNZW51SXRlbSBleHRlbmRzIFBlcE1lbnVJdGVtIHtcbiAgICBzZWxlY3RlZD86IGJvb2xlYW4gPSBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbWVudS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tZW51LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHR5cGU6IFBlcE1lbnVUeXBlID0gJ2FjdGlvbic7XG5cbiAgICBASW5wdXQoKSBwYXJlbnQ6IFBlcE1lbnVJdGVtUGFyZW50ID0gbnVsbDtcbiAgICBASW5wdXQoKSBpdGVtczogQXJyYXk8UGVwSW50ZXJuYWxNZW51SXRlbT4gPSBbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWRJdGVtKCk6IFBlcEludGVybmFsTWVudUl0ZW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHhQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2FmdGVyJztcbiAgICBASW5wdXQoKSBzdWJNZW51SWNvbk5hbWU6IHN0cmluZyA9IHBlcEljb25BcnJvd1JpZ2h0Lm5hbWU7XG5cbiAgICBAVmlld0NoaWxkKCdjaGlsZE1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY2hpbGRNZW51OiBhbnk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBtZW51SXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcE1lbnVJdGVtQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMubWVudUl0ZW1DbGljaykge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51SXRlbUNsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbTogUGVwSW50ZXJuYWxNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkSXRlbT8ua2V5ID09PSBpdGVtLmtleTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZENoaWxkcmVuKGNoaWxkLCBzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJTZWxlY3RlZENoaWxkcmVuKFxuICAgICAgICBpdGVtOiBQZXBJbnRlcm5hbE1lbnVJdGVtLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IFBlcEludGVybmFsTWVudUl0ZW1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkSXRlbT8ua2V5ID09PSBpdGVtLmtleTtcblxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZENoaWxkcmVuKGNoaWxkLCBzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdFBhcmVudEFuZENoaWxkcmVuKFxuICAgICAgICBpdGVtczogQXJyYXk8UGVwSW50ZXJuYWxNZW51SXRlbT4sXG4gICAgICAgIHBhcmVudHNLZXlzOiBBcnJheTxzdHJpbmc+XG4gICAgKSB7XG4gICAgICAgIGlmIChwYXJlbnRzS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwYXJlbnRzS2V5cy5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50ID0gaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IGtleSk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcmVudCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFBhcmVudEFuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFBhcmVudC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0tleXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFBhcmVudChcbiAgICAgICAgcGFyZW50SXRlbTogUGVwTWVudUl0ZW1QYXJlbnQsXG4gICAgICAgIHBhcmVudHNLZXlzOiBBcnJheTxzdHJpbmc+XG4gICAgKSB7XG4gICAgICAgIHBhcmVudHNLZXlzLnB1c2gocGFyZW50SXRlbS5rZXkpO1xuXG4gICAgICAgIGlmIChwYXJlbnRJdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFBhcmVudChwYXJlbnRJdGVtLnBhcmVudCwgcGFyZW50c0tleXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYXJlbnRBbmRDaGlsZHJlbih0aGlzLml0ZW1zLCBwYXJlbnRzS2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW06IFBlcEludGVybmFsTWVudUl0ZW0pIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSAmJiBzZWxlY3RlZEl0ZW0ucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUGFyZW50KHNlbGVjdGVkSXRlbS5wYXJlbnQsIFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hpbGRDbGlja2VkKGNsaWNrOiBJUGVwTWVudUl0ZW1DbGlja0V2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGNsaWNrLnNvdXJjZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubWVudUl0ZW1DbGljay5lbWl0KGNsaWNrKTtcbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2tlZChpdGVtOiBQZXBNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZW51SXRlbUNsaWNrLmVtaXQoeyBzb3VyY2U6IGl0ZW0gfSk7XG4gICAgfVxufVxuIiwiPG1hdC1tZW51ICNjaGlsZE1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwie3sgeFBvc2l0aW9uIH19XCIgY2xhc3M9XCJwZXAte3t0eXBlfX0tbWVudVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnVJdGVtIG9mIGl0ZW1zXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWVudUl0ZW0uaGlkZGVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW0udHlwZSA9PT0gJ3NwbGl0dGVyJzsgdGhlbiBzcGxpdHRlckJsb2NrOyBlbHNlIGJ1dHRvbkJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NwbGl0dGVyQmxvY2s+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXQtbWVudS1pdGVtIGNsYXNzPVwic3BsaXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uQmxvY2s+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdzZWxlY3QnICYmIG1lbnVJdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwOyB0aGVuIGNoaWxkcmVuQmxvY2s7IGVsc2UgcmVndWxhckJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGlsZHJlbkJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTWVudUl0ZW1DbGlja2VkKG1lbnVJdGVtKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51LmNoaWxkTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IG1lbnVJdGVtLnRleHQgfX1cIiBwZXBSdGxEaXJlY3Rpb24gW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHR5cGUgPT09ICdhY3Rpb24tc2VsZWN0JyAmJiBtZW51SXRlbS5zZWxlY3RlZCwgZGlzYWJsZWQ6IG1lbnVJdGVtLmRpc2FibGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSWNvbk5hbWU6IG1lbnVJdGVtLmljb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0OiBtZW51SXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBtZW51SXRlbS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLW1lbnUtaXRlbSAjbWVudSBbdHlwZV09XCJ0eXBlXCIgW2l0ZW1zXT1cIm1lbnVJdGVtLmNoaWxkcmVuXCIgW3BhcmVudF09XCJtZW51SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkNoaWxkQ2xpY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvcGVwLW1lbnUtaXRlbT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVndWxhckJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTWVudUl0ZW1DbGlja2VkKG1lbnVJdGVtKVwiIHRpdGxlPVwie3sgbWVudUl0ZW0udGV4dCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXBSdGxEaXJlY3Rpb24gW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6ICh0eXBlID09PSAnc2VsZWN0JyB8fCB0eXBlID09PSAnYWN0aW9uLXNlbGVjdCcpICYmIG1lbnVJdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogbWVudUl0ZW0uZGlzYWJsZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uTmFtZTogbWVudUl0ZW0uaWNvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRleHQ6IG1lbnVJdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IG1lbnVJdGVtLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbWF0LW1lbnU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtSWNvbk5hbWU9XCJpdGVtSWNvbk5hbWVcIiBsZXQtaXRlbVRleHQ9XCJpdGVtVGV4dFwiIGxldC1pdGVtVHlwZT1cIml0ZW1UeXBlXCJcbiAgICBsZXQtaGFzQ2hpbGRyZW49XCJoYXNDaGlsZHJlblwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIml0ZW1JY29uTmFtZVwiIGNsYXNzPVwicHVsbC1sZWZ0IGZsaXBcIj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwie3tpdGVtSWNvbk5hbWV9fVwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbVRleHRcIiBjbGFzcz1cInB1bGwtbGVmdCBmbGlwIHRpdGxlIGVsbGlwc2lzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NwYWNpbmctZnJvbS1pY29uJzogaXRlbUljb25OYW1lLCAnc3BhY2luZy1mcm9tLXN1Ym1lbnUtdHJpZ2dlcic6IGhhc0NoaWxkcmVuIH1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1UZXh0XCI+XG4gICAgICAgICAgICB7eyBpdGVtVGV4dCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImhhc0NoaWxkcmVuXCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcCBzdWJtZW51LXRyaWdnZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncm90YXRlJzogeFBvc2l0aW9uID09PSAnYmVmb3JlJyB9XCI+XG4gICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cInt7IHN1Yk1lbnVJY29uTmFtZSB9fVwiPjwvcGVwLWljb24+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -25,7 +25,7 @@ export class PepQuantitySelectorComponent {
25
25
  this.translate = translate;
26
26
  this.utilitiesService = utilitiesService;
27
27
  this.key = '';
28
- this._value = null;
28
+ this._value = '';
29
29
  this.formattedValue = '';
30
30
  // private _formattedValue = '';
31
31
  // @Input()
@@ -82,9 +82,13 @@ export class PepQuantitySelectorComponent {
82
82
  if (!value) {
83
83
  value = '';
84
84
  }
85
- if (this.isDifferentValue(value)) {
85
+ if (this._value === '' || this.isDifferentValue(value)) {
86
86
  this._value = value;
87
87
  }
88
+ // Cut the .000 if exist for non allowDecimal.
89
+ if (!this.allowDecimal) {
90
+ this._value = this._value?.split('.')[0];
91
+ }
88
92
  this.setFormattedValue(this.value);
89
93
  this.changeDisplayValue();
90
94
  }
@@ -567,4 +571,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
567
571
  }], isInFocus: [{
568
572
  type: Input
569
573
  }] } });
570
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQXFPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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bnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBSZW5kZXJlcjIsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIHRyaWdnZXIsXG4gICAgc3RhdGUsXG4gICAgc3R5bGUsXG4gICAgYW5pbWF0ZSxcbiAgICB0cmFuc2l0aW9uLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBQZXBTdHlsZVR5cGUsXG4gICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgUGVwSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5ULFxuICAgIElQZXBGaWVsZENsaWNrRXZlbnQsXG4gICAgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkVHlwZSxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQsXG4gICAgUGVwVXRpbGl0aWVzU2VydmljZSxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtcXVhbnRpdHktc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnLCAnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc2hvd0hpZGUnLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnc2hvdycsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnaGlkZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IGhpZGUnLCBhbmltYXRlKCcyNTBtcyBlYXNlLW91dCcpKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdycsIGFuaW1hdGUoJzI1MG1zIGVhc2UtaW4nKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfQ0hJTERSRU4gPSAnW0VudGVyQ2hpbGRyZW5dJztcbiAgICBwdWJsaWMgc3RhdGljIEVOVEVSX1BBQ0tBR0UgPSAnW0VudGVyUGFja2FnZV0nO1xuICAgIHB1YmxpYyBzdGF0aWMgUExVUyA9ICdbK10nO1xuICAgIHB1YmxpYyBzdGF0aWMgTUlOVVMgPSAnWy1dJztcblxuICAgIEBJbnB1dCgpIGtleSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSBudWxsO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRGlmZmVyZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgXG4gICAgZ2V0IHZhbHVlQXNDdXJyZW50Q3VsdHVyZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodGhpcy52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIC8vIGxldCByZXMgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAvLyAgICAgcmVzID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodGhpcy52YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cywgZmFsc2UpO1xuICAgICAgICAvLyB9XG4gICAgICAgIFxuICAgICAgICAvLyByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIC8vIHByaXZhdGUgX2Zvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgLy8gQElucHV0KClcbiAgICAvLyBzZXQgZm9ybWF0dGVkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIC8vICAgICAvLyBpZiAoIXZhbHVlKSB7XG4gICAgLy8gICAgIC8vICAgICB2YWx1ZSA9ICcnO1xuICAgIC8vICAgICAvLyB9XG5cbiAgICAvLyAgICAgLy8gaWYgKHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlKSB7XG4gICAgLy8gICAgIC8vICAgICB0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSA9IGZhbHNlO1xuICAgIC8vICAgICAvLyB9XG5cbiAgICAvLyAgICAgLy8gdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gfVxuICAgIC8vIGdldCBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkVmFsdWU7XG4gICAgLy8gfVxuICAgIFxuICAgIHByaXZhdGUgX21pbkZyYWN0aW9uRGlnaXRzID0gTmFOO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbkZyYWN0aW9uRGlnaXRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWluRnJhY3Rpb25EaWdpdHMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNwbGF5VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IG1pbkZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5GcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXhGcmFjdGlvbkRpZ2l0cyA9IE5hTjtcbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXhGcmFjdGlvbkRpZ2l0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21heEZyYWN0aW9uRGlnaXRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBtYXhGcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSB0eXBlOiBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlID0gJ3FzJztcbiAgICBASW5wdXQoKSBtYW5kYXRvcnkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90ZXh0Q29sb3IgPSAnJztcbiAgICBASW5wdXQoKVxuICAgIHNldCB0ZXh0Q29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90ZXh0Q29sb3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc0NhdXRpb24gPSB2YWx1ZSA9PT0gJyNGRjAwMDAnO1xuICAgIH1cbiAgICBnZXQgdGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q29sb3I7XG4gICAgfVxuXG4gICAgQElucHV0KCkgeEFsaWdubWVudDogUGVwSG9yaXpvbnRhbEFsaWdubWVudCA9IERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQ7XG4gICAgQElucHV0KCkgcm93U3BhbiA9IDE7XG4gICAgXG4gICAgcHJpdmF0ZSBfYWxsb3dEZWNpbWFsID0gZmFsc2U7XG4gICAgQElucHV0KCkgXG4gICAgc2V0IGFsbG93RGVjaW1hbCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hbGxvd0RlY2ltYWwgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFsbG93RGVjaW1hbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbG93RGVjaW1hbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsVmFsdWUgPSAnJztcblxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvbkluZm86IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBub3RpZmljYXRpb25JbmZvKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uSW5mbyA9IHZhbHVlO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gdmFsdWUgJiYgdmFsdWUgPiAwID8gSlNPTi5wYXJzZSh2YWx1ZSkuTWVzc2FnZXMgOiAnJztcbiAgICAgICAgaWYgKG1lc3NhZ2VzICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG1zZyBrZXlzLlxuICAgICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobXNnLktleSA9PT0gJ0ludmVudG9yeV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfSU5WRU5UT1JZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdDYXNlX1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9DQVNFX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5LZXkgPT09ICdNaW5fUXVhbnRpdHlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX01JTl9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnTWF4X1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9NQVhfUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzO1xuXG4gICAgICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5rZXldO1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldEVycm9ycyh7XG4gICAgICAgICAgICAgICAgc2VydmVyRXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLlFTSW5wdXQgJiYgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBub3RpZmljYXRpb25JbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25JbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Zpc2libGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGUodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ2hpZGRlbi1lbGVtZW50J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgY29udHJvbFR5cGUgPSAncXMnO1xuXG4gICAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbnVsbDtcbiAgICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHJlbmRlclRpdGxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2Zvcm0nO1xuICAgIEBJbnB1dCgpIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAvLyBHZXQgZGVmYXVsdCBzdHlsZSBmcm9tIHRoZW1lLlxuICAgIEBJbnB1dCgpXG4gICAgc3R5bGVUeXBlOiBQZXBTdHlsZVR5cGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RZTEVfUVNfS0VZXG4gICAgKSBhcyBQZXBTdHlsZVR5cGU7IC8vJ3N0cm9uZyc7XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGVsZW1lbnRDbGljazogRXZlbnRFbWl0dGVyPElQZXBGaWVsZENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnUVNDb250JykgUVNDb250OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ1FTSW5wdXQnKSBRU0lucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUgPSB0cnVlO1xuICAgIGdldCBjYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZDogU3ViamVjdDx2b2lkPjtcbiAgICBwcml2YXRlIHFzV2lkdGhTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICBsYXN0UXNDb250Q2xpZW50V2lkdGggPSAwO1xuICAgIHNob3dRc0J0biA9IHRydWU7XG5cbiAgICBzdGFuZEFsb25lID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaXNJbkZvY3VzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBzZXQgaXNJbkZvY3VzKGlzSW5Gb2N1czogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc0luRm9jdXMgPSBpc0luRm9jdXM7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBpc0luRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luRm9jdXM7XG4gICAgfVxuICAgIGlzTWF0cml4Rm9jdXMgPSBmYWxzZTtcblxuICAgIGlzQ2F1dGlvbiA9IGZhbHNlO1xuICAgIG1lc3NhZ2VzOiBBcnJheTxhbnk+ID0gbnVsbDtcblxuICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuXG4gICAgaXNFbXB0eUtleSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVZhbHVlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIGdldCBkaXNwbGF5VmFsdWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VmFsdWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHV0aWxpdGllc1NlcnZpY2U6IFBlcFV0aWxpdGllc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgLy8gdGhpcy5xc1dpZHRoU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gICAgfVxuXG4gICAgc2V0Rm9ybSgpIHtcbiAgICAgICAgY29uc3QgcGVwRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUsXG4gICAgICAgICAgICBtYW5kYXRvcnk6IHRoaXMubWFuZGF0b3J5LFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0RGVmYXVsdEZyb21Hcm91cChwZXBGaWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JtYXR0ZWRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXROdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3RpZnlEaXNwbGF5VmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRGlzcGxheVZhbHVlKCk6IHZvaWQge1xuICAgICAgICBsZXQgcmVzID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmlzSW5Gb2N1cyA/IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMuaXNJbkZvY3VzID8gdGhpcy52YWx1ZSA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vdGlmeURpc3BsYXlWYWx1ZUNoYW5nZShyZXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hhbmdlRGlzcGxheVZhbHVlJyArIHJlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtRmllbGRWYWx1ZShmaXJzdExvYWQgPSBmYWxzZSkge1xuICAgICAgICAvLyBTZXQgdGhlIGZvcm1hdHRlZCB2YWx1ZSBvbmx5IGZvciB0aGUgZmlyc3QgbG9hZCBjYXVzZSBpdCdzIG5vdCBmb3JtYXR0ZWQgaWYgd2Ugc2V0IHRoZSB2YWx1ZSAoSSBkb24ndCBrbm93IHdoeSlcbiAgICAgICAgLy8gRWxzZSB3ZSBzZXQgdGhlIHZhbHVlIC0gdGhpcyBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvbmx5IGNhdXNlIHNldHRpbmcgdGhlIGZvcm1hdHRlZCB2YWx1ZSB3aWxsIGNhdXNlIGJ1ZyB3aGVuIHRoZSBudW1iZXIgaXMgd2l0aCB0aG91c2FuZCBzZXBhcmF0b3JcbiAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuZm9ybSxcbiAgICAgICAgICAgIHRoaXMua2V5LFxuICAgICAgICAgICAgZmlyc3RMb2FkID8gdGhpcy5mb3JtYXR0ZWRWYWx1ZSA6IHRoaXMudmFsdWUsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vICAgICBjb25zdCByZXMgPSB0aGlzLmlzSW5Gb2N1c1xuICAgIC8vICAgICAgICAgPyB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh0aGlzLnZhbHVlLCB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLCB0aGlzLm1heEZyYWN0aW9uRGlnaXRzKVxuICAgIC8vICAgICAgICAgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgIC8vICAgICByZXR1cm4gcmVzO1xuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBnZXREZXN0cm95ZXIoKSB7XG4gICAgICAgIHJldHVybiB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMua2V5ID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eUtleSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhbmRBbG9uZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm0oKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5TVEFORF9BTE9ORV9GSUVMRF9DTEFTU19OQU1FXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyVGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RBTkRfQUxPTkVfRklFTERfTk9fU1BBQ0lOR19DTEFTU19OQU1FXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMucXNXaWR0aFN1YmplY3RcbiAgICAgICAgLy8gICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAvLyAgICAgLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gICAgIC5zdWJzY3JpYmUoKHFzV2lkdGg6IG51bWJlcikgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0dXBRc0J1dHRvbnMocXNXaWR0aCk7XG4gICAgICAgIC8vICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZFZhbHVlKHRydWUpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIGlmICh0aGlzLlFTQ29udCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuUVNDb250Lm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UXNCdG4gPSB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoID4gMTIwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2RbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5zZXRRc1ZpZXcoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gQnVnIGZpeCBmb3IgYWRkb25zIHdoZW4gdGhlIGtleSBpcyAnJyBpbiB0aGUgbmdPbkluaXQgZm9yIHNvbWUgcmVzb25cbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eUtleSAmJiB0aGlzLmtleSAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9UaGVTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KCk7XG4gICAgICAgIH0sIDE1MCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGdldCBnZXRBZGRpdGlvbmFsVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkaXRpb25hbFZhbHVlLmxlbmd0aCA+IDAgPyAnc2hvdycgOiAnaGlkZSc7XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50QnlDbGFzcyhlbCwgcGFyZW50U2VsZWN0b3IgLyogb3B0aW9uYWwgKi8pOiBhbnkge1xuICAgICAgICAvLyBJZiBubyBwYXJlbnRTZWxlY3RvciBkZWZpbmVkIHdpbGwgYnViYmxlIHVwIGFsbCB0aGUgd2F5IHRvICpkb2N1bWVudCpcbiAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gZG9jdW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcCA9IGVsLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgcCAmJlxuICAgICAgICAgICAgIXA/LmNsYXNzTGlzdD8uY29udGFpbnMocGFyZW50U2VsZWN0b3IpICYmXG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciAhPT0gZG9jdW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBvID0gcDtcbiAgICAgICAgICAgIHAgPSBvPy5wYXJlbnROb2RlIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcD8uY2xhc3NOYW1lLmluZGV4T2YocGFyZW50U2VsZWN0b3IpID4gLTEgPyBwIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUoZXZlbnQ6IGFueSwgaXNOZXh0ID0gdHJ1ZSk6IGFueSB7XG4gICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgIGxldCBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWU7XG5cbiAgICAgICAgbGV0IHBhcmVudFNlbGVjdG9yO1xuICAgICAgICBpZiAodGhpcy5sYXlvdXRUeXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IHRoaXMuZ2V0UGFyZW50QnlDbGFzcyhldmVudFRhcmdldCwgJ3RhYmxlLXJvdycpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IHRoaXMuZ2V0UGFyZW50QnlDbGFzcyhldmVudFRhcmdldCwgJ2NhcmQtdmlldycpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRQYXJlbnRCeUNsYXNzKFxuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJ2xpbmUtdmlldydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsICYmXG4gICAgICAgICAgICBwYXJlbnRTZWxlY3Rvci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc05leHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IHBhcmVudFNlbGVjdG9yLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZT0nICsgdGhpcy5rZXkgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBwYXJlbnRTZWxlY3Rvci5uZXh0RWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZT0nICsgdGhpcy5rZXkgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTZWxlY3Rvci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzTGlzdCA9IHBhcmVudFNlbGVjdG9yLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZT0nICsgdGhpcy5rZXkgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzTGlzdFtlbGVtZW50c0xpc3QubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gcGFyZW50U2VsZWN0b3IucHJldmlvdXNFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tuYW1lPScgKyB0aGlzLmtleSArICddJ1xuICAgICAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgc2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyhldmVudDogYW55LCBpc05leHQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBRUyBpbiB0aGUgbmV4dCByb3cuXG4gICAgICAgIGlmICh0aGlzLmxheW91dFR5cGUgPT09ICdjYXJkJyB8fCB0aGlzLmxheW91dFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IHRoaXMuZ2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lKFxuICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgIGlzTmV4dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICBmb2N1c1RvVGhlU2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdykge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdztcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgcmVndWxhciBpdGVtIChxcyBhbmQgbm90IGJ1dHRvbikgLlxuICAgICAgICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsZW0udHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5jbGljaygpO1xuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW0gPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgcGFyZW50RWxlbS5jbGljaygpO1xuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhbkVycm9yKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5rZXldO1xuXG4gICAgICAgIC8vIENsZWFuIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VzICYmIHRoaXMubWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMubm90aWZpY2F0aW9uSW5mbyA9IG51bGw7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NYXRyaXhNb3VzZUVudGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc01hdHJpeEZvY3VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1hdHJpeE1vdXNlbGVhdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTWF0cml4Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbk1hdHJpeENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0luRm9jdXMgPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLlFTSW5wdXQgJiYgdGhpcy5RU0lucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1hdHJpeEJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZXZlbnQucmVsYXRlZFRhcmdldCB8fFxuICAgICAgICAgICAgZXZlbnQucmVsYXRlZFRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncXMnKSA8IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmlzTWF0cml4Rm9jdXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25CbHVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0luRm9jdXMgPSB0cnVlO1xuXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMuaXNJbkZvY3VzKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgICAgICAgLy8gICAgICAgICBpZiAoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZXZlbnRUYXJnZXQuc2VsZWN0KCk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LCAwKTtcbiAgICB9XG5cbiAgICBpc0RpZmZlcmVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmlzRXF1YWxOdW1iZXIodGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUsIHZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0luRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbGVhbkVycm9yKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0ID8gZXZlbnQudGFyZ2V0LnZhbHVlIDogZXZlbnQ7XG5cbiAgICAgICAgLy8gRm9yIGRlY2ltYWwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBiYWNrIGlmIGl0J3MgY29tbWEgKCcsJykuXG4gICAgICAgIGNvbnN0IGNvcnJlY3RWYWx1ZSA9IHRoaXMuYWxsb3dEZWNpbWFsID8gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodmFsdWUpIDogdmFsdWU7XG4gICAgICAgIFxuICAgICAgICBpZiAoY29ycmVjdFZhbHVlICE9PSB0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSAmJiB0aGlzLmlzRGlmZmVyZW50VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29ycmVjdFZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmZvY3VzVG9UaGVTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KCk7XG4gICAgfVxuXG4gICAgb25LZXlkb3duKGV2ZW50KTogYW55IHtcbiAgICAgICAgY29uc3Qga2V5Ym9hcmRFdmVudCA9IGV2ZW50IGFzIEtleWJvYXJkRXZlbnQ7XG5cbiAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coXG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudCxcbiAgICAgICAgICAgICAgICAha2V5Ym9hcmRFdmVudC5zaGlmdEtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5jcmVtZW50KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuaW5jcmVtZW50TnVtYmVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuUExVUyxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBkZWNyZW1lbnQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5kZWNyZW1lbnROdW1iZXIodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5NSU5VUyxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBlbnRlckNoaWxkcmVuKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50LkVOVEVSX0NISUxEUkVOLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW50ZXJQYWNrYWdlKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50LkVOVEVSX1BBQ0tBR0UsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICAgICAgb3RoZXJEYXRhOiB0aGlzLm5vdGlmaWNhdGlvbkluZm8sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNldHVwUXNCdXR0b25zKHFzV2lkdGg6IG51bWJlcikge1xuICAgIC8vICAgICB0aGlzLnNob3dRc0J0biA9IHFzV2lkdGggPiAxMjA7XG5cbiAgICAvLyAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgIC8vICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBzZXRRc1ZpZXcoKTogdm9pZCB7XG4gICAgLy8gICAgIGlmIChcbiAgICAvLyAgICAgICAgIHRoaXMuUVNDb250ICYmXG4gICAgLy8gICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50ICYmXG4gICAgLy8gICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoID4gMFxuICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMucXNXaWR0aFN1YmplY3QubmV4dCh0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAvLyAgICAgICAgIH0sIDApO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bmctdGVtcGxhdGUgI3BlcFRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICNRU0NvbnQgY2xhc3M9XCJwZXAtcXVhbnRpdHktc2VsZWN0b3ItY29udGFpbmVyIHt7IHN0eWxlVHlwZSB9fVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnaGlkZS1xcy1hY3Rpb25zJyA6IGxheW91dFR5cGUgPT09ICdjYXJkJyAmJiByb3dTcGFuIDw9IDEsXG4gICAgICAgICAgICAgICAgJ3BlcC10YWJsZS1xdWFudGl0eS1zZWxlY3Rvcic6IGxheW91dFR5cGUgPT09ICd0YWJsZScsXG4gICAgICAgICAgICAgICAgJ29uZS1yb3cnOiByb3dTcGFuID09PSAxLFxuICAgICAgICAgICAgICAgIGNhdXRpb246IGlzQ2F1dGlvbixcbiAgICAgICAgICAgICAgICAnbWF0cml4LXFzJzogdHlwZSA9PT0gJ3FzRm9yTWF0cml4JyxcbiAgICAgICAgICAgICAgICAnemVyby1xdWFudGl0eSc6IGZvcm1hdHRlZFZhbHVlID09PSAnMCdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxwZXAtZmllbGQtdGl0bGUgKm5nSWY9XCJyZW5kZXJUaXRsZSAmJiBsYXlvdXRUeXBlICE9PSAndGFibGUnICYmIGxheW91dFR5cGUgIT09ICdjYXJkJ1wiIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgW21hbmRhdG9yeV09XCJtYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbc2hvd1RpdGxlXT1cInNob3dUaXRsZVwiIFt4QWxpZ25tZW50XT1cInhBbGlnbm1lbnRcIj5cbiAgICAgICAgICAgIDwvcGVwLWZpZWxkLXRpdGxlPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAncXMnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRvbmx5OyB0aGVuIHJlYWRvbmx5QmxvY2s7IGVsc2UgZWRpdGFibGVRU0Jsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWFkb25seUJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtpZF09XCJrZXlcIiBtYXQtYnV0dG9uIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gZGlzYWJsZSBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2NhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCIgZGlzYWJsZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0dGVkVmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRhYmxlUVNCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcGVwUXNWYWxpZGF0aW9uIFthbGxvd0RlY2ltYWxdPVwiYWxsb3dEZWNpbWFsXCIgdHlwZT1cImRlY2ltYWxOdW1iZXJcIiBpbnB1dG1vZGU9XCJkZWNpbWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCAjUVNJbnB1dCBuYW1lPVwie3sga2V5IH19XCIgY2xhc3M9XCJib2R5LWxnIGVsbGlwc2lzXCIgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2lkXT1cImtleVwiIFtmb3JtQ29udHJvbE5hbWVdPVwia2V5XCIgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5KVwiIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dRc0J0blwiIG1hdC1idXR0b24gbWF0UHJlZml4IChjbGljayk9XCJkZWNyZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHNtIHdlYWsgcXMtYWN0aW9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uICYmIHN0eWxlVHlwZSAhPT0gJ3N0cm9uZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZWVwLWJhY2tncm91bmQtb24tZm9jdXMnOiBzdHlsZVR5cGUgPT09ICdzdHJvbmcnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJudW1iZXJfbWludXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1FzQnRuXCIgbWF0LWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImluY3JlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1idXR0b24gaWNvbi1idXR0b24gc20gd2VhayBxcy1hY3Rpb25cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24gJiYgc3R5bGVUeXBlICE9PSAnc3Ryb25nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlZXAtYmFja2dyb3VuZC1vbi1mb2N1cyc6IHN0eWxlVHlwZSA9PT0gJ3N0cm9uZyd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gbmFtZT1cIm51bWJlcl9wbHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIm1lc3NhZ2VzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxcy1lcnJvciBib2R5LXhzXCIgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlc1wiPiB7eyBtc2cuS2V5IHwgdHJhbnNsYXRlIH19IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXNnLlZhbHVlIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ3FzRm9yTWF0cml4J1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWFkb25seTsgdGhlbiByZWFkb25seUJsb2NrOyBlbHNlIGVkaXRhYmxlUVNCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwia2V5XCIgbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IGRpc2FibGVcIiBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2NhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdGFibGVRU0Jsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiB4QWxpZ25tZW50PT0ncmlnaHQnXCIgY2xhc3M9XCIgYm9keS1zbSBhZGRpdGlvbmFsLXZhbHVlIHByZWZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZT1cInt7IGFkZGl0aW9uYWxWYWx1ZSB9fVwiIG1hdEJhZGdlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VTaXplPVwicm93U3BhbiA9PT0gMSA/IHNtYWxsIDogbWVkaXVtXCIgW0BzaG93SGlkZV09XCJnZXRBZGRpdGlvbmFsVmFsdWVcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKG1vdXNlbGVhdmUpPVwiIWlzSW5Gb2N1cyA/IG9uTWF0cml4TW91c2VsZWF2ZSgkZXZlbnQpIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBlcFFzVmFsaWRhdGlvbiBbYWxsb3dEZWNpbWFsXT1cImFsbG93RGVjaW1hbFwiIHR5cGU9XCJkZWNpbWFsTnVtYmVyXCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgI1FTSW5wdXQgbmFtZT1cInt7IGtleSB9fVwiIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIiBjbGFzcz1cImJvZHktc20gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtpZF09XCJrZXlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImtleVwiIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWUkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1hdHJpeENsaWNrKCRldmVudCk7ICRldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIiAoYmx1cik9XCJvbk1hdHJpeEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uTWF0cml4TW91c2VFbnRlcigkZXZlbnQpOyBvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTWF0cml4TW91c2VFbnRlcigkZXZlbnQpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIm1lc3NhZ2VzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJxcy1lcnJvciBib2R5LXhzXCIgKm5nRm9yPVwibGV0IG1zZyBvZiBtZXNzYWdlc1wiPiB7eyBtc2cuS2V5IHwgdHJhbnNsYXRlIH19IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXNnLlZhbHVlIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwieEFsaWdubWVudCAhPSAncmlnaHQnXCIgY2xhc3M9XCJib2R5LXNtIGFkZGl0aW9uYWwtdmFsdWUgc3VmZml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlPVwie3sgYWRkaXRpb25hbFZhbHVlIH19XCIgbWF0QmFkZ2VQb3NpdGlvbj1cImJlZm9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZVNpemU9XCJyb3dTcGFuID09PSAxID8gc21hbGwgOiBtZWRpdW1cIiBbQHNob3dIaWRlXT1cImdldEFkZGl0aW9uYWxWYWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdidXR0b24nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih2YWx1ZSB8IHBlcFRvTnVtYmVyKSA9PSAwOyB0aGVuIHJlZ3VsYXJCbG9jazsgZWxzZSB3aXRoQmFkZ2VCbG9ja1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVndWxhckJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBcIiBbaWRdPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7eyBrZXkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUVMuT1JERVInIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVudGVyQ2hpbGRyZW4oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdRUy5PUkRFUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhCYWRnZUJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0QmFkZ2U9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwie3t4QWxpZ25tZW50ID09ICdyaWdodCcgPyAnYmVmb3JlJyA6ICdhZnRlcid9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cImxheW91dFR5cGUgPT09ICdjYXJkJyAmJiByb3dTcGFuID09PSAxID8gJ3NtYWxsJyA6ICdtZWRpdW0nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gXCIgW2lkXT1cImtleVwiIG5hbWU9XCJ7eyBrZXkgfX1cIiBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmlnaHQtYWxpZ25tZW50JzogeEFsaWdubWVudCA9PSAncmlnaHQnLCAnbGVmdC1hbGlnbm1lbnQnOiB4QWxpZ25tZW50ICE9ICdyaWdodCd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInUVMuT1JERVInIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImVudGVyQ2hpbGRyZW4oJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdRUy5PUkRFUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ3BhY2thZ2VCdXR0b24nXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gXCIgW2lkXT1cImtleVwiIG5hbWU9XCJ7eyBrZXkgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGU6IGRpc2FibGVkLCBjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbnRlclBhY2thZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnUVMuT1JERVInIHwgdHJhbnNsYXRlIH19ICYjNDA7e3sgZm9ybWF0dGVkVmFsdWUgfX0mIzQxO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAnZm9ybSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ2NhcmQnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICd0YWJsZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBlcFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iXX0=
574
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9xdWFudGl0eS1zZWxlY3Rvci9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULHVCQUF1QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FDYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsNEJBQTRCLEVBRzVCLHdCQUF3QixHQUUzQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQWdCLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQTZCL0UsTUFBTSxPQUFPLDRCQUE0QjtJQTBPckMsWUFDWSxFQUFxQixFQUNyQixvQkFBNkMsRUFDN0MsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsZ0JBQXFDO1FBTHJDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFB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QkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTTtnQkFHYyxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0csT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQWVoQixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIFJlbmRlcmVyMixcbiAgICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdGF0ZSxcbiAgICBzdHlsZSxcbiAgICBhbmltYXRlLFxuICAgIHRyYW5zaXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIFBlcFN0eWxlVHlwZSxcbiAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQsXG4gICAgSVBlcEZpZWxkQ2xpY2tFdmVudCxcbiAgICBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGRUeXBlLFxuICAgIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCxcbiAgICBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1xdWFudGl0eS1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9xdWFudGl0eS1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsICcuL3F1YW50aXR5LXNlbGVjdG9yLmNvbXBvbmVudC50aGVtZS5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdzaG93SGlkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdzaG93JyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRlJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZScsIGFuaW1hdGUoJzI1MG1zIGVhc2Utb3V0JykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZSA9PiBzaG93JywgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicpKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHN0YXRpYyBFTlRFUl9DSElMRFJFTiA9ICdbRW50ZXJDaGlsZHJlbl0nO1xuICAgIHB1YmxpYyBzdGF0aWMgRU5URVJfUEFDS0FHRSA9ICdbRW50ZXJQYWNrYWdlXSc7XG4gICAgcHVibGljIHN0YXRpYyBQTFVTID0gJ1srXSc7XG4gICAgcHVibGljIHN0YXRpYyBNSU5VUyA9ICdbLV0nO1xuXG4gICAgQElucHV0KCkga2V5ID0gJyc7XG5cbiAgICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gJycgfHwgdGhpcy5pc0RpZmZlcmVudFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1dCB0aGUgLjAwMCBpZiBleGlzdCBmb3Igbm9uIGFsbG93RGVjaW1hbC5cbiAgICAgICAgaWYgKCF0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZT8uc3BsaXQoJy4nKVswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIFxuICAgIGdldCB2YWx1ZUFzQ3VycmVudEN1bHR1cmUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRpbGl0aWVzU2VydmljZS5jaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHRoaXMudmFsdWUsIHRydWUpO1xuICAgICAgICAvLyBsZXQgcmVzID0gdGhpcy52YWx1ZTtcblxuICAgICAgICAvLyBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgLy8gICAgIHJlcyA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5mb3JtYXREZWNpbWFsKHRoaXMudmFsdWUsIHRoaXMubWluRnJhY3Rpb25EaWdpdHMsIHRoaXMubWF4RnJhY3Rpb25EaWdpdHMsIGZhbHNlKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBcbiAgICAgICAgLy8gcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9ybWF0dGVkVmFsdWUgPSAnJztcbiAgICAvLyBwcml2YXRlIF9mb3JtYXR0ZWRWYWx1ZSA9ICcnO1xuICAgIC8vIEBJbnB1dCgpXG4gICAgLy8gc2V0IGZvcm1hdHRlZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyAgICAgLy8gaWYgKCF2YWx1ZSkge1xuICAgIC8vICAgICAvLyAgICAgdmFsdWUgPSAnJztcbiAgICAvLyAgICAgLy8gfVxuXG4gICAgLy8gICAgIC8vIGlmICh0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZSkge1xuICAgIC8vICAgICAvLyAgICAgdGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUgPSBmYWxzZTtcbiAgICAvLyAgICAgLy8gfVxuXG4gICAgLy8gICAgIC8vIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodmFsdWUpO1xuICAgIC8vIH1cbiAgICAvLyBnZXQgZm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZFZhbHVlO1xuICAgIC8vIH1cbiAgICBcbiAgICBwcml2YXRlIF9taW5GcmFjdGlvbkRpZ2l0cyA9IE5hTjtcbiAgICBASW5wdXQoKVxuICAgIHNldCBtaW5GcmFjdGlvbkRpZ2l0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbkZyYWN0aW9uRGlnaXRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGlzcGxheVZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBtaW5GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWF4RnJhY3Rpb25EaWdpdHMgPSBOYU47XG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4RnJhY3Rpb25EaWdpdHModmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9tYXhGcmFjdGlvbkRpZ2l0cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEZvcm1hdHRlZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgbWF4RnJhY3Rpb25EaWdpdHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gICAgQElucHV0KCkgdHlwZTogUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkVHlwZSA9ICdxcyc7XG4gICAgQElucHV0KCkgbWFuZGF0b3J5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGV4dENvbG9yID0gJyc7XG4gICAgQElucHV0KClcbiAgICBzZXQgdGV4dENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGV4dENvbG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNDYXV0aW9uID0gdmFsdWUgPT09ICcjRkYwMDAwJztcbiAgICB9XG4gICAgZ2V0IHRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dENvbG9yO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHhBbGlnbm1lbnQ6IFBlcEhvcml6b250YWxBbGlnbm1lbnQgPSBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5UO1xuICAgIEBJbnB1dCgpIHJvd1NwYW4gPSAxO1xuICAgIFxuICAgIHByaXZhdGUgX2FsbG93RGVjaW1hbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIFxuICAgIHNldCBhbGxvd0RlY2ltYWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fYWxsb3dEZWNpbWFsID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhbGxvd0RlY2ltYWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbGxvd0RlY2ltYWw7XG4gICAgfVxuXG4gICAgQElucHV0KCkgYWRkaXRpb25hbFZhbHVlID0gJyc7XG5cbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25JbmZvOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBzZXQgbm90aWZpY2F0aW9uSW5mbyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkluZm8gPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHZhbHVlICYmIHZhbHVlID4gMCA/IEpTT04ucGFyc2UodmFsdWUpLk1lc3NhZ2VzIDogJyc7XG4gICAgICAgIGlmIChtZXNzYWdlcyAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBtc2cga2V5cy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1zZy5LZXkgPT09ICdJbnZlbnRvcnlfTGltaXRfTXNnJykge1xuICAgICAgICAgICAgICAgICAgICBtc2cuS2V5ID0gJ01FU1NBR0VTLkVSUk9SX0lOVkVOVE9SWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnQ2FzZV9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfQ0FTRV9RVUFOVElUWV9MSU1JVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cuS2V5ID09PSAnTWluX1F1YW50aXR5X0xpbWl0X01zZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLktleSA9ICdNRVNTQUdFUy5FUlJPUl9NSU5fUVVBTlRJVFlfTElNSVQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLktleSA9PT0gJ01heF9RdWFudGl0eV9MaW1pdF9Nc2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5LZXkgPSAnTUVTU0FHRVMuRVJST1JfTUFYX1FVQU5USVRZX0xJTUlUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcblxuICAgICAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMua2V5XTtcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiAnRXJyb3InLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdyA9IG51bGw7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5RU0lucHV0ICYmIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbm90aWZpY2F0aW9uSW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICdoaWRkZW4tZWxlbWVudCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIGNvbnRyb2xUeXBlID0gJ3FzJztcblxuICAgIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG51bGw7XG4gICAgQElucHV0KCkgc2hvd1RpdGxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSByZW5kZXJUaXRsZSA9IHRydWU7XG4gICAgQElucHV0KCkgbGF5b3V0VHlwZTogUGVwTGF5b3V0VHlwZSA9ICdmb3JtJztcbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gR2V0IGRlZmF1bHQgc3R5bGUgZnJvbSB0aGVtZS5cbiAgICBASW5wdXQoKVxuICAgIHN0eWxlVHlwZTogUGVwU3R5bGVUeXBlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1FTX0tFWVxuICAgICkgYXMgUGVwU3R5bGVUeXBlOyAvLydzdHJvbmcnO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBlbGVtZW50Q2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwRmllbGRDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ1FTQ29udCcpIFFTQ29udDogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdRU0lucHV0JykgUVNJbnB1dDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUZvcm1hdHRlZFZhbHVlID0gdHJ1ZTtcbiAgICBnZXQgY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVGb3JtYXR0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD47XG4gICAgcHJpdmF0ZSBxc1dpZHRoU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XG4gICAgbGFzdFFzQ29udENsaWVudFdpZHRoID0gMDtcbiAgICBzaG93UXNCdG4gPSB0cnVlO1xuXG4gICAgc3RhbmRBbG9uZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzSW5Gb2N1cyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzSW5Gb2N1cyhpc0luRm9jdXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNJbkZvY3VzID0gaXNJbkZvY3VzO1xuICAgICAgICB0aGlzLmNoYW5nZURpc3BsYXlWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgaXNJbkZvY3VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbkZvY3VzO1xuICAgIH1cbiAgICBpc01hdHJpeEZvY3VzID0gZmFsc2U7XG5cbiAgICBpc0NhdXRpb24gPSBmYWxzZTtcbiAgICBtZXNzYWdlczogQXJyYXk8YW55PiA9IG51bGw7XG5cbiAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93ID0gbnVsbDtcblxuICAgIGlzRW1wdHlLZXkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2Rpc3BsYXlWYWx1ZVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgICBnZXQgZGlzcGxheVZhbHVlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1dGlsaXRpZXNTZXJ2aWNlOiBQZXBVdGlsaXRpZXNTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIC8vIHRoaXMucXNXaWR0aFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICAgIH1cblxuICAgIHNldEZvcm0oKSB7XG4gICAgICAgIGNvbnN0IHBlcEZpZWxkID0gbmV3IFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiB0aGlzLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldERlZmF1bHRGcm9tR3JvdXAocGVwRmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9ybWF0dGVkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY2FsY3VsYXRlRm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0RGVjaW1hbCh2YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRmllbGRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5RGlzcGxheVZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZURpc3BsYXlWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pc0luRm9jdXMgPyB0aGlzLnZhbHVlQXNDdXJyZW50Q3VsdHVyZSA6IHRoaXMuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmlzSW5Gb2N1cyA/IHRoaXMudmFsdWUgOiB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub3RpZnlEaXNwbGF5VmFsdWVDaGFuZ2UocmVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NoYW5nZURpc3BsYXlWYWx1ZScgKyByZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRm9ybUZpZWxkVmFsdWUoZmlyc3RMb2FkID0gZmFsc2UpIHtcbiAgICAgICAgLy8gU2V0IHRoZSBmb3JtYXR0ZWQgdmFsdWUgb25seSBmb3IgdGhlIGZpcnN0IGxvYWQgY2F1c2UgaXQncyBub3QgZm9ybWF0dGVkIGlmIHdlIHNldCB0aGUgdmFsdWUgKEkgZG9uJ3Qga25vdyB3aHkpXG4gICAgICAgIC8vIEVsc2Ugd2Ugc2V0IHRoZSB2YWx1ZSAtIHRoaXMgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgdmFsdWUgb25seSBjYXVzZSBzZXR0aW5nIHRoZSBmb3JtYXR0ZWQgdmFsdWUgd2lsbCBjYXVzZSBidWcgd2hlbiB0aGUgbnVtYmVyIGlzIHdpdGggdGhvdXNhbmQgc2VwYXJhdG9yXG4gICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UudXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICB0aGlzLmZvcm0sXG4gICAgICAgICAgICB0aGlzLmtleSxcbiAgICAgICAgICAgIGZpcnN0TG9hZCA/IHRoaXMuZm9ybWF0dGVkVmFsdWUgOiB0aGlzLnZhbHVlLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyAgICAgY29uc3QgcmVzID0gdGhpcy5pc0luRm9jdXNcbiAgICAvLyAgICAgICAgID8gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmZvcm1hdERlY2ltYWwodGhpcy52YWx1ZSwgdGhpcy5taW5GcmFjdGlvbkRpZ2l0cywgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cylcbiAgICAvLyAgICAgICAgIDogdGhpcy5mb3JtYXR0ZWRWYWx1ZTtcbiAgICAvLyAgICAgcmV0dXJuIHJlcztcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGVzdHJveWVyKCkge1xuICAgICAgICByZXR1cm4gdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHlLZXkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YW5kQWxvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbmRlclRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUQU5EX0FMT05FX0ZJRUxEX05PX1NQQUNJTkdfQ0xBU1NfTkFNRVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLnFzV2lkdGhTdWJqZWN0XG4gICAgICAgIC8vICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLy8gICAgIC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC8vICAgICAuc3Vic2NyaWJlKChxc1dpZHRoOiBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNldHVwUXNCdXR0b25zKHFzV2lkdGgpO1xuICAgICAgICAvLyAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRmllbGRWYWx1ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5RU0NvbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLlFTQ29udC5uYXRpdmVFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1FzQnRuID0gdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDEyMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmNkWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMuc2V0UXNWaWV3KCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIEJ1ZyBmaXggZm9yIGFkZG9ucyB3aGVuIHRoZSBrZXkgaXMgJycgaW4gdGhlIG5nT25Jbml0IGZvciBzb21lIHJlc29uXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHlLZXkgJiYgdGhpcy5rZXkgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1RvVGhlU2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdygpO1xuICAgICAgICB9LCAxNTApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXQgZ2V0QWRkaXRpb25hbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZGl0aW9uYWxWYWx1ZS5sZW5ndGggPiAwID8gJ3Nob3cnIDogJ2hpZGUnO1xuICAgIH1cblxuICAgIGdldFBhcmVudEJ5Q2xhc3MoZWwsIHBhcmVudFNlbGVjdG9yIC8qIG9wdGlvbmFsICovKTogYW55IHtcbiAgICAgICAgLy8gSWYgbm8gcGFyZW50U2VsZWN0b3IgZGVmaW5lZCB3aWxsIGJ1YmJsZSB1cCBhbGwgdGhlIHdheSB0byAqZG9jdW1lbnQqXG4gICAgICAgIGlmIChwYXJlbnRTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IGRvY3VtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHAgPSBlbC5wYXJlbnROb2RlO1xuXG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHAgJiZcbiAgICAgICAgICAgICFwPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKHBhcmVudFNlbGVjdG9yKSAmJlxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgIT09IGRvY3VtZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbyA9IHA7XG4gICAgICAgICAgICBwID0gbz8ucGFyZW50Tm9kZSB8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHA/LmNsYXNzTmFtZS5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSA+IC0xID8gcCA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lKGV2ZW50OiBhbnksIGlzTmV4dCA9IHRydWUpOiBhbnkge1xuICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgICAgICBsZXQgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lO1xuXG4gICAgICAgIGxldCBwYXJlbnRTZWxlY3RvcjtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoZXZlbnRUYXJnZXQsICd0YWJsZS1yb3cnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxheW91dFR5cGUgPT09ICdjYXJkJykge1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudEJ5Q2xhc3MoZXZlbnRUYXJnZXQsICdjYXJkLXZpZXcnKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRTZWxlY3RvciA9IHRoaXMuZ2V0UGFyZW50QnlDbGFzcyhcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICdsaW5lLXZpZXcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3IucHJldmlvdXNFbGVtZW50U2libGluZyA9PT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNOZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzYW1lRWxlbWVudEluVGhlV2FudGVkUm93QnlDbGFzc05hbWUgPSBwYXJlbnRTZWxlY3Rvci5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lID0gcGFyZW50U2VsZWN0b3IubmV4dEVsZW1lbnRTaWJsaW5nLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2VsZWN0b3IucHJldmlvdXNFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50c0xpc3QgPSBwYXJlbnRTZWxlY3Rvci5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW25hbWU9JyArIHRoaXMua2V5ICsgJ10nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c0xpc3RbZWxlbWVudHNMaXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZSA9IHBhcmVudFNlbGVjdG9yLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdbbmFtZT0nICsgdGhpcy5rZXkgKyAnXSdcbiAgICAgICAgICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvd0J5Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHNldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coZXZlbnQ6IGFueSwgaXNOZXh0ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgUVMgaW4gdGhlIG5leHQgcm93LlxuICAgICAgICBpZiAodGhpcy5sYXlvdXRUeXBlID09PSAnY2FyZCcgfHwgdGhpcy5sYXlvdXRUeXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSB0aGlzLmdldFNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3dCeUNsYXNzTmFtZShcbiAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICBpc05leHRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgZm9jdXNUb1RoZVNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3coKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3c7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHJlZ3VsYXIgaXRlbSAocXMgYW5kIG5vdCBidXR0b24pIC5cbiAgICAgICAgICAgIGlmIChlbGVtIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgICAgIGVsZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIHBhcmVudEVsZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNhbWVFbGVtZW50SW5UaGVXYW50ZWRSb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW5FcnJvcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMua2V5XTtcblxuICAgICAgICAvLyBDbGVhbiB0aGUgZXJyb3IgbWVzc2FnZVxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlcyAmJiB0aGlzLm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm5vdGlmaWNhdGlvbkluZm8gPSBudWxsO1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTWF0cml4TW91c2VFbnRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNNYXRyaXhGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25NYXRyaXhNb3VzZWxlYXZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc01hdHJpeEZvY3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25NYXRyaXhDbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5RU0lucHV0ICYmIHRoaXMuUVNJbnB1dC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLlFTSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25NYXRyaXhCbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHxcbiAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ3FzJykgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pc01hdHJpeEZvY3VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQmx1cihldmVudCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gdHJ1ZTtcblxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmlzSW5Gb2N1cykge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LnNlbGVjdCgpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfSwgMCk7XG4gICAgfVxuXG4gICAgaXNEaWZmZXJlbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMudXRpbGl0aWVzU2VydmljZS5pc0VxdWFsTnVtYmVyKHRoaXMudmFsdWVBc0N1cnJlbnRDdWx0dXJlLCB2YWx1ZSkgPT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIG9uQmx1cihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xlYW5FcnJvcigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRhcmdldC52YWx1ZSA6IGV2ZW50O1xuXG4gICAgICAgIC8vIEZvciBkZWNpbWFsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgYmFjayBpZiBpdCdzIGNvbW1hICgnLCcpLlxuICAgICAgICBjb25zdCBjb3JyZWN0VmFsdWUgPSB0aGlzLmFsbG93RGVjaW1hbCA/IHRoaXMudXRpbGl0aWVzU2VydmljZS5jaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvcnJlY3RWYWx1ZSAhPT0gdGhpcy52YWx1ZUFzQ3VycmVudEN1bHR1cmUgJiYgdGhpcy5pc0RpZmZlcmVudFZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5mb2N1c1RvVGhlU2FtZUVsZW1lbnRJblRoZVdhbnRlZFJvdygpO1xuICAgIH1cblxuICAgIG9uS2V5ZG93bihldmVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGtleWJvYXJkRXZlbnQgPSBldmVudCBhcyBLZXlib2FyZEV2ZW50O1xuXG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTYW1lRWxlbWVudEluVGhlV2FudGVkUm93KFxuICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQsXG4gICAgICAgICAgICAgICAgIWtleWJvYXJkRXZlbnQuc2hpZnRLZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluY3JlbWVudChldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdGFuZEFsb25lKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmluY3JlbWVudE51bWJlcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudENsaWNrLmVtaXQoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmtleSxcbiAgICAgICAgICAgIHZhbHVlOiBQZXBRdWFudGl0eVNlbGVjdG9yQ29tcG9uZW50LlBMVVMsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgZGVjcmVtZW50KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnV0aWxpdGllc1NlcnZpY2UuZGVjcmVtZW50TnVtYmVyKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbGVtZW50Q2xpY2suZW1pdCh7XG4gICAgICAgICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IFBlcFF1YW50aXR5U2VsZWN0b3JDb21wb25lbnQuTUlOVVMsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogdGhpcy5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIGV2ZW50V2hpY2g6IGV2ZW50LndoaWNoLFxuICAgICAgICB9KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgZW50ZXJDaGlsZHJlbihldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5FTlRFUl9DSElMRFJFTixcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiB0aGlzLmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgZXZlbnRXaGljaDogZXZlbnQud2hpY2gsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVudGVyUGFja2FnZShldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRDbGljay5lbWl0KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogUGVwUXVhbnRpdHlTZWxlY3RvckNvbXBvbmVudC5FTlRFUl9QQUNLQUdFLFxuICAgICAgICAgICAgY29udHJvbFR5cGU6IHRoaXMuY29udHJvbFR5cGUsXG4gICAgICAgICAgICBldmVudFdoaWNoOiBldmVudC53aGljaCxcbiAgICAgICAgICAgIG90aGVyRGF0YTogdGhpcy5ub3RpZmljYXRpb25JbmZvLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzZXR1cFFzQnV0dG9ucyhxc1dpZHRoOiBudW1iZXIpIHtcbiAgICAvLyAgICAgdGhpcy5zaG93UXNCdG4gPSBxc1dpZHRoID4gMTIwO1xuXG4gICAgLy8gICAgIGlmICghdGhpcy5jZFsnZGVzdHJveWVkJ10pIHtcbiAgICAvLyAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gc2V0UXNWaWV3KCk6IHZvaWQge1xuICAgIC8vICAgICBpZiAoXG4gICAgLy8gICAgICAgICB0aGlzLlFTQ29udCAmJlxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudCAmJlxuICAgIC8vICAgICAgICAgdGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA+IDBcbiAgICAvLyAgICAgKSB7XG4gICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnFzV2lkdGhTdWJqZWN0Lm5leHQodGhpcy5RU0NvbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgLy8gICAgICAgICB9LCAwKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5nLXRlbXBsYXRlICNwZXBUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiAjUVNDb250IGNsYXNzPVwicGVwLXF1YW50aXR5LXNlbGVjdG9yLWNvbnRhaW5lciB7eyBzdHlsZVR5cGUgfX1cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2hpZGUtcXMtYWN0aW9ucycgOiBsYXlvdXRUeXBlID09PSAnY2FyZCcgJiYgcm93U3BhbiA8PSAxLFxuICAgICAgICAgICAgICAgICdwZXAtdGFibGUtcXVhbnRpdHktc2VsZWN0b3InOiBsYXlvdXRUeXBlID09PSAndGFibGUnLFxuICAgICAgICAgICAgICAgICdvbmUtcm93Jzogcm93U3BhbiA9PT0gMSxcbiAgICAgICAgICAgICAgICBjYXV0aW9uOiBpc0NhdXRpb24sXG4gICAgICAgICAgICAgICAgJ21hdHJpeC1xcyc6IHR5cGUgPT09ICdxc0Zvck1hdHJpeCcsXG4gICAgICAgICAgICAgICAgJ3plcm8tcXVhbnRpdHknOiBmb3JtYXR0ZWRWYWx1ZSA9PT0gJzAnXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8cGVwLWZpZWxkLXRpdGxlICpuZ0lmPVwicmVuZGVyVGl0bGUgJiYgbGF5b3V0VHlwZSAhPT0gJ3RhYmxlJyAmJiBsYXlvdXRUeXBlICE9PSAnY2FyZCdcIiBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYW5kYXRvcnldPVwibWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3Nob3dUaXRsZV09XCJzaG93VGl0bGVcIiBbeEFsaWdubWVudF09XCJ4QWxpZ25tZW50XCI+XG4gICAgICAgICAgICA8L3BlcC1maWVsZC10aXRsZT5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT0gJ3FzJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWFkb25seTsgdGhlbiByZWFkb25seUJsb2NrOyBlbHNlIGVkaXRhYmxlUVNCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVhZG9ubHlCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbaWRdPVwia2V5XCIgbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IGRpc2FibGUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBmb3JtYXR0ZWRWYWx1ZSB9fVwiIGRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdHRlZFZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0YWJsZVFTQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBlcFFzVmFsaWRhdGlvbiBbYWxsb3dEZWNpbWFsXT1cImFsbG93RGVjaW1hbFwiIHR5cGU9XCJkZWNpbWFsTnVtYmVyXCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXQgI1FTSW5wdXQgbmFtZT1cInt7IGtleSB9fVwiIGNsYXNzPVwiYm9keS1sZyBlbGxpcHNpc1wiIHRpdGxlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtpZF09XCJrZXlcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImtleVwiIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWUkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSlcIiAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UXNCdG5cIiBtYXQtYnV0dG9uIG1hdFByZWZpeCAoY2xpY2spPVwiZGVjcmVtZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBzbSB3ZWFrIHFzLWFjdGlvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiAmJiBzdHlsZVR5cGUgIT09ICdzdHJvbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2VlcC1iYWNrZ3JvdW5kLW9uLWZvY3VzJzogc3R5bGVUeXBlID09PSAnc3Ryb25nJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwibnVtYmVyX21pbnVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dRc0J0blwiIG1hdC1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJpbmNyZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIHNtIHdlYWsgcXMtYWN0aW9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uICYmIHN0eWxlVHlwZSAhPT0gJ3N0cm9uZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZWVwLWJhY2tncm91bmQtb24tZm9jdXMnOiBzdHlsZVR5cGUgPT09ICdzdHJvbmcnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIG5hbWU9XCJudW1iZXJfcGx1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJtZXNzYWdlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXMtZXJyb3IgYm9keS14c1wiICpuZ0Zvcj1cImxldCBtc2cgb2YgbWVzc2FnZXNcIj4ge3sgbXNnLktleSB8IHRyYW5zbGF0ZSB9fSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1zZy5WYWx1ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdxc0Zvck1hdHJpeCdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHk7IHRoZW4gcmVhZG9ubHlCbG9jazsgZWxzZSBlZGl0YWJsZVFTQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlYWRvbmx5QmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2lkXT1cImtleVwiIG1hdC1idXR0b24gY2xhc3M9XCJwZXAtYnV0dG9uIHt7IHN0eWxlVHlwZSB9fSBkaXNhYmxlXCIgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntjYXV0aW9uOiBpc0NhdXRpb24sIG1kOiByb3dTcGFuICE9PSAxLCB4czogcm93U3BhbiA9PT0gMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFhcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRhYmxlUVNCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgeEFsaWdubWVudD09J3JpZ2h0J1wiIGNsYXNzPVwiIGJvZHktc20gYWRkaXRpb25hbC12YWx1ZSBwcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2U9XCJ7eyBhZGRpdGlvbmFsVmFsdWUgfX1cIiBtYXRCYWRnZVBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlU2l6ZT1cInJvd1NwYW4gPT09IDEgPyBzbWFsbCA6IG1lZGl1bVwiIFtAc2hvd0hpZGVdPVwiZ2V0QWRkaXRpb25hbFZhbHVlXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIChtb3VzZWxlYXZlKT1cIiFpc0luRm9jdXMgPyBvbk1hdHJpeE1vdXNlbGVhdmUoJGV2ZW50KSA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwZXBRc1ZhbGlkYXRpb24gW2FsbG93RGVjaW1hbF09XCJhbGxvd0RlY2ltYWxcIiB0eXBlPVwiZGVjaW1hbE51bWJlclwiIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0ICNRU0lucHV0IG5hbWU9XCJ7eyBrZXkgfX1cIiB0aXRsZT1cInt7IGZvcm1hdHRlZFZhbHVlIH19XCIgY2xhc3M9XCJib2R5LXNtIGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbaWRdPVwia2V5XCIgW2Zvcm1Db250cm9sTmFtZV09XCJrZXlcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NYXRyaXhDbGljaygkZXZlbnQpOyAkZXZlbnQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCIgKGJsdXIpPVwib25NYXRyaXhCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbk1hdHJpeE1vdXNlRW50ZXIoJGV2ZW50KTsgb25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1hdHJpeE1vdXNlRW50ZXIoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJtZXNzYWdlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXMtZXJyb3IgYm9keS14c1wiICpuZ0Zvcj1cImxldCBtc2cgb2YgbWVzc2FnZXNcIj4ge3sgbXNnLktleSB8IHRyYW5zbGF0ZSB9fSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1zZy5WYWx1ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInhBbGlnbm1lbnQgIT0gJ3JpZ2h0J1wiIGNsYXNzPVwiYm9keS1zbSBhZGRpdGlvbmFsLXZhbHVlIHN1ZmZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZT1cInt7IGFkZGl0aW9uYWxWYWx1ZSB9fVwiIG1hdEJhZGdlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VTaXplPVwicm93U3BhbiA9PT0gMSA/IHNtYWxsIDogbWVkaXVtXCIgW0BzaG93SGlkZV09XCJnZXRBZGRpdGlvbmFsVmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAnYnV0dG9uJ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodmFsdWUgfCBwZXBUb051bWJlcikgPT0gMDsgdGhlbiByZWd1bGFyQmxvY2s7IGVsc2Ugd2l0aEJhZGdlQmxvY2tcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwicGVwLWJ1dHRvbiB7eyBzdHlsZVR5cGUgfX0gXCIgW2lkXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3sga2V5IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZTogZGlzYWJsZWQsIGNhdXRpb246IGlzQ2F1dGlvbiwgbWQ6IHJvd1NwYW4gIT09IDEsIHhzOiByb3dTcGFuID09PSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbnRlckNoaWxkcmVuKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUVMuT1JERVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoQmFkZ2VCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdEJhZGdlPVwie3sgZm9ybWF0dGVkVmFsdWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cInt7eEFsaWdubWVudCA9PSAncmlnaHQnID8gJ2JlZm9yZScgOiAnYWZ0ZXInfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCJsYXlvdXRUeXBlID09PSAnY2FyZCcgJiYgcm93U3BhbiA9PT0gMSA/ICdzbWFsbCcgOiAnbWVkaXVtJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIiBuYW1lPVwie3sga2V5IH19XCIgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpZ2h0LWFsaWdubWVudCc6IHhBbGlnbm1lbnQgPT0gJ3JpZ2h0JywgJ2xlZnQtYWxpZ25tZW50JzogeEFsaWdubWVudCAhPSAncmlnaHQnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJlbnRlckNoaWxkcmVuKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnUVMuT1JERVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09ICdwYWNrYWdlQnV0dG9uJ1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInBlcC1idXR0b24ge3sgc3R5bGVUeXBlIH19IFwiIFtpZF09XCJrZXlcIiBuYW1lPVwie3sga2V5IH19XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlOiBkaXNhYmxlZCwgY2F1dGlvbjogaXNDYXV0aW9uLCBtZDogcm93U3BhbiAhPT0gMSwgeHM6IHJvd1NwYW4gPT09IDF9XCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidRUy5PUkRFUicgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiZW50ZXJQYWNrYWdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1FTLk9SREVSJyB8IHRyYW5zbGF0ZSB9fSAmIzQwO3t7IGZvcm1hdHRlZFZhbHVlIH19JiM0MTtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PT0gJ2Zvcm0nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT09ICdjYXJkJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGVwVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRUeXBlID09PSAndGFibGUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwZXBUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+Il19
@@ -9,6 +9,21 @@ export class PepRemoteLoaderService {
9
9
  this.addonService = addonService;
10
10
  //
11
11
  }
12
+ getBlockLoaderDataUrl(options) {
13
+ const fileName = 'addon_blocks';
14
+ const pagesAddonUuid = this.addonService.getPagesAddonUUID();
15
+ let pagesBaseUrl;
16
+ // For devServer run server on localhost.
17
+ if (options.pagesDevServer?.length > 0) {
18
+ pagesBaseUrl = `${options.pagesDevServer}/${fileName}`;
19
+ }
20
+ else {
21
+ const baseUrl = this.sessionService.getPapiBaseUrl();
22
+ pagesBaseUrl = `${baseUrl}/addons/api/${pagesAddonUuid}/${fileName}`;
23
+ }
24
+ const url = `${pagesBaseUrl}/get_addon_block_loader_data?name=${options.name}&slugName=${options.slugName}&blockType=${options.blockType}&addonUUID=${options.addonUUID}`;
25
+ return url;
26
+ }
12
27
  getRemoteLoaderOptions(blockLoaderData, blockRemoteEntry = '', type = 'module') {
13
28
  const exposedModule = blockLoaderData.relation.ElementsModule?.length > 0 ? blockLoaderData.relation.ElementsModule : blockLoaderData.relation.ModuleName;
14
29
  const res = {
@@ -27,21 +42,6 @@ export class PepRemoteLoaderService {
27
42
  }
28
43
  return res;
29
44
  }
30
- getBlockLoaderDataUrl(options) {
31
- const fileName = 'addon_blocks';
32
- const pagesAddonUuid = this.addonService.getPagesAddonUUID();
33
- let pagesBaseUrl;
34
- // For devServer run server on localhost.
35
- if (options.pagesDevServer?.length > 0) {
36
- pagesBaseUrl = `${options.pagesDevServer}/${fileName}`;
37
- }
38
- else {
39
- const baseUrl = this.sessionService.getPapiBaseUrl();
40
- pagesBaseUrl = `${baseUrl}/addons/api/${pagesAddonUuid}/${fileName}`;
41
- }
42
- const url = `${pagesBaseUrl}/get_addon_block_loader_data?name=${options.name}&slugName=${options.slugName}&blockType=${options.blockType}&addonUUID=${options.addonUUID}`;
43
- return url;
44
- }
45
45
  async getBlockRemoteLoaderOptions(options) {
46
46
  options.blockType = options.blockType ?? 'AddonBlock';
47
47
  options.name = options.name ?? '';
@@ -78,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
78
78
  providedIn: 'root'
79
79
  }]
80
80
  }], ctorParameters: function () { return [{ type: i1.PepHttpService }, { type: i1.PepSessionService }, { type: i1.PepAddonService }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9yZW1vdGUtbG9hZGVyL3JlbW90ZS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixZQUNZLFdBQTJCLEVBQzNCLGNBQWlDLEVBQ2pDLFlBQTZCO1FBRjdCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBRXJDLEVBQUU7SUFDTixDQUFDO0lBRUQsc0JBQXNCLENBQUMsZUFBaUMsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsT0FBeUMsUUFBUTtRQUM5SCxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDMUosTUFBTSxHQUFHLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSztZQUNwSixVQUFVLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7WUFDckQsYUFBYSxFQUFFLEtBQUssYUFBYSxFQUFFO1lBQ25DLE9BQU8s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Q1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFDbkgsTUFBTSxDQUFDLGNBQWMsT0FBTyw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtvQkFDdkMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQ3RDO3FCQUNJO29CQUNELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2lCQUNsQzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzttSEExRVEsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBIdHRwU2VydmljZSwgUGVwU2Vzc2lvblNlcnZpY2V9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zLCBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIH0gZnJvbSAnLi9yZW1vdGUtbG9hZGVyLm1vZGVsJztcbmltcG9ydCB7IElCbG9ja0xvYWRlckRhdGEgfSBmcm9tICcuL3JlbW90ZS1sb2FkZXIubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IFxuICAgIHByb3ZpZGVkSW46ICdyb290JyBcbn0pXG5leHBvcnQgY2xhc3MgUGVwUmVtb3RlTG9hZGVyU2VydmljZSB7XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IFBlcEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBQZXBTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZGRvblNlcnZpY2U6IFBlcEFkZG9uU2VydmljZVxuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldFJlbW90ZUxvYWRlck9wdGlvbnMoYmxvY2tMb2FkZXJEYXRhOiBJQmxvY2tMb2FkZXJEYXRhLCBibG9ja1JlbW90ZUVudHJ5ID0gJycsIHR5cGU6ICdzY3JpcHQnIHwgJ21vZHVsZScgfCAnbWFuaWZlc3QnID0gJ21vZHVsZScpOiBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIHtcbiAgICAgICAgY29uc3QgZXhwb3NlZE1vZHVsZSA9IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZT8ubGVuZ3RoID4gMCA/IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZSA6IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5Nb2R1bGVOYW1lO1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgcmVtb3RlRW50cnk6IGJsb2NrUmVtb3RlRW50cnkubGVuZ3RoID4gMCA/IGJsb2NrUmVtb3RlRW50cnkgOiBgJHtibG9ja0xvYWRlckRhdGEuYWRkb25QdWJsaWNCYXNlVVJMfSR7YmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uUmVsYXRpdmVVUkx9LmpzYCxcbiAgICAgICAgICAgIHJlbW90ZU5hbWU6IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5BZGRvblJlbGF0aXZlVVJMLCAvLyBGb3Igc2NyaXB0IHR5cGUsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdC5cbiAgICAgICAgICAgIGV4cG9zZWRNb2R1bGU6IGAuLyR7ZXhwb3NlZE1vZHVsZX1gLFxuICAgICAgICAgICAgYWRkb25JZDogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uVVVJRCwgLy8gRm9yIGxvY2FsIHVzZSAoYWRkaW5nIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhc3NldHMpLlxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiBpdCdzIHdlYiBjb21wb25lbnRzXG4gICAgICAgIGlmIChibG9ja0xvYWRlckRhdGEucmVsYXRpb24uRWxlbWVudHNNb2R1bGU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc1snZWxlbWVudE5hbWUnXSA9IGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50TmFtZVxuICAgICAgICB9IGVsc2UgeyAvLyBGb3IgbG9hZCB0aGUgY29tcG9uZW50IGZyb20gdGhlIG1vZHVsZS5cbiAgICAgICAgICAgIHJlc1snY29tcG9uZW50TmFtZSddID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkNvbXBvbmVudE5hbWU7IFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2NrTG9hZGVyRGF0YVVybChvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gJ2FkZG9uX2Jsb2Nrcyc7XG4gICAgICAgIGNvbnN0IHBhZ2VzQWRkb25VdWlkID0gdGhpcy5hZGRvblNlcnZpY2UuZ2V0UGFnZXNBZGRvblVVSUQoKTtcbiAgICAgICAgbGV0IHBhZ2VzQmFzZVVybDtcblxuICAgICAgICAvLyBGb3IgZGV2U2VydmVyIHJ1biBzZXJ2ZXIgb24gbG9jYWxob3N0LlxuICAgICAgICBpZihvcHRpb25zLnBhZ2VzRGV2U2VydmVyPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBwYWdlc0Jhc2VVcmwgPSBgJHtvcHRpb25zLnBhZ2VzRGV2U2VydmVyfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRQYXBpQmFzZVVybCgpO1xuICAgICAgICAgICAgcGFnZXNCYXNlVXJsID0gYCR7YmFzZVVybH0vYWRkb25zL2FwaS8ke3BhZ2VzQWRkb25VdWlkfS8ke2ZpbGVOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBgJHtwYWdlc0Jhc2VVcmx9L2dldF9hZGRvbl9ibG9ja19sb2FkZXJfZGF0YT9uYW1lPSR7b3B0aW9ucy5uYW1lfSZzbHVnTmFtZT0ke29wdGlvbnMuc2x1Z05hbWV9JmJsb2NrVHlwZT0ke29wdGlvbnMuYmxvY2tUeXBlfSZhZGRvblVVSUQ9JHtvcHRpb25zLmFkZG9uVVVJRH1gO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJsb2NrUmVtb3RlTG9hZGVyT3B0aW9ucyhvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IFByb21pc2U8UGVwUmVtb3RlTG9hZGVyT3B0aW9ucz4ge1xuICAgICAgICBvcHRpb25zLmJsb2NrVHlwZSA9IG9wdGlvbnMuYmxvY2tUeXBlID8/ICdBZGRvbkJsb2NrJztcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICAgICAgICBvcHRpb25zLnNsdWdOYW1lID0gb3B0aW9ucy5zbHVnTmFtZSA/PyAnJztcbiAgICAgICAgb3B0aW9ucy5hZGRvblVVSUQgPSBvcHRpb25zLmFkZG9uVVVJRCA/PyAnJztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZT8ubGVuZ3RoID4gMCB8fCAob3B0aW9ucy5zbHVnTmFtZT8ubGVuZ3RoID4gMCAmJiBvcHRpb25zLmJsb2NrVHlwZSA9PT0gJ1NldHRpbmdzQmxvY2snKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrTG9hZGVyRGF0YVVybCA9IHRoaXMuZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0SHR0cENhbGwoYmxvY2tMb2FkZXJEYXRhVXJsKS50b1Byb21pc2UoKS50aGVuKChkYXRhOiBJQmxvY2tMb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5nVmVyc2lvbk51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KGRhdGEucmVsYXRpb24/LlN1YlR5cGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgnbmcnLCAnJyksIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5nVmVyc2lvbk51bWJlciA+PSAxNCA/ICdtb2R1bGUnIDogJ3NjcmlwdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFJlbW90ZUxvYWRlck9wdGlvbnMoZGF0YSwgb3B0aW9ucy5ibG9ja1JlbW90ZUVudHJ5LCB0eXBlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZU1zZyA9IG9wdGlvbnMuYmxvY2tUeXBlID09PSAnU2V0dGluZ3NCbG9jaycgPyBgc2x1Z05hbWUgLSAke29wdGlvbnMuc2x1Z05hbWV9YCA6IGBuYW1lIC0gJHtvcHRpb25zLm5hbWV9YFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYEJsb2NrIHdpdGggJHtuYW1lTXNnfSBpcyBub3QgZm91bmQgZm9yIHR5cGUgLSAke29wdGlvbnMuYmxvY2tUeXBlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ibG9ja1R5cGUgPT09ICdTZXR0aW5nc0Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYHNsdWdOYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBuYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9yZW1vdGUtbG9hZGVyL3JlbW90ZS1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixZQUNZLFdBQTJCLEVBQzNCLGNBQWlDLEVBQ2pDLFlBQTZCO1FBRjdCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBRXJDLEVBQUU7SUFDTixDQUFDO0lBRU8scUJBQXFCLENBQUMsT0FBc0M7UUFDaEUsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3RCxJQUFJLFlBQVksQ0FBQztRQUVqQix5Q0FBeUM7UUFDekMsSUFBRyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsWUFBWSxHQUFHLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxRQUFRLEVBQUUsQ0FBQztTQUMxRDthQUFNO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyRCxZQUFZLEdBQUcsR0FBRyxPQUFPLGVBQWUsY0FBYyxJQUFJLFFBQVEsRUFBRSxDQUFDO1NBQ3hFO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLHFDQUFxQyxPQUFPLENBQUMsSUFBSSxhQUFhLE9BQU8sQ0FBQyxRQUFRLGNBQWMsT0FBTyxDQUFDLFNBQVMsY0FB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Q1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLGNBQWMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFDbkgsTUFBTSxDQUFDLGNBQWMsT0FBTyw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLGVBQWUsRUFBRTtvQkFDdkMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQ3RDO3FCQUNJO29CQUNELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2lCQUNsQzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzttSEExRVEsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTsyRkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwQWRkb25TZXJ2aWNlLCBQZXBIdHRwU2VydmljZSwgUGVwU2Vzc2lvblNlcnZpY2V9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zLCBQZXBSZW1vdGVMb2FkZXJPcHRpb25zIH0gZnJvbSAnLi9yZW1vdGUtbG9hZGVyLm1vZGVsJztcbmltcG9ydCB7IElCbG9ja0xvYWRlckRhdGEgfSBmcm9tICcuL3JlbW90ZS1sb2FkZXIubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7IFxuICAgIHByb3ZpZGVkSW46ICdyb290JyBcbn0pXG5leHBvcnQgY2xhc3MgUGVwUmVtb3RlTG9hZGVyU2VydmljZSB7XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IFBlcEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBQZXBTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhZGRvblNlcnZpY2U6IFBlcEFkZG9uU2VydmljZVxuICAgICkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnM6IElQZXBSZW1vdGVMb2FkZXJQYXJhbXNPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAnYWRkb25fYmxvY2tzJztcbiAgICAgICAgY29uc3QgcGFnZXNBZGRvblV1aWQgPSB0aGlzLmFkZG9uU2VydmljZS5nZXRQYWdlc0FkZG9uVVVJRCgpO1xuICAgICAgICBsZXQgcGFnZXNCYXNlVXJsO1xuXG4gICAgICAgIC8vIEZvciBkZXZTZXJ2ZXIgcnVuIHNlcnZlciBvbiBsb2NhbGhvc3QuXG4gICAgICAgIGlmKG9wdGlvbnMucGFnZXNEZXZTZXJ2ZXI/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhZ2VzQmFzZVVybCA9IGAke29wdGlvbnMucGFnZXNEZXZTZXJ2ZXJ9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFBhcGlCYXNlVXJsKCk7XG4gICAgICAgICAgICBwYWdlc0Jhc2VVcmwgPSBgJHtiYXNlVXJsfS9hZGRvbnMvYXBpLyR7cGFnZXNBZGRvblV1aWR9LyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3BhZ2VzQmFzZVVybH0vZ2V0X2FkZG9uX2Jsb2NrX2xvYWRlcl9kYXRhP25hbWU9JHtvcHRpb25zLm5hbWV9JnNsdWdOYW1lPSR7b3B0aW9ucy5zbHVnTmFtZX0mYmxvY2tUeXBlPSR7b3B0aW9ucy5ibG9ja1R5cGV9JmFkZG9uVVVJRD0ke29wdGlvbnMuYWRkb25VVUlEfWA7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgZ2V0UmVtb3RlTG9hZGVyT3B0aW9ucyhibG9ja0xvYWRlckRhdGE6IElCbG9ja0xvYWRlckRhdGEsIGJsb2NrUmVtb3RlRW50cnkgPSAnJywgdHlwZTogJ3NjcmlwdCcgfCAnbW9kdWxlJyB8ICdtYW5pZmVzdCcgPSAnbW9kdWxlJyk6IFBlcFJlbW90ZUxvYWRlck9wdGlvbnMge1xuICAgICAgICBjb25zdCBleHBvc2VkTW9kdWxlID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnRzTW9kdWxlPy5sZW5ndGggPiAwID8gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnRzTW9kdWxlIDogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLk1vZHVsZU5hbWU7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICByZW1vdGVFbnRyeTogYmxvY2tSZW1vdGVFbnRyeS5sZW5ndGggPiAwID8gYmxvY2tSZW1vdGVFbnRyeSA6IGAke2Jsb2NrTG9hZGVyRGF0YS5hZGRvblB1YmxpY0Jhc2VVUkx9JHtibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQWRkb25SZWxhdGl2ZVVSTH0uanNgLFxuICAgICAgICAgICAgcmVtb3RlTmFtZTogYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkFkZG9uUmVsYXRpdmVVUkwsIC8vIEZvciBzY3JpcHQgdHlwZSwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0LlxuICAgICAgICAgICAgZXhwb3NlZE1vZHVsZTogYC4vJHtleHBvc2VkTW9kdWxlfWAsXG4gICAgICAgICAgICBhZGRvbklkOiBibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQWRkb25VVUlELCAvLyBGb3IgbG9jYWwgdXNlIChhZGRpbmcgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFzc2V0cykuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIElmIGl0J3Mgd2ViIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKGJsb2NrTG9hZGVyRGF0YS5yZWxhdGlvbi5FbGVtZW50c01vZHVsZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzWydlbGVtZW50TmFtZSddID0gYmxvY2tMb2FkZXJEYXRhLnJlbGF0aW9uLkVsZW1lbnROYW1lXG4gICAgICAgIH0gZWxzZSB7IC8vIEZvciBsb2FkIHRoZSBjb21wb25lbnQgZnJvbSB0aGUgbW9kdWxlLlxuICAgICAgICAgICAgcmVzWydjb21wb25lbnROYW1lJ10gPSBibG9ja0xvYWRlckRhdGEucmVsYXRpb24uQ29tcG9uZW50TmFtZTsgXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJsb2NrUmVtb3RlTG9hZGVyT3B0aW9ucyhvcHRpb25zOiBJUGVwUmVtb3RlTG9hZGVyUGFyYW1zT3B0aW9ucyk6IFByb21pc2U8UGVwUmVtb3RlTG9hZGVyT3B0aW9ucz4ge1xuICAgICAgICBvcHRpb25zLmJsb2NrVHlwZSA9IG9wdGlvbnMuYmxvY2tUeXBlID8/ICdBZGRvbkJsb2NrJztcbiAgICAgICAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICAgICAgICBvcHRpb25zLnNsdWdOYW1lID0gb3B0aW9ucy5zbHVnTmFtZSA/PyAnJztcbiAgICAgICAgb3B0aW9ucy5hZGRvblVVSUQgPSBvcHRpb25zLmFkZG9uVVVJRCA/PyAnJztcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZT8ubGVuZ3RoID4gMCB8fCAob3B0aW9ucy5zbHVnTmFtZT8ubGVuZ3RoID4gMCAmJiBvcHRpb25zLmJsb2NrVHlwZSA9PT0gJ1NldHRpbmdzQmxvY2snKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrTG9hZGVyRGF0YVVybCA9IHRoaXMuZ2V0QmxvY2tMb2FkZXJEYXRhVXJsKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFNlcnZpY2UuZ2V0SHR0cENhbGwoYmxvY2tMb2FkZXJEYXRhVXJsKS50b1Byb21pc2UoKS50aGVuKChkYXRhOiBJQmxvY2tMb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5nVmVyc2lvbk51bWJlciA9IGNvZXJjZU51bWJlclByb3BlcnR5KGRhdGEucmVsYXRpb24/LlN1YlR5cGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgnbmcnLCAnJyksIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IG5nVmVyc2lvbk51bWJlciA+PSAxNCA/ICdtb2R1bGUnIDogJ3NjcmlwdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmdldFJlbW90ZUxvYWRlck9wdGlvbnMoZGF0YSwgb3B0aW9ucy5ibG9ja1JlbW90ZUVudHJ5LCB0eXBlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZU1zZyA9IG9wdGlvbnMuYmxvY2tUeXBlID09PSAnU2V0dGluZ3NCbG9jaycgPyBgc2x1Z05hbWUgLSAke29wdGlvbnMuc2x1Z05hbWV9YCA6IGBuYW1lIC0gJHtvcHRpb25zLm5hbWV9YFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYEJsb2NrIHdpdGggJHtuYW1lTXNnfSBpcyBub3QgZm91bmQgZm9yIHR5cGUgLSAke29wdGlvbnMuYmxvY2tUeXBlfWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ibG9ja1R5cGUgPT09ICdTZXR0aW5nc0Jsb2NrJykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYHNsdWdOYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBuYW1lIGlzIG5vdCBzdXBwbGllZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19