ngx-histaff-alpha 4.4.3 → 4.4.4
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.
|
@@ -25,7 +25,7 @@ import * as i12 from "@angular/common";
|
|
|
25
25
|
import * as i13 from "@angular/forms";
|
|
26
26
|
export class NavigatorComponent {
|
|
27
27
|
geoCompute() {
|
|
28
|
-
this.fullHeight = window.innerHeight - this.layoutService.headerHeight$.value;
|
|
28
|
+
//this.fullHeight = window.innerHeight - this.layoutService.headerHeight$.value;
|
|
29
29
|
this.scrollHeight = window.innerHeight - this.layoutService.headerHeight$.value - this.layoutService.navigtorThinModeSpacing - (this.wideMode ? ((35 * (!!this.hideSearch ? 0 : 1) + 15) /* search*/ + (50 + this.layoutService.navigtorThinModeSpacing * 3) /* collapser */) : (50 + this.layoutService.navigtorThinModeSpacing * 3) /* collapser*/);
|
|
30
30
|
this.secondaryNavHeight = this.scrollHeight;
|
|
31
31
|
}
|
|
@@ -500,7 +500,7 @@ export class NavigatorComponent {
|
|
|
500
500
|
this.secondaryNavParent = null;
|
|
501
501
|
}
|
|
502
502
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: NavigatorComponent, deps: [{ token: i1.NavigatorService }, { token: i2.SysMenuService }, { token: i3.RecursiveService }, { token: i4.Router }, { token: i5.MenuService }, { token: i6.OrganizationService }, { token: i7.LayoutService }, { token: i8.MultiLanguageService }, { token: i9.AuthService }, { token: i10.AlertService }, { token: i11.AppConfigService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
503
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: NavigatorComponent, isStandalone: true, selector: "corelib-navigator", inputs: { filterByRootIdMode: "filterByRootIdMode", color: "color", backgroundColor: "backgroundColor", activeItemColor: "activeItemColor", activeItemBackgroundColor: "activeItemBackgroundColor", hoverBackgroundColor: "hoverBackgroundColor", hideSearch: "hideSearch", subMenuSvgIconRight: "subMenuSvgIconRight", secondaryNavHeaderColor: "secondaryNavHeaderColor", secondaryNavHeaderBackgroundColor: "secondaryNavHeaderBackgroundColor", secondaryNavColor: "secondaryNavColor", secondaryNavBackgroundColor: "secondaryNavBackgroundColor", secondaryNavHoverColor: "secondaryNavHoverColor", secondaryNavHoverBackgroundColor: "secondaryNavHoverBackgroundColor", logoTemplate: "logoTemplate", rightPartHeadeMenuItem: "rightPartHeadeMenuItem", rightIcon: "rightIcon" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "mainMenu", first: true, predicate: ["mainMenu"], descendants: true }], ngImport: i0, template: "<div #container class=\"navigator-container\" [ngStyle]=\"{\r\n width: leftbarCurrentWidth + 'px',\r\n height: fullHeight + 'px',\r\n paddingTop: layoutService.navigtorThinModeSpacing + 'px',\r\n backgroundColor: navigatorService.backgroundColor\r\n}\">\r\n\r\n @if (wideMode && !hideSearch) {\r\n <div class=\"input-search-container\" [class.opacity0]=\"!!leftbarReduced\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - layoutService.leftBarSecondIconLeft - layoutService.scrollBarWidth - 1 + 'px'\r\n }\">\r\n <input id=\"navigator-search\" [placeholder]=\"'UI_COMMON_PLACE_HOLDER_SEARCH_HERE' | translate: lang\" type=\"text\"\r\n [(ngModel)]=\"searchFor\" (ngModelChange)=\"onSearchChange($event)\">\r\n @if (!!searchFor.length) {\r\n <div class=\"search-clear-wrapper\" (click)=\"clearSearch()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div id=\"nav\" [class.sidebar]=\"!wideMode\">\r\n @if (!!loading) {\r\n <core-loading-surface></core-loading-surface>\r\n }\r\n\r\n <ul id=\"main-menu\" #mainMenu [style]=\"'height: ' + scrollHeight + 'px;'\" [class.thin-mode]=\"!wideMode\"\r\n [class.menu]=\"!wideMode\">\r\n @if (!!items?.length) {\r\n @for(item of items; track $index) {\r\n <app-item [item]=\"item\" [level]=\"1\"></app-item>\r\n }\r\n }\r\n\r\n @if (!!rightIcon) {\r\n <li class=\"parent right-part-item\" [class.menu-item]=\"wideMode\">\r\n <a (click)=\"rightIcon.function()\" class=\"no-vertical-padding\">\r\n <div class=\"right-icon-wrapper\">\r\n <i [class]=\"'right-icon ' + rightIcon.featherClass\"></i>\r\n <div class=\"right-icon-badge\">\r\n {{ rightIcon.badgeCount }}\r\n </div>\r\n </div>\r\n </a>\r\n </li>\r\n }\r\n\r\n </ul>\r\n\r\n <div class=\"collapse-toggler\" [class.d-none]=\"!layoutService.leftbarOpen$.value\"\r\n [appTooltip]=\"wideMode ? ('UI_LEFTBAR_TOGGLER_COLLAPSE' | translate : lang) : ('UI_LEFTBAR_TOGGLER_EXPAND' | translate: lang)\"\r\n [showAnyway]=\"true\" position=\"above\" (click)=\"toggleCollapse()\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px'\r\n }\">\r\n <div class=\"collapse-toggler-inner\" [class.thin-mode]=\"!wideMode\">\r\n <div class=\"core-line-wrapper\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px',\r\n\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <span>\r\n @if (wideMode) {\r\n <i class=\"feather-chevrons-left p-relative l13\"></i>\r\n } @else {\r\n <i class=\"feather-chevrons-right\"></i>\r\n }\r\n </span>\r\n @if (wideMode) {\r\n <span>\r\n <div class=\"p-relative l30\">\r\n {{ 'UI_LEFTBAR_TOGGLER_COLLAPSE' | translate: lang }}\r\n </div>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (!wideMode && !!secondaryNavParent && !!secondaryNavChildren.length) {\r\n <div #secondary id=\"secondary-nav\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n top: secondaryNavTop + 15 + 'px',\r\n left: layoutService.leftBarThinWidth + 15 + 'px'\r\n }\">\r\n <div id=\"secondary-nav-inner\">\r\n <div id=\"secondary-nav-header\" [class.cursor-pointer]=\"!!secondaryNavParent.tree$Parent\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n color: secondaryNavHeaderColor,\r\n backgroundColor: secondaryNavHeaderBackgroundColor\r\n }\" (click)=\"onSecondaryHeaderClick(secondaryNavParent.tree$Parent)\">\r\n @if (!!secondaryNavParent.tree$Parent) {\r\n <span class=\"arrow-wrapper\">\r\n <i class=\"feather-arrow-left\"></i>\r\n </span>\r\n }\r\n <span [appTooltip]=\"secondaryNavParent.code | translate: lang | uppercase\">\r\n {{ secondaryNavParent.code | translate: lang | uppercase }}\r\n </span>\r\n <span class=\"arrow-wrapper cursor-pointer d-none\" style=\"float: right;\"\r\n (click)=\"onCancelSecondaryMenu()\">\r\n <i class=\"feather-x\"></i>\r\n </span>\r\n </div>\r\n <div id=\"secondary-nav-list\">\r\n <ul [ngStyle]=\"{\r\n maxHeight: secondaryNavHeight - 50 + 'px',\r\n color: secondaryNavColor,\r\n backgroundColor: secondaryNavBackgroundColor,\r\n }\">\r\n @for(it of secondaryNavChildren; track $index) {\r\n <li class=\"parent\" (click)=\"onSecondaryItemClick(it)\" [class.has-children]=\"it.tree$HasChildren\">\r\n <a [appTooltip]=\"it.code | translate: lang | uppercase\">\r\n {{ it.tree$Title | translate: lang }}\r\n </a>\r\n @if (it.tree$HasChildren) {\r\n <div class=\"arrow-wrapper\" style=\"float: right;\">\r\n <i class=\"feather-arrow-right\"></i>\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showEditSvg) {\r\n <menu-item-svg-edit></menu-item-svg-edit>\r\n }\r\n\r\n</div>", styles: [".navigator-container{--font-size: 13px;--thin-mode-padding: 8px;--thin-mode-width: 66px;--bg-color: #F1F1F1;--color: black;--hover-bg-color: #E1E3E5;--hover-color: black;--secondary-nav-color: black;--secondary-nav-bg-color: white;--secondary-nav-hover-color: black;--secondary-nav-hover-bg-color: #E1E3E5;position:relative;display:block;font-size:var(--font-size)}.navigator-container .cursor-pointer{cursor:pointer!important}.navigator-container #secondary-nav{display:block;position:fixed;background-color:#fff;overflow:hidden;border:solid 1px lightgray;box-shadow:.4rem 0 2rem #0000002e}.navigator-container #secondary-nav #secondary-nav-inner{display:block;position:relative}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-header{display:block;height:50px;line-height:20px;background-color:var(--bg-color);color:var(--hover-color);position:sticky;top:0;left:0;padding:15px}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul{display:block;position:relative;margin:0;padding:15px;padding-left:15px!important;overflow-x:hidden;overflow-y:auto}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li{height:36px;color:var(--secondary-nav-color);width:100%;line-height:36px;display:block;position:relative;background-color:transparent;cursor:pointer!important;user-select:none;-webkit-user-select:none;transition:all .5s ease-out}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li a{left:15px;display:inline-block;overflow:hidden;text-overflow:ellipsis;width:calc(100% - var(--size-layout-block-cell-spacing));cursor:none}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover{background-color:var(--secondary-nav-hover-bg-color)}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover a{color:var(--secondary-nav-hover-color)!important}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li .arrow-wrapper{transform:translate(-15px)}.navigator-container .h0{height:0}.navigator-container .d-none{display:none}.navigator-container .input-search-container{margin-left:12px;margin-bottom:var(--size-layout-block-cell-spacing);background-color:#e7e7e7}.navigator-container .input-search-container .search-clear-wrapper{display:block;position:absolute;top:5px;right:20px;width:24px;height:24px;cursor:pointer}.navigator-container .input-search-container .search-clear-wrapper i{font-size:24px}.navigator-container #navigator-search{font-family:Open Sans,sans-serif!important;-webkit-appearance:none;appearance:none;font-size:13px;width:100%;max-width:400px;height:35px;border:none;background-color:#e7e7e7;color:#000;padding-left:20px;position:relative;display:inline-block}.navigator-container .search-wrapper{padding:5px;position:relative}.navigator-container #main-menu:not(.thin-mode){overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.navigator-container #main-menu:not(.thin-mode) ::-webkit-scrollbar{display:none}.navigator-container #main-menu.thin-mode{padding:0!important;margin-left:0!important;margin-right:0!important;overflow-x:visible;overflow-y:auto}.navigator-container #main-menu.thin-mode::-webkit-scrollbar{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-track{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-thumb{width:0px!important;background:transparent!important}.navigator-container #main-menu.thin-mode ul:not([data-level=\"1\"]){padding:var(--size-layout-block-cell-spacing)!important}.navigator-container #main-menu.thin-mode ul[data-level=\"1\"],.navigator-container #main-menu.thin-mode li{padding:0;margin:0}.navigator-container ul{padding:0;padding-left:0!important}.navigator-container .custom-item:hover{background-color:#eaf1fb}.navigator-container .collapse-toggler{display:block;position:fixed;bottom:var(--thin-mode-padding);left:var(--thin-mode-padding);z-index:1;cursor:pointer;user-select:none;-webkit-user-select:none;height:50px}.navigator-container .collapse-toggler .core-line-wrapper{display:block;position:absolute;left:0;top:calc(var(--thin-mode-padding) * -1);z-index:1}.navigator-container .collapse-toggler:hover{background-color:var(--hover-bg-color)}.navigator-container .collapse-toggler:not(:has(.thin-mode)):hover{background-color:transparent}.navigator-container .collapse-toggler .collapse-toggler-inner{display:flex;align-items:center;justify-content:flex-start;height:50px}.navigator-container .collapse-toggler .collapse-toggler-inner span{height:50px;display:flex;align-items:center;justify-content:flex-start;color:var(--color)}.navigator-container .collapse-toggler .collapse-toggler-inner span i{width:24px;height:24px;font-size:24px;color:var(--color)}.navigator-container .collapse-toggler .thin-mode{justify-content:center}.navigator-container .p-relative{position:relative}.navigator-container .l13{left:13px}.navigator-container .l30{left:30px}\n", ".navigator-container .menu{list-style:none;padding:0;margin:0}.navigator-container .menu-item{position:relative;cursor:pointer}.navigator-container .submenu{list-style:none;padding:0;margin:0;display:none;height:0px;position:fixed;top:var(--size-header-height);border-radius:5px;max-height:calc(100vh - var(--size-header-height) - var(--size-layout-block-cell-spacing));overflow-y:visible;transition:transform .5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i12.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ItemComponent, selector: "app-item", inputs: ["item", "level"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CoreLineComponent, selector: "core-line" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: MenuItemSvgEditComponent, selector: "menu-item-svg-edit" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
503
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: NavigatorComponent, isStandalone: true, selector: "corelib-navigator", inputs: { fullHeight: "fullHeight", filterByRootIdMode: "filterByRootIdMode", color: "color", backgroundColor: "backgroundColor", activeItemColor: "activeItemColor", activeItemBackgroundColor: "activeItemBackgroundColor", hoverBackgroundColor: "hoverBackgroundColor", hideSearch: "hideSearch", subMenuSvgIconRight: "subMenuSvgIconRight", secondaryNavHeaderColor: "secondaryNavHeaderColor", secondaryNavHeaderBackgroundColor: "secondaryNavHeaderBackgroundColor", secondaryNavColor: "secondaryNavColor", secondaryNavBackgroundColor: "secondaryNavBackgroundColor", secondaryNavHoverColor: "secondaryNavHoverColor", secondaryNavHoverBackgroundColor: "secondaryNavHoverBackgroundColor", logoTemplate: "logoTemplate", rightPartHeadeMenuItem: "rightPartHeadeMenuItem", rightIcon: "rightIcon" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "mainMenu", first: true, predicate: ["mainMenu"], descendants: true }], ngImport: i0, template: "<div #container class=\"navigator-container\" [ngStyle]=\"{\r\n width: leftbarCurrentWidth + 'px',\r\n height: fullHeight + 'px',\r\n paddingTop: layoutService.navigtorThinModeSpacing + 'px',\r\n backgroundColor: navigatorService.backgroundColor\r\n}\">\r\n\r\n @if (wideMode && !hideSearch) {\r\n <div class=\"input-search-container\" [class.opacity0]=\"!!leftbarReduced\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - layoutService.leftBarSecondIconLeft - layoutService.scrollBarWidth - 1 + 'px'\r\n }\">\r\n <input id=\"navigator-search\" [placeholder]=\"'UI_COMMON_PLACE_HOLDER_SEARCH_HERE' | translate: lang\" type=\"text\"\r\n [(ngModel)]=\"searchFor\" (ngModelChange)=\"onSearchChange($event)\">\r\n @if (!!searchFor.length) {\r\n <div class=\"search-clear-wrapper\" (click)=\"clearSearch()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div id=\"nav\" [class.sidebar]=\"!wideMode\">\r\n @if (!!loading) {\r\n <core-loading-surface></core-loading-surface>\r\n }\r\n\r\n <ul id=\"main-menu\" #mainMenu [style]=\"'height: ' + scrollHeight + 'px;'\" [class.thin-mode]=\"!wideMode\"\r\n [class.menu]=\"!wideMode\">\r\n @if (!!items?.length) {\r\n @for(item of items; track $index) {\r\n <app-item [item]=\"item\" [level]=\"1\"></app-item>\r\n }\r\n }\r\n\r\n @if (!!rightIcon) {\r\n <li class=\"parent right-part-item\" [class.menu-item]=\"wideMode\">\r\n <a (click)=\"rightIcon.function()\" class=\"no-vertical-padding\">\r\n <div class=\"right-icon-wrapper\">\r\n <i [class]=\"'right-icon ' + rightIcon.featherClass\"></i>\r\n <div class=\"right-icon-badge\">\r\n {{ rightIcon.badgeCount }}\r\n </div>\r\n </div>\r\n </a>\r\n </li>\r\n }\r\n\r\n </ul>\r\n\r\n <div class=\"collapse-toggler\" [class.d-none]=\"!(menuService.isOpen$ | async)\"\r\n [appTooltip]=\"wideMode ? ('UI_LEFTBAR_TOGGLER_COLLAPSE' | translate : lang) : ('UI_LEFTBAR_TOGGLER_EXPAND' | translate: lang)\"\r\n [showAnyway]=\"true\" position=\"above\" (click)=\"toggleCollapse()\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px'\r\n }\">\r\n <div class=\"collapse-toggler-inner\" [class.thin-mode]=\"!wideMode\">\r\n <div class=\"core-line-wrapper\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px',\r\n\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <span>\r\n @if (wideMode) {\r\n <i class=\"feather-chevrons-left p-relative l13\"></i>\r\n } @else {\r\n <i class=\"feather-chevrons-right\"></i>\r\n }\r\n </span>\r\n @if (wideMode) {\r\n <span>\r\n <div class=\"p-relative l30\">\r\n {{ 'UI_LEFTBAR_TOGGLER_COLLAPSE' | translate: lang }}\r\n </div>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (!wideMode && !!secondaryNavParent && !!secondaryNavChildren.length) {\r\n <div #secondary id=\"secondary-nav\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n top: secondaryNavTop + 15 + 'px',\r\n left: layoutService.leftBarThinWidth + 15 + 'px'\r\n }\">\r\n <div id=\"secondary-nav-inner\">\r\n <div id=\"secondary-nav-header\" [class.cursor-pointer]=\"!!secondaryNavParent.tree$Parent\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n color: secondaryNavHeaderColor,\r\n backgroundColor: secondaryNavHeaderBackgroundColor\r\n }\" (click)=\"onSecondaryHeaderClick(secondaryNavParent.tree$Parent)\">\r\n @if (!!secondaryNavParent.tree$Parent) {\r\n <span class=\"arrow-wrapper\">\r\n <i class=\"feather-arrow-left\"></i>\r\n </span>\r\n }\r\n <span [appTooltip]=\"secondaryNavParent.code | translate: lang | uppercase\">\r\n {{ secondaryNavParent.code | translate: lang | uppercase }}\r\n </span>\r\n <span class=\"arrow-wrapper cursor-pointer d-none\" style=\"float: right;\"\r\n (click)=\"onCancelSecondaryMenu()\">\r\n <i class=\"feather-x\"></i>\r\n </span>\r\n </div>\r\n <div id=\"secondary-nav-list\">\r\n <ul [ngStyle]=\"{\r\n maxHeight: secondaryNavHeight - 50 + 'px',\r\n color: secondaryNavColor,\r\n backgroundColor: secondaryNavBackgroundColor,\r\n }\">\r\n @for(it of secondaryNavChildren; track $index) {\r\n <li class=\"parent\" (click)=\"onSecondaryItemClick(it)\" [class.has-children]=\"it.tree$HasChildren\">\r\n <a [appTooltip]=\"it.code | translate: lang | uppercase\">\r\n {{ it.tree$Title | translate: lang }}\r\n </a>\r\n @if (it.tree$HasChildren) {\r\n <div class=\"arrow-wrapper\" style=\"float: right;\">\r\n <i class=\"feather-arrow-right\"></i>\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showEditSvg) {\r\n <menu-item-svg-edit></menu-item-svg-edit>\r\n }\r\n\r\n</div>", styles: [".navigator-container{--font-size: 13px;--thin-mode-padding: 8px;--thin-mode-width: 66px;--bg-color: #F1F1F1;--color: black;--hover-bg-color: #E1E3E5;--hover-color: black;--secondary-nav-color: black;--secondary-nav-bg-color: white;--secondary-nav-hover-color: black;--secondary-nav-hover-bg-color: #E1E3E5;position:relative;display:block;font-size:var(--font-size)}.navigator-container .cursor-pointer{cursor:pointer!important}.navigator-container #secondary-nav{display:block;position:fixed;background-color:#fff;overflow:hidden;border:solid 1px lightgray;box-shadow:.4rem 0 2rem #0000002e}.navigator-container #secondary-nav #secondary-nav-inner{display:block;position:relative}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-header{display:block;height:50px;line-height:20px;background-color:var(--bg-color);color:var(--hover-color);position:sticky;top:0;left:0;padding:15px}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul{display:block;position:relative;margin:0;padding:15px;padding-left:15px!important;overflow-x:hidden;overflow-y:auto}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li{height:36px;color:var(--secondary-nav-color);width:100%;line-height:36px;display:block;position:relative;background-color:transparent;cursor:pointer!important;user-select:none;-webkit-user-select:none;transition:all .5s ease-out}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li a{left:15px;display:inline-block;overflow:hidden;text-overflow:ellipsis;width:calc(100% - var(--size-layout-block-cell-spacing));cursor:none}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover{background-color:var(--secondary-nav-hover-bg-color)}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover a{color:var(--secondary-nav-hover-color)!important}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li .arrow-wrapper{transform:translate(-15px)}.navigator-container .h0{height:0}.navigator-container .d-none{display:none}.navigator-container .input-search-container{margin-left:12px;margin-bottom:var(--size-layout-block-cell-spacing);background-color:#e7e7e7}.navigator-container .input-search-container .search-clear-wrapper{display:block;position:absolute;top:5px;right:20px;width:24px;height:24px;cursor:pointer}.navigator-container .input-search-container .search-clear-wrapper i{font-size:24px}.navigator-container #navigator-search{font-family:Open Sans,sans-serif!important;-webkit-appearance:none;appearance:none;font-size:13px;width:100%;max-width:400px;height:35px;border:none;background-color:#e7e7e7;color:#000;padding-left:20px;position:relative;display:inline-block}.navigator-container .search-wrapper{padding:5px;position:relative}.navigator-container #main-menu:not(.thin-mode){overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.navigator-container #main-menu:not(.thin-mode) ::-webkit-scrollbar{display:none}.navigator-container #main-menu.thin-mode{padding:0!important;margin-left:0!important;margin-right:0!important;overflow-x:visible;overflow-y:auto}.navigator-container #main-menu.thin-mode::-webkit-scrollbar{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-track{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-thumb{width:0px!important;background:transparent!important}.navigator-container #main-menu.thin-mode ul:not([data-level=\"1\"]){padding:var(--size-layout-block-cell-spacing)!important}.navigator-container #main-menu.thin-mode ul[data-level=\"1\"],.navigator-container #main-menu.thin-mode li{padding:0;margin:0}.navigator-container ul{padding:0;padding-left:0!important}.navigator-container .custom-item:hover{background-color:#eaf1fb}.navigator-container .collapse-toggler{display:block;position:fixed;bottom:var(--thin-mode-padding);left:var(--thin-mode-padding);z-index:1;cursor:pointer;user-select:none;-webkit-user-select:none;height:50px}.navigator-container .collapse-toggler .core-line-wrapper{display:block;position:absolute;left:0;top:calc(var(--thin-mode-padding) * -1);z-index:1}.navigator-container .collapse-toggler:hover{background-color:var(--hover-bg-color)}.navigator-container .collapse-toggler:not(:has(.thin-mode)):hover{background-color:transparent}.navigator-container .collapse-toggler .collapse-toggler-inner{display:flex;align-items:center;justify-content:flex-start;height:50px}.navigator-container .collapse-toggler .collapse-toggler-inner span{height:50px;display:flex;align-items:center;justify-content:flex-start;color:var(--color)}.navigator-container .collapse-toggler .collapse-toggler-inner span i{width:24px;height:24px;font-size:24px;color:var(--color)}.navigator-container .collapse-toggler .thin-mode{justify-content:center}.navigator-container .p-relative{position:relative}.navigator-container .l13{left:13px}.navigator-container .l30{left:30px}\n", ".navigator-container .menu{list-style:none;padding:0;margin:0}.navigator-container .menu-item{position:relative;cursor:pointer}.navigator-container .submenu{list-style:none;padding:0;margin:0;display:none;height:0px;position:fixed;top:var(--size-header-height);border-radius:5px;max-height:calc(100vh - var(--size-header-height) - var(--size-layout-block-cell-spacing));overflow-y:visible;transition:transform .5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }, { kind: "pipe", type: i12.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ItemComponent, selector: "app-item", inputs: ["item", "level"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CoreLineComponent, selector: "core-line" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: MenuItemSvgEditComponent, selector: "menu-item-svg-edit" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
504
504
|
}
|
|
505
505
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: NavigatorComponent, decorators: [{
|
|
506
506
|
type: Component,
|
|
@@ -513,8 +513,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
513
513
|
CoreLineComponent,
|
|
514
514
|
TooltipDirective,
|
|
515
515
|
MenuItemSvgEditComponent
|
|
516
|
-
], encapsulation: ViewEncapsulation.None, template: "<div #container class=\"navigator-container\" [ngStyle]=\"{\r\n width: leftbarCurrentWidth + 'px',\r\n height: fullHeight + 'px',\r\n paddingTop: layoutService.navigtorThinModeSpacing + 'px',\r\n backgroundColor: navigatorService.backgroundColor\r\n}\">\r\n\r\n @if (wideMode && !hideSearch) {\r\n <div class=\"input-search-container\" [class.opacity0]=\"!!leftbarReduced\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - layoutService.leftBarSecondIconLeft - layoutService.scrollBarWidth - 1 + 'px'\r\n }\">\r\n <input id=\"navigator-search\" [placeholder]=\"'UI_COMMON_PLACE_HOLDER_SEARCH_HERE' | translate: lang\" type=\"text\"\r\n [(ngModel)]=\"searchFor\" (ngModelChange)=\"onSearchChange($event)\">\r\n @if (!!searchFor.length) {\r\n <div class=\"search-clear-wrapper\" (click)=\"clearSearch()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div id=\"nav\" [class.sidebar]=\"!wideMode\">\r\n @if (!!loading) {\r\n <core-loading-surface></core-loading-surface>\r\n }\r\n\r\n <ul id=\"main-menu\" #mainMenu [style]=\"'height: ' + scrollHeight + 'px;'\" [class.thin-mode]=\"!wideMode\"\r\n [class.menu]=\"!wideMode\">\r\n @if (!!items?.length) {\r\n @for(item of items; track $index) {\r\n <app-item [item]=\"item\" [level]=\"1\"></app-item>\r\n }\r\n }\r\n\r\n @if (!!rightIcon) {\r\n <li class=\"parent right-part-item\" [class.menu-item]=\"wideMode\">\r\n <a (click)=\"rightIcon.function()\" class=\"no-vertical-padding\">\r\n <div class=\"right-icon-wrapper\">\r\n <i [class]=\"'right-icon ' + rightIcon.featherClass\"></i>\r\n <div class=\"right-icon-badge\">\r\n {{ rightIcon.badgeCount }}\r\n </div>\r\n </div>\r\n </a>\r\n </li>\r\n }\r\n\r\n </ul>\r\n\r\n <div class=\"collapse-toggler\" [class.d-none]=\"!layoutService.leftbarOpen$.value\"\r\n [appTooltip]=\"wideMode ? ('UI_LEFTBAR_TOGGLER_COLLAPSE' | translate : lang) : ('UI_LEFTBAR_TOGGLER_EXPAND' | translate: lang)\"\r\n [showAnyway]=\"true\" position=\"above\" (click)=\"toggleCollapse()\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px'\r\n }\">\r\n <div class=\"collapse-toggler-inner\" [class.thin-mode]=\"!wideMode\">\r\n <div class=\"core-line-wrapper\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px',\r\n\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <span>\r\n @if (wideMode) {\r\n <i class=\"feather-chevrons-left p-relative l13\"></i>\r\n } @else {\r\n <i class=\"feather-chevrons-right\"></i>\r\n }\r\n </span>\r\n @if (wideMode) {\r\n <span>\r\n <div class=\"p-relative l30\">\r\n {{ 'UI_LEFTBAR_TOGGLER_COLLAPSE' | translate: lang }}\r\n </div>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (!wideMode && !!secondaryNavParent && !!secondaryNavChildren.length) {\r\n <div #secondary id=\"secondary-nav\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n top: secondaryNavTop + 15 + 'px',\r\n left: layoutService.leftBarThinWidth + 15 + 'px'\r\n }\">\r\n <div id=\"secondary-nav-inner\">\r\n <div id=\"secondary-nav-header\" [class.cursor-pointer]=\"!!secondaryNavParent.tree$Parent\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n color: secondaryNavHeaderColor,\r\n backgroundColor: secondaryNavHeaderBackgroundColor\r\n }\" (click)=\"onSecondaryHeaderClick(secondaryNavParent.tree$Parent)\">\r\n @if (!!secondaryNavParent.tree$Parent) {\r\n <span class=\"arrow-wrapper\">\r\n <i class=\"feather-arrow-left\"></i>\r\n </span>\r\n }\r\n <span [appTooltip]=\"secondaryNavParent.code | translate: lang | uppercase\">\r\n {{ secondaryNavParent.code | translate: lang | uppercase }}\r\n </span>\r\n <span class=\"arrow-wrapper cursor-pointer d-none\" style=\"float: right;\"\r\n (click)=\"onCancelSecondaryMenu()\">\r\n <i class=\"feather-x\"></i>\r\n </span>\r\n </div>\r\n <div id=\"secondary-nav-list\">\r\n <ul [ngStyle]=\"{\r\n maxHeight: secondaryNavHeight - 50 + 'px',\r\n color: secondaryNavColor,\r\n backgroundColor: secondaryNavBackgroundColor,\r\n }\">\r\n @for(it of secondaryNavChildren; track $index) {\r\n <li class=\"parent\" (click)=\"onSecondaryItemClick(it)\" [class.has-children]=\"it.tree$HasChildren\">\r\n <a [appTooltip]=\"it.code | translate: lang | uppercase\">\r\n {{ it.tree$Title | translate: lang }}\r\n </a>\r\n @if (it.tree$HasChildren) {\r\n <div class=\"arrow-wrapper\" style=\"float: right;\">\r\n <i class=\"feather-arrow-right\"></i>\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showEditSvg) {\r\n <menu-item-svg-edit></menu-item-svg-edit>\r\n }\r\n\r\n</div>", styles: [".navigator-container{--font-size: 13px;--thin-mode-padding: 8px;--thin-mode-width: 66px;--bg-color: #F1F1F1;--color: black;--hover-bg-color: #E1E3E5;--hover-color: black;--secondary-nav-color: black;--secondary-nav-bg-color: white;--secondary-nav-hover-color: black;--secondary-nav-hover-bg-color: #E1E3E5;position:relative;display:block;font-size:var(--font-size)}.navigator-container .cursor-pointer{cursor:pointer!important}.navigator-container #secondary-nav{display:block;position:fixed;background-color:#fff;overflow:hidden;border:solid 1px lightgray;box-shadow:.4rem 0 2rem #0000002e}.navigator-container #secondary-nav #secondary-nav-inner{display:block;position:relative}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-header{display:block;height:50px;line-height:20px;background-color:var(--bg-color);color:var(--hover-color);position:sticky;top:0;left:0;padding:15px}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul{display:block;position:relative;margin:0;padding:15px;padding-left:15px!important;overflow-x:hidden;overflow-y:auto}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li{height:36px;color:var(--secondary-nav-color);width:100%;line-height:36px;display:block;position:relative;background-color:transparent;cursor:pointer!important;user-select:none;-webkit-user-select:none;transition:all .5s ease-out}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li a{left:15px;display:inline-block;overflow:hidden;text-overflow:ellipsis;width:calc(100% - var(--size-layout-block-cell-spacing));cursor:none}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover{background-color:var(--secondary-nav-hover-bg-color)}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover a{color:var(--secondary-nav-hover-color)!important}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li .arrow-wrapper{transform:translate(-15px)}.navigator-container .h0{height:0}.navigator-container .d-none{display:none}.navigator-container .input-search-container{margin-left:12px;margin-bottom:var(--size-layout-block-cell-spacing);background-color:#e7e7e7}.navigator-container .input-search-container .search-clear-wrapper{display:block;position:absolute;top:5px;right:20px;width:24px;height:24px;cursor:pointer}.navigator-container .input-search-container .search-clear-wrapper i{font-size:24px}.navigator-container #navigator-search{font-family:Open Sans,sans-serif!important;-webkit-appearance:none;appearance:none;font-size:13px;width:100%;max-width:400px;height:35px;border:none;background-color:#e7e7e7;color:#000;padding-left:20px;position:relative;display:inline-block}.navigator-container .search-wrapper{padding:5px;position:relative}.navigator-container #main-menu:not(.thin-mode){overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.navigator-container #main-menu:not(.thin-mode) ::-webkit-scrollbar{display:none}.navigator-container #main-menu.thin-mode{padding:0!important;margin-left:0!important;margin-right:0!important;overflow-x:visible;overflow-y:auto}.navigator-container #main-menu.thin-mode::-webkit-scrollbar{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-track{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-thumb{width:0px!important;background:transparent!important}.navigator-container #main-menu.thin-mode ul:not([data-level=\"1\"]){padding:var(--size-layout-block-cell-spacing)!important}.navigator-container #main-menu.thin-mode ul[data-level=\"1\"],.navigator-container #main-menu.thin-mode li{padding:0;margin:0}.navigator-container ul{padding:0;padding-left:0!important}.navigator-container .custom-item:hover{background-color:#eaf1fb}.navigator-container .collapse-toggler{display:block;position:fixed;bottom:var(--thin-mode-padding);left:var(--thin-mode-padding);z-index:1;cursor:pointer;user-select:none;-webkit-user-select:none;height:50px}.navigator-container .collapse-toggler .core-line-wrapper{display:block;position:absolute;left:0;top:calc(var(--thin-mode-padding) * -1);z-index:1}.navigator-container .collapse-toggler:hover{background-color:var(--hover-bg-color)}.navigator-container .collapse-toggler:not(:has(.thin-mode)):hover{background-color:transparent}.navigator-container .collapse-toggler .collapse-toggler-inner{display:flex;align-items:center;justify-content:flex-start;height:50px}.navigator-container .collapse-toggler .collapse-toggler-inner span{height:50px;display:flex;align-items:center;justify-content:flex-start;color:var(--color)}.navigator-container .collapse-toggler .collapse-toggler-inner span i{width:24px;height:24px;font-size:24px;color:var(--color)}.navigator-container .collapse-toggler .thin-mode{justify-content:center}.navigator-container .p-relative{position:relative}.navigator-container .l13{left:13px}.navigator-container .l30{left:30px}\n", ".navigator-container .menu{list-style:none;padding:0;margin:0}.navigator-container .menu-item{position:relative;cursor:pointer}.navigator-container .submenu{list-style:none;padding:0;margin:0;display:none;height:0px;position:fixed;top:var(--size-header-height);border-radius:5px;max-height:calc(100vh - var(--size-header-height) - var(--size-layout-block-cell-spacing));overflow-y:visible;transition:transform .5s ease-out!important}\n"] }]
|
|
517
|
-
}], ctorParameters: () => [{ type: i1.NavigatorService }, { type: i2.SysMenuService }, { type: i3.RecursiveService }, { type: i4.Router }, { type: i5.MenuService }, { type: i6.OrganizationService }, { type: i7.LayoutService }, { type: i8.MultiLanguageService }, { type: i9.AuthService }, { type: i10.AlertService }, { type: i11.AppConfigService }, { type: i0.Renderer2 }], propDecorators: {
|
|
516
|
+
], encapsulation: ViewEncapsulation.None, template: "<div #container class=\"navigator-container\" [ngStyle]=\"{\r\n width: leftbarCurrentWidth + 'px',\r\n height: fullHeight + 'px',\r\n paddingTop: layoutService.navigtorThinModeSpacing + 'px',\r\n backgroundColor: navigatorService.backgroundColor\r\n}\">\r\n\r\n @if (wideMode && !hideSearch) {\r\n <div class=\"input-search-container\" [class.opacity0]=\"!!leftbarReduced\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - layoutService.leftBarSecondIconLeft - layoutService.scrollBarWidth - 1 + 'px'\r\n }\">\r\n <input id=\"navigator-search\" [placeholder]=\"'UI_COMMON_PLACE_HOLDER_SEARCH_HERE' | translate: lang\" type=\"text\"\r\n [(ngModel)]=\"searchFor\" (ngModelChange)=\"onSearchChange($event)\">\r\n @if (!!searchFor.length) {\r\n <div class=\"search-clear-wrapper\" (click)=\"clearSearch()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div id=\"nav\" [class.sidebar]=\"!wideMode\">\r\n @if (!!loading) {\r\n <core-loading-surface></core-loading-surface>\r\n }\r\n\r\n <ul id=\"main-menu\" #mainMenu [style]=\"'height: ' + scrollHeight + 'px;'\" [class.thin-mode]=\"!wideMode\"\r\n [class.menu]=\"!wideMode\">\r\n @if (!!items?.length) {\r\n @for(item of items; track $index) {\r\n <app-item [item]=\"item\" [level]=\"1\"></app-item>\r\n }\r\n }\r\n\r\n @if (!!rightIcon) {\r\n <li class=\"parent right-part-item\" [class.menu-item]=\"wideMode\">\r\n <a (click)=\"rightIcon.function()\" class=\"no-vertical-padding\">\r\n <div class=\"right-icon-wrapper\">\r\n <i [class]=\"'right-icon ' + rightIcon.featherClass\"></i>\r\n <div class=\"right-icon-badge\">\r\n {{ rightIcon.badgeCount }}\r\n </div>\r\n </div>\r\n </a>\r\n </li>\r\n }\r\n\r\n </ul>\r\n\r\n <div class=\"collapse-toggler\" [class.d-none]=\"!(menuService.isOpen$ | async)\"\r\n [appTooltip]=\"wideMode ? ('UI_LEFTBAR_TOGGLER_COLLAPSE' | translate : lang) : ('UI_LEFTBAR_TOGGLER_EXPAND' | translate: lang)\"\r\n [showAnyway]=\"true\" position=\"above\" (click)=\"toggleCollapse()\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px'\r\n }\">\r\n <div class=\"collapse-toggler-inner\" [class.thin-mode]=\"!wideMode\">\r\n <div class=\"core-line-wrapper\" [ngStyle]=\"{\r\n width: layoutService.leftBarCurrentWidth$.value - 8 * 2 + 'px',\r\n\r\n }\">\r\n <core-line></core-line>\r\n </div>\r\n\r\n <span>\r\n @if (wideMode) {\r\n <i class=\"feather-chevrons-left p-relative l13\"></i>\r\n } @else {\r\n <i class=\"feather-chevrons-right\"></i>\r\n }\r\n </span>\r\n @if (wideMode) {\r\n <span>\r\n <div class=\"p-relative l30\">\r\n {{ 'UI_LEFTBAR_TOGGLER_COLLAPSE' | translate: lang }}\r\n </div>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n @if (!wideMode && !!secondaryNavParent && !!secondaryNavChildren.length) {\r\n <div #secondary id=\"secondary-nav\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n top: secondaryNavTop + 15 + 'px',\r\n left: layoutService.leftBarThinWidth + 15 + 'px'\r\n }\">\r\n <div id=\"secondary-nav-inner\">\r\n <div id=\"secondary-nav-header\" [class.cursor-pointer]=\"!!secondaryNavParent.tree$Parent\" [ngStyle]=\"{\r\n width: secondaryNavWidth + 'px',\r\n color: secondaryNavHeaderColor,\r\n backgroundColor: secondaryNavHeaderBackgroundColor\r\n }\" (click)=\"onSecondaryHeaderClick(secondaryNavParent.tree$Parent)\">\r\n @if (!!secondaryNavParent.tree$Parent) {\r\n <span class=\"arrow-wrapper\">\r\n <i class=\"feather-arrow-left\"></i>\r\n </span>\r\n }\r\n <span [appTooltip]=\"secondaryNavParent.code | translate: lang | uppercase\">\r\n {{ secondaryNavParent.code | translate: lang | uppercase }}\r\n </span>\r\n <span class=\"arrow-wrapper cursor-pointer d-none\" style=\"float: right;\"\r\n (click)=\"onCancelSecondaryMenu()\">\r\n <i class=\"feather-x\"></i>\r\n </span>\r\n </div>\r\n <div id=\"secondary-nav-list\">\r\n <ul [ngStyle]=\"{\r\n maxHeight: secondaryNavHeight - 50 + 'px',\r\n color: secondaryNavColor,\r\n backgroundColor: secondaryNavBackgroundColor,\r\n }\">\r\n @for(it of secondaryNavChildren; track $index) {\r\n <li class=\"parent\" (click)=\"onSecondaryItemClick(it)\" [class.has-children]=\"it.tree$HasChildren\">\r\n <a [appTooltip]=\"it.code | translate: lang | uppercase\">\r\n {{ it.tree$Title | translate: lang }}\r\n </a>\r\n @if (it.tree$HasChildren) {\r\n <div class=\"arrow-wrapper\" style=\"float: right;\">\r\n <i class=\"feather-arrow-right\"></i>\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showEditSvg) {\r\n <menu-item-svg-edit></menu-item-svg-edit>\r\n }\r\n\r\n</div>", styles: [".navigator-container{--font-size: 13px;--thin-mode-padding: 8px;--thin-mode-width: 66px;--bg-color: #F1F1F1;--color: black;--hover-bg-color: #E1E3E5;--hover-color: black;--secondary-nav-color: black;--secondary-nav-bg-color: white;--secondary-nav-hover-color: black;--secondary-nav-hover-bg-color: #E1E3E5;position:relative;display:block;font-size:var(--font-size)}.navigator-container .cursor-pointer{cursor:pointer!important}.navigator-container #secondary-nav{display:block;position:fixed;background-color:#fff;overflow:hidden;border:solid 1px lightgray;box-shadow:.4rem 0 2rem #0000002e}.navigator-container #secondary-nav #secondary-nav-inner{display:block;position:relative}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-header{display:block;height:50px;line-height:20px;background-color:var(--bg-color);color:var(--hover-color);position:sticky;top:0;left:0;padding:15px}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul{display:block;position:relative;margin:0;padding:15px;padding-left:15px!important;overflow-x:hidden;overflow-y:auto}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li{height:36px;color:var(--secondary-nav-color);width:100%;line-height:36px;display:block;position:relative;background-color:transparent;cursor:pointer!important;user-select:none;-webkit-user-select:none;transition:all .5s ease-out}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li a{left:15px;display:inline-block;overflow:hidden;text-overflow:ellipsis;width:calc(100% - var(--size-layout-block-cell-spacing));cursor:none}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover{background-color:var(--secondary-nav-hover-bg-color)}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li:hover a{color:var(--secondary-nav-hover-color)!important}.navigator-container #secondary-nav #secondary-nav-inner #secondary-nav-list ul>li .arrow-wrapper{transform:translate(-15px)}.navigator-container .h0{height:0}.navigator-container .d-none{display:none}.navigator-container .input-search-container{margin-left:12px;margin-bottom:var(--size-layout-block-cell-spacing);background-color:#e7e7e7}.navigator-container .input-search-container .search-clear-wrapper{display:block;position:absolute;top:5px;right:20px;width:24px;height:24px;cursor:pointer}.navigator-container .input-search-container .search-clear-wrapper i{font-size:24px}.navigator-container #navigator-search{font-family:Open Sans,sans-serif!important;-webkit-appearance:none;appearance:none;font-size:13px;width:100%;max-width:400px;height:35px;border:none;background-color:#e7e7e7;color:#000;padding-left:20px;position:relative;display:inline-block}.navigator-container .search-wrapper{padding:5px;position:relative}.navigator-container #main-menu:not(.thin-mode){overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.navigator-container #main-menu:not(.thin-mode) ::-webkit-scrollbar{display:none}.navigator-container #main-menu.thin-mode{padding:0!important;margin-left:0!important;margin-right:0!important;overflow-x:visible;overflow-y:auto}.navigator-container #main-menu.thin-mode::-webkit-scrollbar{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-track{width:0px!important}.navigator-container #main-menu.thin-mode::-webkit-scrollbar-thumb{width:0px!important;background:transparent!important}.navigator-container #main-menu.thin-mode ul:not([data-level=\"1\"]){padding:var(--size-layout-block-cell-spacing)!important}.navigator-container #main-menu.thin-mode ul[data-level=\"1\"],.navigator-container #main-menu.thin-mode li{padding:0;margin:0}.navigator-container ul{padding:0;padding-left:0!important}.navigator-container .custom-item:hover{background-color:#eaf1fb}.navigator-container .collapse-toggler{display:block;position:fixed;bottom:var(--thin-mode-padding);left:var(--thin-mode-padding);z-index:1;cursor:pointer;user-select:none;-webkit-user-select:none;height:50px}.navigator-container .collapse-toggler .core-line-wrapper{display:block;position:absolute;left:0;top:calc(var(--thin-mode-padding) * -1);z-index:1}.navigator-container .collapse-toggler:hover{background-color:var(--hover-bg-color)}.navigator-container .collapse-toggler:not(:has(.thin-mode)):hover{background-color:transparent}.navigator-container .collapse-toggler .collapse-toggler-inner{display:flex;align-items:center;justify-content:flex-start;height:50px}.navigator-container .collapse-toggler .collapse-toggler-inner span{height:50px;display:flex;align-items:center;justify-content:flex-start;color:var(--color)}.navigator-container .collapse-toggler .collapse-toggler-inner span i{width:24px;height:24px;font-size:24px;color:var(--color)}.navigator-container .collapse-toggler .thin-mode{justify-content:center}.navigator-container .p-relative{position:relative}.navigator-container .l13{left:13px}.navigator-container .l30{left:30px}\n", ".navigator-container .menu{list-style:none;padding:0;margin:0}.navigator-container .menu-item{position:relative;cursor:pointer}.navigator-container .submenu{list-style:none;padding:0;margin:0;display:none;height:0px;position:fixed;top:var(--size-header-height);border-radius:5px;max-height:calc(100vh - var(--size-header-height) - var(--size-layout-block-cell-spacing));overflow-y:visible;transition:transform .5s ease-out!important}\n"] }]
|
|
517
|
+
}], ctorParameters: () => [{ type: i1.NavigatorService }, { type: i2.SysMenuService }, { type: i3.RecursiveService }, { type: i4.Router }, { type: i5.MenuService }, { type: i6.OrganizationService }, { type: i7.LayoutService }, { type: i8.MultiLanguageService }, { type: i9.AuthService }, { type: i10.AlertService }, { type: i11.AppConfigService }, { type: i0.Renderer2 }], propDecorators: { fullHeight: [{
|
|
518
|
+
type: Input
|
|
519
|
+
}], filterByRootIdMode: [{
|
|
518
520
|
type: Input
|
|
519
521
|
}], color: [{
|
|
520
522
|
type: Input
|
|
@@ -555,4 +557,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
555
557
|
}], rightIcon: [{
|
|
556
558
|
type: Input
|
|
557
559
|
}] } });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9uYXZpZ2F0b3IvbmF2aWdhdG9yL25hdmlnYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvbmF2aWdhdG9yL25hdmlnYXRvci9uYXZpZ2F0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUF5QyxpQkFBaUIsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUU3SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1E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a0JBQWtCLHNnQ0NsRC9CLDIrTEFvSU0sKzJLRC9GRixZQUFZLGtMQUNaLFdBQVcsa25CQUNYLGFBQWEsZ0ZBQ2IsMkJBQTJCLDJGQUMzQixhQUFhLGtEQUNiLGlCQUFpQixzREFDakIsZ0JBQWdCLHVJQUNoQix3QkFBd0I7OzJGQU1mLGtCQUFrQjtrQkFqQjlCLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYiwyQkFBMkI7d0JBQzNCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLHdCQUF3QjtxQkFDekIsaUJBR2MsaUJBQWlCLENBQUMsSUFBSTsrWUFJNUIsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csaUNBQWlDO3NCQUF6QyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGdDQUFnQztzQkFBeEMsS0FBSztnQkFFa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNDLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFTWixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIElucHV0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFN5c01lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzLW1lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY3Vyc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWN1cnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IElSaWdodEljb24gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL0lSaWdodEljb24nO1xyXG5pbXBvcnQgeyBJTmF2aWdhdG9ySXRlbSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvSU5hdmlnYXRvckl0ZW0nO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuXHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmdhbml6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JlTGluZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbGluZS9jb3JlLWxpbmUvY29yZS1saW5lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnVJdGVtU3ZnRWRpdENvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLXN2Zy1lZGl0L21lbnUtaXRlbS1zdmctZWRpdC5jb21wb25lbnQnO1xyXG5cclxuaW50ZXJmYWNlIElGbGF0TmF2aWdhdGlvbkNoZWNrIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZWxpYi1uYXZpZ2F0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBJdGVtQ29tcG9uZW50LFxyXG4gICAgQ29yZUxvYWRpbmdTdXJmYWNlQ29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIENvcmVMaW5lQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcclxuICAgIE1lbnVJdGVtU3ZnRWRpdENvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmF2aWdhdG9yLmNvbXBvbmVudC5zY3NzJywgJy4vc2lkZS1iYXIuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJCeVJvb3RJZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3doaXRlJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjNDY0NjQ2JztcclxuICBASW5wdXQoKSBhY3RpdmVJdGVtQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjREQ1RjJBJztcclxuICBASW5wdXQoKSBhY3RpdmVJdGVtQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI0ZGRic7XHJcbiAgQElucHV0KCkgaG92ZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjRTFFM0U1JztcclxuICBASW5wdXQoKSBoaWRlU2VhcmNoOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3ViTWVudVN2Z0ljb25SaWdodDogc3RyaW5nID0gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1jaGV2cm9uLXJpZ2h0XCI+PHBvbHlsaW5lIHBvaW50cz1cIjkgMTggMTUgMTIgOSA2XCI+PC9wb2x5bGluZT48L3N2Zz4nO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhlYWRlckNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNGMUYxRjEnO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJ3doaXRlJztcclxuICBASW5wdXQoKSBzZWNvbmRhcnlOYXZIb3ZlckNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhvdmVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI0U2RUJFRCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIikgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWFpbk1lbnVcIikgbWFpbk1lbnUhOiBFbGVtZW50UmVmO1xyXG4gIGxpc3RlbmVyRm4hOiAoKSA9PiB2b2lkO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcblxyXG4gIGl0ZW1zITogSU5hdmlnYXRvckl0ZW1bXTtcclxuXHJcbiAgaXNGaXJzdExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dFZGl0U3ZnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGxvZ29UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcmlnaHRQYXJ0SGVhZGVNZW51SXRlbSE6IElOYXZpZ2F0b3JJdGVtO1xyXG4gIEBJbnB1dCgpIHJpZ2h0SWNvbiE6IElSaWdodEljb247XHJcblxyXG4gIGxpbmVySXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTmF2aWdhdG9ySXRlbVtdPihbXSk7XHJcbiAgbGluZXJJdGVtczogSU5hdmlnYXRvckl0ZW1bXSA9IFtdO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBmbGF0TmF2aWdhdGlvbkNoZWNrOiBJRmxhdE5hdmlnYXRpb25DaGVja1tdID0gW107XHJcbiAgaXRlbXNFcnJvcnM6IHN0cmluZ1tdID0gW107XHJcbiAgbGVmdGJhclJlZHVjZWQhOiBib29sZWFuO1xyXG4gIGxlZnRiYXJDdXJyZW50V2lkdGghOiBudW1iZXI7XHJcbiAgc2Vjb25kYXJ5TmF2VG9wITogbnVtYmVyO1xyXG4gIHNlY29uZGFyeU5hdkhlaWdodCE6IG51bWJlcjtcclxuICBzZWNvbmRhcnlOYXZXaWR0aDogbnVtYmVyID0gMjgwO1xyXG4gIHNlY29uZGFyeU5hdlBhcmVudCE6IGFueTtcclxuICBzZWNvbmRhcnlOYXZDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gIHNlYXJjaEZvcjogc3RyaW5nID0gJyc7XHJcbiAgc2VhcmNoU3RyZWFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgbWVudUNsaWNrZWRJdGVtITogSU5hdmlnYXRvckl0ZW1cclxuICBjaGVja2VkTG9hZGluZ01lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3aWRlTW9kZSE6IGJvb2xlYW47XHJcbiAgZnVsbEhlaWdodCE6IG51bWJlcjtcclxuICBzY3JvbGxIZWlnaHQhOiBudW1iZXI7XHJcblxyXG4gIHJlc2l6ZVN0cmVhbSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJyk7XHJcbiAgbGVmdEJhcldpZGVXaWR0aCE6IG51bWJlcjtcclxuXHJcbiAgZ2VvQ29tcHV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZnVsbEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5oZWFkZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuaGVhZGVySGVpZ2h0JC52YWx1ZSAtIHRoaXMubGF5b3V0U2VydmljZS5uYXZpZ3RvclRoaW5Nb2RlU3BhY2luZyAtICh0aGlzLndpZGVNb2RlID8gKCgzNSAqICghIXRoaXMuaGlkZVNlYXJjaCA/IDAgOiAxKSArIDE1KSAvKiBzZWFyY2gqLyArICg1MCArIHRoaXMubGF5b3V0U2VydmljZS5uYXZpZ3RvclRoaW5Nb2RlU3BhY2luZyAqIDMpIC8qIGNvbGxhcHNlciAqLykgOiAoNTAgKyB0aGlzLmxheW91dFNlcnZpY2UubmF2aWd0b3JUaGluTW9kZVNwYWNpbmcgKiAzKSAvKiBjb2xsYXBzZXIqLylcclxuICAgIHRoaXMuc2Vjb25kYXJ5TmF2SGVpZ2h0ID0gdGhpcy5zY3JvbGxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzeXNNZW51U2VydmljZTogU3lzTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvblNlcnZpY2U6IE9yZ2FuaXphdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geCk7XHJcbiAgICB0aGlzLmxheW91dFNlcnZpY2UubGVmdEJhcldpZGVXaWR0aCQuc3Vic2NyaWJlKHggPT4gdGhpcy5sZWZ0QmFyV2lkZVdpZHRoID0geClcclxuICAgIHRoaXMubGF5b3V0U2VydmljZS5oZWFkZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHRoaXMuc2Vjb25kYXJ5TmF2VG9wID0geCk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLndpZGVNb2RlJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgIHRoaXMud2lkZU1vZGUgPSB4O1xyXG4gICAgICB0aGlzLmdlb0NvbXB1dGUoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmxlZnRCYXJDdXJyZW50V2lkdGgkLm5leHQoISF4ID8gdGhpcy5sZWZ0QmFyV2lkZVdpZHRoIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmxlZnRCYXJUaGluV2lkdGgpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlc2l6ZVN0cmVhbSQucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDUwMClcclxuICAgICkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICB0aGlzLmdlb0NvbXB1dGUoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY29sb3IgPSB0aGlzLmNvbG9yITtcclxuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvciE7XHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuYWN0aXZlSXRlbUNvbG9yID0gdGhpcy5hY3RpdmVJdGVtQ29sb3IhO1xyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmFjdGl2ZUl0ZW1CYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmFjdGl2ZUl0ZW1CYWNrZ3JvdW5kQ29sb3IhO1xyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmhvdmVyQmFja2dyb3VuZENvbG9yID0gdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvciE7XHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuc3ViTWVudVN2Z0ljb25SaWdodCA9IHRoaXMuc3ViTWVudVN2Z0ljb25SaWdodDtcclxuXHJcbiAgICB0aGlzLm1lbnVDbGlja2VkSXRlbSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lbnVDdXJyZW50Q2xpY2tlZCcpISlcclxuICAgIGlmICghIXRoaXMubWVudUNsaWNrZWRJdGVtKSB7XHJcbiAgICAgIHRoaXMubWVudUNsaWNrZWRJdGVtLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuc2hvd0VkaXRTdmckLnN1YnNjcmliZSh4ID0+IHRoaXMuc2hvd0VkaXRTdmcgPSB4KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxpbmVySXRlbXMkLnN1YnNjcmliZSh4ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoISF4ICYmIHgubGVuZ3RoID4gMCAmJiB0aGlzLmNoZWNrZWRMb2FkaW5nTWVudSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXk6IElOYXZpZ2F0b3JJdGVtW10gPSBbXTtcclxuICAgICAgICAgICAgbGV0IGFycmF5UGFycmVudDogSU5hdmlnYXRvckl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWVudUNsaWNrZWRJdGVtPy50cmVlJFRpZXIgPT0gMikge1xyXG4gICAgICAgICAgICAgIGFycmF5ID0geC5maWx0ZXIoeSA9PiB5LmlkID09IHRoaXMubWVudUNsaWNrZWRJdGVtLmlkKVxyXG4gICAgICAgICAgICAgIGFycmF5UGFycmVudCA9IHguZmlsdGVyKHkgPT4geS5pZCA9PSB0aGlzLm1lbnVDbGlja2VkSXRlbS50cmVlJFBhcmVudClcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhYXJyYXkubGVuZ3RoICYmICEhYXJyYXlQYXJyZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgYXJyYXlbMF0udHJlZSRTZWxlY3RlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lbnVDbGlja2VkSXRlbS50cmVlJENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgYXJyYXlbMF0udHJlZSRFeHBhbmRlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVBhcnJlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFycmF5UGFycmVudFswXS50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgYXJyYXlQYXJyZW50WzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbWVudS0nICsgYXJyYXlQYXJyZW50WzBdLmlkKVxyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbWVudS0nICsgYXJyYXlbMF0uaWQpXHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlQYXJyZW50WzBdLnRyZWUkRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZXhwYW5kZWQnKVxyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGVscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVscy5pZCA9PSBhcnJheVBhcnJlbnRbMF0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGVscy50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGVscy50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChlbHMudHJlZSRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVscy50cmVlJENoaWxkcmVuLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5pZCA9PSB0aGlzLm1lbnVDbGlja2VkSXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5UGFycmVudFswXS50cmVlJEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbMF0udHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Mj8uY2xhc3NMaXN0LmFkZCgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLm1hcChlbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVscy50cmVlJENoaWxkcmVuLm1hcChlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwuaWQgPT0gYXJyYXlbMF0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybCA9PSBlbC51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Mj8uY2xhc3NMaXN0LnJlbW92ZSgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tZW51Q2xpY2tlZEl0ZW0/LnRyZWUkVGllciA9PSAzKSB7IC8vbuG6v3UgbMOgIDMgY+G6pXBcclxuICAgICAgICAgICAgICBhcnJheSA9IHguZmlsdGVyKHkgPT4geS5pZCA9PSB0aGlzLm1lbnVDbGlja2VkSXRlbS5pZClcclxuICAgICAgICAgICAgICBhcnJheVBhcnJlbnQgPSB4LmZpbHRlcih5ID0+IHkuaWQgPT0gdGhpcy5tZW51Q2xpY2tlZEl0ZW0udHJlZSRQYXJlbnQpXHJcbiAgICAgICAgICAgICAgbGV0IGFycmF5R3JhbmRQYXJyZW50ID0geC5maWx0ZXIoeiA9PiB6LmlkID09IGFycmF5UGFycmVudFswXS5wYXJlbnQpXHJcbiAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tZW51LScgKyBhcnJheVBhcnJlbnRbMF0uaWQpXHJcbiAgICAgICAgICAgICAgbGV0IGVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbWVudS0nICsgYXJyYXlHcmFuZFBhcnJlbnRbMF0uaWQpXHJcbiAgICAgICAgICAgICAgYXJyYXlbMF0udHJlZSRTZWxlY3RlZCA9IHRydWVcclxuICAgICAgICAgICAgICBhcnJheVBhcnJlbnRbMF0udHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYXJyYXlQYXJyZW50WzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGFycmF5R3JhbmRQYXJyZW50WzBdLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGFycmF5R3JhbmRQYXJyZW50WzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYXJyYXlHcmFuZFBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDI/LmNsYXNzTGlzdC5hZGQoJ2V4cGFuZGVkJylcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVscy5pZCA9PSBhcnJheUdyYW5kUGFycmVudFswXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVscy50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHMudHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Mj8uY2xhc3NMaXN0LnJlbW92ZSgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoYXJyYXlHcmFuZFBhcnJlbnRbMF0udHJlZSRBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQyPy5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Mj8uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJylcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChhcnJheVBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZXhwYW5kZWQnKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChlbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWxzLmlkID09IGFycmF5R3JhbmRQYXJyZW50WzBdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVscy50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxzLnRyZWUkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkQ2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5pZCA9PSBhcnJheVBhcnJlbnRbMF0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4LnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHgudHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgudHJlZSRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC50cmVlJENoaWxkcmVuLm1hcCh5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5LmlkID09IGFycmF5WzBdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoYXJyYXlQYXJyZW50WzBdLnRyZWUkQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNoZWNrZWRMb2FkaW5nTWVudSA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9LCAyMDAwKVxyXG5cclxuICB9XHJcblxyXG4gIHJlc29sdmVSYXdEYXRhUmVzcG9uc2VGb3JSb290TGlzdCh4OiBhbnkpIHtcclxuICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgIGJvZHkuaW5uZXJCb2R5ID0gYm9keS5pbm5lckJvZHkuZmlsdGVyKHggPT4gIXgucGFyZW50KTtcclxuICAgICAgYm9keS5pbm5lckJvZHkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBpbiByZWN1cnNpdmUgY29kZSB3ZSB3aWxsIHJlYWQgZnJvbSBib3R0b20gdG8gdG9wXHJcbiAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPiBiLm9yZGVyTnVtYmVyKSByZXR1cm4gLTE7XHJcbiAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPT09IGIub3JkZXJOdW1iZXIpIHJldHVybiAwO1xyXG4gICAgICAgIGlmIChhLm9yZGVyTnVtYmVyIDwgYi5vcmRlck51bWJlcikgcmV0dXJuIDE7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS5saW5lckFycmF5VG9OZXN0ZWRBcnJheShcclxuICAgICAgICBib2R5LmlubmVyQm9keSxcclxuICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgXCJjb2RlXCIsXHJcbiAgICAgICAgXCJwYXJlbnRcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSxcclxuICAgICAgICBcIm9yZGVyTnVtXCJcclxuICAgICAgKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLnJvb3ROYXZpZ2F0b3JJdGVtcyQubmV4dChyLmxpc3QpXHJcbiAgICAgICAgLy90aGlzLm1lbnVTZXJ2aWNlLm5hdmlnYXRpb24kLm5leHQoci5saXN0KTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVSYXdEYXRhUmVzcG9uc2UoeDogYW55KSB7XHJcbiAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICBib2R5LmlubmVyQm9keS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGluIHJlY3Vyc2l2ZSBjb2RlIHdlIHdpbGwgcmVhZCBmcm9tIGJvdHRvbSB0byB0b3BcclxuICAgICAgICBpZiAoYS5vcmRlck51bWJlciA+IGIub3JkZXJOdW1iZXIpIHJldHVybiAtMTtcclxuICAgICAgICBpZiAoYS5vcmRlck51bWJlciA9PT0gYi5vcmRlck51bWJlcikgcmV0dXJuIDA7XHJcbiAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPCBiLm9yZGVyTnVtYmVyKSByZXR1cm4gMTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5saW5lckl0ZW1zJC5uZXh0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYm9keS5pbm5lckJvZHkpKSk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHJcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxyXG4gICAgICAgICAgYm9keS5pbm5lckJvZHksXHJcbiAgICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgICBcImNvZGVcIixcclxuICAgICAgICAgIFwicGFyZW50XCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSxcclxuICAgICAgICAgIFwib3JkZXJOdW1cIlxyXG4gICAgICAgICkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IHIubGlzdDtcclxuICAgICAgICAgIGlmICghdGhpcy5pc0ZpcnN0TG9hZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kdWxlSWQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuYWN0aXZlUm9vdE1lbnVJdGVtSWQkLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudE1vZHVsZUlkKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW1zRmlsdGVyID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLnJvb3ROYXZpZ2F0b3JJdGVtcyQudmFsdWU/LmZpbHRlcih4ID0+IHguaWQgPT09IGN1cnJlbnRNb2R1bGVJZCk7XHJcbiAgICAgICAgICAgICAgaWYgKCEhcm9vdEl0ZW1zRmlsdGVyICYmIHJvb3RJdGVtc0ZpbHRlci5sZW5ndGggJiYgcm9vdEl0ZW1zRmlsdGVyWzBdLnVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyb290SXRlbXNGaWx0ZXJbMF0udXJsKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvaG9tZScpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpcnN0TG9hZCA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxpbmVySXRlbXMgPSByLnJhd0xpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPiBiLm9yZGVyTnVtYmVyKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPT09IGIub3JkZXJOdW1iZXIpIHJldHVybiAwO1xyXG4gICAgICAgICAgICBpZiAoYS5vcmRlck51bWJlciA8IGIub3JkZXJOdW1iZXIpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5tZW51U2VydmljZS5uYXZpZ2F0aW9uJC5uZXh0KHIubGlzdCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1iZy1jb2xvcicsIHRoaXMubmF2aWdhdG9yU2VydmljZS5iYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWNvbG9yJywgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmNvbG9yKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ob3Zlci1iZy1jb2xvcicsIHRoaXMubmF2aWdhdG9yU2VydmljZS5ob3ZlckJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taG92ZXItY29sb3InLCB0aGlzLm5hdmlnYXRvclNlcnZpY2UuaG92ZXJDb2xvcik7XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1uYXYtY29sb3InLCB0aGlzLnNlY29uZGFyeU5hdkNvbG9yKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktbmF2LWJnLWNvbG9yJywgdGhpcy5zZWNvbmRhcnlOYXZCYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1uYXYtaG92ZXItY29sb3InLCB0aGlzLnNlY29uZGFyeU5hdkhvdmVyQ29sb3IpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1uYXYtaG92ZXItYmctY29sb3InLCB0aGlzLnNlY29uZGFyeU5hdkhvdmVyQmFja2dyb3VuZENvbG9yKTtcclxuXHJcbiAgICAgIHRoaXMubGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIGhhbmRsZSBjbGljayBvdXRzaWRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICYmICF0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSkge1xyXG4gICAgICAgICAgdGhpcy5vbkNhbmNlbFNlY29uZGFyeU1lbnUoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgdGhpcy5nZW9Db21wdXRlKCk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UubGVmdGJhclJlZHVjZWQkLnN1YnNjcmliZSh4ID0+IHRoaXMubGVmdGJhclJlZHVjZWQgPSB4KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5sZWZ0QmFyQ3VycmVudFdpZHRoJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxlZnRiYXJDdXJyZW50V2lkdGggPSB4KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLm1scy50cmFucygnVUlfQ09NTU9OX1BMQUNFX0hPTERFUl9TRUFSQ0hfSEVSRScpKVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnNlYXJjaFN0cmVhbSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3N3aXRjaE1hcCB3b3JrcyA9PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdG9yU2VydmljZS5maW5kSXRlbSh0ZXh0LCB0aGlzLml0ZW1zKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5pdGVtcz8ubWFwKChpdGVtOiBJTmF2aWdhdG9ySXRlbSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVOYXZpZ2F0aW9uSXRlbShpdGVtKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLml0ZW1zRXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoXCJOYXZpZ2F0aW9uIGl0ZW1zIGVycm9yXCIpO1xyXG4gICAgICAgIHRoaXMuaXRlbXNFcnJvcnM/Lm1hcChlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5maWx0ZXJCeVJvb3RJZE1vZGUpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuc3lzTWVudVNlcnZpY2UucmVhZFBlcm1pdHRlZE1lbnUoKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVJhd0RhdGFSZXNwb25zZUZvclJvb3RMaXN0KHgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoeCA9PiAhIXggJiYgKCF0aGlzLmZpbHRlckJ5Um9vdElkTW9kZSB8fCAoISF0aGlzLmZpbHRlckJ5Um9vdElkTW9kZSAmJiAhIXRoaXMubmF2aWdhdG9yU2VydmljZS5hY3RpdmVSb290TWVudUl0ZW1JZCQudmFsdWUpKSksXHJcbiAgICAgICAgICBtYXAoeCA9PiB4Py5pZCksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZmlsdGVyQnlSb290SWRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzTWVudVNlcnZpY2UucmVhZFBlcm1pdHRlZE1lbnVCeVJvb3RJZCh0aGlzLm5hdmlnYXRvclNlcnZpY2UuYWN0aXZlUm9vdE1lbnVJdGVtSWQkLnZhbHVlIHx8IDApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzTWVudVNlcnZpY2UucmVhZFBlcm1pdHRlZE1lbnUoKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMucmVzb2x2ZVJhd0RhdGFSZXNwb25zZSh4KTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoISF0aGlzLmZpbHRlckJ5Um9vdElkTW9kZSkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmFjdGl2ZVJvb3RNZW51SXRlbUlkJC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoeCA9PiAhIXgpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5maWx0ZXJCeVJvb3RJZE1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN5c01lbnVTZXJ2aWNlLnJlYWRQZXJtaXR0ZWRNZW51QnlSb290SWQoeCB8fCAwKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zeXNNZW51U2VydmljZS5yZWFkUGVybWl0dGVkTWVudSgpXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVSYXdEYXRhUmVzcG9uc2UoeCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmNsaWNrZWRJdGVtJC5waXBlKFxyXG4gICAgICAgICAgdGFwKHggPT4gdGhpcy5zZWNvbmRhcnlOYXZQYXJlbnQgPSB4KSxcclxuICAgICAgICAgIGZpbHRlcih4ID0+ICEheClcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrKHghKTtcclxuICAgICAgICAgIGlmICh4Py50cmVlJENoaWxkcmVuICYmIHg/LnRyZWUkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICAgIGxldCBpdGVtQWN0aXZhdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoeSA9PiB5ICE9PSB4ICYmIHkuaWQgIT09IHgudHJlZSRQYXJlbnQgJiYgeS50cmVlJFNlbGVjdGVkID09IHRydWUpXHJcbiAgICAgICAgICAgICAgaXRlbUFjdGl2YXRlZD8ubWFwKHogPT4gei50cmVlJFNlbGVjdGVkID0gZmFsc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoISF4ICYmICEheC5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLm1hcChwYXJlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnRyZWUkQ2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnRyZWUkQ2hpbGRyZW4ubGVuZ3RoID09IDAgJiYgY2hpbGQgIT0geCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnRyZWUkU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC50cmVlJENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZC50cmVlJENoaWxkcmVuLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5pZCAhPSBrLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC50cmVlJFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9IHggJiYgeC5wYXJlbnQgIT0gY2hpbGQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih4LmlkID09IClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC50cmVlJFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeC5wYXJlbnQgPT0gY2hpbGQuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWNvbmRhcnlOYXZQYXJlbnQgPSB4ITtcclxuICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5TmF2Q2hpbGRyZW4gPSB0aGlzLmxpbmVySXRlbXMuZmlsdGVyKGEgPT4gYS5wYXJlbnQgPT09IHg/LmlkKTtcclxuXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGluZXJJdGVtcyQuc3Vic2NyaWJlKGl0ZW1zID0+IHtcclxuICAgICAgICAgIGl0ZW1zPy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tbWVudS0nICsgeC5pZClcclxuICAgICAgICAgICAgaWYgKHgudHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2V4cGFuZGVkJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHgudHJlZSRBY3RpdmUpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2hhbmdlKGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWFyY2hTdHJlYW0kLm5leHQoZSlcclxuICB9XHJcblxyXG4gIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hGb3IgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWFyY2hTdHJlYW0kLm5leHQoXCJcIik7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU5hdmlnYXRpb25JdGVtKGl0ZW06IElOYXZpZ2F0b3JJdGVtKSB7XHJcbiAgICBpZiAoISEhaXRlbS5pZCkge1xyXG4gICAgICB0aGlzLml0ZW1zRXJyb3JzLnB1c2goYFZhbHVlIG9mIHByb3BlcnR5IFwiaWRcIiBvZiBuYXZpZ2F0aW9uIGl0ZW0gXCIke2l0ZW0uY29kZX1cIiBpcyBub3Qgc2V0YCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZsYXROYXZpZ2F0aW9uQ2hlY2suZmlsdGVyKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmZsYXROYXZpZ2F0aW9uQ2hlY2sucHVzaCh7XHJcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgY291bnQ6IDAsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtc0Vycm9ycy5wdXNoKGBEdXBsaWNhdGVkIE5hdmlnYXRpb24gaWQgJHtpdGVtLmlkfWApO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgICBpdGVtLnRyZWUkQ2hpbGRyZW4/Lm1hcChjaGlsZCA9PiB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZU5hdmlnYXRpb25JdGVtKGNoaWxkKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZHJlbihpdGVtOiBJTmF2aWdhdG9ySXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZiAoa2V5ID09PSBcInRyZWUkQ2hpbGRyZW5cIikge1xyXG4gICAgICAgIGlmICghIWl0ZW1bJ3RyZWUkQ2hpbGRyZW4nXT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaXRlbUhhc0NoaWxkcmVuKGl0ZW06IElOYXZpZ2F0b3JJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmIChrZXkgPT09ICd0cmVlJENoaWxkcmVuJykge1xyXG4gICAgICAgIGlmICghIWl0ZW1bJ3RyZWUkQ2hpbGRyZW4nXT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrKGl0ZW06IElOYXZpZ2F0b3JJdGVtKSB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5saW5lckl0ZW1zJC52YWx1ZTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLnNlZnRUb2dnbGVFeHBhbmRTaWJsaW5nc0NvbGxhcHNlKGN1cnJlbnQsIGl0ZW0uaWQpO1xyXG4gICAgdGhpcy5saW5lckl0ZW1zJC5uZXh0KGl0ZW1zKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHtcclxuICAgICAgaWYgKHgpIHgudW5zdWJzY3JpYmUoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb2xsYXBzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS53aWRlTW9kZSQubmV4dCghdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLndpZGVNb2RlJC52YWx1ZSlcclxuICB9XHJcblxyXG4gIG9uU2Vjb25kYXJ5SXRlbUNsaWNrKGl0ZW06IGFueSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmNsaWNrZWRJdGVtJC5uZXh0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgb25TZWNvbmRhcnlIZWFkZXJDbGljayhwYXJlbnQ6IGFueSkge1xyXG4gICAgaWYgKCEhcGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IHRyeUZpbHRlciA9IHRoaXMubGluZXJJdGVtcy5maWx0ZXIoeCA9PiB4LmlkID09PSBwYXJlbnQpO1xyXG4gICAgICBpZiAoISF0cnlGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmNsaWNrZWRJdGVtJC5uZXh0KHRyeUZpbHRlclswXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWxTZWNvbmRhcnlNZW51KCkge1xyXG4gICAgdGhpcy5zZWNvbmRhcnlOYXZQYXJlbnQgPSBudWxsO1xyXG4gIH1cclxuXHJcblxyXG5cclxufSIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cIm5hdmlnYXRvci1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICB3aWR0aDogbGVmdGJhckN1cnJlbnRXaWR0aCArICdweCcsXHJcbiAgICBoZWlnaHQ6IGZ1bGxIZWlnaHQgKyAncHgnLFxyXG4gICAgcGFkZGluZ1RvcDogbGF5b3V0U2VydmljZS5uYXZpZ3RvclRoaW5Nb2RlU3BhY2luZyArICdweCcsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG5hdmlnYXRvclNlcnZpY2UuYmFja2dyb3VuZENvbG9yXHJcbn1cIj5cclxuXHJcbiAgICBAaWYgKHdpZGVNb2RlICYmICFoaWRlU2VhcmNoKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VhcmNoLWNvbnRhaW5lclwiIFtjbGFzcy5vcGFjaXR5MF09XCIhIWxlZnRiYXJSZWR1Y2VkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiBsYXlvdXRTZXJ2aWNlLmxlZnRCYXJDdXJyZW50V2lkdGgkLnZhbHVlIC0gbGF5b3V0U2VydmljZS5sZWZ0QmFyU2Vjb25kSWNvbkxlZnQgLSBsYXlvdXRTZXJ2aWNlLnNjcm9sbEJhcldpZHRoIC0gMSArICdweCdcclxuICAgIH1cIj5cclxuICAgICAgICA8aW5wdXQgaWQ9XCJuYXZpZ2F0b3Itc2VhcmNoXCIgW3BsYWNlaG9sZGVyXT1cIidVSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9IRVJFJyB8IHRyYW5zbGF0ZTogbGFuZ1wiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hGb3JcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgQGlmICghIXNlYXJjaEZvci5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNsZWFyLXdyYXBwZXJcIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICA8ZGl2IGlkPVwibmF2XCIgW2NsYXNzLnNpZGViYXJdPVwiIXdpZGVNb2RlXCI+XHJcbiAgICAgICAgQGlmICghIWxvYWRpbmcpIHtcclxuICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2U+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDx1bCBpZD1cIm1haW4tbWVudVwiICNtYWluTWVudSBbc3R5bGVdPVwiJ2hlaWdodDogJyArIHNjcm9sbEhlaWdodCArICdweDsnXCIgW2NsYXNzLnRoaW4tbW9kZV09XCIhd2lkZU1vZGVcIlxyXG4gICAgICAgICAgICBbY2xhc3MubWVudV09XCIhd2lkZU1vZGVcIj5cclxuICAgICAgICAgICAgQGlmICghIWl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgQGZvcihpdGVtIG9mIGl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGFwcC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbGV2ZWxdPVwiMVwiPjwvYXBwLWl0ZW0+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQGlmICghIXJpZ2h0SWNvbikge1xyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwYXJlbnQgcmlnaHQtcGFydC1pdGVtXCIgW2NsYXNzLm1lbnUtaXRlbV09XCJ3aWRlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJpZ2h0SWNvbi5mdW5jdGlvbigpXCIgY2xhc3M9XCJuby12ZXJ0aWNhbC1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWljb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3JpZ2h0LWljb24gJyArIHJpZ2h0SWNvbi5mZWF0aGVyQ2xhc3NcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1pY29uLWJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByaWdodEljb24uYmFkZ2VDb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtdG9nZ2xlclwiIFtjbGFzcy5kLW5vbmVdPVwiIWxheW91dFNlcnZpY2UubGVmdGJhck9wZW4kLnZhbHVlXCJcclxuICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwid2lkZU1vZGUgPyAoJ1VJX0xFRlRCQVJfVE9HR0xFUl9DT0xMQVBTRScgfCB0cmFuc2xhdGUgOiBsYW5nKSA6ICgnVUlfTEVGVEJBUl9UT0dHTEVSX0VYUEFORCcgfCB0cmFuc2xhdGU6IGxhbmcpXCJcclxuICAgICAgICAgICAgW3Nob3dBbnl3YXldPVwidHJ1ZVwiIHBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwidG9nZ2xlQ29sbGFwc2UoKVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBsYXlvdXRTZXJ2aWNlLmxlZnRCYXJDdXJyZW50V2lkdGgkLnZhbHVlIC0gOCAqIDIgKyAncHgnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLXRvZ2dsZXItaW5uZXJcIiBbY2xhc3MudGhpbi1tb2RlXT1cIiF3aWRlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvcmUtbGluZS13cmFwcGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBsYXlvdXRTZXJ2aWNlLmxlZnRCYXJDdXJyZW50V2lkdGgkLnZhbHVlIC0gOCAqIDIgKyAncHgnLFxyXG5cclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y29yZS1saW5lPjwvY29yZS1saW5lPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICh3aWRlTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1jaGV2cm9ucy1sZWZ0IHAtcmVsYXRpdmUgbDEzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1jaGV2cm9ucy1yaWdodFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHdpZGVNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1yZWxhdGl2ZSBsMzBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1VJX0xFRlRCQVJfVE9HR0xFUl9DT0xMQVBTRScgfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoIXdpZGVNb2RlICYmICEhc2Vjb25kYXJ5TmF2UGFyZW50ICYmICEhc2Vjb25kYXJ5TmF2Q2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICA8ZGl2ICNzZWNvbmRhcnkgaWQ9XCJzZWNvbmRhcnktbmF2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiBzZWNvbmRhcnlOYXZXaWR0aCArICdweCcsXHJcbiAgICAgICAgdG9wOiBzZWNvbmRhcnlOYXZUb3AgKyAxNSArICdweCcsXHJcbiAgICAgICAgbGVmdDogbGF5b3V0U2VydmljZS5sZWZ0QmFyVGhpbldpZHRoICsgMTUgKyAncHgnXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInNlY29uZGFyeS1uYXYtaW5uZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBpZD1cInNlY29uZGFyeS1uYXYtaGVhZGVyXCIgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiEhc2Vjb25kYXJ5TmF2UGFyZW50LnRyZWUkUGFyZW50XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNlY29uZGFyeU5hdldpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBzZWNvbmRhcnlOYXZIZWFkZXJDb2xvcixcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc2Vjb25kYXJ5TmF2SGVhZGVyQmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgIH1cIiAoY2xpY2spPVwib25TZWNvbmRhcnlIZWFkZXJDbGljayhzZWNvbmRhcnlOYXZQYXJlbnQudHJlZSRQYXJlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKCEhc2Vjb25kYXJ5TmF2UGFyZW50LnRyZWUkUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItYXJyb3ctbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDxzcGFuIFthcHBUb29sdGlwXT1cInNlY29uZGFyeU5hdlBhcmVudC5jb2RlIHwgdHJhbnNsYXRlOiBsYW5nIHwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2Vjb25kYXJ5TmF2UGFyZW50LmNvZGUgfCB0cmFuc2xhdGU6IGxhbmcgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctd3JhcHBlciBjdXJzb3ItcG9pbnRlciBkLW5vbmVcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbFNlY29uZGFyeU1lbnUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBpZD1cInNlY29uZGFyeS1uYXYtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHNlY29uZGFyeU5hdkhlaWdodCAtIDUwICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogc2Vjb25kYXJ5TmF2Q29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzZWNvbmRhcnlOYXZCYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvcihpdCBvZiBzZWNvbmRhcnlOYXZDaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFyZW50XCIgKGNsaWNrKT1cIm9uU2Vjb25kYXJ5SXRlbUNsaWNrKGl0KVwiIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiaXQudHJlZSRIYXNDaGlsZHJlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbYXBwVG9vbHRpcF09XCJpdC5jb2RlIHwgdHJhbnNsYXRlOiBsYW5nIHwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdC50cmVlJFRpdGxlIHwgdHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdC50cmVlJEhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy13cmFwcGVyXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItYXJyb3ctcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoc2hvd0VkaXRTdmcpIHtcclxuICAgIDxtZW51LWl0ZW0tc3ZnLWVkaXQ+PC9tZW51LWl0ZW0tc3ZnLWVkaXQ+XHJcbiAgICB9XHJcblxyXG48L2Rpdj4iXX0=
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9uYXZpZ2F0b3IvbmF2aWdhdG9yL25hdmlnYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvbmF2aWdhdG9yL25hdmlnYXRvci9uYXZpZ2F0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUF5QyxpQkFBaUIsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsZUFBZSxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUU3SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1E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MkZBQzNCLGFBQWEsa0RBQ2IsaUJBQWlCLHNEQUNqQixnQkFBZ0IsdUlBQ2hCLHdCQUF3Qjs7MkZBTWYsa0JBQWtCO2tCQWpCOUIsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxhQUFhO3dCQUNiLDJCQUEyQjt3QkFDM0IsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3FCQUN6QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJOytZQUk1QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGlDQUFpQztzQkFBekMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxnQ0FBZ0M7c0JBQXhDLEtBQUs7Z0JBRWtCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBU1osWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBJbnB1dCwgVGVtcGxhdGVSZWYsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTeXNNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N5cy1tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJUmlnaHRJY29uIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9JUmlnaHRJY29uJztcclxuaW1wb3J0IHsgSU5hdmlnYXRvckl0ZW0gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL0lOYXZpZ2F0b3JJdGVtJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcblxyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29yZUxpbmVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWxpbmUvY29yZS1saW5lL2NvcmUtbGluZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNZW51SXRlbVN2Z0VkaXRDb21wb25lbnQgfSBmcm9tICcuL21lbnUtaXRlbS1zdmctZWRpdC9tZW51LWl0ZW0tc3ZnLWVkaXQuY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBJRmxhdE5hdmlnYXRpb25DaGVjayB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmVsaWItbmF2aWdhdG9yJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgSXRlbUNvbXBvbmVudCxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBDb3JlTGluZUNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmUsXHJcbiAgICBNZW51SXRlbVN2Z0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZpZ2F0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25hdmlnYXRvci5jb21wb25lbnQuc2NzcycsICcuL3NpZGUtYmFyLnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2aWdhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZnVsbEhlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBmaWx0ZXJCeVJvb3RJZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3doaXRlJztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjNDY0NjQ2JztcclxuICBASW5wdXQoKSBhY3RpdmVJdGVtQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjREQ1RjJBJztcclxuICBASW5wdXQoKSBhY3RpdmVJdGVtQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI0ZGRic7XHJcbiAgQElucHV0KCkgaG92ZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjRTFFM0U1JztcclxuICBASW5wdXQoKSBoaWRlU2VhcmNoOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3ViTWVudVN2Z0ljb25SaWdodDogc3RyaW5nID0gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1jaGV2cm9uLXJpZ2h0XCI+PHBvbHlsaW5lIHBvaW50cz1cIjkgMTggMTUgMTIgOSA2XCI+PC9wb2x5bGluZT48L3N2Zz4nO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhlYWRlckNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNGMUYxRjEnO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJ3doaXRlJztcclxuICBASW5wdXQoKSBzZWNvbmRhcnlOYXZIb3ZlckNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xyXG4gIEBJbnB1dCgpIHNlY29uZGFyeU5hdkhvdmVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI0U2RUJFRCc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIikgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWFpbk1lbnVcIikgbWFpbk1lbnUhOiBFbGVtZW50UmVmO1xyXG4gIGxpc3RlbmVyRm4hOiAoKSA9PiB2b2lkO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcblxyXG4gIGl0ZW1zITogSU5hdmlnYXRvckl0ZW1bXTtcclxuXHJcbiAgaXNGaXJzdExvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dFZGl0U3ZnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGxvZ29UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcmlnaHRQYXJ0SGVhZGVNZW51SXRlbSE6IElOYXZpZ2F0b3JJdGVtO1xyXG4gIEBJbnB1dCgpIHJpZ2h0SWNvbiE6IElSaWdodEljb247XHJcblxyXG4gIGxpbmVySXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTmF2aWdhdG9ySXRlbVtdPihbXSk7XHJcbiAgbGluZXJJdGVtczogSU5hdmlnYXRvckl0ZW1bXSA9IFtdO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBmbGF0TmF2aWdhdGlvbkNoZWNrOiBJRmxhdE5hdmlnYXRpb25DaGVja1tdID0gW107XHJcbiAgaXRlbXNFcnJvcnM6IHN0cmluZ1tdID0gW107XHJcbiAgbGVmdGJhclJlZHVjZWQhOiBib29sZWFuO1xyXG4gIGxlZnRiYXJDdXJyZW50V2lkdGghOiBudW1iZXI7XHJcbiAgc2Vjb25kYXJ5TmF2VG9wITogbnVtYmVyO1xyXG4gIHNlY29uZGFyeU5hdkhlaWdodCE6IG51bWJlcjtcclxuICBzZWNvbmRhcnlOYXZXaWR0aDogbnVtYmVyID0gMjgwO1xyXG4gIHNlY29uZGFyeU5hdlBhcmVudCE6IGFueTtcclxuICBzZWNvbmRhcnlOYXZDaGlsZHJlbjogYW55W10gPSBbXTtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gIHNlYXJjaEZvcjogc3RyaW5nID0gJyc7XHJcbiAgc2VhcmNoU3RyZWFtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgbWVudUNsaWNrZWRJdGVtITogSU5hdmlnYXRvckl0ZW1cclxuICBjaGVja2VkTG9hZGluZ01lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3aWRlTW9kZSE6IGJvb2xlYW47XHJcbiAgXHJcbiAgc2Nyb2xsSGVpZ2h0ITogbnVtYmVyO1xyXG5cclxuICByZXNpemVTdHJlYW0kID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpO1xyXG4gIGxlZnRCYXJXaWRlV2lkdGghOiBudW1iZXI7XHJcblxyXG4gIGdlb0NvbXB1dGUoKTogdm9pZCB7XHJcbiAgICAvL3RoaXMuZnVsbEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5oZWFkZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuaGVhZGVySGVpZ2h0JC52YWx1ZSAtIHRoaXMubGF5b3V0U2VydmljZS5uYXZpZ3RvclRoaW5Nb2RlU3BhY2luZyAtICh0aGlzLndpZGVNb2RlID8gKCgzNSAqICghIXRoaXMuaGlkZVNlYXJjaCA/IDAgOiAxKSArIDE1KSAvKiBzZWFyY2gqLyArICg1MCArIHRoaXMubGF5b3V0U2VydmljZS5uYXZpZ3RvclRoaW5Nb2RlU3BhY2luZyAqIDMpIC8qIGNvbGxhcHNlciAqLykgOiAoNTAgKyB0aGlzLmxheW91dFNlcnZpY2UubmF2aWd0b3JUaGluTW9kZVNwYWNpbmcgKiAzKSAvKiBjb2xsYXBzZXIqLylcclxuICAgIHRoaXMuc2Vjb25kYXJ5TmF2SGVpZ2h0ID0gdGhpcy5zY3JvbGxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzeXNNZW51U2VydmljZTogU3lzTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uU2VydmljZTogT3JnYW5pemF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KTtcclxuICAgIHRoaXMubGF5b3V0U2VydmljZS5sZWZ0QmFyV2lkZVdpZHRoJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxlZnRCYXJXaWRlV2lkdGggPSB4KVxyXG4gICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmhlYWRlckhlaWdodCQuc3Vic2NyaWJlKHggPT4gdGhpcy5zZWNvbmRhcnlOYXZUb3AgPSB4KTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uud2lkZU1vZGUkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgdGhpcy53aWRlTW9kZSA9IHg7XHJcbiAgICAgIHRoaXMuZ2VvQ29tcHV0ZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UubGVmdEJhckN1cnJlbnRXaWR0aCQubmV4dCghIXggPyB0aGlzLmxlZnRCYXJXaWRlV2lkdGggOiB0aGlzLmxheW91dFNlcnZpY2UubGVmdEJhclRoaW5XaWR0aCk7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVzaXplU3RyZWFtJC5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKVxyXG4gICAgKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgIHRoaXMuZ2VvQ29tcHV0ZSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5jb2xvciA9IHRoaXMuY29sb3IhO1xyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuYmFja2dyb3VuZENvbG9yITtcclxuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5hY3RpdmVJdGVtQ29sb3IgPSB0aGlzLmFjdGl2ZUl0ZW1Db2xvciE7XHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuYWN0aXZlSXRlbUJhY2tncm91bmRDb2xvciA9IHRoaXMuYWN0aXZlSXRlbUJhY2tncm91bmRDb2xvciE7XHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuaG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmhvdmVyQmFja2dyb3VuZENvbG9yITtcclxuICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5zdWJNZW51U3ZnSWNvblJpZ2h0ID0gdGhpcy5zdWJNZW51U3ZnSWNvblJpZ2h0O1xyXG5cclxuICAgIHRoaXMubWVudUNsaWNrZWRJdGVtID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVudUN1cnJlbnRDbGlja2VkJykhKVxyXG4gICAgaWYgKCEhdGhpcy5tZW51Q2xpY2tlZEl0ZW0pIHtcclxuICAgICAgdGhpcy5tZW51Q2xpY2tlZEl0ZW0udHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5zaG93RWRpdFN2ZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5zaG93RWRpdFN2ZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGluZXJJdGVtcyQuc3Vic2NyaWJlKHggPT4ge1xyXG5cclxuICAgICAgICAgIGlmICghIXggJiYgeC5sZW5ndGggPiAwICYmIHRoaXMuY2hlY2tlZExvYWRpbmdNZW51ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheTogSU5hdmlnYXRvckl0ZW1bXSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlQYXJyZW50OiBJTmF2aWdhdG9ySXRlbVtdID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tZW51Q2xpY2tlZEl0ZW0/LnRyZWUkVGllciA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgYXJyYXkgPSB4LmZpbHRlcih5ID0+IHkuaWQgPT0gdGhpcy5tZW51Q2xpY2tlZEl0ZW0uaWQpXHJcbiAgICAgICAgICAgICAgYXJyYXlQYXJyZW50ID0geC5maWx0ZXIoeSA9PiB5LmlkID09IHRoaXMubWVudUNsaWNrZWRJdGVtLnRyZWUkUGFyZW50KVxyXG5cclxuICAgICAgICAgICAgICBpZiAoISFhcnJheS5sZW5ndGggJiYgISFhcnJheVBhcnJlbnQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBhcnJheVswXS50cmVlJFNlbGVjdGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWVudUNsaWNrZWRJdGVtLnRyZWUkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBhcnJheVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5UGFycmVudC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgYXJyYXlQYXJyZW50WzBdLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBhcnJheVBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tZW51LScgKyBhcnJheVBhcnJlbnRbMF0uaWQpXHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tZW51LScgKyBhcnJheVswXS5pZClcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdleHBhbmRlZCcpXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZWxzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxzLmlkID09IGFycmF5UGFycmVudFswXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGVscy50cmVlJENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkQ2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmlkID09IHRoaXMubWVudUNsaWNrZWRJdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlQYXJyZW50WzBdLnRyZWUkQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVswXS50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQyPy5jbGFzc0xpc3QuYWRkKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubWFwKGVscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkQ2hpbGRyZW4ubWFwKGVsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5pZCA9PSBhcnJheVswXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09IGVsLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQyPy5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1lbnVDbGlja2VkSXRlbT8udHJlZSRUaWVyID09IDMpIHsgLy9u4bq/dSBsw6AgMyBj4bqlcFxyXG4gICAgICAgICAgICAgIGFycmF5ID0geC5maWx0ZXIoeSA9PiB5LmlkID09IHRoaXMubWVudUNsaWNrZWRJdGVtLmlkKVxyXG4gICAgICAgICAgICAgIGFycmF5UGFycmVudCA9IHguZmlsdGVyKHkgPT4geS5pZCA9PSB0aGlzLm1lbnVDbGlja2VkSXRlbS50cmVlJFBhcmVudClcclxuICAgICAgICAgICAgICBsZXQgYXJyYXlHcmFuZFBhcnJlbnQgPSB4LmZpbHRlcih6ID0+IHouaWQgPT0gYXJyYXlQYXJyZW50WzBdLnBhcmVudClcclxuICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLW1lbnUtJyArIGFycmF5UGFycmVudFswXS5pZClcclxuICAgICAgICAgICAgICBsZXQgZWxlbWVudDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tZW51LScgKyBhcnJheUdyYW5kUGFycmVudFswXS5pZClcclxuICAgICAgICAgICAgICBhcnJheVswXS50cmVlJFNlbGVjdGVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIGFycmF5UGFycmVudFswXS50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBhcnJheVBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYXJyYXlHcmFuZFBhcnJlbnRbMF0udHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYXJyYXlHcmFuZFBhcnJlbnRbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChhcnJheUdyYW5kUGFycmVudFswXS50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Mj8uY2xhc3NMaXN0LmFkZCgnZXhwYW5kZWQnKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChlbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWxzLmlkID09IGFycmF5R3JhbmRQYXJyZW50WzBdLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVscy50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQyPy5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChhcnJheUdyYW5kUGFycmVudFswXS50cmVlJEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDI/LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQyPy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKGFycmF5UGFycmVudFswXS50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdleHBhbmRlZCcpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGVscyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbHMuaWQgPT0gYXJyYXlHcmFuZFBhcnJlbnRbMF0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbHMudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbHMudHJlZSRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHMudHJlZSRDaGlsZHJlbi5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmlkID09IGFycmF5UGFycmVudFswXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHgudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeC50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC50cmVlJENoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4LnRyZWUkQ2hpbGRyZW4ubWFwKHkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkuaWQgPT0gYXJyYXlbMF0uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS50cmVlJFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdleHBhbmRlZCcpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChhcnJheVBhcnJlbnRbMF0udHJlZSRBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2hlY2tlZExvYWRpbmdNZW51ID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0sIDIwMDApXHJcblxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZVJhd0RhdGFSZXNwb25zZUZvclJvb3RMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgYm9keS5pbm5lckJvZHkgPSBib2R5LmlubmVyQm9keS5maWx0ZXIoeCA9PiAheC5wYXJlbnQpO1xyXG4gICAgICBib2R5LmlubmVyQm9keS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGluIHJlY3Vyc2l2ZSBjb2RlIHdlIHdpbGwgcmVhZCBmcm9tIGJvdHRvbSB0byB0b3BcclxuICAgICAgICBpZiAoYS5vcmRlck51bWJlciA+IGIub3JkZXJOdW1iZXIpIHJldHVybiAtMTtcclxuICAgICAgICBpZiAoYS5vcmRlck51bWJlciA9PT0gYi5vcmRlck51bWJlcikgcmV0dXJuIDA7XHJcbiAgICAgICAgaWYgKGEub3JkZXJOdW1iZXIgPCBiLm9yZGVyTnVtYmVyKSByZXR1cm4gMTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxyXG4gICAgICAgIGJvZHkuaW5uZXJCb2R5LFxyXG4gICAgICAgIFwiaWRcIixcclxuICAgICAgICBcImNvZGVcIixcclxuICAgICAgICBcInBhcmVudFwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlLFxyXG4gICAgICAgIFwib3JkZXJOdW1cIlxyXG4gICAgICApLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uucm9vdE5hdmlnYXRvckl0ZW1zJC5uZXh0KHIubGlzdClcclxuICAgICAgICAvL3RoaXMubWVudVNlcnZpY2UubmF2aWdhdGlvbiQubmV4dChyLmxpc3QpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZVJhd0RhdGFSZXNwb25zZSh4OiBhbnkpIHtcclxuICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgIGJvZHkuaW5uZXJCb2R5LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gaW4gcmVjdXJzaXZlIGNvZGUgd2Ugd2lsbCByZWFkIGZyb20gYm90dG9tIHRvIHRvcFxyXG4gICAgICAgIGlmIChhLm9yZGVyTnVtYmVyID4gYi5vcmRlck51bWJlcikgcmV0dXJuIC0xO1xyXG4gICAgICAgIGlmIChhLm9yZGVyTnVtYmVyID09PSBiLm9yZGVyTnVtYmVyKSByZXR1cm4gMDtcclxuICAgICAgICBpZiAoYS5vcmRlck51bWJlciA8IGIub3JkZXJOdW1iZXIpIHJldHVybiAxO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmxpbmVySXRlbXMkLm5leHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShib2R5LmlubmVyQm9keSkpKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoXHJcbiAgICAgICAgICBib2R5LmlubmVyQm9keSxcclxuICAgICAgICAgIFwiaWRcIixcclxuICAgICAgICAgIFwiY29kZVwiLFxyXG4gICAgICAgICAgXCJwYXJlbnRcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlLFxyXG4gICAgICAgICAgXCJvcmRlck51bVwiXHJcbiAgICAgICAgKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gci5saXN0O1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3RMb2FkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb2R1bGVJZCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5hY3RpdmVSb290TWVudUl0ZW1JZCQudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50TW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgICBjb25zdCByb290SXRlbXNGaWx0ZXIgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2Uucm9vdE5hdmlnYXRvckl0ZW1zJC52YWx1ZT8uZmlsdGVyKHggPT4geC5pZCA9PT0gY3VycmVudE1vZHVsZUlkKTtcclxuICAgICAgICAgICAgICBpZiAoISFyb290SXRlbXNGaWx0ZXIgJiYgcm9vdEl0ZW1zRmlsdGVyLmxlbmd0aCAmJiByb290SXRlbXNGaWx0ZXJbMF0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvb3RJdGVtc0ZpbHRlclswXS51cmwpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9ob21lJylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL2hvbWUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzRmlyc3RMb2FkID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubGluZXJJdGVtcyA9IHIucmF3TGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYS5vcmRlck51bWJlciA+IGIub3JkZXJOdW1iZXIpIHJldHVybiAxO1xyXG4gICAgICAgICAgICBpZiAoYS5vcmRlck51bWJlciA9PT0gYi5vcmRlck51bWJlcikgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIGlmIChhLm9yZGVyTnVtYmVyIDwgYi5vcmRlck51bWJlcikgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLm5hdmlnYXRpb24kLm5leHQoci5saXN0KTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJnLWNvbG9yJywgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tY29sb3InLCB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY29sb3IpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhvdmVyLWJnLWNvbG9yJywgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmhvdmVyQmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ob3Zlci1jb2xvcicsIHRoaXMubmF2aWdhdG9yU2VydmljZS5ob3ZlckNvbG9yKTtcclxuXHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LW5hdi1jb2xvcicsIHRoaXMuc2Vjb25kYXJ5TmF2Q29sb3IpO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1uYXYtYmctY29sb3InLCB0aGlzLnNlY29uZGFyeU5hdkJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LW5hdi1ob3Zlci1jb2xvcicsIHRoaXMuc2Vjb25kYXJ5TmF2SG92ZXJDb2xvcik7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LW5hdi1ob3Zlci1iZy1jb2xvcicsIHRoaXMuc2Vjb25kYXJ5TmF2SG92ZXJCYWNrZ3JvdW5kQ29sb3IpO1xyXG5cclxuICAgICAgdGhpcy5saXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogaGFuZGxlIGNsaWNrIG91dHNpZGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgIXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2FuY2VsU2Vjb25kYXJ5TWVudSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICB0aGlzLmdlb0NvbXB1dGUoKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5sZWZ0YmFyUmVkdWNlZCQuc3Vic2NyaWJlKHggPT4gdGhpcy5sZWZ0YmFyUmVkdWNlZCA9IHgpXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmxlZnRCYXJDdXJyZW50V2lkdGgkLnN1YnNjcmliZSh4ID0+IHRoaXMubGVmdGJhckN1cnJlbnRXaWR0aCA9IHgpXHJcbiAgICAgIClcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMubWxzLnRyYW5zKCdVSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9IRVJFJykpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyZWFtJFxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHRleHQpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzID09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmZpbmRJdGVtKHRleHQsIHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLml0ZW1zPy5tYXAoKGl0ZW06IElOYXZpZ2F0b3JJdGVtKSA9PiB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZU5hdmlnYXRpb25JdGVtKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuaXRlbXNFcnJvcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc29sZS5ncm91cChcIk5hdmlnYXRpb24gaXRlbXMgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5pdGVtc0Vycm9ycz8ubWFwKGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmZpbHRlckJ5Um9vdElkTW9kZSkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5zeXNNZW51U2VydmljZS5yZWFkUGVybWl0dGVkTWVudSgpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlUmF3RGF0YVJlc3BvbnNlRm9yUm9vdExpc3QoeCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQucGlwZShcclxuICAgICAgICAgIGZpbHRlcih4ID0+ICEheCAmJiAoIXRoaXMuZmlsdGVyQnlSb290SWRNb2RlIHx8ICghIXRoaXMuZmlsdGVyQnlSb290SWRNb2RlICYmICEhdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmFjdGl2ZVJvb3RNZW51SXRlbUlkJC52YWx1ZSkpKSxcclxuICAgICAgICAgIG1hcCh4ID0+IHg/LmlkKSxcclxuICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5maWx0ZXJCeVJvb3RJZE1vZGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zeXNNZW51U2VydmljZS5yZWFkUGVybWl0dGVkTWVudUJ5Um9vdElkKHRoaXMubmF2aWdhdG9yU2VydmljZS5hY3RpdmVSb290TWVudUl0ZW1JZCQudmFsdWUgfHwgMClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zeXNNZW51U2VydmljZS5yZWFkUGVybWl0dGVkTWVudSgpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXNvbHZlUmF3RGF0YVJlc3BvbnNlKHgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmICghIXRoaXMuZmlsdGVyQnlSb290SWRNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuYWN0aXZlUm9vdE1lbnVJdGVtSWQkLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbHRlcih4ID0+ICEheCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmZpbHRlckJ5Um9vdElkTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzTWVudVNlcnZpY2UucmVhZFBlcm1pdHRlZE1lbnVCeVJvb3RJZCh4IHx8IDApXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN5c01lbnVTZXJ2aWNlLnJlYWRQZXJtaXR0ZWRNZW51KClcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVJhd0RhdGFSZXNwb25zZSh4KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY2xpY2tlZEl0ZW0kLnBpcGUoXHJcbiAgICAgICAgICB0YXAoeCA9PiB0aGlzLnNlY29uZGFyeU5hdlBhcmVudCA9IHgpLFxyXG4gICAgICAgICAgZmlsdGVyKHggPT4gISF4KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2soeCEpO1xyXG4gICAgICAgICAgaWYgKHg/LnRyZWUkQ2hpbGRyZW4gJiYgeD8udHJlZSRDaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoISF0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGl0ZW1BY3RpdmF0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcih5ID0+IHkgIT09IHggJiYgeS5pZCAhPT0geC50cmVlJFBhcmVudCAmJiB5LnRyZWUkU2VsZWN0ZWQgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICBpdGVtQWN0aXZhdGVkPy5tYXAoeiA9PiB6LnRyZWUkU2VsZWN0ZWQgPSBmYWxzZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghIXggJiYgISF4LnBhcmVudCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMubWFwKHBhcmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQudHJlZSRDaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY2hpbGQudHJlZSRDaGlsZHJlbi5sZW5ndGggPT0gMCAmJiBjaGlsZCAhPSB4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQudHJlZSRTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnRyZWUkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnRyZWUkQ2hpbGRyZW4ubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlkICE9IGsucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRyZWUkU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT0geCAmJiB4LnBhcmVudCAhPSBjaGlsZC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKHguaWQgPT0gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRyZWUkU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnBhcmVudCA9PSBjaGlsZC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRyZWUkU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGsudHJlZSRTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNlY29uZGFyeU5hdlBhcmVudCA9IHghO1xyXG4gICAgICAgICAgdGhpcy5zZWNvbmRhcnlOYXZDaGlsZHJlbiA9IHRoaXMubGluZXJJdGVtcy5maWx0ZXIoYSA9PiBhLnBhcmVudCA9PT0geD8uaWQpO1xyXG5cclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5saW5lckl0ZW1zJC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xyXG4gICAgICAgICAgaXRlbXM/Lm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbi1tZW51LScgKyB4LmlkKVxyXG4gICAgICAgICAgICBpZiAoeC50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZXhwYW5kZWQnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2V4cGFuZGVkJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoeC50cmVlJEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UoZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlYXJjaFN0cmVhbSQubmV4dChlKVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWFyY2goKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaEZvciA9IFwiXCI7XHJcbiAgICB0aGlzLnNlYXJjaFN0cmVhbSQubmV4dChcIlwiKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlTmF2aWdhdGlvbkl0ZW0oaXRlbTogSU5hdmlnYXRvckl0ZW0pIHtcclxuICAgIGlmICghISFpdGVtLmlkKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNFcnJvcnMucHVzaChgVmFsdWUgb2YgcHJvcGVydHkgXCJpZFwiIG9mIG5hdmlnYXRpb24gaXRlbSBcIiR7aXRlbS5jb2RlfVwiIGlzIG5vdCBzZXRgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmxhdE5hdmlnYXRpb25DaGVjay5maWx0ZXIoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZmxhdE5hdmlnYXRpb25DaGVjay5wdXNoKHtcclxuICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICBjb3VudDogMCxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLml0ZW1zRXJyb3JzLnB1c2goYER1cGxpY2F0ZWQgTmF2aWdhdGlvbiBpZCAke2l0ZW0uaWR9YCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKGl0ZW0pKSB7XHJcbiAgICAgIGl0ZW0udHJlZSRDaGlsZHJlbj8ubWFwKGNoaWxkID0+IHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlTmF2aWdhdGlvbkl0ZW0oY2hpbGQpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGhhc0NoaWxkcmVuKGl0ZW06IElOYXZpZ2F0b3JJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmIChrZXkgPT09IFwidHJlZSRDaGlsZHJlblwiKSB7XHJcbiAgICAgICAgaWYgKCEhaXRlbVsndHJlZSRDaGlsZHJlbiddPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpdGVtSGFzQ2hpbGRyZW4oaXRlbTogSU5hdmlnYXRvckl0ZW0pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKGtleSA9PT0gJ3RyZWUkQ2hpbGRyZW4nKSB7XHJcbiAgICAgICAgaWYgKCEhaXRlbVsndHJlZSRDaGlsZHJlbiddPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soaXRlbTogSU5hdmlnYXRvckl0ZW0pIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmxpbmVySXRlbXMkLnZhbHVlO1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuc2VmdFRvZ2dsZUV4cGFuZFNpYmxpbmdzQ29sbGFwc2UoY3VycmVudCwgaXRlbS5pZCk7XHJcbiAgICB0aGlzLmxpbmVySXRlbXMkLm5leHQoaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4ge1xyXG4gICAgICBpZiAoeCkgeC51bnN1YnNjcmliZSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNvbGxhcHNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLndpZGVNb2RlJC5uZXh0KCF0aGlzLm5hdmlnYXRvclNlcnZpY2Uud2lkZU1vZGUkLnZhbHVlKVxyXG4gIH1cclxuXHJcbiAgb25TZWNvbmRhcnlJdGVtQ2xpY2soaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY2xpY2tlZEl0ZW0kLm5leHQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBvblNlY29uZGFyeUhlYWRlckNsaWNrKHBhcmVudDogYW55KSB7XHJcbiAgICBpZiAoISFwYXJlbnQpIHtcclxuICAgICAgY29uc3QgdHJ5RmlsdGVyID0gdGhpcy5saW5lckl0ZW1zLmZpbHRlcih4ID0+IHguaWQgPT09IHBhcmVudCk7XHJcbiAgICAgIGlmICghIXRyeUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY2xpY2tlZEl0ZW0kLm5leHQodHJ5RmlsdGVyWzBdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbFNlY29uZGFyeU1lbnUoKSB7XHJcbiAgICB0aGlzLnNlY29uZGFyeU5hdlBhcmVudCA9IG51bGw7XHJcbiAgfVxyXG5cclxuXHJcblxyXG59IiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwibmF2aWdhdG9yLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgIHdpZHRoOiBsZWZ0YmFyQ3VycmVudFdpZHRoICsgJ3B4JyxcclxuICAgIGhlaWdodDogZnVsbEhlaWdodCArICdweCcsXHJcbiAgICBwYWRkaW5nVG9wOiBsYXlvdXRTZXJ2aWNlLm5hdmlndG9yVGhpbk1vZGVTcGFjaW5nICsgJ3B4JyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogbmF2aWdhdG9yU2VydmljZS5iYWNrZ3JvdW5kQ29sb3JcclxufVwiPlxyXG5cclxuICAgIEBpZiAod2lkZU1vZGUgJiYgIWhpZGVTZWFyY2gpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWFyY2gtY29udGFpbmVyXCIgW2NsYXNzLm9wYWNpdHkwXT1cIiEhbGVmdGJhclJlZHVjZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgd2lkdGg6IGxheW91dFNlcnZpY2UubGVmdEJhckN1cnJlbnRXaWR0aCQudmFsdWUgLSBsYXlvdXRTZXJ2aWNlLmxlZnRCYXJTZWNvbmRJY29uTGVmdCAtIGxheW91dFNlcnZpY2Uuc2Nyb2xsQmFyV2lkdGggLSAxICsgJ3B4J1xyXG4gICAgfVwiPlxyXG4gICAgICAgIDxpbnB1dCBpZD1cIm5hdmlnYXRvci1zZWFyY2hcIiBbcGxhY2Vob2xkZXJdPVwiJ1VJX0NPTU1PTl9QTEFDRV9IT0xERVJfU0VBUkNIX0hFUkUnIHwgdHJhbnNsYXRlOiBsYW5nXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEZvclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICBAaWYgKCEhc2VhcmNoRm9yLmxlbmd0aCkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY2xlYXItd3JhcHBlclwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgaWQ9XCJuYXZcIiBbY2xhc3Muc2lkZWJhcl09XCIhd2lkZU1vZGVcIj5cclxuICAgICAgICBAaWYgKCEhbG9hZGluZykge1xyXG4gICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZT48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPHVsIGlkPVwibWFpbi1tZW51XCIgI21haW5NZW51IFtzdHlsZV09XCInaGVpZ2h0OiAnICsgc2Nyb2xsSGVpZ2h0ICsgJ3B4OydcIiBbY2xhc3MudGhpbi1tb2RlXT1cIiF3aWRlTW9kZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5tZW51XT1cIiF3aWRlTW9kZVwiPlxyXG4gICAgICAgICAgICBAaWYgKCEhaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBAZm9yKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8YXBwLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtsZXZlbF09XCIxXCI+PC9hcHAtaXRlbT5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBAaWYgKCEhcmlnaHRJY29uKSB7XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhcmVudCByaWdodC1wYXJ0LWl0ZW1cIiBbY2xhc3MubWVudS1pdGVtXT1cIndpZGVNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmlnaHRJY29uLmZ1bmN0aW9uKClcIiBjbGFzcz1cIm5vLXZlcnRpY2FsLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtaWNvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCIncmlnaHQtaWNvbiAnICsgcmlnaHRJY29uLmZlYXRoZXJDbGFzc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWljb24tYmFkZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJpZ2h0SWNvbi5iYWRnZUNvdW50IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS10b2dnbGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhKG1lbnVTZXJ2aWNlLmlzT3BlbiQgfCBhc3luYylcIlxyXG4gICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ3aWRlTW9kZSA/ICgnVUlfTEVGVEJBUl9UT0dHTEVSX0NPTExBUFNFJyB8IHRyYW5zbGF0ZSA6IGxhbmcpIDogKCdVSV9MRUZUQkFSX1RPR0dMRVJfRVhQQU5EJyB8IHRyYW5zbGF0ZTogbGFuZylcIlxyXG4gICAgICAgICAgICBbc2hvd0FueXdheV09XCJ0cnVlXCIgcG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJ0b2dnbGVDb2xsYXBzZSgpXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGxheW91dFNlcnZpY2UubGVmdEJhckN1cnJlbnRXaWR0aCQudmFsdWUgLSA4ICogMiArICdweCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtdG9nZ2xlci1pbm5lclwiIFtjbGFzcy50aGluLW1vZGVdPVwiIXdpZGVNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1saW5lLXdyYXBwZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGxheW91dFNlcnZpY2UubGVmdEJhckN1cnJlbnRXaWR0aCQudmFsdWUgLSA4ICogMiArICdweCcsXHJcblxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjb3JlLWxpbmU+PC9jb3JlLWxpbmU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKHdpZGVNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNoZXZyb25zLWxlZnQgcC1yZWxhdGl2ZSBsMTNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNoZXZyb25zLXJpZ2h0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIEBpZiAod2lkZU1vZGUpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXJlbGF0aXZlIGwzMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnVUlfTEVGVEJBUl9UT0dHTEVSX0NPTExBUFNFJyB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghd2lkZU1vZGUgJiYgISFzZWNvbmRhcnlOYXZQYXJlbnQgJiYgISFzZWNvbmRhcnlOYXZDaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgIDxkaXYgI3NlY29uZGFyeSBpZD1cInNlY29uZGFyeS1uYXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgd2lkdGg6IHNlY29uZGFyeU5hdldpZHRoICsgJ3B4JyxcclxuICAgICAgICB0b3A6IHNlY29uZGFyeU5hdlRvcCArIDE1ICsgJ3B4JyxcclxuICAgICAgICBsZWZ0OiBsYXlvdXRTZXJ2aWNlLmxlZnRCYXJUaGluV2lkdGggKyAxNSArICdweCdcclxuICAgIH1cIj5cclxuICAgICAgICA8ZGl2IGlkPVwic2Vjb25kYXJ5LW5hdi1pbm5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwic2Vjb25kYXJ5LW5hdi1oZWFkZXJcIiBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiISFzZWNvbmRhcnlOYXZQYXJlbnQudHJlZSRQYXJlbnRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogc2Vjb25kYXJ5TmF2V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IHNlY29uZGFyeU5hdkhlYWRlckNvbG9yLFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzZWNvbmRhcnlOYXZIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgfVwiIChjbGljayk9XCJvblNlY29uZGFyeUhlYWRlckNsaWNrKHNlY29uZGFyeU5hdlBhcmVudC50cmVlJFBhcmVudClcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoISFzZWNvbmRhcnlOYXZQYXJlbnQudHJlZSRQYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1hcnJvdy1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2FwcFRvb2x0aXBdPVwic2Vjb25kYXJ5TmF2UGFyZW50LmNvZGUgfCB0cmFuc2xhdGU6IGxhbmcgfCB1cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWNvbmRhcnlOYXZQYXJlbnQuY29kZSB8IHRyYW5zbGF0ZTogbGFuZyB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy13cmFwcGVyIGN1cnNvci1wb2ludGVyIGQtbm9uZVwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsU2Vjb25kYXJ5TWVudSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwic2Vjb25kYXJ5LW5hdi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogc2Vjb25kYXJ5TmF2SGVpZ2h0IC0gNTAgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBzZWNvbmRhcnlOYXZDb2xvcixcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlY29uZGFyeU5hdkJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yKGl0IG9mIHNlY29uZGFyeU5hdkNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYXJlbnRcIiAoY2xpY2spPVwib25TZWNvbmRhcnlJdGVtQ2xpY2soaXQpXCIgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCJpdC50cmVlJEhhc0NoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFthcHBUb29sdGlwXT1cIml0LmNvZGUgfCB0cmFuc2xhdGU6IGxhbmcgfCB1cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0LnRyZWUkVGl0bGUgfCB0cmFuc2xhdGU6IGxhbmcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0LnRyZWUkSGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93LXdyYXBwZXJcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1hcnJvdy1yaWdodFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmIChzaG93RWRpdFN2Zykge1xyXG4gICAgPG1lbnUtaXRlbS1zdmctZWRpdD48L21lbnUtaXRlbS1zdmctZWRpdD5cclxuICAgIH1cclxuXHJcbjwvZGl2PiJdfQ==
|