barsa-sap-ui 2.0.123 → 2.0.124

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.
@@ -73,11 +73,11 @@ export class UlvContextMenuComponent extends BaseComponent {
73
73
  this._popoverCmp.close();
74
74
  }
75
75
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UlvContextMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
76
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: { onlyOverflow: "onlyOverflow", rightClickEnable: "rightClickEnable", deviceName: "deviceName", menuItems: "menuItems", allColumns: "allColumns", index: "index", mo: "mo", styleIndex: "styleIndex", conditionalFormats: "conditionalFormats", disableOverflowContextMenu: "disableOverflowContextMenu", footerMode: "footerMode", appendTo: "appendTo" }, outputs: { commandClick: "commandClick" }, host: { properties: { "class.disableOverflow": "this._disableOverflow" } }, viewQueries: [{ propertyName: "_popoverCmp", first: true, predicate: PopoverComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (footerMode) {\n<div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-right>\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n @for (cmd of menuItems; track cmd) {\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n </fd-toolbar>\n </ng-template>\n</div>\n} @else if(rightClickEnable){\n<ng-container\n *ngTemplateOutlet=\"\n overflowCommands;\n context: { $implicit: menuItems, index: index, hideBtn: true, appendTo: appendTo, showText: true }\n \"\n></ng-container>\n}@else{\n<ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n></ng-container>\n}\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n @for (cmd of commands; track cmd) {\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n</ng-template>\n\n<ng-template\n #overflowCommands\n let-commands\n let-index=\"index\"\n let-hideBtn=\"hideBtn\"\n let-appendTo=\"appendTo\"\n let-showText=\"showText\"\n>\n <fd-popover\n placement=\"bottom\"\n [(isOpen)]=\"isOpenOverflow\"\n [closeOnOutsideClick]=\"true\"\n [noArrow]=\"true\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control #popover>\n @if(!hideBtn){\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n }\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list class=\"ulv-overflow-buttons\">\n @for (cmd of commands; track cmd) {\n <li fd-list-item>\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n }\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n @for (btnCommand of cmd.menu.items; track btnCommand) {\n <li\n fd-menu-item\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text | bbbTranslate }}</span>\n </div>\n </li>\n }\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [label]=\"cmd.Command?.NewIcon && cmd.Command?.JsonExtraProp?.Icon ? (cmd.text | bbbTranslate) : ''\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n [disabled]=\"cmd.Command?._isEnable === false\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <!-- \u0686\u0648\u0646 \u0639\u06A9\u0633 \u062F\u0631 \u0633\u0645\u062A \u0631\u0627\u0633\u062A \u0642\u0631\u0627\u0631 \u0628\u06AF\u06CC\u0631\u062F \u0627\u0632 \u0644\u06CC\u0628\u0644 \u062F\u06A9\u0645\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u06A9\u0631\u062F\u0645 -->\n @if (!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon) {\n <img [src]=\"cmd.icon\" />\n }\n <span *ngIf=\"true || !(cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon)\">{{\n cmd.text | bbbTranslate\n }}</span>\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormToolbaritemComponent, selector: "bnrc-dynamic-form-toolbaritem", inputs: ["mo", "index", "deviceName", "deviceSize", "context", "btn", "isEnable", "showText", "allColumns", "conditionalFormats"], outputs: ["btnClick"] }, { kind: "directive", type: i2.UlvCommandDirective, selector: "[ulvCommandHandler]", inputs: ["ulvCommandHandler", "disable"], outputs: ["commandClick"] }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "component", type: i6.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i6.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i6.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i6.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i8.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "glyphFont", "disabled", "fdType", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: { onlyOverflow: "onlyOverflow", rightClickEnable: "rightClickEnable", deviceName: "deviceName", menuItems: "menuItems", allColumns: "allColumns", index: "index", mo: "mo", styleIndex: "styleIndex", conditionalFormats: "conditionalFormats", disableOverflowContextMenu: "disableOverflowContextMenu", footerMode: "footerMode", appendTo: "appendTo" }, outputs: { commandClick: "commandClick" }, host: { properties: { "class.disableOverflow": "this._disableOverflow" } }, viewQueries: [{ propertyName: "_popoverCmp", first: true, predicate: PopoverComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (footerMode) {\n<div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-right>\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\" [shouldOverflow]=\"true\">\n @for (cmd of menuItems; track cmd) {\n <span fd-toolbar-item>\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </span>\n }\n </fd-toolbar>\n </ng-template>\n</div>\n} @else if(rightClickEnable){\n<ng-container\n *ngTemplateOutlet=\"\n overflowCommands;\n context: { $implicit: menuItems, index: index, hideBtn: true, appendTo: appendTo, showText: true }\n \"\n></ng-container>\n}@else{\n<ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n></ng-container>\n}\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n @for (cmd of commands; track cmd) {\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n</ng-template>\n\n<ng-template\n #overflowCommands\n let-commands\n let-index=\"index\"\n let-hideBtn=\"hideBtn\"\n let-appendTo=\"appendTo\"\n let-showText=\"showText\"\n>\n <fd-popover\n placement=\"bottom\"\n [(isOpen)]=\"isOpenOverflow\"\n [closeOnOutsideClick]=\"true\"\n [noArrow]=\"true\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control #popover>\n @if(!hideBtn){\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n }\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list class=\"ulv-overflow-buttons\">\n @for (cmd of commands; track cmd) {\n <li fd-list-item>\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n }\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n @for (btnCommand of cmd.menu.items; track btnCommand) {\n <li\n fd-menu-item\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text | bbbTranslate }}</span>\n </div>\n </li>\n }\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [label]=\"cmd.Command?.NewIcon && cmd.Command?.JsonExtraProp?.Icon ? (cmd.text | bbbTranslate) : ''\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n [disabled]=\"cmd.Command?._isEnable === false\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <!-- \u0686\u0648\u0646 \u0639\u06A9\u0633 \u062F\u0631 \u0633\u0645\u062A \u0631\u0627\u0633\u062A \u0642\u0631\u0627\u0631 \u0628\u06AF\u06CC\u0631\u062F \u0627\u0632 \u0644\u06CC\u0628\u0644 \u062F\u06A9\u0645\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u06A9\u0631\u062F\u0645 -->\n @if (!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon) {\n <img [src]=\"cmd.icon\" />\n }\n <span *ngIf=\"true || !(cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon)\">{{\n cmd.text | bbbTranslate\n }}</span>\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DynamicFormToolbaritemComponent, selector: "bnrc-dynamic-form-toolbaritem", inputs: ["mo", "index", "deviceName", "deviceSize", "context", "btn", "isEnable", "showText", "allColumns", "conditionalFormats"], outputs: ["btnClick"] }, { kind: "directive", type: i2.UlvCommandDirective, selector: "[ulvCommandHandler]", inputs: ["ulvCommandHandler", "disable"], outputs: ["commandClick"] }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i5.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "component", type: i6.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i6.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i6.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i6.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i8.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "glyphFont", "disabled", "fdType", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i9.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i9.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
77
  }
78
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: UlvContextMenuComponent, decorators: [{
79
79
  type: Component,
80
- args: [{ selector: 'bsu-ulv-context-menu,[ulvContextMenu]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (footerMode) {\n<div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-right>\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\n @for (cmd of menuItems; track cmd) {\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n </fd-toolbar>\n </ng-template>\n</div>\n} @else if(rightClickEnable){\n<ng-container\n *ngTemplateOutlet=\"\n overflowCommands;\n context: { $implicit: menuItems, index: index, hideBtn: true, appendTo: appendTo, showText: true }\n \"\n></ng-container>\n}@else{\n<ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n></ng-container>\n}\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n @for (cmd of commands; track cmd) {\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n</ng-template>\n\n<ng-template\n #overflowCommands\n let-commands\n let-index=\"index\"\n let-hideBtn=\"hideBtn\"\n let-appendTo=\"appendTo\"\n let-showText=\"showText\"\n>\n <fd-popover\n placement=\"bottom\"\n [(isOpen)]=\"isOpenOverflow\"\n [closeOnOutsideClick]=\"true\"\n [noArrow]=\"true\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control #popover>\n @if(!hideBtn){\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n }\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list class=\"ulv-overflow-buttons\">\n @for (cmd of commands; track cmd) {\n <li fd-list-item>\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n }\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n @for (btnCommand of cmd.menu.items; track btnCommand) {\n <li\n fd-menu-item\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text | bbbTranslate }}</span>\n </div>\n </li>\n }\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [label]=\"cmd.Command?.NewIcon && cmd.Command?.JsonExtraProp?.Icon ? (cmd.text | bbbTranslate) : ''\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n [disabled]=\"cmd.Command?._isEnable === false\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <!-- \u0686\u0648\u0646 \u0639\u06A9\u0633 \u062F\u0631 \u0633\u0645\u062A \u0631\u0627\u0633\u062A \u0642\u0631\u0627\u0631 \u0628\u06AF\u06CC\u0631\u062F \u0627\u0632 \u0644\u06CC\u0628\u0644 \u062F\u06A9\u0645\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u06A9\u0631\u062F\u0645 -->\n @if (!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon) {\n <img [src]=\"cmd.icon\" />\n }\n <span *ngIf=\"true || !(cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon)\">{{\n cmd.text | bbbTranslate\n }}</span>\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"] }]
80
+ args: [{ selector: 'bsu-ulv-context-menu,[ulvContextMenu]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (footerMode) {\n<div fd-bar barDesign=\"footer\" [cozy]=\"false\" style=\"width: 100%\">\n <div fd-bar-right>\n <ng-container *ngTemplateOutlet=\"footerToolbarTpl\"></ng-container>\n </div>\n <ng-template #footerToolbarTpl>\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\" [shouldOverflow]=\"true\">\n @for (cmd of menuItems; track cmd) {\n <span fd-toolbar-item>\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: { $implicit: cmd }\"></ng-container>\n </span>\n }\n </fd-toolbar>\n </ng-template>\n</div>\n} @else if(rightClickEnable){\n<ng-container\n *ngTemplateOutlet=\"\n overflowCommands;\n context: { $implicit: menuItems, index: index, hideBtn: true, appendTo: appendTo, showText: true }\n \"\n></ng-container>\n}@else{\n<ng-container\n *ngTemplateOutlet=\"\n overflowMode && !disableOverflowContextMenu ? overflowCommands : simpleCommands;\n context: { $implicit: menuItems, index: index }\n \"\n></ng-container>\n}\n\n<ng-template #simpleCommands let-commands let-index=\"index\">\n @for (cmd of commands; track cmd) {\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n }\n</ng-template>\n\n<ng-template\n #overflowCommands\n let-commands\n let-index=\"index\"\n let-hideBtn=\"hideBtn\"\n let-appendTo=\"appendTo\"\n let-showText=\"showText\"\n>\n <fd-popover\n placement=\"bottom\"\n [(isOpen)]=\"isOpenOverflow\"\n [closeOnOutsideClick]=\"true\"\n [noArrow]=\"true\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control #popover>\n @if(!hideBtn){\n <button fd-button (click)=\"onOpenOverflow($event)\" [fdType]=\"'transparent'\" [glyph]=\"'overflow'\"></button>\n }\n </fd-popover-control>\n <fd-popover-body>\n <ul fd-list class=\"ulv-overflow-buttons\">\n @for (cmd of commands; track cmd) {\n <li fd-list-item>\n <ng-container *ngTemplateOutlet=\"menuButtonTemplate; context: { $implicit: cmd }\"></ng-container>\n </li>\n }\n </ul>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template #menuButtonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"cmd.menu ? menuTemplate : buttonTemplate; context: { $implicit: cmd }\"\n ></ng-container>\n</ng-template>\n<ng-template #menuTemplate let-cmd>\n <fd-split-button fd-toolbar-item [mainAction]=\"{ mainActionTitle: cmd.text, keepMainAction: true }\">\n <fd-menu>\n @for (btnCommand of cmd.menu.items; track btnCommand) {\n <li\n fd-menu-item\n #liEl\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"liEl\"\n (click)=\"onCommandSplitButtonClick($event, btnCommand)\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ btnCommand.text | bbbTranslate }}</span>\n </div>\n </li>\n }\n </fd-menu>\n </fd-split-button>\n</ng-template>\n<ng-template #buttonTemplate let-cmd>\n <ng-container\n *ngTemplateOutlet=\"\n cmd?.Command?.CustomUi ? customButtonTemplate : defaultButtonTemplate;\n context: { $implicit: cmd }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #defaultButtonTemplate let-cmd>\n <button\n fd-button\n #btnEl\n [fdType]=\"cmd.Command?.JsonExtraProp?.Design ? cmd.Command?.JsonExtraProp.Design : 'transparent'\"\n [glyph]=\"cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon || ''\"\n [ulvCommandHandler]=\"cmd\"\n [label]=\"cmd.Command?.NewIcon && cmd.Command?.JsonExtraProp?.Icon ? (cmd.text | bbbTranslate) : ''\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"cmd.text\"\n [hostEl]=\"btnEl\"\n [disabled]=\"cmd.Command?._isEnable === false\"\n (commandClick)=\"onCommandClick($event)\"\n >\n <!-- \u0686\u0648\u0646 \u0639\u06A9\u0633 \u062F\u0631 \u0633\u0645\u062A \u0631\u0627\u0633\u062A \u0642\u0631\u0627\u0631 \u0628\u06AF\u06CC\u0631\u062F \u0627\u0632 \u0644\u06CC\u0628\u0644 \u062F\u06A9\u0645\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u06A9\u0631\u062F\u0645 -->\n @if (!cmd.Command?.NewIcon && !cmd.Command?.JsonExtraProp?.Icon) {\n <img [src]=\"cmd.icon\" />\n }\n <span *ngIf=\"true || !(cmd.Command?.NewIcon || cmd.Command?.JsonExtraProp?.Icon)\">{{\n cmd.text | bbbTranslate\n }}</span>\n </button>\n</ng-template>\n<ng-template #customButtonTemplate let-cmd>\n <div\n #hostEl\n [dbName]=\"cmd.text\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"hostEl\"\n [styleIndex]=\"styleIndex\"\n >\n <bnrc-dynamic-form-toolbaritem\n fd-toolbar-item\n [ulvCommandHandler]=\"cmd\"\n [component]=\"cmd.Command?.CustomUi\"\n [mo]=\"mo\"\n [context]=\"cmd\"\n [showText]=\"disableOverflowContextMenu === false\"\n [deviceName]=\"deviceName\"\n [index]=\"index\"\n [isEnable]=\"cmd.Command?._isEnable || cmd.Command?.UseForSingle\"\n [allColumns]=\"allColumns\"\n (btnClick)=\"onCommandClick($event)\"\n ></bnrc-dynamic-form-toolbaritem>\n </div>\n</ng-template>\n", styles: [":host{display:flex;justify-content:center;align-items:center}:host ::ng-deep button{margin-top:0!important}:host ::ng-deep .fd-popover-custom{max-width:none}:host.disableOverflow{column-gap:5px}button{align-items:center}button div{display:flex}button ::ng-deep span{height:auto!important}\n"] }]
81
81
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { _popoverCmp: [{
82
82
  type: ViewChild,
83
83
  args: [PopoverComponent]
@@ -111,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
111
111
  type: HostBinding,
112
112
  args: ['class.disableOverflow']
113
113
  }] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2LWNvbnRleHQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91bHYtY29udGV4dC1tZW51L3Vsdi1jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LWNvbnRleHQtbWVudS91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBcUQsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUXhHLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxhQUFhO0lBa0J0RDs7T0FFRztJQUNILFlBQXNCLElBQXVCO1FBQ3pDLEtBQUssRUFBRSxDQUFDO1FBRFUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFQbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ1gscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBUS9ELENBQUM7SUFDRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQywwQkFBMEIsS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEYsSUFBSSxDQUFD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ICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBEZXZpY2VTaXplLCBNZXRhb2JqZWN0RGF0YU1vZGVsLCBSZXBvcnRWaWV3Q29sdW1uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11bHYtY29udGV4dC1tZW51LFt1bHZDb250ZXh0TWVudV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWx2Q29udGV4dE1lbnVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpIF9wb3BvdmVyQ21wOiBQb3BvdmVyQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIG9ubHlPdmVyZmxvdzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldmljZU5hbWU6IERldmljZVNpemU7XG4gICAgQElucHV0KCkgbWVudUl0ZW1zOiBhbnlbXTtcbiAgICBASW5wdXQoKSBhbGxDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtbzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBzdHlsZUluZGV4OiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBjb25kaXRpb25hbEZvcm1hdHM6IGFueVtdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3Rlck1vZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXBwZW5kVG86IEhUTUxFbGVtZW50O1xuICAgIEBPdXRwdXQoKSBjb21tYW5kQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVPdmVyZmxvdycpIF9kaXNhYmxlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICBpc09wZW5PdmVyZmxvdzogYm9vbGVhbjtcbiAgICBvdmVyZmxvd01vZGU6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMub3ZlcmZsb3dNb2RlID0gdGhpcy5tZW51SXRlbXMubGVuZ3RoID4gMTtcbiAgICAgICAgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSAmJj0gdGhpcy5kZXZpY2VOYW1lID09PSAnbW9iaWxlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGlzYWJsZU92ZXJmbG93ID0gdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBtZW51SXRlbXMgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmIChtZW51SXRlbXMgJiYgIW1lbnVJdGVtcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbW1hbmRDbGljayhlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21tYW5kQ2xpY2suZW1pdChlKTtcbiAgICB9XG4gICAgb25PcGVuT3ZlcmZsb3coZSk6IHZvaWQge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaXNPcGVuT3ZlcmZsb3cgPSB0cnVlO1xuICAgIH1cbiAgICBvbkNvbW1hbmRTcGxpdEJ1dHRvbkNsaWNrKGUsIGJ0bik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ29tbWFuZENsaWNrKGUpO1xuICAgICAgICBpZiAoYnRuLkNvbW1hbmQgJiYgYnRuLkNvbW1hbmQuSGFuZGxlcikge1xuICAgICAgICAgICAgYnRuLkNvbW1hbmQuSGFuZGxlcihidG4pO1xuICAgICAgICB9IGVsc2UgaWYgKGJ0bi5oYW5kbGVyKSB7XG4gICAgICAgICAgICBidG4uaGFuZGxlci5iaW5kKGJ0bi5zY29wZSkoYnRuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIE9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyQ21wLm9wZW4oKTtcbiAgICB9XG4gICAgT3BlblBvcG92ZXJBdCh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyQ21wLmFwcGx5TmV3UG9zaXRpb24oW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiB4LFxuICAgICAgICAgICAgICAgIG9mZnNldFk6IHlcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJDbXAub3BlbigpO1xuICAgIH1cbiAgICBDbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJDbXAuY2xvc2UoKTtcbiAgICB9XG59XG4iLCJAaWYgKGZvb3Rlck1vZGUpIHtcbjxkaXYgZmQtYmFyIGJhckRlc2lnbj1cImZvb3RlclwiIFtjb3p5XT1cImZhbHNlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVG9vbGJhclRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyVG9vbGJhclRwbD5cbiAgICAgICAgPGZkLXRvb2xiYXIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgQGZvciAoY21kIG9mIG1lbnVJdGVtczsgdHJhY2sgY21kKSB7XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjbWQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxufSBAZWxzZSBpZihyaWdodENsaWNrRW5hYmxlKXtcbjxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBvdmVyZmxvd0NvbW1hbmRzO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbWVudUl0ZW1zLCBpbmRleDogaW5kZXgsIGhpZGVCdG46IHRydWUsIGFwcGVuZFRvOiBhcHBlbmRUbywgc2hvd1RleHQ6IHRydWUgfVxuICAgIFwiXG4+PC9uZy1jb250YWluZXI+XG59QGVsc2V7XG48bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgb3ZlcmZsb3dNb2RlICYmICFkaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSA/IG92ZXJmbG93Q29tbWFuZHMgOiBzaW1wbGVDb21tYW5kcztcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lbnVJdGVtcywgaW5kZXg6IGluZGV4IH1cbiAgICBcIlxuPjwvbmctY29udGFpbmVyPlxufVxuXG48bmctdGVtcGxhdGUgI3NpbXBsZUNvbW1hbmRzIGxldC1jb21tYW5kcyBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgIEBmb3IgKGNtZCBvZiBjb21tYW5kczsgdHJhY2sgY21kKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI292ZXJmbG93Q29tbWFuZHNcbiAgICBsZXQtY29tbWFuZHNcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgbGV0LWhpZGVCdG49XCJoaWRlQnRuXCJcbiAgICBsZXQtYXBwZW5kVG89XCJhcHBlbmRUb1wiXG4gICAgbGV0LXNob3dUZXh0PVwic2hvd1RleHRcIlxuPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgIFsoaXNPcGVuKV09XCJpc09wZW5PdmVyZmxvd1wiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICAgICAgICBbbm9BcnJvd109XCJ0cnVlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2wgI3BvcG92ZXI+XG4gICAgICAgICAgICBAaWYoIWhpZGVCdG4pe1xuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gKGNsaWNrKT1cIm9uT3Blbk92ZXJmbG93KCRldmVudClcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbZ2x5cGhdPVwiJ292ZXJmbG93J1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDx1bCBmZC1saXN0IGNsYXNzPVwidWx2LW92ZXJmbG93LWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjbWQgb2YgY29tbWFuZHM7IHRyYWNrIGNtZCkge1xuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51QnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjbWQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZW51QnV0dG9uVGVtcGxhdGUgbGV0LWNtZD5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY21kLm1lbnUgPyBtZW51VGVtcGxhdGUgOiBidXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtZW51VGVtcGxhdGUgbGV0LWNtZD5cbiAgICA8ZmQtc3BsaXQtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBbbWFpbkFjdGlvbl09XCJ7IG1haW5BY3Rpb25UaXRsZTogY21kLnRleHQsIGtlZXBNYWluQWN0aW9uOiB0cnVlIH1cIj5cbiAgICAgICAgPGZkLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChidG5Db21tYW5kIG9mIGNtZC5tZW51Lml0ZW1zOyB0cmFjayBidG5Db21tYW5kKSB7XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICBmZC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAjbGlFbFxuICAgICAgICAgICAgICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkYk5hbWVdPVwiY21kLnRleHRcIlxuICAgICAgICAgICAgICAgIFtob3N0RWxdPVwibGlFbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29tbWFuZFNwbGl0QnV0dG9uQ2xpY2soJGV2ZW50LCBidG5Db21tYW5kKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7IGJ0bkNvbW1hbmQudGV4dCB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtbWVudT5cbiAgICA8L2ZkLXNwbGl0LWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgY21kPy5Db21tYW5kPy5DdXN0b21VaSA/IGN1c3RvbUJ1dHRvblRlbXBsYXRlIDogZGVmYXVsdEJ1dHRvblRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPGJ1dHRvblxuICAgICAgICBmZC1idXR0b25cbiAgICAgICAgI2J0bkVsXG4gICAgICAgIFtmZFR5cGVdPVwiY21kLkNvbW1hbmQ/Lkpzb25FeHRyYVByb3A/LkRlc2lnbiA/IGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wLkRlc2lnbiA6ICd0cmFuc3BhcmVudCdcIlxuICAgICAgICBbZ2x5cGhdPVwiY21kLkNvbW1hbmQ/Lk5ld0ljb24gfHwgY21kLkNvbW1hbmQ/Lkpzb25FeHRyYVByb3A/Lkljb24gfHwgJydcIlxuICAgICAgICBbdWx2Q29tbWFuZEhhbmRsZXJdPVwiY21kXCJcbiAgICAgICAgW2xhYmVsXT1cImNtZC5Db21tYW5kPy5OZXdJY29uICYmIGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wPy5JY29uID8gKGNtZC50ZXh0IHwgYmJiVHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICBbZGJOYW1lXT1cImNtZC50ZXh0XCJcbiAgICAgICAgW2hvc3RFbF09XCJidG5FbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjbWQuQ29tbWFuZD8uX2lzRW5hYmxlID09PSBmYWxzZVwiXG4gICAgICAgIChjb21tYW5kQ2xpY2spPVwib25Db21tYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8IS0tINqG2YjZhiDYudqp2LMg2K/YsSDYs9mF2Kog2LHYp9iz2Kog2YLYsdin2LEg2Kjar9uM2LHYryDYp9iyINmE24zYqNmEINiv2qnZhdmHINin2LPYqtmB2KfYr9mHINmG2qnYsdiv2YUgLS0+XG4gICAgICAgIEBpZiAoIWNtZC5Db21tYW5kPy5OZXdJY29uICYmICFjbWQuQ29tbWFuZD8uSnNvbkV4dHJhUHJvcD8uSWNvbikge1xuICAgICAgICA8aW1nIFtzcmNdPVwiY21kLmljb25cIiAvPlxuICAgICAgICB9XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidHJ1ZSB8fCAhKGNtZC5Db21tYW5kPy5OZXdJY29uIHx8IGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wPy5JY29uKVwiPnt7XG4gICAgICAgICAgICBjbWQudGV4dCB8IGJiYlRyYW5zbGF0ZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2N1c3RvbUJ1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPGRpdlxuICAgICAgICAjaG9zdEVsXG4gICAgICAgIFtkYk5hbWVdPVwiY21kLnRleHRcIlxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJob3N0RWxcIlxuICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICA+XG4gICAgICAgIDxibnJjLWR5bmFtaWMtZm9ybS10b29sYmFyaXRlbVxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbdWx2Q29tbWFuZEhhbmRsZXJdPVwiY21kXCJcbiAgICAgICAgICAgIFtjb21wb25lbnRdPVwiY21kLkNvbW1hbmQ/LkN1c3RvbVVpXCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbY29udGV4dF09XCJjbWRcIlxuICAgICAgICAgICAgW3Nob3dUZXh0XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51ID09PSBmYWxzZVwiXG4gICAgICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbaXNFbmFibGVdPVwiY21kLkNvbW1hbmQ/Ll9pc0VuYWJsZSB8fCBjbWQuQ29tbWFuZD8uVXNlRm9yU2luZ2xlXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgKGJ0bkNsaWNrKT1cIm9uQ29tbWFuZENsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9ibnJjLWR5bmFtaWMtZm9ybS10b29sYmFyaXRlbT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2LWNvbnRleHQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi91bHYtY29udGV4dC1tZW51L3Vsdi1jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWx2LWNvbnRleHQtbWVudS91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBcUQsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUXhHLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxhQUFhO0lBa0J0RDs7T0FFRztJQUNILFlBQXNCLElBQXVCO1FBQ3pDLEtBQUssRUFBRSxDQUFDO1FBRFUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFQbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ1gscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBUS9ELENBQUM7SUFDRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQywwQkFBMEIsS0FBSyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM5QixJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBQ0QsY0FBYyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsY0FBYyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsR0FBRztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7WUFDOUI7Z0JBQ0ksT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2FBQ2I7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQXpFUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixxbEJBQ3JCLGdCQUFnQiw0RkN2Qi9CLHdwTEFzSkE7OzJGRGhJYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksdUNBQXVDLG1CQUdoQyx1QkFBdUIsQ0FBQyxNQUFNO3NGQUdsQixXQUFXO3NCQUF2QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDbEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQytCLGdCQUFnQjtzQkFBckQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBEZXZpY2VTaXplLCBNZXRhb2JqZWN0RGF0YU1vZGVsLCBSZXBvcnRWaWV3Q29sdW1uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS11bHYtY29udGV4dC1tZW51LFt1bHZDb250ZXh0TWVudV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91bHYtY29udGV4dC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVWx2Q29udGV4dE1lbnVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpIF9wb3BvdmVyQ21wOiBQb3BvdmVyQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIG9ubHlPdmVyZmxvdzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldmljZU5hbWU6IERldmljZVNpemU7XG4gICAgQElucHV0KCkgbWVudUl0ZW1zOiBhbnlbXTtcbiAgICBASW5wdXQoKSBhbGxDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XG4gICAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtbzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBzdHlsZUluZGV4OiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSBjb25kaXRpb25hbEZvcm1hdHM6IGFueVtdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3Rlck1vZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXBwZW5kVG86IEhUTUxFbGVtZW50O1xuICAgIEBPdXRwdXQoKSBjb21tYW5kQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVPdmVyZmxvdycpIF9kaXNhYmxlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICBpc09wZW5PdmVyZmxvdzogYm9vbGVhbjtcbiAgICBvdmVyZmxvd01vZGU6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMub3ZlcmZsb3dNb2RlID0gdGhpcy5tZW51SXRlbXMubGVuZ3RoID4gMTtcbiAgICAgICAgdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSAmJj0gdGhpcy5kZXZpY2VOYW1lID09PSAnbW9iaWxlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5fZGlzYWJsZU92ZXJmbG93ID0gdGhpcy5kaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgY29uc3QgeyBtZW51SXRlbXMgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmIChtZW51SXRlbXMgJiYgIW1lbnVJdGVtcy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbW1hbmRDbGljayhlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21tYW5kQ2xpY2suZW1pdChlKTtcbiAgICB9XG4gICAgb25PcGVuT3ZlcmZsb3coZSk6IHZvaWQge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaXNPcGVuT3ZlcmZsb3cgPSB0cnVlO1xuICAgIH1cbiAgICBvbkNvbW1hbmRTcGxpdEJ1dHRvbkNsaWNrKGUsIGJ0bik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ29tbWFuZENsaWNrKGUpO1xuICAgICAgICBpZiAoYnRuLkNvbW1hbmQgJiYgYnRuLkNvbW1hbmQuSGFuZGxlcikge1xuICAgICAgICAgICAgYnRuLkNvbW1hbmQuSGFuZGxlcihidG4pO1xuICAgICAgICB9IGVsc2UgaWYgKGJ0bi5oYW5kbGVyKSB7XG4gICAgICAgICAgICBidG4uaGFuZGxlci5iaW5kKGJ0bi5zY29wZSkoYnRuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIE9wZW5Qb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyQ21wLm9wZW4oKTtcbiAgICB9XG4gICAgT3BlblBvcG92ZXJBdCh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyQ21wLmFwcGx5TmV3UG9zaXRpb24oW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiB4LFxuICAgICAgICAgICAgICAgIG9mZnNldFk6IHlcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJDbXAub3BlbigpO1xuICAgIH1cbiAgICBDbG9zZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJDbXAuY2xvc2UoKTtcbiAgICB9XG59XG4iLCJAaWYgKGZvb3Rlck1vZGUpIHtcbjxkaXYgZmQtYmFyIGJhckRlc2lnbj1cImZvb3RlclwiIFtjb3p5XT1cImZhbHNlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVG9vbGJhclRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyVG9vbGJhclRwbD5cbiAgICAgICAgPGZkLXRvb2xiYXIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiIFtzaG91bGRPdmVyZmxvd109XCJ0cnVlXCI+XG4gICAgICAgICAgICBAZm9yIChjbWQgb2YgbWVudUl0ZW1zOyB0cmFjayBjbWQpIHtcbiAgICAgICAgICAgIDxzcGFuIGZkLXRvb2xiYXItaXRlbT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjbWQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxufSBAZWxzZSBpZihyaWdodENsaWNrRW5hYmxlKXtcbjxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBvdmVyZmxvd0NvbW1hbmRzO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbWVudUl0ZW1zLCBpbmRleDogaW5kZXgsIGhpZGVCdG46IHRydWUsIGFwcGVuZFRvOiBhcHBlbmRUbywgc2hvd1RleHQ6IHRydWUgfVxuICAgIFwiXG4+PC9uZy1jb250YWluZXI+XG59QGVsc2V7XG48bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgb3ZlcmZsb3dNb2RlICYmICFkaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudSA/IG92ZXJmbG93Q29tbWFuZHMgOiBzaW1wbGVDb21tYW5kcztcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG1lbnVJdGVtcywgaW5kZXg6IGluZGV4IH1cbiAgICBcIlxuPjwvbmctY29udGFpbmVyPlxufVxuXG48bmctdGVtcGxhdGUgI3NpbXBsZUNvbW1hbmRzIGxldC1jb21tYW5kcyBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgIEBmb3IgKGNtZCBvZiBjb21tYW5kczsgdHJhY2sgY21kKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVCdXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI292ZXJmbG93Q29tbWFuZHNcbiAgICBsZXQtY29tbWFuZHNcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgbGV0LWhpZGVCdG49XCJoaWRlQnRuXCJcbiAgICBsZXQtYXBwZW5kVG89XCJhcHBlbmRUb1wiXG4gICAgbGV0LXNob3dUZXh0PVwic2hvd1RleHRcIlxuPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgIFsoaXNPcGVuKV09XCJpc09wZW5PdmVyZmxvd1wiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICAgICAgICBbbm9BcnJvd109XCJ0cnVlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2wgI3BvcG92ZXI+XG4gICAgICAgICAgICBAaWYoIWhpZGVCdG4pe1xuICAgICAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gKGNsaWNrKT1cIm9uT3Blbk92ZXJmbG93KCRldmVudClcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbZ2x5cGhdPVwiJ292ZXJmbG93J1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDx1bCBmZC1saXN0IGNsYXNzPVwidWx2LW92ZXJmbG93LWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjbWQgb2YgY29tbWFuZHM7IHRyYWNrIGNtZCkge1xuICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51QnV0dG9uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjbWQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZW51QnV0dG9uVGVtcGxhdGUgbGV0LWNtZD5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY21kLm1lbnUgPyBtZW51VGVtcGxhdGUgOiBidXR0b25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtZW51VGVtcGxhdGUgbGV0LWNtZD5cbiAgICA8ZmQtc3BsaXQtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBbbWFpbkFjdGlvbl09XCJ7IG1haW5BY3Rpb25UaXRsZTogY21kLnRleHQsIGtlZXBNYWluQWN0aW9uOiB0cnVlIH1cIj5cbiAgICAgICAgPGZkLW1lbnU+XG4gICAgICAgICAgICBAZm9yIChidG5Db21tYW5kIG9mIGNtZC5tZW51Lml0ZW1zOyB0cmFjayBidG5Db21tYW5kKSB7XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICBmZC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAjbGlFbFxuICAgICAgICAgICAgICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkYk5hbWVdPVwiY21kLnRleHRcIlxuICAgICAgICAgICAgICAgIFtob3N0RWxdPVwibGlFbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29tbWFuZFNwbGl0QnV0dG9uQ2xpY2soJGV2ZW50LCBidG5Db21tYW5kKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7IGJ0bkNvbW1hbmQudGV4dCB8IGJiYlRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtbWVudT5cbiAgICA8L2ZkLXNwbGl0LWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgY21kPy5Db21tYW5kPy5DdXN0b21VaSA/IGN1c3RvbUJ1dHRvblRlbXBsYXRlIDogZGVmYXVsdEJ1dHRvblRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNtZCB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPGJ1dHRvblxuICAgICAgICBmZC1idXR0b25cbiAgICAgICAgI2J0bkVsXG4gICAgICAgIFtmZFR5cGVdPVwiY21kLkNvbW1hbmQ/Lkpzb25FeHRyYVByb3A/LkRlc2lnbiA/IGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wLkRlc2lnbiA6ICd0cmFuc3BhcmVudCdcIlxuICAgICAgICBbZ2x5cGhdPVwiY21kLkNvbW1hbmQ/Lk5ld0ljb24gfHwgY21kLkNvbW1hbmQ/Lkpzb25FeHRyYVByb3A/Lkljb24gfHwgJydcIlxuICAgICAgICBbdWx2Q29tbWFuZEhhbmRsZXJdPVwiY21kXCJcbiAgICAgICAgW2xhYmVsXT1cImNtZC5Db21tYW5kPy5OZXdJY29uICYmIGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wPy5JY29uID8gKGNtZC50ZXh0IHwgYmJiVHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICBbZGJOYW1lXT1cImNtZC50ZXh0XCJcbiAgICAgICAgW2hvc3RFbF09XCJidG5FbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjbWQuQ29tbWFuZD8uX2lzRW5hYmxlID09PSBmYWxzZVwiXG4gICAgICAgIChjb21tYW5kQ2xpY2spPVwib25Db21tYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8IS0tINqG2YjZhiDYudqp2LMg2K/YsSDYs9mF2Kog2LHYp9iz2Kog2YLYsdin2LEg2Kjar9uM2LHYryDYp9iyINmE24zYqNmEINiv2qnZhdmHINin2LPYqtmB2KfYr9mHINmG2qnYsdiv2YUgLS0+XG4gICAgICAgIEBpZiAoIWNtZC5Db21tYW5kPy5OZXdJY29uICYmICFjbWQuQ29tbWFuZD8uSnNvbkV4dHJhUHJvcD8uSWNvbikge1xuICAgICAgICA8aW1nIFtzcmNdPVwiY21kLmljb25cIiAvPlxuICAgICAgICB9XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidHJ1ZSB8fCAhKGNtZC5Db21tYW5kPy5OZXdJY29uIHx8IGNtZC5Db21tYW5kPy5Kc29uRXh0cmFQcm9wPy5JY29uKVwiPnt7XG4gICAgICAgICAgICBjbWQudGV4dCB8IGJiYlRyYW5zbGF0ZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2N1c3RvbUJ1dHRvblRlbXBsYXRlIGxldC1jbWQ+XG4gICAgPGRpdlxuICAgICAgICAjaG9zdEVsXG4gICAgICAgIFtkYk5hbWVdPVwiY21kLnRleHRcIlxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJob3N0RWxcIlxuICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICA+XG4gICAgICAgIDxibnJjLWR5bmFtaWMtZm9ybS10b29sYmFyaXRlbVxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbdWx2Q29tbWFuZEhhbmRsZXJdPVwiY21kXCJcbiAgICAgICAgICAgIFtjb21wb25lbnRdPVwiY21kLkNvbW1hbmQ/LkN1c3RvbVVpXCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbY29udGV4dF09XCJjbWRcIlxuICAgICAgICAgICAgW3Nob3dUZXh0XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51ID09PSBmYWxzZVwiXG4gICAgICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbaXNFbmFibGVdPVwiY21kLkNvbW1hbmQ/Ll9pc0VuYWJsZSB8fCBjbWQuQ29tbWFuZD8uVXNlRm9yU2luZ2xlXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgKGJ0bkNsaWNrKT1cIm9uQ29tbWFuZENsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9ibnJjLWR5bmFtaWMtZm9ybS10b29sYmFyaXRlbT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=