@byuhbll/components 4.0.0-alpha.14 → 4.0.0-alpha.16

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 (30) hide show
  1. package/esm2022/lib/animations/animations.mjs +5 -5
  2. package/esm2022/lib/checkbox/checkbox.component.mjs +15 -0
  3. package/esm2022/lib/expand-collapse/expand-collapse.component.mjs +3 -3
  4. package/esm2022/lib/hbll-header/hbll-header.component.mjs +26 -7
  5. package/esm2022/lib/hbll-header/nav-bar/nav-bar.component.mjs +255 -229
  6. package/esm2022/lib/hbll-header/nav-bar-dropdown/nav-bar-dropdown.component.mjs +3 -3
  7. package/esm2022/lib/header-with-impersonation/header-with-impersonation.component.mjs +38 -0
  8. package/esm2022/lib/impersonate-modal/impersonate-modal.component.mjs +5 -3
  9. package/esm2022/lib/impersonation-banner/impersonation-banner.component.mjs +3 -4
  10. package/esm2022/lib/multi-select/multi-select.component.mjs +115 -0
  11. package/esm2022/lib/ss-search-bar/advanced-search/advanced-search.component.mjs +5 -5
  12. package/esm2022/lib/ss-search-bar/ss-search-bar.component.mjs +2 -2
  13. package/esm2022/lib/utils.mjs +2 -3
  14. package/esm2022/public-api.mjs +2 -1
  15. package/fesm2022/byuhbll-components.mjs +495 -417
  16. package/fesm2022/byuhbll-components.mjs.map +1 -1
  17. package/lib/{hbll-checkbox/hbll-checkbox.component.d.ts → checkbox/checkbox.component.d.ts} +1 -1
  18. package/lib/hbll-header/hbll-header.component.d.ts +7 -3
  19. package/lib/hbll-header/nav-bar/nav-bar.component.d.ts +5 -3
  20. package/lib/header-with-impersonation/header-with-impersonation.component.d.ts +19 -0
  21. package/lib/impersonate-modal/impersonate-modal.component.d.ts +2 -0
  22. package/lib/impersonation-banner/impersonation-banner.component.d.ts +1 -2
  23. package/lib/{hbll-multi-select/hbll-multi-select.component.d.ts → multi-select/multi-select.component.d.ts} +1 -1
  24. package/lib/ss-search-bar/advanced-search/advanced-search.component.d.ts +4 -1
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -0
  27. package/styles/scss/_vars.scss +1 -0
  28. package/styles/scss/shared.scss +7 -0
  29. package/esm2022/lib/hbll-checkbox/hbll-checkbox.component.mjs +0 -15
  30. package/esm2022/lib/hbll-multi-select/hbll-multi-select.component.mjs +0 -115
@@ -18,12 +18,12 @@ export class NavBarDropdownComponent {
18
18
  };
19
19
  }
20
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NavBarDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: NavBarDropdownComponent, isStandalone: true, selector: "lib-nav-bar-dropdown", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, isSmallScreen: { classPropertyName: "isSmallScreen", publicName: "isSmallScreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openEvent: "openEvent" }, ngImport: i0, template: "<span\n class=\"dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ desktop: !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".dropdown-wrapper.desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.dropdown-wrapper.desktop button .icon{font-size:1.3em;margin-bottom:-.1em}.dropdown-wrapper.desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box}.dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3)}.dropdown-wrapper button .icon{margin-left:.2em}.dropdown-wrapper.desktop:hover button{background-color:#0047ba;color:#fff}.dropdown-wrapper.desktop .dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"], dependencies: [{ kind: "component", type: ExpandCollapseComponent, selector: "lib-expand-collapse", inputs: ["isExpanded"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: NavBarDropdownComponent, isStandalone: true, selector: "lib-nav-bar-dropdown", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, isSmallScreen: { classPropertyName: "isSmallScreen", publicName: "isSmallScreen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openEvent: "openEvent" }, ngImport: i0, template: "<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".hbll-header-dropdown-wrapper.hbll-header-desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.hbll-header-dropdown-wrapper.hbll-header-desktop button .hbll-header-icon{font-size:1.3em;margin-bottom:-.1em}.hbll-header-dropdown-wrapper.hbll-header-desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box;text-decoration:none}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;background-color:#0047ba;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3);border-left:none;border-right:none;border-top:none;white-space:nowrap;cursor:pointer}.hbll-header-dropdown-wrapper button .hbll-header-icon{margin-left:.2em}.hbll-header-dropdown-wrapper.hbll-header-desktop:hover button{background-color:#0047ba;color:#fff}.hbll-header-dropdown-wrapper.hbll-header-desktop .hbll-header-dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"], dependencies: [{ kind: "component", type: ExpandCollapseComponent, selector: "lib-expand-collapse", inputs: ["isExpanded"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
22
22
  }
23
23
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NavBarDropdownComponent, decorators: [{
24
24
  type: Component,
25
- args: [{ selector: 'lib-nav-bar-dropdown', standalone: true, imports: [ExpandCollapseComponent, CommonModule], template: "<span\n class=\"dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ desktop: !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".dropdown-wrapper.desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.dropdown-wrapper.desktop button .icon{font-size:1.3em;margin-bottom:-.1em}.dropdown-wrapper.desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box}.dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3)}.dropdown-wrapper button .icon{margin-left:.2em}.dropdown-wrapper.desktop:hover button{background-color:#0047ba;color:#fff}.dropdown-wrapper.desktop .dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"] }]
25
+ args: [{ selector: 'lib-nav-bar-dropdown', standalone: true, imports: [ExpandCollapseComponent, CommonModule], template: "<span\n class=\"hbll-header-dropdown-wrapper\"\n data-testid=\"wrapper\"\n [ngClass]=\"{ 'hbll-header-desktop': !isSmallScreen() }\"\n (mouseenter)=\"!isSmallScreen() && (this.isOpen = true)\"\n (mouseleave)=\"!isSmallScreen() && (this.isOpen = false)\"\n>\n <button (click)=\"handleClick()\" data-testid=\"btn\">\n {{ title() }}\n <span class=\"material-symbols-outlined hbll-header-icon\">\n {{ 'keyboard_arrow_' + (isOpen ? 'up' : 'down') }}\n </span>\n </button>\n @if (!isSmallScreen()) {\n @if (isOpen) {\n <div class=\"hbll-header-dropdown\" data-testid=\"dropdown\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n }\n } @else {\n <lib-expand-collapse [isExpanded]=\"isOpen\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </lib-expand-collapse>\n }\n</span>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", styles: [".hbll-header-dropdown-wrapper.hbll-header-desktop button{color:#002e5d;background-color:#fff;display:flex;justify-content:center;align-items:center;font-size:1.1em;font-weight:500;border:none;padding:.4em 1em;line-height:1.4em}.hbll-header-dropdown-wrapper.hbll-header-desktop button .hbll-header-icon{font-size:1.3em;margin-bottom:-.1em}.hbll-header-dropdown-wrapper.hbll-header-desktop button:hover{background-color:#0047ba;color:#fff}*{box-sizing:border-box;text-decoration:none}*:not(.material-symbols-outlined){font-family:inherit}.hbll-header-dropdown-wrapper button{justify-content:flex-end;font-size:1.3em;color:#fff;display:flex;align-items:center;background-color:#0047ba;width:100%;padding:.6em;border-bottom:1px solid rgba(255,255,255,.3);border-left:none;border-right:none;border-top:none;white-space:nowrap;cursor:pointer}.hbll-header-dropdown-wrapper button .hbll-header-icon{margin-left:.2em}.hbll-header-dropdown-wrapper.hbll-header-desktop:hover button{background-color:#0047ba;color:#fff}.hbll-header-dropdown-wrapper.hbll-header-desktop .hbll-header-dropdown{position:absolute;z-index:11;width:100%;top:100%;left:0;background-color:#0047ba}\n"] }]
26
26
  }], propDecorators: { openEvent: [{
27
27
  type: Output
28
28
  }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGJsbC1oZWFkZXIvbmF2LWJhci1kcm9wZG93bi9uYXYtYmFyLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9uYXYtYmFyLWRyb3Bkb3duL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7OztBQVMxRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRCxzQ0FBc0M7UUFDdEMsa0JBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFbEMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixDQUFDLENBQUM7S0FDTDs4R0FiWSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3WUNYcEMsODhCQTZCQSx1MUJEdEJjLHVCQUF1Qix1RkFBRSxZQUFZOzsyRkFJdEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNJLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUM7OEJBT3RDLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5kLWNvbGxhcHNlL2V4cGFuZC1jb2xsYXBzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1uYXYtYmFyLWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZCYXJEcm9wZG93bkNvbXBvbmVudCB7XG4gICAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgaXNTbWFsbFNjcmVlbiA9IGlucHV0KHRydWUpO1xuICAgIEBPdXRwdXQoKSBvcGVuRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8vIFB1YmxpYyB0byBiZSBjYWxsZWQgYnkgcGFyZW50IGNvbXAuXG4gICAgY2xvc2VEcm9wZG93biA9ICgpID0+ICh0aGlzLmlzT3BlbiA9IGZhbHNlKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHRoaXMub3BlbkV2ZW50LmVtaXQodGhpcy50aXRsZSgpKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgfTtcbn1cbiIsIjxzcGFuXG4gICAgY2xhc3M9XCJkcm9wZG93bi13cmFwcGVyXCJcbiAgICBkYXRhLXRlc3RpZD1cIndyYXBwZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgZGVza3RvcDogIWlzU21hbGxTY3JlZW4oKSB9XCJcbiAgICAobW91c2VlbnRlcik9XCIhaXNTbWFsbFNjcmVlbigpICYmICh0aGlzLmlzT3BlbiA9IHRydWUpXCJcbiAgICAobW91c2VsZWF2ZSk9XCIhaXNTbWFsbFNjcmVlbigpICYmICh0aGlzLmlzT3BlbiA9IGZhbHNlKVwiXG4+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soKVwiIGRhdGEtdGVzdGlkPVwiYnRuXCI+XG4gICAgICAgIHt7IHRpdGxlKCkgfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj5cbiAgICAgICAgICAgIHt7ICdrZXlib2FyZF9hcnJvd18nICsgKGlzT3BlbiA/ICd1cCcgOiAnZG93bicpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICBAaWYgKCFpc1NtYWxsU2NyZWVuKCkpIHtcbiAgICAgICAgQGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiIGRhdGEtdGVzdGlkPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGxpYi1leHBhbmQtY29sbGFwc2UgW2lzRXhwYW5kZWRdPVwiaXNPcGVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2xpYi1leHBhbmQtY29sbGFwc2U+XG4gICAgfVxuPC9zcGFuPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGJsbC1oZWFkZXIvbmF2LWJhci1kcm9wZG93bi9uYXYtYmFyLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oYmxsLWhlYWRlci9uYXYtYmFyLWRyb3Bkb3duL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7OztBQVMxRixNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRCxzQ0FBc0M7UUFDdEMsa0JBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFbEMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGdCQUFXLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixDQUFDLENBQUM7S0FDTDs4R0FiWSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix3WUNYcEMsZ2dDQTZCQSxvc0NEdEJjLHVCQUF1Qix1RkFBRSxZQUFZOzsyRkFJdEMsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNJLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLENBQUM7OEJBT3RDLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV4cGFuZENvbGxhcHNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZXhwYW5kLWNvbGxhcHNlL2V4cGFuZC1jb2xsYXBzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1uYXYtYmFyLWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtFeHBhbmRDb2xsYXBzZUNvbXBvbmVudCwgQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmF2LWJhci1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL25hdi1iYXItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZCYXJEcm9wZG93bkNvbXBvbmVudCB7XG4gICAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgaXNTbWFsbFNjcmVlbiA9IGlucHV0KHRydWUpO1xuICAgIEBPdXRwdXQoKSBvcGVuRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8vIFB1YmxpYyB0byBiZSBjYWxsZWQgYnkgcGFyZW50IGNvbXAuXG4gICAgY2xvc2VEcm9wZG93biA9ICgpID0+ICh0aGlzLmlzT3BlbiA9IGZhbHNlKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHRoaXMub3BlbkV2ZW50LmVtaXQodGhpcy50aXRsZSgpKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XG4gICAgfTtcbn1cbiIsIjxzcGFuXG4gICAgY2xhc3M9XCJoYmxsLWhlYWRlci1kcm9wZG93bi13cmFwcGVyXCJcbiAgICBkYXRhLXRlc3RpZD1cIndyYXBwZXJcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2hibGwtaGVhZGVyLWRlc2t0b3AnOiAhaXNTbWFsbFNjcmVlbigpIH1cIlxuICAgIChtb3VzZWVudGVyKT1cIiFpc1NtYWxsU2NyZWVuKCkgJiYgKHRoaXMuaXNPcGVuID0gdHJ1ZSlcIlxuICAgIChtb3VzZWxlYXZlKT1cIiFpc1NtYWxsU2NyZWVuKCkgJiYgKHRoaXMuaXNPcGVuID0gZmFsc2UpXCJcbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVDbGljaygpXCIgZGF0YS10ZXN0aWQ9XCJidG5cIj5cbiAgICAgICAge3sgdGl0bGUoKSB9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaGJsbC1oZWFkZXItaWNvblwiPlxuICAgICAgICAgICAge3sgJ2tleWJvYXJkX2Fycm93XycgKyAoaXNPcGVuID8gJ3VwJyA6ICdkb3duJykgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIEBpZiAoIWlzU21hbGxTY3JlZW4oKSkge1xuICAgICAgICBAaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhibGwtaGVhZGVyLWRyb3Bkb3duXCIgZGF0YS10ZXN0aWQ9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGliLWV4cGFuZC1jb2xsYXBzZSBbaXNFeHBhbmRlZF09XCJpc09wZW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGliLWV4cGFuZC1jb2xsYXBzZT5cbiAgICB9XG48L3NwYW4+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,38 @@
1
+ import { Component, computed, EventEmitter, input, Output } from '@angular/core';
2
+ import { HbllHeaderComponent } from '../hbll-header/hbll-header.component';
3
+ import { ImpersonationBannerComponent } from '../impersonation-banner/impersonation-banner.component';
4
+ import { defaultOidcBaseUri, defaultOidcDefaultIdp, ImpersonateModalComponent, } from '../impersonate-modal/impersonate-modal.component';
5
+ import { jwtDecode } from 'jwt-decode';
6
+ import * as i0 from "@angular/core";
7
+ export class HeaderWithImpersonationComponent {
8
+ constructor() {
9
+ this.accessTokenPayload = input.required();
10
+ this.oidcBaseUri = input(defaultOidcBaseUri);
11
+ this.oidcDefaultIdp = input(defaultOidcDefaultIdp);
12
+ this.login = new EventEmitter();
13
+ this.logout = new EventEmitter();
14
+ this.endImpersonation = new EventEmitter();
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ this.parsedToken = computed(() => this.accessTokenPayload().token ? jwtDecode(this.accessTokenPayload().token) : null);
17
+ this.name = computed(() => (this.parsedToken() ? this.parsedToken()['given_name'] : ''));
18
+ this.showImpersonateButton = computed(() => this.parsedToken()
19
+ ? !!(!this.isImpersonating() &&
20
+ this.parsedToken()['resource_access']['realm-management']?.['roles']?.includes('impersonation'))
21
+ : false);
22
+ this.showImpersonationModal = false;
23
+ this.isImpersonating = computed(() => !!this.parsedToken()?.['impersonator']);
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderWithImpersonationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: HeaderWithImpersonationComponent, isStandalone: true, selector: "lib-header-with-impersonation", inputs: { accessTokenPayload: { classPropertyName: "accessTokenPayload", publicName: "accessTokenPayload", isSignal: true, isRequired: true, transformFunction: null }, oidcBaseUri: { classPropertyName: "oidcBaseUri", publicName: "oidcBaseUri", isSignal: true, isRequired: false, transformFunction: null }, oidcDefaultIdp: { classPropertyName: "oidcDefaultIdp", publicName: "oidcDefaultIdp", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { login: "login", logout: "logout", endImpersonation: "endImpersonation" }, ngImport: i0, template: "<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n", styles: [""], dependencies: [{ kind: "component", type: HbllHeaderComponent, selector: "lib-hbll-header", inputs: ["name", "mainsitebaseurl", "showImpersonateButton"], outputs: ["openImpersonationModal", "login", "logout"] }, { kind: "component", type: ImpersonationBannerComponent, selector: "lib-impersonation-banner", inputs: ["accessTokenPayload", "personBaseUri", "libraryApiBaseUri"], outputs: ["endImpersonation"] }, { kind: "component", type: ImpersonateModalComponent, selector: "lib-impersonate-modal", inputs: ["showModal", "oidcBaseUri", "oidcDefaultIdp", "accessTokenPayload"], outputs: ["dismiss", "init"] }] }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderWithImpersonationComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'lib-header-with-impersonation', standalone: true, imports: [HbllHeaderComponent, ImpersonationBannerComponent, ImpersonateModalComponent], template: "<lib-impersonation-banner\n [accessTokenPayload]=\"accessTokenPayload()\"\n (endImpersonation)=\"endImpersonation.emit()\"\n></lib-impersonation-banner>\n<lib-hbll-header\n [name]=\"name()\"\n [showImpersonateButton]=\"showImpersonateButton()\"\n (openImpersonationModal)=\"showImpersonationModal = true\"\n (login)=\"login.emit()\"\n (logout)=\"logout.emit()\"\n/>\n<lib-impersonate-modal\n [showModal]=\"showImpersonationModal\"\n [oidcBaseUri]=\"oidcBaseUri()\"\n [oidcDefaultIdp]=\"oidcDefaultIdp()\"\n [accessTokenPayload]=\"accessTokenPayload()\"\n (dismiss)=\"showImpersonationModal = false\"\n (init)=\"showImpersonationModal = true\"\n></lib-impersonate-modal>\n" }]
31
+ }], propDecorators: { login: [{
32
+ type: Output
33
+ }], logout: [{
34
+ type: Output
35
+ }], endImpersonation: [{
36
+ type: Output
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uL2hlYWRlci13aXRoLWltcGVyc29uYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdEcsT0FBTyxFQUNILGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIseUJBQXlCLEdBQzVCLE1BQU0sa0RBQWtELENBQUM7QUFFMUQsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLFlBQVksQ0FBQzs7QUFTbkQsTUFBTSxPQUFPLGdDQUFnQztJQVA3QztRQVFJLHVCQUFrQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWdCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEQsOERBQThEO1FBQ3BELGdCQUFXLEdBQXNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDckYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsQ0FBQztRQUNRLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRiwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQzVDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ0UsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxFQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUMzRSxlQUFlLENBQ2xCLENBQ0o7WUFDSCxDQUFDLENBQUMsS0FBSyxDQUNkLENBQUM7UUFDUSwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDakMsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7S0FDcEY7OEdBekJZLGdDQUFnQztrR0FBaEMsZ0NBQWdDLHFuQkNsQjdDLHdzQkFtQkEsMERETGMsbUJBQW1CLGtMQUFFLDRCQUE0QiwwS0FBRSx5QkFBeUI7OzJGQUk3RSxnQ0FBZ0M7a0JBUDVDLFNBQVM7K0JBQ0ksK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLHlCQUF5QixDQUFDOzhCQVE3RSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5wdXQsIE91dHB1dCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIYmxsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vaGJsbC1oZWFkZXIvaGJsbC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEltcGVyc29uYXRpb25CYW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9pbXBlcnNvbmF0aW9uLWJhbm5lci9pbXBlcnNvbmF0aW9uLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBkZWZhdWx0T2lkY0Jhc2VVcmksXG4gICAgZGVmYXVsdE9pZGNEZWZhdWx0SWRwLFxuICAgIEltcGVyc29uYXRlTW9kYWxDb21wb25lbnQsXG59IGZyb20gJy4uL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5pbXBvcnQgeyBqd3REZWNvZGUsIEp3dFBheWxvYWQgfSBmcm9tICdqd3QtZGVjb2RlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItaGVhZGVyLXdpdGgtaW1wZXJzb25hdGlvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSGJsbEhlYWRlckNvbXBvbmVudCwgSW1wZXJzb25hdGlvbkJhbm5lckNvbXBvbmVudCwgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci13aXRoLWltcGVyc29uYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9oZWFkZXItd2l0aC1pbXBlcnNvbmF0aW9uLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyV2l0aEltcGVyc29uYXRpb25Db21wb25lbnQge1xuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBvaWRjQmFzZVVyaSA9IGlucHV0KGRlZmF1bHRPaWRjQmFzZVVyaSk7XG4gICAgb2lkY0RlZmF1bHRJZHAgPSBpbnB1dChkZWZhdWx0T2lkY0RlZmF1bHRJZHApO1xuICAgIEBPdXRwdXQoKSBsb2dpbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgbG9nb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBlbmRJbXBlcnNvbmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcm90ZWN0ZWQgcGFyc2VkVG9rZW46IFNpZ25hbDwoSnd0UGF5bG9hZCAmIFJlY29yZDxzdHJpbmcsIGFueT4pIHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VuID8gand0RGVjb2RlKHRoaXMuYWNjZXNzVG9rZW5QYXlsb2FkKCkudG9rZW4pIDogbnVsbCxcbiAgICApO1xuICAgIHByb3RlY3RlZCBuYW1lID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMucGFyc2VkVG9rZW4oKSA/IHRoaXMucGFyc2VkVG9rZW4oKSFbJ2dpdmVuX25hbWUnXSA6ICcnKSk7XG4gICAgcHJvdGVjdGVkIHNob3dJbXBlcnNvbmF0ZUJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMucGFyc2VkVG9rZW4oKVxuICAgICAgICAgICAgPyAhIShcbiAgICAgICAgICAgICAgICAgICF0aGlzLmlzSW1wZXJzb25hdGluZygpICYmXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZFRva2VuKCkhWydyZXNvdXJjZV9hY2Nlc3MnXVsncmVhbG0tbWFuYWdlbWVudCddPy5bJ3JvbGVzJ10/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICdpbXBlcnNvbmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmYWxzZSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0ltcGVyc29uYXRpbmcgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMucGFyc2VkVG9rZW4oKT8uWydpbXBlcnNvbmF0b3InXSk7XG59XG4iLCI8bGliLWltcGVyc29uYXRpb24tYmFubmVyXG4gICAgW2FjY2Vzc1Rva2VuUGF5bG9hZF09XCJhY2Nlc3NUb2tlblBheWxvYWQoKVwiXG4gICAgKGVuZEltcGVyc29uYXRpb24pPVwiZW5kSW1wZXJzb25hdGlvbi5lbWl0KClcIlxuPjwvbGliLWltcGVyc29uYXRpb24tYmFubmVyPlxuPGxpYi1oYmxsLWhlYWRlclxuICAgIFtuYW1lXT1cIm5hbWUoKVwiXG4gICAgW3Nob3dJbXBlcnNvbmF0ZUJ1dHRvbl09XCJzaG93SW1wZXJzb25hdGVCdXR0b24oKVwiXG4gICAgKG9wZW5JbXBlcnNvbmF0aW9uTW9kYWwpPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbCA9IHRydWVcIlxuICAgIChsb2dpbik9XCJsb2dpbi5lbWl0KClcIlxuICAgIChsb2dvdXQpPVwibG9nb3V0LmVtaXQoKVwiXG4vPlxuPGxpYi1pbXBlcnNvbmF0ZS1tb2RhbFxuICAgIFtzaG93TW9kYWxdPVwic2hvd0ltcGVyc29uYXRpb25Nb2RhbFwiXG4gICAgW29pZGNCYXNlVXJpXT1cIm9pZGNCYXNlVXJpKClcIlxuICAgIFtvaWRjRGVmYXVsdElkcF09XCJvaWRjRGVmYXVsdElkcCgpXCJcbiAgICBbYWNjZXNzVG9rZW5QYXlsb2FkXT1cImFjY2Vzc1Rva2VuUGF5bG9hZCgpXCJcbiAgICAoZGlzbWlzcyk9XCJzaG93SW1wZXJzb25hdGlvbk1vZGFsID0gZmFsc2VcIlxuICAgIChpbml0KT1cInNob3dJbXBlcnNvbmF0aW9uTW9kYWwgPSB0cnVlXCJcbj48L2xpYi1pbXBlcnNvbmF0ZS1tb2RhbD5cbiJdfQ==
@@ -9,6 +9,8 @@ import { CommonModule } from '@angular/common';
9
9
  import { toSignal } from '@angular/core/rxjs-interop';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@angular/forms";
12
+ export const defaultOidcBaseUri = 'https://keycloak.lib.byu.edu/';
13
+ export const defaultOidcDefaultIdp = 'byu-realm';
12
14
  export class ImpersonateUserPipe {
13
15
  transform(user) {
14
16
  return `${user.name} (${user.netId || 'Unknown'})${user.restricted ? ' — Restricted' : ''}`;
@@ -30,8 +32,8 @@ export class ImpersonateModalComponent {
30
32
  this.http = inject(HttpClient);
31
33
  this.fb = inject(FormBuilder);
32
34
  this.eref = inject(ElementRef);
33
- this.oidcBaseUri = input('https://keycloak.lib.byu.edu/');
34
- this.oidcDefaultIdp = input('byu-realm');
35
+ this.oidcBaseUri = input(defaultOidcBaseUri);
36
+ this.oidcDefaultIdp = input(defaultOidcDefaultIdp);
35
37
  // Require an object here so that access tokens are not visible/extractable from the DOM in consuming applications. Instead they are only stored in memory.
36
38
  this.accessTokenPayload = input.required();
37
39
  this.dismiss = new EventEmitter();
@@ -185,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
185
187
  type: HostListener,
186
188
  args: ['document:keydown', ['$event']]
187
189
  }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBT3RELE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLElBQTZCO1FBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFL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QUM7WUFDUCx3RUFBd0U7WUFDeEUsNkJBQTZCO1lBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUYsQ0FBQztJQUNMLENBQUM7SUFtRCtDLFlBQVksQ0FBQyxLQUFpQjtRQUMxRSxJQUFLLEtBQUssQ0FBQyxNQUFzQixFQUFFLEVBQUUsS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUEwQkQsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs4R0EvRlEseUJBQXlCO2tHQUF6Qix5QkFBeUIsZzBCQ3REdEMsMmdLQTBHQSxxOEhEMURjLFlBQVksOEJBQUUsbUJBQW1CLHc4QkFyQmxDLG1CQUFtQiwwQ0F5QmhCLENBQUMsZ0JBQWdCLENBQUM7OzJGQUVyQix5QkFBeUI7a0JBUnJDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLFlBQ3ZELHVCQUF1QixjQUdyQixDQUFDLGdCQUFnQixDQUFDOzhCQU9qQixTQUFTO3NCQUFyQixLQUFLO2dCQVlJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQTZDeUMsWUFBWTtzQkFBM0QsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNQSxhQUFhO3NCQUExRCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBsaWJIYmxsRmFkZUluT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB1cmxjYXQgZnJvbSAndXJsY2F0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnaW1wZXJzb25hdGVVc2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBlcnNvbmF0ZVVzZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHVzZXI6IEltcGVyc29uYXRlU2VhcmNoUmVzdWx0KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3VzZXIubmFtZX0gKCR7dXNlci5uZXRJZCB8fCAnVW5rbm93bid9KSR7dXNlci5yZXN0cmljdGVkID8gJyDigJQgUmVzdHJpY3RlZCcgOiAnJ31gO1xuICAgIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW1wZXJzb25hdGVTZWFyY2hSZXN1bHQge1xuICAgIG5ldElkOiBzdHJpbmc7XG4gICAgaW5zdGl0dXRpb246IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwcmVmZXJyZWROYW1lOiBzdHJpbmc7XG4gICAgZ2l2ZW5OYW1lOiBzdHJpbmc7XG4gICAgc3VybmFtZTogc3RyaW5nO1xuICAgIHJlc3RyaWN0ZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IFNFQVJDSF9VU0VSU19QQVRIID0gJy9pbXBlcnNvbmF0ZS9hcGkvc2VhcmNoLyc7XG5jb25zdCBTVEFSVF9JTVBFUlNPTkFURV9QQVRIID0gJy9pbXBlcnNvbmF0ZS86dXNlcm5hbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEltcGVyc29uYXRlVXNlclBpcGVdLFxuICAgIHNlbGVjdG9yOiAnbGliLWltcGVyc29uYXRlLW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW2xpYkhibGxGYWRlSW5PdXRdLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBlcnNvbmF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgQElucHV0KCkgc2V0IHNob3dNb2RhbChvcGVuOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gb3BlbjtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIC8vIFNldCBmb2N1cyBvbiBzZWFyY2ggaW5wdXQgc2hvcnRseSBhZnRlciBvcGVuaW5nIG1vZGFsIHNvIHVzZXIgbm90aWNlc1xuICAgICAgICAgICAgLy8gdGhlIGlucHV0IHJlY2VpdmluZyBmb2N1cy5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lcmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3NlYXJjaElucHV0Jyk/LmZvY3VzKCksIDI1MCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb2lkY0Jhc2VVcmkgPSBpbnB1dCgnaHR0cHM6Ly9rZXljbG9hay5saWIuYnl1LmVkdS8nKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0KCdieXUtcmVhbG0nKTtcbiAgICAvLyBSZXF1aXJlIGFuIG9iamVjdCBoZXJlIHNvIHRoYXQgYWNjZXNzIHRva2VucyBhcmUgbm90IHZpc2libGUvZXh0cmFjdGFibGUgZnJvbSB0aGUgRE9NIGluIGNvbnN1bWluZyBhcHBsaWNhdGlvbnMuIEluc3RlYWQgdGhleSBhcmUgb25seSBzdG9yZWQgaW4gbWVtb3J5LlxuICAgIGFjY2Vzc1Rva2VuUGF5bG9hZCA9IGlucHV0LnJlcXVpcmVkPFRva2VuUGF5bG9hZD4oKTtcbiAgICBAT3V0cHV0KCkgZGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgaW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByb3RlY3RlZCBpc09wZW4gPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoe1xuICAgICAgICBzZWFyY2g6IHRoaXMuZmIuY29udHJvbCgnJywgeyB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSB9KSxcbiAgICB9KTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRVc2VybmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBsb2FkaW5nID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByb3RlY3RlZCByZXN1bHRzID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHNlYXJjaCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChoYW5kbGVTZWFyY2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2ggfHwgIWhhbmRsZVNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnNlYXJjaFVzZXJzKHNlYXJjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHByaXZhdGUgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pIG91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkID09PSAnbW9kYWxCYWNrZHJvcCcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKSBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFc2MnOlxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgY2FzZSAnaSc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBSZWRpcmVjdCB0byBLZXljbG9hayBpbXBlcnNvbmF0ZSBwYWdlLCB3aGljaCB3aWxsIHJlZGlyZWN0IGJhY2tcbiAgICAgKiBhZnRlciBpbXBlcnNvbmF0aW9uIGJlZ2lucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3RhcnRJbXBlcnNvbmF0aW9uID0gKHVzZXJuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IF91c2VybmFtZSA9IHVzZXJuYW1lID8/IHRoaXMuc2VsZWN0ZWRVc2VybmFtZTtcbiAgICAgICAgaWYgKCFfdXNlcm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTVEFSVF9JTVBFUlNPTkFURV9QQVRILCB7XG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIHJldHVyblVyaTogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgICBkZWZhdWx0SWRwOiB0aGlzLm9pZGNEZWZhdWx0SWRwKCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlcGxhY2VVcmwodXJsKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlbGVjdFVzZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VybmFtZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbGVhclNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRm9ybVN1Ym1pdCA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVNlYXJjaEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghWydBcnJvd0Rvd24nLCAnRG93biddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZXN1bHRzKCk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjcmVzdWx0XzBgKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5jbGljaygpO1xuICAgICAgICAgICAgZmlyc3RSZXN1bHQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVJlc3VsdEtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnQXJyb3dVcCcsICdVcCddLmluY2x1ZGVzKGV2ZW50LmtleSkgJiZcbiAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmlkID09PSAncmVzdWx0XzAnXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbXBlcnNvbmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFNlYXJjaCBLZXljbG9hayB1c2VycyB1c2luZyBhIGdlbmVyaWMgc2VhcmNoIHF1ZXJ5LiAqL1xuICAgIHByaXZhdGUgc2VhcmNoVXNlcnMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB1cmkgPSB1cmxjYXQodGhpcy5vaWRjQmFzZVVyaSgpLCBTRUFSQ0hfVVNFUlNfUEFUSCwge1xuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEltcGVyc29uYXRlU2VhcmNoUmVzdWx0W10+KHVyaSwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VuUGF5bG9hZCgpLnRva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZXBsYWNlVXJsID0gKHVybDogc3RyaW5nKSA9PiB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xufVxuIiwiQGlmIChpc09wZW4pIHtcbiAgICA8ZGl2IEBsaWJIYmxsRmFkZUluT3V0IGNsYXNzPVwibW9kYWwtd3JhcHBlclwiIGlkPVwibW9kYWxCYWNrZHJvcFwiIGRhdGEtdGVzdGlkPVwiYmFja2Ryb3BcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiIGRhdGEtdGVzdGlkPVwibW9kYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDI+SW1wZXJzb25hdGU8L2gyPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgZGF0YS10ZXN0aWQ9XCJjbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jbG9zZVwiPiBjbG9zZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwiaGFuZGxlRm9ybVN1Ym1pdCgkZXZlbnQpXCIgZGF0YS10ZXN0aWQ9XCJzZWFyY2hGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZGFyeVwiIFtjbGFzcy5kaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrZXlib2FyZC1rZXlcIj5FbnRlcjwvc3Bhbj4gdG8gc2VhcmNoXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW52YWxpZF09XCJmb3JtLmludmFsaWQgJiYgZm9ybS5kaXJ0eVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1zZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggcGF0cm9ucy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWFyY2hCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhc2VhcmNoQm94LnZhbHVlICYmIGZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNoZWNrbWFya1wiPiBjaGVjayA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWFyY2hCb3gudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGliSGJsbEZhZGVJbk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDxmaWVsZHNldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXJlc3VsdHMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXN1bHRzU2Nyb2xsQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVNlbGVjdFVzZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghbG9hZGluZyAmJiByZXN1bHRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodXNlciBvZiByZXN1bHRzKCk7IHRyYWNrIHVzZXIubmV0SWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc3VsdC1maWVsZCByZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb2N1c109XCJ1c2VyLnVzZXJuYW1lID09PSBzZWxlY3RlZFVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3Jlc3VsdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLndhcm5pbmddPVwidXNlci5yZXN0cmljdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJzZWxlY3RlZFVzZXJuYW1lID0gdXNlci51c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHVzZXIucmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gd2FybmluZyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb25cIj4gcGVyc29uIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJ1c2VyXCIgZGF0YS10ZXN0aWQ9XCJyZXN1bHRUZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgfCBpbXBlcnNvbmF0ZVVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1c2VyLnVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncmVzdWx0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc3VsdFNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVSZXN1bHRLZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbXBlcnNvbmF0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImltcGVyc29uYXRlQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0SW1wZXJzb25hdGlvbih1c2VyLnVzZXJuYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBlcnNvbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZXN1bHRzLiBUcnkgc2VhcmNoaW5nIGJ5IE5ldCBJRCBvciBCWVUgSUQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYi1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5Tb21ldGhpbmcgd2VudCB3cm9uZy4gV2UnbGwga2VlcCB0cnlpbmcuPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2ltcGVyc29uYXRlLW1vZGFsL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9pbXBlcnNvbmF0ZS1tb2RhbC9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sSUFBSSxFQUVKLE1BQU0sRUFDTixLQUFLLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBR3RELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFDO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFdB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b25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBsaWJIYmxsRmFkZUluT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zJztcbmltcG9ydCB1cmxjYXQgZnJvbSAndXJsY2F0JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUb2tlblBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdG9rZW4tcGF5bG9hZCc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0T2lkY0Jhc2VVcmkgPSAnaHR0cHM6Ly9rZXljbG9hay5saWIuYnl1LmVkdS8nO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRPaWRjRGVmYXVsdElkcCA9ICdieXUtcmVhbG0nO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ltcGVyc29uYXRlVXNlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVVc2VyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh1c2VyOiBJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt1c2VyLm5hbWV9ICgke3VzZXIubmV0SWQgfHwgJ1Vua25vd24nfSkke3VzZXIucmVzdHJpY3RlZCA/ICcg4oCUIFJlc3RyaWN0ZWQnIDogJyd9YDtcbiAgICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEltcGVyc29uYXRlU2VhcmNoUmVzdWx0IHtcbiAgICBuZXRJZDogc3RyaW5nO1xuICAgIGluc3RpdHV0aW9uOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nO1xuICAgIGdpdmVuTmFtZTogc3RyaW5nO1xuICAgIHN1cm5hbWU6IHN0cmluZztcbiAgICByZXN0cmljdGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTRUFSQ0hfVVNFUlNfUEFUSCA9ICcvaW1wZXJzb25hdGUvYXBpL3NlYXJjaC8nO1xuY29uc3QgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCA9ICcvaW1wZXJzb25hdGUvOnVzZXJuYW1lJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBJbXBlcnNvbmF0ZVVzZXJQaXBlXSxcbiAgICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0ZS1tb2RhbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcGVyc29uYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9pbXBlcnNvbmF0ZS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtsaWJIYmxsRmFkZUluT3V0XSxcbn0pXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93TW9kYWwob3BlbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IG9wZW47XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gc2VhcmNoIGlucHV0IHNob3J0bHkgYWZ0ZXIgb3BlbmluZyBtb2RhbCBzbyB1c2VyIG5vdGljZXNcbiAgICAgICAgICAgIC8vIHRoZSBpbnB1dCByZWNlaXZpbmcgZm9jdXMuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZXJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2hJbnB1dCcpPy5mb2N1cygpLCAyNTApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9pZGNCYXNlVXJpID0gaW5wdXQoZGVmYXVsdE9pZGNCYXNlVXJpKTtcbiAgICBvaWRjRGVmYXVsdElkcCA9IGlucHV0KGRlZmF1bHRPaWRjRGVmYXVsdElkcCk7XG4gICAgLy8gUmVxdWlyZSBhbiBvYmplY3QgaGVyZSBzbyB0aGF0IGFjY2VzcyB0b2tlbnMgYXJlIG5vdCB2aXNpYmxlL2V4dHJhY3RhYmxlIGZyb20gdGhlIERPTSBpbiBjb25zdW1pbmcgYXBwbGljYXRpb25zLiBJbnN0ZWFkIHRoZXkgYXJlIG9ubHkgc3RvcmVkIGluIG1lbW9yeS5cbiAgICBhY2Nlc3NUb2tlblBheWxvYWQgPSBpbnB1dC5yZXF1aXJlZDxUb2tlblBheWxvYWQ+KCk7XG4gICAgQE91dHB1dCgpIGRpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBwcm90ZWN0ZWQgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGZvcm0gPSB0aGlzLmZiLm5vbk51bGxhYmxlLmdyb3VwKHtcbiAgICAgICAgc2VhcmNoOiB0aGlzLmZiLmNvbnRyb2woJycsIHsgdmFsaWRhdG9yczogVmFsaWRhdG9ycy5taW5MZW5ndGgoMykgfSksXG4gICAgfSk7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkVXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgbG9hZGluZyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBoYW5kbGVTZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcm90ZWN0ZWQgcmVzdWx0cyA9IHRvU2lnbmFsKFxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChzZWFyY2gpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaGFuZGxlU2VhcmNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcm5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoIHx8ICFoYW5kbGVTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5zZWFyY2hVc2VycyhzZWFyY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICBwcml2YXRlIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKSBvdXRzaWRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZCA9PT0gJ21vZGFsQmFja2Ryb3AnKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnRXNjJzpcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgIGNhc2UgJ2knOiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogUmVkaXJlY3QgdG8gS2V5Y2xvYWsgaW1wZXJzb25hdGUgcGFnZSwgd2hpY2ggd2lsbCByZWRpcmVjdCBiYWNrXG4gICAgICogYWZ0ZXIgaW1wZXJzb25hdGlvbiBiZWdpbnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXJ0SW1wZXJzb25hdGlvbiA9ICh1c2VybmFtZT86IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBfdXNlcm5hbWUgPSB1c2VybmFtZSA/PyB0aGlzLnNlbGVjdGVkVXNlcm5hbWU7XG4gICAgICAgIGlmICghX3VzZXJuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsID0gdXJsY2F0KHRoaXMub2lkY0Jhc2VVcmkoKSwgU1RBUlRfSU1QRVJTT05BVEVfUEFUSCwge1xuICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICByZXR1cm5Vcmk6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICAgICAgZGVmYXVsdElkcDogdGhpcy5vaWRjRGVmYXVsdElkcCgpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXBsYWNlVXJsKHVybCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWxlY3RVc2VyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcm5hbWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xlYXJTZWFyY2ggPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUZvcm1TdWJtaXQgPSAoZXZlbnQ6IFN1Ym1pdEV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVTZWFyY2hLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVsnQXJyb3dEb3duJywgJ0Rvd24nXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0cygpPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gdGhpcy5lcmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgI3Jlc3VsdF8wYCk7XG4gICAgICAgICAgICBmaXJzdFJlc3VsdD8uY2xpY2soKTtcbiAgICAgICAgICAgIGZpcnN0UmVzdWx0Py5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBoYW5kbGVSZXN1bHRLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBbJ0Fycm93VXAnLCAnVXAnXS5pbmNsdWRlcyhldmVudC5rZXkpICYmXG4gICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy5pZCA9PT0gJ3Jlc3VsdF8wJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmVyZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoSW5wdXQnKT8uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW1wZXJzb25hdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBTZWFyY2ggS2V5Y2xvYWsgdXNlcnMgdXNpbmcgYSBnZW5lcmljIHNlYXJjaCBxdWVyeS4gKi9cbiAgICBwcml2YXRlIHNlYXJjaFVzZXJzID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdXJsY2F0KHRoaXMub2lkY0Jhc2VVcmkoKSwgU0VBUkNIX1VTRVJTX1BBVEgsIHtcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJbXBlcnNvbmF0ZVNlYXJjaFJlc3VsdFtdPih1cmksIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlblBheWxvYWQoKS50b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVwbGFjZVVybCA9ICh1cmw6IHN0cmluZykgPT4gd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodXJsKTtcbn1cbiIsIkBpZiAoaXNPcGVuKSB7XG4gICAgPGRpdiBAbGliSGJsbEZhZGVJbk91dCBjbGFzcz1cIm1vZGFsLXdyYXBwZXJcIiBpZD1cIm1vZGFsQmFja2Ryb3BcIiBkYXRhLXRlc3RpZD1cImJhY2tkcm9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250YWluZXJcIiBkYXRhLXRlc3RpZD1cIm1vZGFsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGgyPkltcGVyc29uYXRlPC9oMj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGRhdGEtdGVzdGlkPVwiY2xvc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tY2xvc2VcIj4gY2xvc2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cImhhbmRsZUZvcm1TdWJtaXQoJGV2ZW50KVwiIGRhdGEtdGVzdGlkPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmRhcnlcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwia2V5Ym9hcmQta2V5XCI+RW50ZXI8L3NwYW4+IHRvIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgZm9yPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmludmFsaWRdPVwiZm9ybS5pbnZhbGlkICYmIGZvcm0uZGlydHlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHBhdHJvbnMuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlU2VhcmNoS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAjc2VhcmNoQm94XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXNlYXJjaEJveC52YWx1ZSAmJiBmb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jaGVja21hcmtcIj4gY2hlY2sgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2VhcmNoQm94LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxpYkhibGxGYWRlSW5PdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1yZXN1bHRzLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIGlkPVwicmVzdWx0c1Njcm9sbENvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVTZWxlY3RVc2VyKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAoIWxvYWRpbmcgJiYgcmVzdWx0cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHVzZXIgb2YgcmVzdWx0cygpOyB0cmFjayB1c2VyLm5ldElkOyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXN1bHQtZmllbGQgcmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZm9jdXNdPVwidXNlci51c2VybmFtZSA9PT0gc2VsZWN0ZWRVc2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZXN1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidyZXN1bHRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53YXJuaW5nXT1cInVzZXIucmVzdHJpY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwic2VsZWN0ZWRVc2VybmFtZSA9IHVzZXIudXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh1c2VyLnJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHdhcm5pbmcgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uXCI+IHBlcnNvbiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7ICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwidXNlclwiIGRhdGEtdGVzdGlkPVwicmVzdWx0VGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHwgaW1wZXJzb25hdGVVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidXNlci51c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3Jlc3VsdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXN1bHRTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUmVzdWx0S2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1wZXJzb25hdGUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbXBlcnNvbmF0ZUJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGFydEltcGVyc29uYXRpb24odXNlci51c2VybmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wZXJzb25hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVzdWx0cy4gVHJ5IHNlYXJjaGluZyBieSBOZXQgSUQgb3IgQllVIElELlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWItc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWZpZWxkXCI+U29tZXRoaW5nIHdlbnQgd3JvbmcuIFdlJ2xsIGtlZXAgdHJ5aW5nLjwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19