@libs-ui/components-list 0.2.199 → 0.2.202

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.
@@ -53,7 +53,7 @@ export class LibsUiComponentsListRowsComponent {
53
53
  this.outChangStageFlagMousePopover.emit(flag);
54
54
  }
55
55
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRowsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRowsComponent, isStandalone: true, selector: "libs_ui-components-list-templates_rows", inputs: { configTemplate: { classPropertyName: "configTemplate", publicName: "configTemplate", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outChangStageFlagMousePopover: "outChangStageFlagMousePopover", outEvent: "outEvent" }, ngImport: i0, template: "@if (configTemplate() && configItemTextRows(); as configItemTextRows) {\n <div class=\"flex flex-col w-full {{ configTemplate().classRows ?? '' }}\">\n @for (row of configItemTextRows; track $index; let indexRow = $index;) {\n <div [class]=\"row().classRow\">\n @if (row().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:row().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:row().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,row().getImageError)\" />\n }\n @if (item()['fieldRowAvatarConfig'+indexRow]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (fieldKey() && item()['fieldLabelRow'+indexRow] | async; as labelRow) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"row().getPopoverConfig ? (('popover' | LibsUiPipesCallFunctionInTemplatePipe:row().getPopoverConfig:item()) | async) : { zIndex: zIndex()}\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || row().classGetValue || '') :(row().classGetValue || '')\"\n [innerHtml]=\"labelRow\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),row().action)\" />\n }\n\n @if (fieldKey() && row().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n @if (row().cols?.()?.length) {\n <div [class]=\"row().classCols || 'flex'\"\n [style]=\"item()[item()['fieldRowStylesDynamicCols'+indexRow]]\">\n @for (col of row().cols?.(); track $index; let colIndex = $index) {\n @if (col().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:col().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:col().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,col().getImageError)\" />\n }\n @if (item()['fieldColAvatarConfig'+indexRow+colIndex]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (item()['fieldLabelCol'+indexRow+colIndex]; as labelColFunc) {\n <libs_ui-components-popover type=\"text\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || item()['fieldColClass'+indexRow+colIndex] || '') :(item()['fieldColClass'+indexRow+colIndex] || '')\"\n [innerHtml]=\"('fieldLabelCol' | LibsUiPipesCallFunctionInTemplatePipe:labelColFunc:item()) | async\"\n [config]=\"{ zIndex: zIndex() }\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\" />\n }\n @if (item()['fieldColPopover'+indexRow+colIndex]; as popover) {\n <libs_ui-components-popover [type]=\"popover.type ?? 'other'\"\n [config]=\"popover?.config\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex]\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\">\n <span [class]=\"popover.classInclude || ''\"\n [innerHtml]=\"(popover.dataView ?? popoverIcon) | translate\">\n </span>\n </libs_ui-components-popover>\n }\n @if (fieldKey() && col().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow+'-col:'+colIndex | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n @if (item()['fieldColToggle'+indexRow+colIndex]; as toggle) {\n <libs_ui-components-label\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [hasToggle]=\"toggle.hasToggle\"\n [toggleActive]=\"toggle.toggleActive\"\n [toggleDisable]=\"toggle.toggleDisable\"\n [popover]=\"toggle.popover\"\n [classInclude]=\"toggle.classInclude\"\n [labelLeft]=\"toggle.labelLeft\"\n [labelRight]=\"toggle.labelRight\"\n (outSwitchEvent)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldColButton'+indexRow+colIndex]; as button) {\n <libs_ui-components-buttons-button [type]=\"button.type\"\n [classIconLeft]=\"button.classIconLeft\"\n [classIconRight]=\"button.classIconRight\"\n [classLabel]=\"button.classLabel\"\n [iconOnlyType]=\"button.iconOnlyType\"\n [popover]=\"button.popover\"\n [disable]=\"button.disable\"\n [ignorePointerEvent]=\"button.ignorePointerEvent\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex] ?? ' '\"\n [ignoreStopPropagationEvent]=\"false\"\n (outClick)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldBadge'+indexRow+colIndex]; as badge) {\n <libs_ui-components-badge [mode]=\"badge.mode || 'x+'\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [count]=\"badge.count\"\n [maxCount]=\"badge.maxCount || 99\"\n [classCircle]=\"badge.classCircle || 'libs-ui-font-h4r'\" />\n }\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListRowsComponent, isStandalone: true, selector: "libs_ui-components-list-templates_rows", inputs: { configTemplate: { classPropertyName: "configTemplate", publicName: "configTemplate", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outChangStageFlagMousePopover: "outChangStageFlagMousePopover", outEvent: "outEvent" }, ngImport: i0, template: "@if (configTemplate() && configItemTextRows(); as configItemTextRows) {\n <div class=\"flex flex-col w-full {{ configTemplate().classRows ?? '' }}\">\n @for (row of configItemTextRows; track $index; let indexRow = $index;) {\n <div [class]=\"row().classRow\">\n @if (row().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:row().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:row().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,row().getImageError)\" />\n }\n @if (item()['fieldRowAvatarConfig'+indexRow]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (fieldKey() && item()['fieldLabelRow'+indexRow] | async; as labelRow) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"row().getPopoverConfig ? (('popover' | LibsUiPipesCallFunctionInTemplatePipe:row().getPopoverConfig:item()) | async) : { zIndex: zIndex()}\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || row().classGetValue || '') :(row().classGetValue || '')\"\n [innerHtml]=\"labelRow\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),row().action)\" />\n }\n\n @if (fieldKey() && row().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:row().getDataComponentOutlet:item():'row:'+indexRow:{valueIsEmpty:{item:item()}}) | async\" />\n }\n @if (row().cols?.()?.length) {\n <div [class]=\"row().classCols || 'flex'\"\n [style]=\"item()[item()['fieldRowStylesDynamicCols'+indexRow]]\">\n @for (col of row().cols?.(); track $index; let colIndex = $index) {\n @if (col().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:col().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:col().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,col().getImageError)\" />\n }\n @if (item()['fieldColAvatarConfig'+indexRow+colIndex]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (item()['fieldLabelCol'+indexRow+colIndex]; as labelColFunc) {\n <libs_ui-components-popover type=\"text\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || item()['fieldColClass'+indexRow+colIndex] || '') :(item()['fieldColClass'+indexRow+colIndex] || '')\"\n [innerHtml]=\"('fieldLabelCol' | LibsUiPipesCallFunctionInTemplatePipe:labelColFunc:item()) | async\"\n [config]=\"{ zIndex: zIndex() }\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\" />\n }\n @if (item()['fieldColPopover'+indexRow+colIndex]; as popover) {\n <libs_ui-components-popover [type]=\"popover.type ?? 'other'\"\n [config]=\"popover?.config\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex]\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\">\n <span [class]=\"popover.classInclude || ''\"\n [innerHtml]=\"(popover.dataView ?? popoverIcon) | translate\">\n </span>\n </libs_ui-components-popover>\n }\n @if (fieldKey() && col().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow+'-col:'+colIndex | LibsUiPipesCallFunctionInTemplatePipe:col().getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:col().getDataComponentOutlet:item():'row:'+indexRow+'-col:'+colIndex:{valueIsEmpty:{item:item()}}) | async\" />\n }\n @if (item()['fieldColToggle'+indexRow+colIndex]; as toggle) {\n <libs_ui-components-label\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [hasToggle]=\"toggle.hasToggle\"\n [toggleActive]=\"toggle.toggleActive\"\n [toggleDisable]=\"toggle.toggleDisable\"\n [popover]=\"toggle.popover\"\n [classInclude]=\"toggle.classInclude\"\n [labelLeft]=\"toggle.labelLeft\"\n [labelRight]=\"toggle.labelRight\"\n (outSwitchEvent)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldColButton'+indexRow+colIndex]; as button) {\n <libs_ui-components-buttons-button [type]=\"button.type\"\n [classIconLeft]=\"button.classIconLeft\"\n [classIconRight]=\"button.classIconRight\"\n [classLabel]=\"button.classLabel\"\n [iconOnlyType]=\"button.iconOnlyType\"\n [popover]=\"button.popover\"\n [disable]=\"button.disable\"\n [ignorePointerEvent]=\"button.ignorePointerEvent\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex] ?? ' '\"\n [ignoreStopPropagationEvent]=\"false\"\n (outClick)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldBadge'+indexRow+colIndex]; as badge) {\n <libs_ui-components-badge [mode]=\"badge.mode || 'x+'\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [count]=\"badge.count\"\n [maxCount]=\"badge.maxCount || 99\"\n [classCircle]=\"badge.classCircle || 'libs-ui-font-h4r'\" />\n }\n }\n </div>\n }\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsBadgeComponent, selector: "libs_ui-components-badge", inputs: ["popoverConfig", "active", "count", "mode", "maxCount", "ignoreMarginDefault", "classCircle", "ignoreStopPropagationEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
57
  }
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListRowsComponent, decorators: [{
59
59
  type: Component,
@@ -65,6 +65,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
65
65
  LibsUiComponentsLabelComponent,
66
66
  LibsUiComponentsBadgeComponent,
67
67
  LibsUiPipesCallFunctionInTemplatePipe
68
- ], template: "@if (configTemplate() && configItemTextRows(); as configItemTextRows) {\n <div class=\"flex flex-col w-full {{ configTemplate().classRows ?? '' }}\">\n @for (row of configItemTextRows; track $index; let indexRow = $index;) {\n <div [class]=\"row().classRow\">\n @if (row().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:row().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:row().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,row().getImageError)\" />\n }\n @if (item()['fieldRowAvatarConfig'+indexRow]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (fieldKey() && item()['fieldLabelRow'+indexRow] | async; as labelRow) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"row().getPopoverConfig ? (('popover' | LibsUiPipesCallFunctionInTemplatePipe:row().getPopoverConfig:item()) | async) : { zIndex: zIndex()}\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || row().classGetValue || '') :(row().classGetValue || '')\"\n [innerHtml]=\"labelRow\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),row().action)\" />\n }\n\n @if (fieldKey() && row().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n @if (row().cols?.()?.length) {\n <div [class]=\"row().classCols || 'flex'\"\n [style]=\"item()[item()['fieldRowStylesDynamicCols'+indexRow]]\">\n @for (col of row().cols?.(); track $index; let colIndex = $index) {\n @if (col().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:col().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:col().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,col().getImageError)\" />\n }\n @if (item()['fieldColAvatarConfig'+indexRow+colIndex]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (item()['fieldLabelCol'+indexRow+colIndex]; as labelColFunc) {\n <libs_ui-components-popover type=\"text\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || item()['fieldColClass'+indexRow+colIndex] || '') :(item()['fieldColClass'+indexRow+colIndex] || '')\"\n [innerHtml]=\"('fieldLabelCol' | LibsUiPipesCallFunctionInTemplatePipe:labelColFunc:item()) | async\"\n [config]=\"{ zIndex: zIndex() }\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\" />\n }\n @if (item()['fieldColPopover'+indexRow+colIndex]; as popover) {\n <libs_ui-components-popover [type]=\"popover.type ?? 'other'\"\n [config]=\"popover?.config\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex]\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\">\n <span [class]=\"popover.classInclude || ''\"\n [innerHtml]=\"(popover.dataView ?? popoverIcon) | translate\">\n </span>\n </libs_ui-components-popover>\n }\n @if (fieldKey() && col().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow+'-col:'+colIndex | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n @if (item()['fieldColToggle'+indexRow+colIndex]; as toggle) {\n <libs_ui-components-label\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [hasToggle]=\"toggle.hasToggle\"\n [toggleActive]=\"toggle.toggleActive\"\n [toggleDisable]=\"toggle.toggleDisable\"\n [popover]=\"toggle.popover\"\n [classInclude]=\"toggle.classInclude\"\n [labelLeft]=\"toggle.labelLeft\"\n [labelRight]=\"toggle.labelRight\"\n (outSwitchEvent)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldColButton'+indexRow+colIndex]; as button) {\n <libs_ui-components-buttons-button [type]=\"button.type\"\n [classIconLeft]=\"button.classIconLeft\"\n [classIconRight]=\"button.classIconRight\"\n [classLabel]=\"button.classLabel\"\n [iconOnlyType]=\"button.iconOnlyType\"\n [popover]=\"button.popover\"\n [disable]=\"button.disable\"\n [ignorePointerEvent]=\"button.ignorePointerEvent\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex] ?? ' '\"\n [ignoreStopPropagationEvent]=\"false\"\n (outClick)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldBadge'+indexRow+colIndex]; as badge) {\n <libs_ui-components-badge [mode]=\"badge.mode || 'x+'\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [count]=\"badge.count\"\n [maxCount]=\"badge.maxCount || 99\"\n [classCircle]=\"badge.classCircle || 'libs-ui-font-h4r'\" />\n }\n }\n </div>\n }\n </div>\n }\n </div>\n}\n" }]
68
+ ], template: "@if (configTemplate() && configItemTextRows(); as configItemTextRows) {\n <div class=\"flex flex-col w-full {{ configTemplate().classRows ?? '' }}\">\n @for (row of configItemTextRows; track $index; let indexRow = $index;) {\n <div [class]=\"row().classRow\">\n @if (row().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:row().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:row().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,row().getImageError)\" />\n }\n @if (item()['fieldRowAvatarConfig'+indexRow]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (fieldKey() && item()['fieldLabelRow'+indexRow] | async; as labelRow) {\n <libs_ui-components-popover type=\"text\"\n [config]=\"row().getPopoverConfig ? (('popover' | LibsUiPipesCallFunctionInTemplatePipe:row().getPopoverConfig:item()) | async) : { zIndex: zIndex()}\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || row().classGetValue || '') :(row().classGetValue || '')\"\n [innerHtml]=\"labelRow\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),row().action)\" />\n }\n\n @if (fieldKey() && row().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow | LibsUiPipesCallFunctionInTemplatePipe:row().getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:row().getDataComponentOutlet:item():'row:'+indexRow:{valueIsEmpty:{item:item()}}) | async\" />\n }\n @if (row().cols?.()?.length) {\n <div [class]=\"row().classCols || 'flex'\"\n [style]=\"item()[item()['fieldRowStylesDynamicCols'+indexRow]]\">\n @for (col of row().cols?.(); track $index; let colIndex = $index) {\n @if (col().getImage && ((item() | LibsUiPipesCallFunctionInTemplatePipe:col().getImage:item()) | async); as imgUrl) {\n <img [class]=\"(item() | LibsUiPipesCallFunctionInTemplatePipe:col().getClassImage:item()) | async\"\n src=\"{{ imgUrl }}\"\n (error)=\"handlerErrorImage($event,col().getImageError)\" />\n }\n @if (item()['fieldColAvatarConfig'+indexRow+colIndex]; as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape || 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [size]='avatarConfig.size || 32'\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\" />\n }\n @if (item()['fieldLabelCol'+indexRow+colIndex]; as labelColFunc) {\n <libs_ui-components-popover type=\"text\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [classInclude]=\"(keySelected() === item()[fieldKey()]) ? (row().classItemSelected || item()['fieldColClass'+indexRow+colIndex] || '') :(item()['fieldColClass'+indexRow+colIndex] || '')\"\n [innerHtml]=\"('fieldLabelCol' | LibsUiPipesCallFunctionInTemplatePipe:labelColFunc:item()) | async\"\n [config]=\"{ zIndex: zIndex() }\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\" />\n }\n @if (item()['fieldColPopover'+indexRow+colIndex]; as popover) {\n <libs_ui-components-popover [type]=\"popover.type ?? 'other'\"\n [config]=\"popover?.config\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex]\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n (outChangStageFlagMouse)='handlerChangStageFlagMouse($event)'\n (outEvent)=\"handlerSelectItem($event,item(),col().action)\">\n <span [class]=\"popover.classInclude || ''\"\n [innerHtml]=\"(popover.dataView ?? popoverIcon) | translate\">\n </span>\n </libs_ui-components-popover>\n }\n @if (fieldKey() && col().getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"('row:'+indexRow+'-col:'+colIndex | LibsUiPipesCallFunctionInTemplatePipe:col().getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:col().getDataComponentOutlet:item():'row:'+indexRow+'-col:'+colIndex:{valueIsEmpty:{item:item()}}) | async\" />\n }\n @if (item()['fieldColToggle'+indexRow+colIndex]; as toggle) {\n <libs_ui-components-label\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [hasToggle]=\"toggle.hasToggle\"\n [toggleActive]=\"toggle.toggleActive\"\n [toggleDisable]=\"toggle.toggleDisable\"\n [popover]=\"toggle.popover\"\n [classInclude]=\"toggle.classInclude\"\n [labelLeft]=\"toggle.labelLeft\"\n [labelRight]=\"toggle.labelRight\"\n (outSwitchEvent)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldColButton'+indexRow+colIndex]; as button) {\n <libs_ui-components-buttons-button [type]=\"button.type\"\n [classIconLeft]=\"button.classIconLeft\"\n [classIconRight]=\"button.classIconRight\"\n [classLabel]=\"button.classLabel\"\n [iconOnlyType]=\"button.iconOnlyType\"\n [popover]=\"button.popover\"\n [disable]=\"button.disable\"\n [ignorePointerEvent]=\"button.ignorePointerEvent\"\n [classInclude]=\"item()['fieldColClass'+indexRow+colIndex] ?? ' '\"\n [ignoreStopPropagationEvent]=\"false\"\n (outClick)=\"handlerSelectItem('click',item(),col().action)\" />\n }\n @if (item()['fieldBadge'+indexRow+colIndex]; as badge) {\n <libs_ui-components-badge [mode]=\"badge.mode || 'x+'\"\n [style]=\"(' ' | LibsUiPipesCallFunctionInTemplatePipe:item()['fieldColStylesDynamic'+indexRow+colIndex]:item()) | async\"\n [count]=\"badge.count\"\n [maxCount]=\"badge.maxCount || 99\"\n [classCircle]=\"badge.classCircle || 'libs-ui-font-h4r'\" />\n }\n }\n </div>\n }\n </div>\n }\n </div>\n}\n" }]
69
69
  }], ctorParameters: () => [] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3Jvd3Mvcm93cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3Jvd3Mvcm93cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFjLGdDQUFnQyxFQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7O0FBb0JqRCxNQUFNLE9BQU8saUNBQWlDO0lBQzVDLG1CQUFtQjtJQUNULFdBQVcsR0FBRyxNQUFNLENBQVMsbUVBQW1FLENBQUMsQ0FBQztJQUNsRyxrQkFBa0IsR0FBRyxNQUFNLENBQWdELEVBQUUsQ0FBQyxDQUFDO0lBRXpGLGdCQUFnQjtJQUNQLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpRCxDQUFDO0lBQ2pGLElBQUksR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUNwQixXQUFXLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDL0IsUUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxDQUFpQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVyRyw2QkFBNkIsR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUNyRCxRQUFRLEdBQUcsTUFBTSxFQUFrQixDQUFDO0lBRTdDO1FBQ0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZTtJQUNMLGlCQUFpQixDQUFDLEtBQXlCLEVBQUUsSUFBUyxFQUFFLE1BQVc7UUFDM0UsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVksRUFBRSxxQkFBeUQ7UUFDdkcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFUywwQkFBMEIsQ0FBQyxJQUFnQjtRQUNuRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7d0dBbERVLGlDQUFpQzs0RkFBakMsaUNBQWlDLDgxQkMvQjlDLDZwT0FpSEEscUREM0ZJLFNBQVMsNkNBQUUsZUFBZSw0RkFBRSxpQkFBaUIsb1BBQzdDLCtCQUErQiw2UEFDL0IsZ0NBQWdDLHFlQUNoQyxzQ0FBc0Msc2pCQUN0Qyw4QkFBOEIsNHFCQUM5Qiw4QkFBOEIsc01BQzlCLHFDQUFxQzs7NEZBRzVCLGlDQUFpQztrQkFqQjdDLFNBQVM7K0JBRUUsd0NBQXdDLGNBR3RDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxTQUFTLEVBQUUsZUFBZSxFQUFFLGlCQUFpQjt3QkFDN0MsK0JBQStCO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsOEJBQThCO3dCQUM5Qiw4QkFBOEI7d0JBQzlCLHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWF2YXRhclwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxhYmVsXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gXCJAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJRW1pdFJvd3NFdmVudCwgSUxpc3RDb25maWdJdGVtQ2hlY2tib3gsIElMaXN0Q29uZmlnSXRlbVRleHQsIElMaXN0Q29uZmlnSXRlbVRleHRSb3cgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6IFwibGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3Jvd3NcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9yb3dzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yb3dzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQmFkZ2VDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBwb3BvdmVySWNvbiA9IHNpZ25hbDxzdHJpbmc+KGA8aSBjbGFzcz0nbGlicy11aS1pY29uLXRvb2x0aXAtb3V0bGluZSB0ZXh0LVsxNnB4XSBtbC1bOHB4XSc+PC9pPmApO1xuICBwcm90ZWN0ZWQgY29uZmlnSXRlbVRleHRSb3dzID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRSb3c+Pj4oW10pO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgY29uZmlnVGVtcGxhdGUgPSBpbnB1dC5yZXF1aXJlZDxJTGlzdENvbmZpZ0l0ZW1UZXh0IHwgSUxpc3RDb25maWdJdGVtQ2hlY2tib3g+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gaW5wdXQ8dW5rbm93bj4oKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmc+KCdpZCcpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gIWlzRW1wdHkodmFsdWUpID8gKHZhbHVlICsgMSkgOiAxMjAwIH0pO1xuXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dEV2ZW50ID0gb3V0cHV0PElFbWl0Um93c0V2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5hZnRlclZpZXdJbml0KCkpO1xuICAgIH0pO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGUoKS5yb3dzPy4oKT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWdJdGVtVGV4dFJvd3Muc2V0KHRoaXMuY29uZmlnVGVtcGxhdGUoKS5yb3dzPy4oKSB8fCBbXSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RJdGVtKGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQsIGl0ZW06IGFueSwgYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgIT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm91dEV2ZW50LmVtaXQoeyBldmVudCwgaXRlbSwgYWN0aW9uIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFcnJvckltYWdlKGV2ZW50OiBFdmVudCwgZnVuY3Rpb25HZXRJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIWV2ZW50LnRhcmdldCB8fCAhZnVuY3Rpb25HZXRJbWFnZUVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKChldmVudC50YXJnZXQgYXMgYW55KS5zcmMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKGZ1bmN0aW9uR2V0SW1hZ2VFcnJvcih0aGlzLml0ZW0oKSkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICB9XG59XG4iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlKCkgJiYgY29uZmlnSXRlbVRleHRSb3dzKCk7IGFzIGNvbmZpZ0l0ZW1UZXh0Um93cykge1xuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwge3sgY29uZmlnVGVtcGxhdGUoKS5jbGFzc1Jvd3MgPz8gJycgfX1cIj5cbiAgICBAZm9yIChyb3cgb2YgY29uZmlnSXRlbVRleHRSb3dzOyB0cmFjayAkaW5kZXg7IGxldCBpbmRleFJvdyA9ICRpbmRleDspIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cInJvdygpLmNsYXNzUm93XCI+XG4gICAgICAgIEBpZiAocm93KCkuZ2V0SW1hZ2UgJiYgKChpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldEltYWdlOml0ZW0oKSkgfCBhc3luYyk7IGFzIGltZ1VybCkge1xuICAgICAgICAgIDxpbWcgW2NsYXNzXT1cIihpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldENsYXNzSW1hZ2U6aXRlbSgpKSB8IGFzeW5jXCJcbiAgICAgICAgICAgIHNyYz1cInt7IGltZ1VybCB9fVwiXG4gICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckVycm9ySW1hZ2UoJGV2ZW50LHJvdygpLmdldEltYWdlRXJyb3IpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRSb3dBdmF0YXJDb25maWcnK2luZGV4Um93XTsgYXMgYXZhdGFyQ29uZmlnKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXIgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlIHx8ICdjaXJjbGUnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICBbc2l6ZV09J2F2YXRhckNvbmZpZy5zaXplIHx8IDMyJ1xuICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cImF2YXRhckNvbmZpZy50ZXh0QXZhdGFyXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGZpZWxkS2V5KCkgJiYgaXRlbSgpWydmaWVsZExhYmVsUm93JytpbmRleFJvd10gfCBhc3luYzsgYXMgbGFiZWxSb3cpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJyb3coKS5nZXRQb3BvdmVyQ29uZmlnID8gKCgncG9wb3ZlcicgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldFBvcG92ZXJDb25maWc6aXRlbSgpKSB8IGFzeW5jKSA6IHsgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIoa2V5U2VsZWN0ZWQoKSA9PT0gaXRlbSgpW2ZpZWxkS2V5KCldKSA/IChyb3coKS5jbGFzc0l0ZW1TZWxlY3RlZCB8fCByb3coKS5jbGFzc0dldFZhbHVlIHx8ICcnKSA6KHJvdygpLmNsYXNzR2V0VmFsdWUgfHwgJycpXCJcbiAgICAgICAgICAgIFtpbm5lckh0bWxdPVwibGFiZWxSb3dcIlxuICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCkscm93KCkuYWN0aW9uKVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpZWxkS2V5KCkgJiYgcm93KCkuZ2V0Q29tcG9uZW50T3V0bGV0KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiKCdyb3c6JytpbmRleFJvdyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6cm93KCkuZ2V0Q29tcG9uZW50T3V0bGV0Oml0ZW0oKSkgfCBhc3luYzsgaW5wdXRzOntpdGVtfVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChyb3coKS5jb2xzPy4oKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBbY2xhc3NdPVwicm93KCkuY2xhc3NDb2xzIHx8ICdmbGV4J1wiXG4gICAgICAgICAgICBbc3R5bGVdPVwiaXRlbSgpW2l0ZW0oKVsnZmllbGRSb3dTdHlsZXNEeW5hbWljQ29scycraW5kZXhSb3ddXVwiPlxuICAgICAgICAgICAgQGZvciAoY29sIG9mIHJvdygpLmNvbHM/LigpOyB0cmFjayAkaW5kZXg7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICBAaWYgKGNvbCgpLmdldEltYWdlICYmICgoaXRlbSgpIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb2woKS5nZXRJbWFnZTppdGVtKCkpIHwgYXN5bmMpOyBhcyBpbWdVcmwpIHtcbiAgICAgICAgICAgICAgICA8aW1nIFtjbGFzc109XCIoaXRlbSgpIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb2woKS5nZXRDbGFzc0ltYWdlOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBzcmM9XCJ7eyBpbWdVcmwgfX1cIlxuICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJFcnJvckltYWdlKCRldmVudCxjb2woKS5nZXRJbWFnZUVycm9yKVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChpdGVtKClbJ2ZpZWxkQ29sQXZhdGFyQ29uZmlnJytpbmRleFJvdytjb2xJbmRleF07IGFzIGF2YXRhckNvbmZpZykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyIFt0eXBlU2hhcGVdPVwiYXZhdGFyQ29uZmlnLnR5cGVTaGFwZSB8fCAnY2lyY2xlJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImF2YXRhckNvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgICAgICAgICAgICAgW3NpemVdPSdhdmF0YXJDb25maWcuc2l6ZSB8fCAzMidcbiAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJFcnJvclwiXG4gICAgICAgICAgICAgICAgICBbaWRHZW5Db2xvcl09XCJhdmF0YXJDb25maWcuaWRHZW5Db2xvclwiXG4gICAgICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChpdGVtKClbJ2ZpZWxkTGFiZWxDb2wnK2luZGV4Um93K2NvbEluZGV4XTsgYXMgbGFiZWxDb2xGdW5jKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCIoJyAnIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTppdGVtKClbJ2ZpZWxkQ29sU3R5bGVzRHluYW1pYycraW5kZXhSb3crY29sSW5kZXhdOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIihrZXlTZWxlY3RlZCgpID09PSBpdGVtKClbZmllbGRLZXkoKV0pID8gKHJvdygpLmNsYXNzSXRlbVNlbGVjdGVkIHx8IGl0ZW0oKVsnZmllbGRDb2xDbGFzcycraW5kZXhSb3crY29sSW5kZXhdIHx8ICcnKSA6KGl0ZW0oKVsnZmllbGRDb2xDbGFzcycraW5kZXhSb3crY29sSW5kZXhdIHx8ICcnKVwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIignZmllbGRMYWJlbENvbCcgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmxhYmVsQ29sRnVuYzppdGVtKCkpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IHpJbmRleDogekluZGV4KCkgfVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSxjb2woKS5hY3Rpb24pXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRDb2xQb3BvdmVyJytpbmRleFJvdytjb2xJbmRleF07IGFzIHBvcG92ZXIpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW3R5cGVdPVwicG9wb3Zlci50eXBlID8/ICdvdGhlcidcIlxuICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJwb3BvdmVyPy5jb25maWdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtKClbJ2ZpZWxkQ29sQ2xhc3MnK2luZGV4Um93K2NvbEluZGV4XVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiKCcgJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6aXRlbSgpWydmaWVsZENvbFN0eWxlc0R5bmFtaWMnK2luZGV4Um93K2NvbEluZGV4XTppdGVtKCkpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCksY29sKCkuYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInBvcG92ZXIuY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCIocG9wb3Zlci5kYXRhVmlldyA/PyBwb3BvdmVySWNvbikgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoZmllbGRLZXkoKSAmJiBjb2woKS5nZXRDb21wb25lbnRPdXRsZXQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCIoJ3JvdzonK2luZGV4Um93KyctY29sOicrY29sSW5kZXggfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldENvbXBvbmVudE91dGxldDppdGVtKCkpIHwgYXN5bmM7IGlucHV0czp7aXRlbX1cIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXRlbSgpWydmaWVsZENvbFRvZ2dsZScraW5kZXhSb3crY29sSW5kZXhdOyBhcyB0b2dnbGUpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiKCcgJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6aXRlbSgpWydmaWVsZENvbFN0eWxlc0R5bmFtaWMnK2luZGV4Um93K2NvbEluZGV4XTppdGVtKCkpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW2hhc1RvZ2dsZV09XCJ0b2dnbGUuaGFzVG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIFt0b2dnbGVBY3RpdmVdPVwidG9nZ2xlLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJ0b2dnbGUudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ0b2dnbGUucG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cInRvZ2dsZS5jbGFzc0luY2x1ZGVcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJ0b2dnbGUubGFiZWxMZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cInRvZ2dsZS5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIChvdXRTd2l0Y2hFdmVudCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSxjb2woKS5hY3Rpb24pXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRDb2xCdXR0b24nK2luZGV4Um93K2NvbEluZGV4XTsgYXMgYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJidXR0b24udHlwZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJidXR0b24uY2xhc3NJY29uTGVmdFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImJ1dHRvbi5jbGFzc0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uLmljb25Pbmx5VHlwZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ucG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICBbaWdub3JlUG9pbnRlckV2ZW50XT1cImJ1dHRvbi5pZ25vcmVQb2ludGVyRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtKClbJ2ZpZWxkQ29sQ2xhc3MnK2luZGV4Um93K2NvbEluZGV4XSA/PyAnICdcIlxuICAgICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSxjb2woKS5hY3Rpb24pXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRCYWRnZScraW5kZXhSb3crY29sSW5kZXhdOyBhcyBiYWRnZSkge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYmFkZ2UgW21vZGVdPVwiYmFkZ2UubW9kZSB8fCAneCsnXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCIoJyAnIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTppdGVtKClbJ2ZpZWxkQ29sU3R5bGVzRHluYW1pYycraW5kZXhSb3crY29sSW5kZXhdOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbY291bnRdPVwiYmFkZ2UuY291bnRcIlxuICAgICAgICAgICAgICAgICAgW21heENvdW50XT1cImJhZGdlLm1heENvdW50IHx8IDk5XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0NpcmNsZV09XCJiYWRnZS5jbGFzc0NpcmNsZSB8fCAnbGlicy11aS1mb250LWg0cidcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3Jvd3Mvcm93cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3Jvd3Mvcm93cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFjLGdDQUFnQyxFQUFzQixNQUFNLDZCQUE2QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7O0FBb0JqRCxNQUFNLE9BQU8saUNBQWlDO0lBQzVDLG1CQUFtQjtJQUNULFdBQVcsR0FBRyxNQUFNLENBQVMsbUVBQW1FLENBQUMsQ0FBQztJQUNsRyxrQkFBa0IsR0FBRyxNQUFNLENBQWdELEVBQUUsQ0FBQyxDQUFDO0lBRXpGLGdCQUFnQjtJQUNQLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpRCxDQUFDO0lBQ2pGLElBQUksR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUNwQixXQUFXLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDL0IsUUFBUSxHQUFHLEtBQUssQ0FBUyxJQUFJLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxDQUFpQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVyRyw2QkFBNkIsR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUNyRCxRQUFRLEdBQUcsTUFBTSxFQUFrQixDQUFDO0lBRTdDO1FBQ0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZTtJQUNMLGlCQUFpQixDQUFDLEtBQXlCLEVBQUUsSUFBUyxFQUFFLE1BQVc7UUFDM0UsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVksRUFBRSxxQkFBeUQ7UUFDdkcsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFUywwQkFBMEIsQ0FBQyxJQUFnQjtRQUNuRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7d0dBbERVLGlDQUFpQzs0RkFBakMsaUNBQWlDLDgxQkMvQjlDLDA3T0FpSEEscUREM0ZJLFNBQVMsNkNBQUUsZUFBZSw0RkFBRSxpQkFBaUIsb1BBQzdDLCtCQUErQiw2UEFDL0IsZ0NBQWdDLHFlQUNoQyxzQ0FBc0Msc2pCQUN0Qyw4QkFBOEIsNHFCQUM5Qiw4QkFBOEIsc01BQzlCLHFDQUFxQzs7NEZBRzVCLGlDQUFpQztrQkFqQjdDLFNBQVM7K0JBRUUsd0NBQXdDLGNBR3RDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxTQUFTLEVBQUUsZUFBZSxFQUFFLGlCQUFpQjt3QkFDN0MsK0JBQStCO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLHNDQUFzQzt3QkFDdEMsOEJBQThCO3dCQUM5Qiw4QkFBOEI7d0JBQzlCLHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0F2YXRhckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWF2YXRhclwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0JhZGdlQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxhYmVsXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSB9IGZyb20gXCJAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJRW1pdFJvd3NFdmVudCwgSUxpc3RDb25maWdJdGVtQ2hlY2tib3gsIElMaXN0Q29uZmlnSXRlbVRleHQsIElMaXN0Q29uZmlnSXRlbVRleHRSb3cgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6IFwibGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX3Jvd3NcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9yb3dzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yb3dzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQmFkZ2VDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBwb3BvdmVySWNvbiA9IHNpZ25hbDxzdHJpbmc+KGA8aSBjbGFzcz0nbGlicy11aS1pY29uLXRvb2x0aXAtb3V0bGluZSB0ZXh0LVsxNnB4XSBtbC1bOHB4XSc+PC9pPmApO1xuICBwcm90ZWN0ZWQgY29uZmlnSXRlbVRleHRSb3dzID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRSb3c+Pj4oW10pO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgY29uZmlnVGVtcGxhdGUgPSBpbnB1dC5yZXF1aXJlZDxJTGlzdENvbmZpZ0l0ZW1UZXh0IHwgSUxpc3RDb25maWdJdGVtQ2hlY2tib3g+KCk7XG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gaW5wdXQ8dW5rbm93bj4oKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmc+KCdpZCcpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gIWlzRW1wdHkodmFsdWUpID8gKHZhbHVlICsgMSkgOiAxMjAwIH0pO1xuXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2VQb3BvdmVyID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dEV2ZW50ID0gb3V0cHV0PElFbWl0Um93c0V2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5hZnRlclZpZXdJbml0KCkpO1xuICAgIH0pO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGUoKS5yb3dzPy4oKT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWdJdGVtVGV4dFJvd3Muc2V0KHRoaXMuY29uZmlnVGVtcGxhdGUoKS5yb3dzPy4oKSB8fCBbXSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RJdGVtKGV2ZW50OiBUWVBFX1BPUE9WRVJfRVZFTlQsIGl0ZW06IGFueSwgYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgIT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm91dEV2ZW50LmVtaXQoeyBldmVudCwgaXRlbSwgYWN0aW9uIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJFcnJvckltYWdlKGV2ZW50OiBFdmVudCwgZnVuY3Rpb25HZXRJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIWV2ZW50LnRhcmdldCB8fCAhZnVuY3Rpb25HZXRJbWFnZUVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKChldmVudC50YXJnZXQgYXMgYW55KS5zcmMgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKGZ1bmN0aW9uR2V0SW1hZ2VFcnJvcih0aGlzLml0ZW0oKSkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlci5lbWl0KGZsYWcpO1xuICB9XG59XG4iLCJAaWYgKGNvbmZpZ1RlbXBsYXRlKCkgJiYgY29uZmlnSXRlbVRleHRSb3dzKCk7IGFzIGNvbmZpZ0l0ZW1UZXh0Um93cykge1xuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwge3sgY29uZmlnVGVtcGxhdGUoKS5jbGFzc1Jvd3MgPz8gJycgfX1cIj5cbiAgICBAZm9yIChyb3cgb2YgY29uZmlnSXRlbVRleHRSb3dzOyB0cmFjayAkaW5kZXg7IGxldCBpbmRleFJvdyA9ICRpbmRleDspIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cInJvdygpLmNsYXNzUm93XCI+XG4gICAgICAgIEBpZiAocm93KCkuZ2V0SW1hZ2UgJiYgKChpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldEltYWdlOml0ZW0oKSkgfCBhc3luYyk7IGFzIGltZ1VybCkge1xuICAgICAgICAgIDxpbWcgW2NsYXNzXT1cIihpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldENsYXNzSW1hZ2U6aXRlbSgpKSB8IGFzeW5jXCJcbiAgICAgICAgICAgIHNyYz1cInt7IGltZ1VybCB9fVwiXG4gICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckVycm9ySW1hZ2UoJGV2ZW50LHJvdygpLmdldEltYWdlRXJyb3IpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRSb3dBdmF0YXJDb25maWcnK2luZGV4Um93XTsgYXMgYXZhdGFyQ29uZmlnKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXIgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlIHx8ICdjaXJjbGUnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICBbc2l6ZV09J2F2YXRhckNvbmZpZy5zaXplIHx8IDMyJ1xuICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cImF2YXRhckNvbmZpZy50ZXh0QXZhdGFyXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGZpZWxkS2V5KCkgJiYgaXRlbSgpWydmaWVsZExhYmVsUm93JytpbmRleFJvd10gfCBhc3luYzsgYXMgbGFiZWxSb3cpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJyb3coKS5nZXRQb3BvdmVyQ29uZmlnID8gKCgncG9wb3ZlcicgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldFBvcG92ZXJDb25maWc6aXRlbSgpKSB8IGFzeW5jKSA6IHsgekluZGV4OiB6SW5kZXgoKX1cIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIoa2V5U2VsZWN0ZWQoKSA9PT0gaXRlbSgpW2ZpZWxkS2V5KCldKSA/IChyb3coKS5jbGFzc0l0ZW1TZWxlY3RlZCB8fCByb3coKS5jbGFzc0dldFZhbHVlIHx8ICcnKSA6KHJvdygpLmNsYXNzR2V0VmFsdWUgfHwgJycpXCJcbiAgICAgICAgICAgIFtpbm5lckh0bWxdPVwibGFiZWxSb3dcIlxuICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCkscm93KCkuYWN0aW9uKVwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpZWxkS2V5KCkgJiYgcm93KCkuZ2V0Q29tcG9uZW50T3V0bGV0KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiKCdyb3c6JytpbmRleFJvdyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6cm93KCkuZ2V0Q29tcG9uZW50T3V0bGV0Oml0ZW0oKSkgfCBhc3luYzsgaW5wdXRzOih1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOnJvdygpLmdldERhdGFDb21wb25lbnRPdXRsZXQ6aXRlbSgpOidyb3c6JytpbmRleFJvdzp7dmFsdWVJc0VtcHR5OntpdGVtOml0ZW0oKX19KSB8IGFzeW5jXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHJvdygpLmNvbHM/LigpPy5sZW5ndGgpIHtcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJyb3coKS5jbGFzc0NvbHMgfHwgJ2ZsZXgnXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJpdGVtKClbaXRlbSgpWydmaWVsZFJvd1N0eWxlc0R5bmFtaWNDb2xzJytpbmRleFJvd11dXCI+XG4gICAgICAgICAgICBAZm9yIChjb2wgb2Ygcm93KCkuY29scz8uKCk7IHRyYWNrICRpbmRleDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgIEBpZiAoY29sKCkuZ2V0SW1hZ2UgJiYgKChpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbCgpLmdldEltYWdlOml0ZW0oKSkgfCBhc3luYyk7IGFzIGltZ1VybCkge1xuICAgICAgICAgICAgICAgIDxpbWcgW2NsYXNzXT1cIihpdGVtKCkgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbCgpLmdldENsYXNzSW1hZ2U6aXRlbSgpKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIHNyYz1cInt7IGltZ1VybCB9fVwiXG4gICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckVycm9ySW1hZ2UoJGV2ZW50LGNvbCgpLmdldEltYWdlRXJyb3IpXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRDb2xBdmF0YXJDb25maWcnK2luZGV4Um93K2NvbEluZGV4XTsgYXMgYXZhdGFyQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1hdmF0YXIgW3R5cGVTaGFwZV09XCJhdmF0YXJDb25maWcudHlwZVNoYXBlIHx8ICdjaXJjbGUnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09J2F2YXRhckNvbmZpZy5zaXplIHx8IDMyJ1xuICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJdPVwiYXZhdGFyQ29uZmlnLmxpbmtBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFtpZEdlbkNvbG9yXT1cImF2YXRhckNvbmZpZy5pZEdlbkNvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cImF2YXRhckNvbmZpZy50ZXh0QXZhdGFyXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRMYWJlbENvbCcraW5kZXhSb3crY29sSW5kZXhdOyBhcyBsYWJlbENvbEZ1bmMpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIignICcgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOml0ZW0oKVsnZmllbGRDb2xTdHlsZXNEeW5hbWljJytpbmRleFJvdytjb2xJbmRleF06aXRlbSgpKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXSkgPyAocm93KCkuY2xhc3NJdGVtU2VsZWN0ZWQgfHwgaXRlbSgpWydmaWVsZENvbENsYXNzJytpbmRleFJvdytjb2xJbmRleF0gfHwgJycpIDooaXRlbSgpWydmaWVsZENvbENsYXNzJytpbmRleFJvdytjb2xJbmRleF0gfHwgJycpXCJcbiAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiKCdmaWVsZExhYmVsQ29sJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6bGFiZWxDb2xGdW5jOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgekluZGV4OiB6SW5kZXgoKSB9XCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT0naGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQsaXRlbSgpLGNvbCgpLmFjdGlvbilcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXRlbSgpWydmaWVsZENvbFBvcG92ZXInK2luZGV4Um93K2NvbEluZGV4XTsgYXMgcG9wb3Zlcikge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbdHlwZV09XCJwb3BvdmVyLnR5cGUgPz8gJ290aGVyJ1wiXG4gICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInBvcG92ZXI/LmNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIml0ZW0oKVsnZmllbGRDb2xDbGFzcycraW5kZXhSb3crY29sSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCIoJyAnIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTppdGVtKClbJ2ZpZWxkQ29sU3R5bGVzRHluYW1pYycraW5kZXhSb3crY29sSW5kZXhdOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSxjb2woKS5hY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwicG9wb3Zlci5jbGFzc0luY2x1ZGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIihwb3BvdmVyLmRhdGFWaWV3ID8/IHBvcG92ZXJJY29uKSB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChmaWVsZEtleSgpICYmIGNvbCgpLmdldENvbXBvbmVudE91dGxldCkge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIigncm93OicraW5kZXhSb3crJy1jb2w6Jytjb2xJbmRleCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29sKCkuZ2V0Q29tcG9uZW50T3V0bGV0Oml0ZW0oKSkgfCBhc3luYzsgaW5wdXRzOih1bmRlZmluZWQgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbCgpLmdldERhdGFDb21wb25lbnRPdXRsZXQ6aXRlbSgpOidyb3c6JytpbmRleFJvdysnLWNvbDonK2NvbEluZGV4Ont2YWx1ZUlzRW1wdHk6e2l0ZW06aXRlbSgpfX0pIHwgYXN5bmNcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXRlbSgpWydmaWVsZENvbFRvZ2dsZScraW5kZXhSb3crY29sSW5kZXhdOyBhcyB0b2dnbGUpIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiKCcgJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6aXRlbSgpWydmaWVsZENvbFN0eWxlc0R5bmFtaWMnK2luZGV4Um93K2NvbEluZGV4XTppdGVtKCkpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgW2hhc1RvZ2dsZV09XCJ0b2dnbGUuaGFzVG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIFt0b2dnbGVBY3RpdmVdPVwidG9nZ2xlLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJ0b2dnbGUudG9nZ2xlRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ0b2dnbGUucG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cInRvZ2dsZS5jbGFzc0luY2x1ZGVcIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdF09XCJ0b2dnbGUubGFiZWxMZWZ0XCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFJpZ2h0XT1cInRvZ2dsZS5sYWJlbFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIChvdXRTd2l0Y2hFdmVudCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSxjb2woKS5hY3Rpb24pXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRDb2xCdXR0b24nK2luZGV4Um93K2NvbEluZGV4XTsgYXMgYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJidXR0b24udHlwZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJidXR0b24uY2xhc3NJY29uTGVmdFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uUmlnaHRdPVwiYnV0dG9uLmNsYXNzSWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImJ1dHRvbi5jbGFzc0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwiYnV0dG9uLmljb25Pbmx5VHlwZVwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJidXR0b24ucG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJidXR0b24uZGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICBbaWdub3JlUG9pbnRlckV2ZW50XT1cImJ1dHRvbi5pZ25vcmVQb2ludGVyRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtKClbJ2ZpZWxkQ29sQ2xhc3MnK2luZGV4Um93K2NvbEluZGV4XSA/PyAnICdcIlxuICAgICAgICAgICAgICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSxjb2woKS5hY3Rpb24pXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKVsnZmllbGRCYWRnZScraW5kZXhSb3crY29sSW5kZXhdOyBhcyBiYWRnZSkge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYmFkZ2UgW21vZGVdPVwiYmFkZ2UubW9kZSB8fCAneCsnXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCIoJyAnIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTppdGVtKClbJ2ZpZWxkQ29sU3R5bGVzRHluYW1pYycraW5kZXhSb3crY29sSW5kZXhdOml0ZW0oKSkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbY291bnRdPVwiYmFkZ2UuY291bnRcIlxuICAgICAgICAgICAgICAgICAgW21heENvdW50XT1cImJhZGdlLm1heENvdW50IHx8IDk5XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0NpcmNsZV09XCJiYWRnZS5jbGFzc0NpcmNsZSB8fCAnbGlicy11aS1mb250LWg0cidcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
@@ -212,7 +212,7 @@ export class LibsUiComponentsListTextComponent extends LibsUiComponentsListTempl
212
212
  item.specific_loadImgError = true;
213
213
  }
214
214
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListTextComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
215
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListTextComponent, isStandalone: true, selector: "libs_ui-components-list-templates_text", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateText(); as configTemplateText) {\n <div class=\"relative h-full w-full\">\n @if (items() && items().length) {\n <div #elementScroll\n [style.height]=\" heightViewPort() && (!config()?.ignoreShowDataWhenNotSearch || (config()?.ignoreShowDataWhenNotSearch && config()?.ignoreFixHeightShowDataWhenNotSearch)) ? heightViewPort()+'px':'100%'\"\n class=\"w-full\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (!configTemplateText.notUseVirtualScroll) {\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:scroll.viewPortItems}' />\n </virtual-scroller>\n }\n @if (configTemplateText.notUseVirtualScroll) {\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:items()}' />\n }\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[6px] px-[16px]')\">\n @if (!keySearch() && !loading()) {\n {{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n {{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}\n }\n @if (loading()) {\n &nbsp;\n }\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"loadingIconSize() || 'medium'\" />\n }\n </div>\n <ng-template #listRef\n let-itemsView='itemsView'>\n @for (item of itemsView; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"item().classItemWrapper || ''\">\n <div LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [class]=\"'libs-ui-list-template-text-item libs-ui-font-h5r flex '+(item().classItem || '')\"\n [class.items-center]=\"!item().itemAlignStart\"\n [class.items-start]=\"item().itemAlignStart\"\n [class.libs-ui-bg-list-hover-danger]=\"!clickExactly() && item().hoverDanger\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly() && !item().hoverDanger\"\n [class.libs-ui-bg-list-active]=\"!clickExactly() && keySelected() === item()[fieldKey()]\"\n [class.!pl-[16px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.libs-ui-bg-list-hover-ffffff]=\"item().disable\"\n [class.cursor-default]=\"item().disable\"\n [class.!py-[2px]]=\"clickExactly()\"\n [class.!pr-[48px]]=\"keySelected() === item()[fieldKey()] && (!configTemplateText?.ignoreIconSelected || configTemplateText?.actionSort)&& !configTemplateText?.stylePaddingRightItemOther\"\n [ngClass]=\"{'pointer-events-none libs-ui-disable':loading() || disable() || ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length) && !ignoreClassDisableDefaultWhenUseKeysDisableItem())}\"\n (click)=\"handlerClickRelative($event,item())\">\n @if ((item().bullet|LibsUiPipesConvertObjectToSignalPipe)?.(); as bullet) {\n <span class=\"libs-ui-list-template-text-item-bullet flex flex-shrink-0\"\n [style.backgroundColor]=\"bullet.backgroundColor\"\n (click)=\"handlerSelectItem($event,item())\">\n </span>\n }\n @if ((item().avatarConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape ?? 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [classImageInclude]=\"avatarConfig.classImageInclude\"\n [size]=\"avatarConfig.size ?? 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\"\n [classImageInclude]=\"avatarConfig.classImageInclude\" />\n }\n @if (configTemplateText.getImage || configTemplateText.fieldGetImage) {\n <img\n [src]=\"configTemplateText.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateText.getImageError ? configTemplateText.getImageError : configTemplateText.getImage):item()) | async) : item()[configTemplateText.fieldGetImage || '']\"\n [class]=\"'libs-ui-list-template-text-item-avatar ' + (configTemplateText.classIncludeImage ?? '')\"\n [class.w-[18px]]=\"configTemplateText.imgTypeIcon\"\n [class.h-[18px]]=\"configTemplateText.imgTypeIcon\"\n (error)=\"handlerImageError($event, item())\"\n (click)=\"handlerSelectItem($event,item())\" />\n }\n @if ((item().buttonLeftConfig | LibsUiPipesConvertObjectToSignalPipe)?.(); as buttonLeft) {\n @if (item().hrefButton) {\n <a [class.w-full]=\"!buttonLeft.ignoreWidth100\"\n [href]=\"item().hrefButton\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </a>\n }\n @if (!item().hrefButton) {\n <div [class.w-full]=\"!buttonLeft.ignoreWidth100\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </div>\n }\n <ng-template #buttonLeftTemplate>\n <libs_ui-components-buttons-button class=\"w-full\"\n [type]=\"buttonLeft.type ?? 'button-link-primary'\"\n [label]=\"buttonLeft.label ?? ' '\"\n [zIndex]=\"buttonLeft.zIndex\"\n [disable]=\"buttonLeft.disable ?? false\"\n [classIconLeft]=\"(buttonLeft.classIconLeft ? (buttonLeft.classIconLeft+' flex mr-[8px] text-[12px]') : '')\"\n [classInclude]=\"(buttonLeft.classInclude??'')+' w-full'\"\n [classLabel]=\"buttonLeft.classLabel ?? 'libs-ui-font-h4r'\"\n [ignoreStopPropagationEvent]=\"buttonLeft.ignoreStopPropagationEvent\"\n [styleIconLeft]=\"buttonLeft.styleIconLeft\"\n [styleButton]=\"buttonLeft.styleButton\"\n (outClick)=\"handlerSelectItem($event,item())\" />\n </ng-template>\n }\n @if ((item().switchConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as switchConfig) {\n <libs_ui-components-switch [active]=\"switchConfig.active\"\n (outSwitch)=\"handlerSelectItem('click',item())\" />\n }\n @if (item().classIconLeft) {\n <i [class]=\"item().classIconLeft + ' mr-[8px] text-[14px]'\"></i>\n }\n @if (!item().ignoreShowFieldLabel && !configTemplateText.rows) {\n @if ((item().popoverLabel|LibsUiPipesConvertObjectToSignalPipe)?.() ?? {type:'text'}; as popoverLabel) {\n <libs_ui-components-popover [type]=\"popoverLabel.type || 'text'\"\n [elementRefCustom]=\"popoverLabel.type === 'text'? undefined:itemRef\"\n [ignoreShowPopover]=\"popoverLabel.ignoreShowPopover\"\n [config]=\"popoverLabel.config ?? configTemplateText.configLabelPopover?.() ?? {}\"\n [innerHtml]=\"item().fieldLabel\"\n [classInclude]=\"item().classInclude\"\n (outEvent)=\"handlerSelectItem($event,item())\" />\n }\n }\n @if ((item().fieldPopover|LibsUiPipesConvertObjectToSignalPipe)?.(); as popover) {\n <libs_ui-components-popover class=\"{{ popover.classInclude }}\"\n [config]=\"popover.config\">\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline\"></i>\n }\n </libs_ui-components-popover>\n }\n @if (configTemplateText?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"w-full {{ configTemplateText.classRowsWrapper || configTemplateText.classRows || '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateText\"\n [zIndex]=\"zIndex()\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerSelectItem($event.event,$event.item,$event.action)\" />\n }\n @if (configTemplateText.getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"(item()|LibsUiPipesGetValueOfObjectPipe:fieldKey():undefined:true | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n\n @if (keySelected() === item()[fieldKey()] || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) && !configTemplateText.ignoreIconSelected && !configTemplateText.actionSort) {\n <i [class]=\"'libs-ui-icon-check '+(configTemplateText.classIncludeIconSelected || 'right-[12px]')\">\n </i>\n }\n @if (keySelected() === item()[fieldKey()] && configTemplateText.actionSort) {\n <div class=\"libs-ui-list-template-text-sort\">\n <libs_ui-components-buttons-sort-arrow [disable]=\"loading() || disable() || false\"\n [mode]=\"configTemplateText?.itemSort?.()?.mode || ''\"\n [fieldSort]=\"item()[fieldKey()]\"\n (outChange)=\"handlerSort($event)\" />\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n}\n", styles: [".libs-ui-list-template-text-item{padding:6px 16px 6px 1px;font-size:12px;line-height:18px;position:relative;cursor:pointer}.libs-ui-list-template-text-item>.libs-ui-icon-check,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort{position:absolute;right:16px}.libs-ui-list-template-text-item>.libs-ui-icon-check:before,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort:before{font-size:16px;color:var(--libs-ui-color-default, #226FF5)}.libs-ui-list-template-text-item-bullet{width:10px;height:10px;border-radius:50%;margin-right:8px;cursor:pointer}.libs-ui-list-template-text-item-avatar{width:24px;height:24px;border-radius:50%;margin-right:8px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsButtonsSortArrowComponent, selector: "libs_ui-components-buttons-sort-arrow", inputs: ["size", "mode", "fieldSort", "disable", "ignorePopoverContent", "popoverContentAsc", "popoverContentDesc", "defaultMode", "zIndex"], outputs: ["modeChange", "outChange"] }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesConvertObjectToSignalPipe, name: "LibsUiPipesConvertObjectToSignalPipe" }, { kind: "pipe", type: LibsUiPipesGetValueOfObjectPipe, name: "LibsUiPipesGetValueOfObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListTextComponent, isStandalone: true, selector: "libs_ui-components-list-templates_text", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateText(); as configTemplateText) {\n <div class=\"relative h-full w-full\">\n @if (items() && items().length) {\n <div #elementScroll\n [style.height]=\" heightViewPort() && (!config()?.ignoreShowDataWhenNotSearch || (config()?.ignoreShowDataWhenNotSearch && config()?.ignoreFixHeightShowDataWhenNotSearch)) ? heightViewPort()+'px':'100%'\"\n class=\"w-full\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (!configTemplateText.notUseVirtualScroll) {\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:scroll.viewPortItems}' />\n </virtual-scroller>\n }\n @if (configTemplateText.notUseVirtualScroll) {\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:items()}' />\n }\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[6px] px-[16px]')\">\n @if (!keySearch() && !loading()) {\n {{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n {{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}\n }\n @if (loading()) {\n &nbsp;\n }\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"loadingIconSize() || 'medium'\" />\n }\n </div>\n <ng-template #listRef\n let-itemsView='itemsView'>\n @for (item of itemsView; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"item().classItemWrapper || ''\">\n <div LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [class]=\"'libs-ui-list-template-text-item libs-ui-font-h5r flex '+(item().classItem || '')\"\n [class.items-center]=\"!item().itemAlignStart\"\n [class.items-start]=\"item().itemAlignStart\"\n [class.libs-ui-bg-list-hover-danger]=\"!clickExactly() && item().hoverDanger\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly() && !item().hoverDanger\"\n [class.libs-ui-bg-list-active]=\"!clickExactly() && keySelected() === item()[fieldKey()]\"\n [class.!pl-[16px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.libs-ui-bg-list-hover-ffffff]=\"item().disable\"\n [class.cursor-default]=\"item().disable\"\n [class.!py-[2px]]=\"clickExactly()\"\n [class.!pr-[48px]]=\"keySelected() === item()[fieldKey()] && (!configTemplateText?.ignoreIconSelected || configTemplateText?.actionSort)&& !configTemplateText?.stylePaddingRightItemOther\"\n [ngClass]=\"{'pointer-events-none libs-ui-disable':loading() || disable() || ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length) && !ignoreClassDisableDefaultWhenUseKeysDisableItem())}\"\n (click)=\"handlerClickRelative($event,item())\">\n @if ((item().bullet|LibsUiPipesConvertObjectToSignalPipe)?.(); as bullet) {\n <span class=\"libs-ui-list-template-text-item-bullet flex flex-shrink-0\"\n [style.backgroundColor]=\"bullet.backgroundColor\"\n (click)=\"handlerSelectItem($event,item())\">\n </span>\n }\n @if ((item().avatarConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape ?? 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [classImageInclude]=\"avatarConfig.classImageInclude\"\n [size]=\"avatarConfig.size ?? 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\"\n [classImageInclude]=\"avatarConfig.classImageInclude\" />\n }\n @if (configTemplateText.getImage || configTemplateText.fieldGetImage) {\n <img\n [src]=\"configTemplateText.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateText.getImageError ? configTemplateText.getImageError : configTemplateText.getImage):item()) | async) : item()[configTemplateText.fieldGetImage || '']\"\n [class]=\"'libs-ui-list-template-text-item-avatar ' + (configTemplateText.classIncludeImage ?? '')\"\n [class.w-[18px]]=\"configTemplateText.imgTypeIcon\"\n [class.h-[18px]]=\"configTemplateText.imgTypeIcon\"\n (error)=\"handlerImageError($event, item())\"\n (click)=\"handlerSelectItem($event,item())\" />\n }\n @if ((item().buttonLeftConfig | LibsUiPipesConvertObjectToSignalPipe)?.(); as buttonLeft) {\n @if (item().hrefButton) {\n <a [class.w-full]=\"!buttonLeft.ignoreWidth100\"\n [href]=\"item().hrefButton\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </a>\n }\n @if (!item().hrefButton) {\n <div [class.w-full]=\"!buttonLeft.ignoreWidth100\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </div>\n }\n <ng-template #buttonLeftTemplate>\n <libs_ui-components-buttons-button class=\"w-full\"\n [type]=\"buttonLeft.type ?? 'button-link-primary'\"\n [label]=\"buttonLeft.label ?? ' '\"\n [zIndex]=\"buttonLeft.zIndex\"\n [disable]=\"buttonLeft.disable ?? false\"\n [classIconLeft]=\"(buttonLeft.classIconLeft ? (buttonLeft.classIconLeft+' flex mr-[8px] text-[12px]') : '')\"\n [classInclude]=\"(buttonLeft.classInclude??'')+' w-full'\"\n [classLabel]=\"buttonLeft.classLabel ?? 'libs-ui-font-h4r'\"\n [ignoreStopPropagationEvent]=\"buttonLeft.ignoreStopPropagationEvent\"\n [styleIconLeft]=\"buttonLeft.styleIconLeft\"\n [styleButton]=\"buttonLeft.styleButton\"\n (outClick)=\"handlerSelectItem($event,item())\" />\n </ng-template>\n }\n @if ((item().switchConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as switchConfig) {\n <libs_ui-components-switch [active]=\"switchConfig.active\"\n (outSwitch)=\"handlerSelectItem('click',item())\" />\n }\n @if (item().classIconLeft) {\n <i [class]=\"item().classIconLeft + ' mr-[8px] text-[14px]'\"></i>\n }\n @if (!item().ignoreShowFieldLabel && !configTemplateText.rows) {\n @if ((item().popoverLabel|LibsUiPipesConvertObjectToSignalPipe)?.() ?? {type:'text'}; as popoverLabel) {\n <libs_ui-components-popover [type]=\"popoverLabel.type || 'text'\"\n [elementRefCustom]=\"popoverLabel.type === 'text'? undefined:itemRef\"\n [ignoreShowPopover]=\"popoverLabel.ignoreShowPopover\"\n [config]=\"popoverLabel.config ?? configTemplateText.configLabelPopover?.() ?? {}\"\n [innerHtml]=\"item().fieldLabel\"\n [classInclude]=\"item().classInclude\"\n (outEvent)=\"handlerSelectItem($event,item())\" />\n }\n }\n @if ((item().fieldPopover|LibsUiPipesConvertObjectToSignalPipe)?.(); as popover) {\n <libs_ui-components-popover class=\"{{ popover.classInclude }}\"\n [config]=\"popover.config\">\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline\"></i>\n }\n </libs_ui-components-popover>\n }\n @if (configTemplateText?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"w-full {{ configTemplateText.classRowsWrapper || configTemplateText.classRows || '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateText\"\n [zIndex]=\"zIndex()\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerSelectItem($event.event,$event.item,$event.action)\" />\n }\n @if (configTemplateText.getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"(item()|LibsUiPipesGetValueOfObjectPipe:fieldKey():undefined:true | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getDataComponentOutlet:item():fieldKey():{valueIsEmpty:{item:item()}}) | async\" />\n }\n\n @if (keySelected() === item()[fieldKey()] || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) && !configTemplateText.ignoreIconSelected && !configTemplateText.actionSort) {\n <i [class]=\"'libs-ui-icon-check '+(configTemplateText.classIncludeIconSelected || 'right-[12px]')\">\n </i>\n }\n @if (keySelected() === item()[fieldKey()] && configTemplateText.actionSort) {\n <div class=\"libs-ui-list-template-text-sort\">\n <libs_ui-components-buttons-sort-arrow [disable]=\"loading() || disable() || false\"\n [mode]=\"configTemplateText?.itemSort?.()?.mode || ''\"\n [fieldSort]=\"item()[fieldKey()]\"\n (outChange)=\"handlerSort($event)\" />\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n}\n", styles: [".libs-ui-list-template-text-item{padding:6px 16px 6px 1px;font-size:12px;line-height:18px;position:relative;cursor:pointer}.libs-ui-list-template-text-item>.libs-ui-icon-check,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort{position:absolute;right:16px}.libs-ui-list-template-text-item>.libs-ui-icon-check:before,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort:before{font-size:16px;color:var(--libs-ui-color-default, #226FF5)}.libs-ui-list-template-text-item-bullet{width:10px;height:10px;border-radius:50%;margin-right:8px;cursor:pointer}.libs-ui-list-template-text-item-avatar{width:24px;height:24px;border-radius:50%;margin-right:8px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["getLastTextAfterSpace", "typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "idGenColor", "textAvatar", "classImageInclude"], outputs: ["outAvatarError"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "component", type: LibsUiComponentsSwitchComponent, selector: "libs_ui-components-switch", inputs: ["size", "disable", "active"], outputs: ["activeChange", "outSwitch"] }, { kind: "component", type: LibsUiComponentsButtonsSortArrowComponent, selector: "libs_ui-components-buttons-sort-arrow", inputs: ["size", "mode", "fieldSort", "disable", "ignorePopoverContent", "popoverContentAsc", "popoverContentDesc", "defaultMode", "zIndex"], outputs: ["modeChange", "outChange"] }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }, { kind: "pipe", type: LibsUiPipesConvertObjectToSignalPipe, name: "LibsUiPipesConvertObjectToSignalPipe" }, { kind: "pipe", type: LibsUiPipesGetValueOfObjectPipe, name: "LibsUiPipesGetValueOfObjectPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
216
216
  }
217
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListTextComponent, decorators: [{
218
218
  type: Component,
@@ -232,6 +232,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
232
232
  LibsUiPipesCallFunctionInTemplatePipe,
233
233
  LibsUiPipesConvertObjectToSignalPipe,
234
234
  LibsUiPipesGetValueOfObjectPipe
235
- ], template: "@if (configTemplateText(); as configTemplateText) {\n <div class=\"relative h-full w-full\">\n @if (items() && items().length) {\n <div #elementScroll\n [style.height]=\" heightViewPort() && (!config()?.ignoreShowDataWhenNotSearch || (config()?.ignoreShowDataWhenNotSearch && config()?.ignoreFixHeightShowDataWhenNotSearch)) ? heightViewPort()+'px':'100%'\"\n class=\"w-full\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (!configTemplateText.notUseVirtualScroll) {\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:scroll.viewPortItems}' />\n </virtual-scroller>\n }\n @if (configTemplateText.notUseVirtualScroll) {\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:items()}' />\n }\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[6px] px-[16px]')\">\n @if (!keySearch() && !loading()) {\n {{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n {{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}\n }\n @if (loading()) {\n &nbsp;\n }\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"loadingIconSize() || 'medium'\" />\n }\n </div>\n <ng-template #listRef\n let-itemsView='itemsView'>\n @for (item of itemsView; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"item().classItemWrapper || ''\">\n <div LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [class]=\"'libs-ui-list-template-text-item libs-ui-font-h5r flex '+(item().classItem || '')\"\n [class.items-center]=\"!item().itemAlignStart\"\n [class.items-start]=\"item().itemAlignStart\"\n [class.libs-ui-bg-list-hover-danger]=\"!clickExactly() && item().hoverDanger\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly() && !item().hoverDanger\"\n [class.libs-ui-bg-list-active]=\"!clickExactly() && keySelected() === item()[fieldKey()]\"\n [class.!pl-[16px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.libs-ui-bg-list-hover-ffffff]=\"item().disable\"\n [class.cursor-default]=\"item().disable\"\n [class.!py-[2px]]=\"clickExactly()\"\n [class.!pr-[48px]]=\"keySelected() === item()[fieldKey()] && (!configTemplateText?.ignoreIconSelected || configTemplateText?.actionSort)&& !configTemplateText?.stylePaddingRightItemOther\"\n [ngClass]=\"{'pointer-events-none libs-ui-disable':loading() || disable() || ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length) && !ignoreClassDisableDefaultWhenUseKeysDisableItem())}\"\n (click)=\"handlerClickRelative($event,item())\">\n @if ((item().bullet|LibsUiPipesConvertObjectToSignalPipe)?.(); as bullet) {\n <span class=\"libs-ui-list-template-text-item-bullet flex flex-shrink-0\"\n [style.backgroundColor]=\"bullet.backgroundColor\"\n (click)=\"handlerSelectItem($event,item())\">\n </span>\n }\n @if ((item().avatarConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape ?? 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [classImageInclude]=\"avatarConfig.classImageInclude\"\n [size]=\"avatarConfig.size ?? 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\"\n [classImageInclude]=\"avatarConfig.classImageInclude\" />\n }\n @if (configTemplateText.getImage || configTemplateText.fieldGetImage) {\n <img\n [src]=\"configTemplateText.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateText.getImageError ? configTemplateText.getImageError : configTemplateText.getImage):item()) | async) : item()[configTemplateText.fieldGetImage || '']\"\n [class]=\"'libs-ui-list-template-text-item-avatar ' + (configTemplateText.classIncludeImage ?? '')\"\n [class.w-[18px]]=\"configTemplateText.imgTypeIcon\"\n [class.h-[18px]]=\"configTemplateText.imgTypeIcon\"\n (error)=\"handlerImageError($event, item())\"\n (click)=\"handlerSelectItem($event,item())\" />\n }\n @if ((item().buttonLeftConfig | LibsUiPipesConvertObjectToSignalPipe)?.(); as buttonLeft) {\n @if (item().hrefButton) {\n <a [class.w-full]=\"!buttonLeft.ignoreWidth100\"\n [href]=\"item().hrefButton\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </a>\n }\n @if (!item().hrefButton) {\n <div [class.w-full]=\"!buttonLeft.ignoreWidth100\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </div>\n }\n <ng-template #buttonLeftTemplate>\n <libs_ui-components-buttons-button class=\"w-full\"\n [type]=\"buttonLeft.type ?? 'button-link-primary'\"\n [label]=\"buttonLeft.label ?? ' '\"\n [zIndex]=\"buttonLeft.zIndex\"\n [disable]=\"buttonLeft.disable ?? false\"\n [classIconLeft]=\"(buttonLeft.classIconLeft ? (buttonLeft.classIconLeft+' flex mr-[8px] text-[12px]') : '')\"\n [classInclude]=\"(buttonLeft.classInclude??'')+' w-full'\"\n [classLabel]=\"buttonLeft.classLabel ?? 'libs-ui-font-h4r'\"\n [ignoreStopPropagationEvent]=\"buttonLeft.ignoreStopPropagationEvent\"\n [styleIconLeft]=\"buttonLeft.styleIconLeft\"\n [styleButton]=\"buttonLeft.styleButton\"\n (outClick)=\"handlerSelectItem($event,item())\" />\n </ng-template>\n }\n @if ((item().switchConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as switchConfig) {\n <libs_ui-components-switch [active]=\"switchConfig.active\"\n (outSwitch)=\"handlerSelectItem('click',item())\" />\n }\n @if (item().classIconLeft) {\n <i [class]=\"item().classIconLeft + ' mr-[8px] text-[14px]'\"></i>\n }\n @if (!item().ignoreShowFieldLabel && !configTemplateText.rows) {\n @if ((item().popoverLabel|LibsUiPipesConvertObjectToSignalPipe)?.() ?? {type:'text'}; as popoverLabel) {\n <libs_ui-components-popover [type]=\"popoverLabel.type || 'text'\"\n [elementRefCustom]=\"popoverLabel.type === 'text'? undefined:itemRef\"\n [ignoreShowPopover]=\"popoverLabel.ignoreShowPopover\"\n [config]=\"popoverLabel.config ?? configTemplateText.configLabelPopover?.() ?? {}\"\n [innerHtml]=\"item().fieldLabel\"\n [classInclude]=\"item().classInclude\"\n (outEvent)=\"handlerSelectItem($event,item())\" />\n }\n }\n @if ((item().fieldPopover|LibsUiPipesConvertObjectToSignalPipe)?.(); as popover) {\n <libs_ui-components-popover class=\"{{ popover.classInclude }}\"\n [config]=\"popover.config\">\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline\"></i>\n }\n </libs_ui-components-popover>\n }\n @if (configTemplateText?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"w-full {{ configTemplateText.classRowsWrapper || configTemplateText.classRows || '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateText\"\n [zIndex]=\"zIndex()\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerSelectItem($event.event,$event.item,$event.action)\" />\n }\n @if (configTemplateText.getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"(item()|LibsUiPipesGetValueOfObjectPipe:fieldKey():undefined:true | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getComponentOutlet:item()) | async; inputs:{item}\" />\n }\n\n @if (keySelected() === item()[fieldKey()] || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) && !configTemplateText.ignoreIconSelected && !configTemplateText.actionSort) {\n <i [class]=\"'libs-ui-icon-check '+(configTemplateText.classIncludeIconSelected || 'right-[12px]')\">\n </i>\n }\n @if (keySelected() === item()[fieldKey()] && configTemplateText.actionSort) {\n <div class=\"libs-ui-list-template-text-sort\">\n <libs_ui-components-buttons-sort-arrow [disable]=\"loading() || disable() || false\"\n [mode]=\"configTemplateText?.itemSort?.()?.mode || ''\"\n [fieldSort]=\"item()[fieldKey()]\"\n (outChange)=\"handlerSort($event)\" />\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n}\n", styles: [".libs-ui-list-template-text-item{padding:6px 16px 6px 1px;font-size:12px;line-height:18px;position:relative;cursor:pointer}.libs-ui-list-template-text-item>.libs-ui-icon-check,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort{position:absolute;right:16px}.libs-ui-list-template-text-item>.libs-ui-icon-check:before,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort:before{font-size:16px;color:var(--libs-ui-color-default, #226FF5)}.libs-ui-list-template-text-item-bullet{width:10px;height:10px;border-radius:50%;margin-right:8px;cursor:pointer}.libs-ui-list-template-text-item-avatar{width:24px;height:24px;border-radius:50%;margin-right:8px;cursor:pointer}\n"] }]
235
+ ], template: "@if (configTemplateText(); as configTemplateText) {\n <div class=\"relative h-full w-full\">\n @if (items() && items().length) {\n <div #elementScroll\n [style.height]=\" heightViewPort() && (!config()?.ignoreShowDataWhenNotSearch || (config()?.ignoreShowDataWhenNotSearch && config()?.ignoreFixHeightShowDataWhenNotSearch)) ? heightViewPort()+'px':'100%'\"\n class=\"w-full\"\n LibsUiComponentsScrollOverlayDirective\n (outScrollBottom)=\"handlerScrollBottom()\">\n @if (!configTemplateText.notUseVirtualScroll) {\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:scroll.viewPortItems}' />\n </virtual-scroller>\n }\n @if (configTemplateText.notUseVirtualScroll) {\n <ng-container *ngTemplateOutlet='listRef;context:{itemsView:items()}' />\n }\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[6px] px-[16px]')\">\n @if (!keySearch() && !loading()) {\n {{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n {{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}\n }\n @if (loading()) {\n &nbsp;\n }\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"loadingIconSize() || 'medium'\" />\n }\n </div>\n <ng-template #listRef\n let-itemsView='itemsView'>\n @for (item of itemsView; track item()[fieldKey()]) {\n <div #itemRef\n [class]=\"item().classItemWrapper || ''\">\n <div LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [class]=\"'libs-ui-list-template-text-item libs-ui-font-h5r flex '+(item().classItem || '')\"\n [class.items-center]=\"!item().itemAlignStart\"\n [class.items-start]=\"item().itemAlignStart\"\n [class.libs-ui-bg-list-hover-danger]=\"!clickExactly() && item().hoverDanger\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly() && !item().hoverDanger\"\n [class.libs-ui-bg-list-active]=\"!clickExactly() && keySelected() === item()[fieldKey()]\"\n [class.!pl-[16px]]=\"paddingLeftItem()\"\n [class.bg-[#ffffff]]=\"clickExactly()\"\n [class.libs-ui-bg-list-hover-ffffff]=\"item().disable\"\n [class.cursor-default]=\"item().disable\"\n [class.!py-[2px]]=\"clickExactly()\"\n [class.!pr-[48px]]=\"keySelected() === item()[fieldKey()] && (!configTemplateText?.ignoreIconSelected || configTemplateText?.actionSort)&& !configTemplateText?.stylePaddingRightItemOther\"\n [ngClass]=\"{'pointer-events-none libs-ui-disable':loading() || disable() || ((item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length) && !ignoreClassDisableDefaultWhenUseKeysDisableItem())}\"\n (click)=\"handlerClickRelative($event,item())\">\n @if ((item().bullet|LibsUiPipesConvertObjectToSignalPipe)?.(); as bullet) {\n <span class=\"libs-ui-list-template-text-item-bullet flex flex-shrink-0\"\n [style.backgroundColor]=\"bullet.backgroundColor\"\n (click)=\"handlerSelectItem($event,item())\">\n </span>\n }\n @if ((item().avatarConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as avatarConfig) {\n <libs_ui-components-avatar [typeShape]=\"avatarConfig.typeShape ?? 'circle'\"\n [classInclude]=\"avatarConfig.classInclude\"\n [classImageInclude]=\"avatarConfig.classImageInclude\"\n [size]=\"avatarConfig.size ?? 32\"\n [linkAvatar]=\"avatarConfig.linkAvatar\"\n [linkAvatarError]=\"avatarConfig.linkAvatarError\"\n [idGenColor]=\"avatarConfig.idGenColor\"\n [textAvatar]=\"avatarConfig.textAvatar\"\n [classImageInclude]=\"avatarConfig.classImageInclude\" />\n }\n @if (configTemplateText.getImage || configTemplateText.fieldGetImage) {\n <img\n [src]=\"configTemplateText.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:(item().specific_loadImgError && configTemplateText.getImageError ? configTemplateText.getImageError : configTemplateText.getImage):item()) | async) : item()[configTemplateText.fieldGetImage || '']\"\n [class]=\"'libs-ui-list-template-text-item-avatar ' + (configTemplateText.classIncludeImage ?? '')\"\n [class.w-[18px]]=\"configTemplateText.imgTypeIcon\"\n [class.h-[18px]]=\"configTemplateText.imgTypeIcon\"\n (error)=\"handlerImageError($event, item())\"\n (click)=\"handlerSelectItem($event,item())\" />\n }\n @if ((item().buttonLeftConfig | LibsUiPipesConvertObjectToSignalPipe)?.(); as buttonLeft) {\n @if (item().hrefButton) {\n <a [class.w-full]=\"!buttonLeft.ignoreWidth100\"\n [href]=\"item().hrefButton\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </a>\n }\n @if (!item().hrefButton) {\n <div [class.w-full]=\"!buttonLeft.ignoreWidth100\">\n <ng-container *ngTemplateOutlet=\"buttonLeftTemplate\" />\n </div>\n }\n <ng-template #buttonLeftTemplate>\n <libs_ui-components-buttons-button class=\"w-full\"\n [type]=\"buttonLeft.type ?? 'button-link-primary'\"\n [label]=\"buttonLeft.label ?? ' '\"\n [zIndex]=\"buttonLeft.zIndex\"\n [disable]=\"buttonLeft.disable ?? false\"\n [classIconLeft]=\"(buttonLeft.classIconLeft ? (buttonLeft.classIconLeft+' flex mr-[8px] text-[12px]') : '')\"\n [classInclude]=\"(buttonLeft.classInclude??'')+' w-full'\"\n [classLabel]=\"buttonLeft.classLabel ?? 'libs-ui-font-h4r'\"\n [ignoreStopPropagationEvent]=\"buttonLeft.ignoreStopPropagationEvent\"\n [styleIconLeft]=\"buttonLeft.styleIconLeft\"\n [styleButton]=\"buttonLeft.styleButton\"\n (outClick)=\"handlerSelectItem($event,item())\" />\n </ng-template>\n }\n @if ((item().switchConfig|LibsUiPipesConvertObjectToSignalPipe)?.(); as switchConfig) {\n <libs_ui-components-switch [active]=\"switchConfig.active\"\n (outSwitch)=\"handlerSelectItem('click',item())\" />\n }\n @if (item().classIconLeft) {\n <i [class]=\"item().classIconLeft + ' mr-[8px] text-[14px]'\"></i>\n }\n @if (!item().ignoreShowFieldLabel && !configTemplateText.rows) {\n @if ((item().popoverLabel|LibsUiPipesConvertObjectToSignalPipe)?.() ?? {type:'text'}; as popoverLabel) {\n <libs_ui-components-popover [type]=\"popoverLabel.type || 'text'\"\n [elementRefCustom]=\"popoverLabel.type === 'text'? undefined:itemRef\"\n [ignoreShowPopover]=\"popoverLabel.ignoreShowPopover\"\n [config]=\"popoverLabel.config ?? configTemplateText.configLabelPopover?.() ?? {}\"\n [innerHtml]=\"item().fieldLabel\"\n [classInclude]=\"item().classInclude\"\n (outEvent)=\"handlerSelectItem($event,item())\" />\n }\n }\n @if ((item().fieldPopover|LibsUiPipesConvertObjectToSignalPipe)?.(); as popover) {\n <libs_ui-components-popover class=\"{{ popover.classInclude }}\"\n [config]=\"popover.config\">\n @if (popover.dataView) {\n <div [innerHtml]=\"popover.dataView | translate\"></div>\n } @else {\n <i class=\"libs-ui-icon-tooltip-outline\"></i>\n }\n </libs_ui-components-popover>\n }\n @if (configTemplateText?.rows) {\n <libs_ui-components-list-templates_rows\n class=\"w-full {{ configTemplateText.classRowsWrapper || configTemplateText.classRows || '' }}\"\n [item]=\"item()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"keySelected()\"\n [configTemplate]=\"configTemplateText\"\n [zIndex]=\"zIndex()\"\n (outChangStageFlagMousePopover)=\"handlerChangStageFlagMouse($event)\"\n (outEvent)=\"handlerSelectItem($event.event,$event.item,$event.action)\" />\n }\n @if (configTemplateText.getComponentOutlet) {\n <ng-container\n *ngComponentOutlet=\"(item()|LibsUiPipesGetValueOfObjectPipe:fieldKey():undefined:true | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getComponentOutlet:item()) | async; inputs:(undefined | LibsUiPipesCallFunctionInTemplatePipe:configTemplateText.getDataComponentOutlet:item():fieldKey():{valueIsEmpty:{item:item()}}) | async\" />\n }\n\n @if (keySelected() === item()[fieldKey()] || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) && !configTemplateText.ignoreIconSelected && !configTemplateText.actionSort) {\n <i [class]=\"'libs-ui-icon-check '+(configTemplateText.classIncludeIconSelected || 'right-[12px]')\">\n </i>\n }\n @if (keySelected() === item()[fieldKey()] && configTemplateText.actionSort) {\n <div class=\"libs-ui-list-template-text-sort\">\n <libs_ui-components-buttons-sort-arrow [disable]=\"loading() || disable() || false\"\n [mode]=\"configTemplateText?.itemSort?.()?.mode || ''\"\n [fieldSort]=\"item()[fieldKey()]\"\n (outChange)=\"handlerSort($event)\" />\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n}\n", styles: [".libs-ui-list-template-text-item{padding:6px 16px 6px 1px;font-size:12px;line-height:18px;position:relative;cursor:pointer}.libs-ui-list-template-text-item>.libs-ui-icon-check,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort{position:absolute;right:16px}.libs-ui-list-template-text-item>.libs-ui-icon-check:before,.libs-ui-list-template-text-item .libs-ui-list-template-text-sort:before{font-size:16px;color:var(--libs-ui-color-default, #226FF5)}.libs-ui-list-template-text-item-bullet{width:10px;height:10px;border-radius:50%;margin-right:8px;cursor:pointer}.libs-ui-list-template-text-item-avatar{width:24px;height:24px;border-radius:50%;margin-right:8px;cursor:pointer}\n"] }]
236
236
  }] });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RleHQvdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RleHQvdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyx5Q0FBeUMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9GLE9BQU8sRUFB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QyxzQ0FBc0M7d0JBQ3RDLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQix5Q0FBeUM7d0JBQ3pDLCtDQUErQzt3QkFDL0MsaUNBQWlDO3dCQUNqQyxxQ0FBcUM7d0JBQ3JDLG9DQUFvQzt3QkFDcEMsK0JBQStCO3FCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCwgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnQGloYXJiZWNrL25neC12aXJ0dWFsLXNjcm9sbGVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVNvcnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydEFycm93Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2FsbC1mdW5jdGlvbi1pbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jb252ZXJ0LW9iamVjdC10by1zaWduYWwnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGRlbGV0ZVVuaWNvZGUsIGVzY2FwZUh0bWwsIGlzRW1wdHkgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0LWtleS1zZWFyY2gvaGlnaGxpZ2h0LWtleS1zZWFyY2guZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9jaGVjay1zZWxlY3RlZC1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQgfSBmcm9tICcuLi9yb3dzL3Jvd3MuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuLi90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbVRleHQgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1nZXQtdmFsdWUtb2Ytb2JqZWN0JztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc190ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVmlydHVhbFNjcm9sbGVyTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTmdDbGFzcywgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRBcnJvd0NvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdEhpZ2hsaWdodEtleVNlYXJjaERpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUsXG4gICAgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0VGV4dENvbXBvbmVudCBleHRlbmRzIExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBjb25maWdUZW1wbGF0ZVRleHQgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtVGV4dCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbFNjcm9sbGVyQ29tcG9uZW50ID0gdmlld0NoaWxkPFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudD4oVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50KTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQ/LigpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQuc2V0KHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlVGV4dD8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmZpZWxkS2V5ID8/IHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsQm90dG9tKCkge1xuICAgIGlmICh0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VhcmNoT25saW5lKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUmVsYXRpdmUoZTogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuY2xpY2tFeGFjdGx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0SXRlbShlLCBpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SXRlbShlOiBFdmVudCB8IHN0cmluZywgaXRlbTogYW55LCBhY3Rpb24/OiAoaXRlbTogYW55KSA9PiB2b2lkLCBpZ25vcmVEaXNhYmxlID0gZmFsc2UsIGlzQ2xpY2tNYW51YWwgPSB0cnVlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uZGlzYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlKCkgJiYgIWlnbm9yZURpc2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlICE9PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXRlbSB8fCAodGhpcy5rZXlzRGlzYWJsZUl0ZW0oKSAmJiB0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGFjdGlvbihpdGVtLnJlZik7XG4gICAgICB0aGlzLml0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5idWlsZFZhbHVlQnlDb25maWcoaXRlbSwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uYWN0aW9uU29ydCkge1xuICAgICAgY29uc3QgY3VycmVudEl0ZW1Tb3J0ID0gdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LigpO1xuICAgICAgY29uc3QgbW9kZSA9IGN1cnJlbnRJdGVtU29ydD8uZmllbGRTb3J0ICE9PSBpdGVtW3RoaXMuZmllbGRLZXkoKV0gPyAnYXNjJyA6IGN1cnJlbnRJdGVtU29ydD8ubW9kZSA9PT0gJ2Rlc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgICBjb25zdCBuZXdTb3J0OiBJU29ydCA9IHtcbiAgICAgICAgZmllbGRTb3J0OiBpdGVtW3RoaXMuZmllbGRLZXkoKV0sXG4gICAgICAgIG1vZGUsXG4gICAgICAgIG1vZGVOdW1iZXI6IG1vZGUgPT09ICdhc2MnID8gMSA6IDIsXG4gICAgICAgIHJlc2V0OiAoKSA9PiAwXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5pdGVtU29ydD8uc2V0KG5ld1NvcnQpO1xuXG4gICAgICB0aGlzLm91dFNvcnRTaW5nbGVTZWxlY3QuZW1pdCh0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5pdGVtU29ydD8uKCkgfHwgbmV3U29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNvcnQoaXRlbVNvcnQ6IElTb3J0KSB7XG4gICAgaXRlbVNvcnQucmVzZXQgPSAoKSA9PiAwO1xuXG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LnNldChpdGVtU29ydCk7XG4gICAgdGhpcy5vdXRTb3J0U2luZ2xlU2VsZWN0LmVtaXQodGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LigpIHx8IGl0ZW1Tb3J0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzRGF0YShyZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1CeUtleVNlYXJjaDogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcbiAgICBjb25zdCBrZXlzSGlkZGVuID0gdGhpcy5rZXlzSGlkZGVuSXRlbSgpIHx8IFtdO1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKVxuICAgIH1cbiAgICB0aGlzLnN0b3JlKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVN0b3JlID0gY2xvbmVEZWVwKGl0ZW0pIGFzIFdyaXRhYmxlU2lnbmFsPGFueT47XG4gICAgICBjb25zdCBrZXkgPSBrZXlzSGlkZGVuLmZpbmQoa2V5ID0+IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG4gICAgICBkYXRhU3RvcmUudXBkYXRlKHN0b3JlID0+IHsgcmV0dXJuIHsgLi4uc3RvcmUsIHJlZjogaXRlbSgpIH0gfSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhkYXRhU3RvcmUsIHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCkpKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0ZXh0RXNjYXBlID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgICAgY29uc3Qga2V5U2VhcmNoID0gZGVsZXRlVW5pY29kZShlc2NhcGVIdG1sKHRoaXMua2V5U2VhcmNoKCkudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xuXG4gICAgICAgIGlmICgoKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSAmJiB0aGlzLmNvbmZpZygpPy5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlTmFtZSAmJiAhdGhpcy5jb25maWcoKT8uaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU90aGVyKSB8fFxuICAgICAgICAgICh0ZXh0ICYmICh0ZXh0LmluY2x1ZGVzKGtleVNlYXJjaCkgfHwgdGV4dEVzY2FwZS5pbmNsdWRlcyhrZXlTZWFyY2gpKSkpICYmIChyZXBsYWNlIHx8ICghcmVwbGFjZSAmJiAhdGhpcy5pdGVtcygpLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkpICYmICFpdGVtQnlLZXlTZWFyY2guZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5zdG9yZSxcbiAgICAgICAgICAgICAgaHJlZkJ1dHRvbjogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0SHJlZkJ1dHRvbj8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJdGVtOiBpdGVtKCkuY2xhc3NJdGVtIHx8IHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmdldENsYXNzSXRlbT8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlOiBzdG9yZS5jbGFzc0luY2x1ZGUgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q2xhc3NJbmNsdWRlUG9wb3Zlcj8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgYnV0dG9uTGVmdENvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnQnV0dG9uTGVmdD8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJY29uTGVmdDogc3RvcmUuY2xhc3NJY29uTGVmdCB8fCB0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5nZXRDbGFzc0ljb25MZWZ0Py4oc3RvcmUpLFxuICAgICAgICAgICAgICBob3ZlckRhbmdlcjogc3RvcmUuaG92ZXJEYW5nZXIgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnSG92ZXJEYW5nZXI/LihzdG9yZSksXG4gICAgICAgICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0QXZhdGFyQ29uZmlnPy4oc3RvcmUpLFxuICAgICAgICAgICAgICBpdGVtQWxpZ25TdGFydDogc3RvcmUuaXRlbUFsaWduU3RhcnQgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnQWxpZ25TdGFydD8uKHN0b3JlKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpdGVtQnlLZXlTZWFyY2gucHVzaChkYXRhU3RvcmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXhJdGVtUmVtb3ZlID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoaW5kZXhJdGVtUmVtb3ZlID4gLTEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleEl0ZW1SZW1vdmUsIDEpO1xuXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjYWxsYmFja0NoZWNrU2Nyb2xsID0gKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvSXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5rZXlzSGlkZGVuSXRlbSgpPy5sZW5ndGggJiYgcHJlU3RhdGVIYXNTY3JvbGwgJiYgIWN1cnJlbnRIYXNTY3JvbGwgJiYgKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gY29udmVydE9iamVjdFRvU2lnbmFsPFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+Pj4oaXRlbUJ5S2V5U2VhcmNoKSgpO1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbXMpO1xuICAgICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLmVtaXRLZXlTZWxlY3RlZERlZmF1bHRJZkV4aXN0SXRlbSh0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5hdXRvU2VsZWN0Rmlyc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjYWxsYmFja0NoZWNrU2Nyb2xsKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCksIHBhZ2luZzogdGhpcy5wYWdpbmdTdG9yZSgpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc0J5U2VhcmNoID0gY29udmVydE9iamVjdFRvU2lnbmFsPFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+Pj4oaXRlbUJ5S2V5U2VhcmNoKSgpO1xuICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IFsuLi5pdGVtcywgLi4uaXRlbXNCeVNlYXJjaF0pO1xuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCksIHBhZ2luZzogdGhpcy5wYWdpbmdTdG9yZSgpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0l0ZW1TZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkKCkpO1xuICAgIHRoaXMudGltZUF1dG9TY3JvbGxJdGVtU2VsZWN0ZWQuc2V0KChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5rZXlTZWxlY3RlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldENvbnRhaW5lciA9ICh0aGlzLmVsZW1lbnRTY3JvbGwoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE9mZnNldCA9ICgob2Zmc2V0Q29udGFpbmVyID8gb2Zmc2V0Q29udGFpbmVyIC0gdGhpcy5oZWlnaHRJdGVtKCkgOiAwKSAvIDIpICogLTE7XG5cbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQoKT8uc2Nyb2xsVG9JbmRleChpbmRleCwgdHJ1ZSwgYWRkaXRpb25hbE9mZnNldCwgdGhpcy50aW1lQW5pbWF0aW9uU2Nyb2xsVG9JbmRleEl0ZW0oKSk7XG4gICAgICB9XG4gICAgfSkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRvU2VsZWN0Rmlyc3RJdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlKCkgfHwgdGhpcy5rZXlTZWxlY3RlZCgpIHx8ICF0aGlzLmNvbmZpZygpPy5hdXRvU2VsZWN0Rmlyc3RJdGVtIHx8ICFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlclNlbGVjdEl0ZW0oJ2NsaWNrJywgaXRlbXNbMF0oKSwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEtleVNlbGVjdGVkRGVmYXVsdElmRXhpc3RJdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtcy5maW5kKHN0b3JlID0+IHN0b3JlKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLmhhbmRsZXJTZWxlY3RJdGVtKCdjbGljaycsIGl0ZW0oKSwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldExlbmd0aEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VFcnJvcihldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGl0ZW0uc3BlY2lmaWNfbG9hZEltZ0Vycm9yID0gdHJ1ZTtcbiAgfVxufVxuIiwiQGlmIChjb25maWdUZW1wbGF0ZVRleHQoKTsgYXMgY29uZmlnVGVtcGxhdGVUZXh0KSB7XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsXCI+XG4gICAgQGlmIChpdGVtcygpICYmIGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiIGhlaWdodFZpZXdQb3J0KCkgJiYgKCFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIHx8IChjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoICYmIGNvbmZpZygpPy5pZ25vcmVGaXhIZWlnaHRTaG93RGF0YVdoZW5Ob3RTZWFyY2gpKSAgPyBoZWlnaHRWaWV3UG9ydCgpKydweCc6JzEwMCUnXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICAob3V0U2Nyb2xsQm90dG9tKT1cImhhbmRsZXJTY3JvbGxCb3R0b20oKVwiPlxuICAgICAgICBAaWYgKCFjb25maWdUZW1wbGF0ZVRleHQubm90VXNlVmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNzY3JvbGxcbiAgICAgICAgICAgIFtwYXJlbnRTY3JvbGxdPVwiZWxlbWVudFNjcm9sbFwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0nbGlzdFJlZjtjb250ZXh0OntpdGVtc1ZpZXc6c2Nyb2xsLnZpZXdQb3J0SXRlbXN9JyAvPlxuICAgICAgICAgIDwvdmlydHVhbC1zY3JvbGxlcj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5ub3RVc2VWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0nbGlzdFJlZjtjb250ZXh0OntpdGVtc1ZpZXc6aXRlbXMoKX0nIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpICYmICghY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2goKSkpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdICcrIChjb25maWcoKT8udGV4dE5vRGF0YUNsYXNzSW5jbHVkZSA/PyAncHktWzZweF0gcHgtWzE2cHhdJylcIj5cbiAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIHt7IChjb25maWcoKT8udGV4dE5vRGF0YSA/PyAnaTE4bl9oYXZlX25vX3NlbGVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSB8fCBudWxsO2NvbnRleHQ6e2tleVNlYXJjaDprZXlTZWFyY2goKX1cIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIXRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIHt7IChjb25maWcoKT8udGV4dFNlYXJjaE5vRGF0YSA/PyAnaTE4bl9ub19yZXN1bHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICB9XG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIFtzaXplXT1cImxvYWRpbmdJY29uU2l6ZSgpIHx8ICdtZWRpdW0nXCIgLz5cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2xpc3RSZWZcbiAgICBsZXQtaXRlbXNWaWV3PSdpdGVtc1ZpZXcnPlxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNWaWV3OyB0cmFjayBpdGVtKClbZmllbGRLZXkoKV0pIHtcbiAgICAgIDxkaXYgI2l0ZW1SZWZcbiAgICAgICAgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0l0ZW1XcmFwcGVyIHx8ICcnXCI+XG4gICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmVcbiAgICAgICAgICBbaXNIaWdobGlnaHRdPVwiY29uZmlnKCk/LmhpZ2hsaWdodFRleHRTZWFyY2hJblJlc3VsdFwiXG4gICAgICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtdGVtcGxhdGUtdGV4dC1pdGVtIGxpYnMtdWktZm9udC1oNXIgZmxleCAnKyhpdGVtKCkuY2xhc3NJdGVtIHx8ICcnKVwiXG4gICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCIhaXRlbSgpLml0ZW1BbGlnblN0YXJ0XCJcbiAgICAgICAgICBbY2xhc3MuaXRlbXMtc3RhcnRdPVwiaXRlbSgpLml0ZW1BbGlnblN0YXJ0XCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyLWRhbmdlcl09XCIhY2xpY2tFeGFjdGx5KCkgJiYgaXRlbSgpLmhvdmVyRGFuZ2VyXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyXT1cIiFjbGlja0V4YWN0bHkoKSAgJiYgIWl0ZW0oKS5ob3ZlckRhbmdlclwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1hY3RpdmVdPVwiIWNsaWNrRXhhY3RseSgpICYmIGtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgW2NsYXNzLiFwbC1bMTZweF1dPVwicGFkZGluZ0xlZnRJdGVtKClcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bI2ZmZmZmZl1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItZmZmZmZmXT1cIml0ZW0oKS5kaXNhYmxlXCJcbiAgICAgICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiaXRlbSgpLmRpc2FibGVcIlxuICAgICAgICAgIFtjbGFzcy4hcHktWzJweF1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgIFtjbGFzcy4hcHItWzQ4cHhdXT1cImtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXSAmJiAoIWNvbmZpZ1RlbXBsYXRlVGV4dD8uaWdub3JlSWNvblNlbGVjdGVkIHx8IGNvbmZpZ1RlbXBsYXRlVGV4dD8uYWN0aW9uU29ydCkmJiAhY29uZmlnVGVtcGxhdGVUZXh0Py5zdHlsZVBhZGRpbmdSaWdodEl0ZW1PdGhlclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyLWV2ZW50cy1ub25lIGxpYnMtdWktZGlzYWJsZSc6bG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0Rpc2FibGVJdGVtKCk6a2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkgJiYgIWlnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtKCkpfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1JlbGF0aXZlKCRldmVudCxpdGVtKCkpXCI+XG4gICAgICAgICAgQGlmICgoaXRlbSgpLmJ1bGxldHxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUpPy4oKTsgYXMgYnVsbGV0KSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktbGlzdC10ZW1wbGF0ZS10ZXh0LWl0ZW0tYnVsbGV0IGZsZXggZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYnVsbGV0LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQsaXRlbSgpKVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuYXZhdGFyQ29uZmlnfExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBhdmF0YXJDb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyIFt0eXBlU2hhcGVdPVwiYXZhdGFyQ29uZmlnLnR5cGVTaGFwZSA/PyAnY2lyY2xlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbWFnZUluY2x1ZGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJhdmF0YXJDb25maWcuc2l6ZSA/PyAzMlwiXG4gICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyXCJcbiAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgICAgW2lkR2VuQ29sb3JdPVwiYXZhdGFyQ29uZmlnLmlkR2VuQ29sb3JcIlxuICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiXG4gICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbWFnZUluY2x1ZGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZSB8fCBjb25maWdUZW1wbGF0ZVRleHQuZmllbGRHZXRJbWFnZSkge1xuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cImNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZSA/ICgoJ2F2YXRhcicgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOihpdGVtKCkuc3BlY2lmaWNfbG9hZEltZ0Vycm9yICYmIGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVUZXh0LmdldEltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZVRleHQuZ2V0SW1hZ2UpOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVUZXh0LmZpZWxkR2V0SW1hZ2UgfHwgJyddXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtdGVtcGxhdGUtdGV4dC1pdGVtLWF2YXRhciAnICsgKGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc0luY2x1ZGVJbWFnZSA/PyAnJylcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1bMThweF1dPVwiY29uZmlnVGVtcGxhdGVUZXh0LmltZ1R5cGVJY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmgtWzE4cHhdXT1cImNvbmZpZ1RlbXBsYXRlVGV4dC5pbWdUeXBlSWNvblwiXG4gICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGl0ZW0oKSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSlcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuYnV0dG9uTGVmdENvbmZpZyB8IExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBidXR0b25MZWZ0KSB7XG4gICAgICAgICAgICBAaWYgKGl0ZW0oKS5ocmVmQnV0dG9uKSB7XG4gICAgICAgICAgICAgIDxhIFtjbGFzcy53LWZ1bGxdPVwiIWJ1dHRvbkxlZnQuaWdub3JlV2lkdGgxMDBcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0oKS5ocmVmQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWl0ZW0oKS5ocmVmQnV0dG9uKSB7XG4gICAgICAgICAgICAgIDxkaXYgW2NsYXNzLnctZnVsbF09XCIhYnV0dG9uTGVmdC5pZ25vcmVXaWR0aDEwMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25MZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b25MZWZ0LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uTGVmdC5sYWJlbCA/PyAnICdcIlxuICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiYnV0dG9uTGVmdC56SW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbkxlZnQuZGlzYWJsZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiKGJ1dHRvbkxlZnQuY2xhc3NJY29uTGVmdCA/IChidXR0b25MZWZ0LmNsYXNzSWNvbkxlZnQrJyBmbGV4IG1yLVs4cHhdIHRleHQtWzEycHhdJykgOiAnJylcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGJ1dHRvbkxlZnQuY2xhc3NJbmNsdWRlPz8nJykrJyB3LWZ1bGwnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJidXR0b25MZWZ0LmNsYXNzTGFiZWwgPz8gJ2xpYnMtdWktZm9udC1oNHInXCJcbiAgICAgICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiYnV0dG9uTGVmdC5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlSWNvbkxlZnRdPVwiYnV0dG9uTGVmdC5zdHlsZUljb25MZWZ0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGVCdXR0b25dPVwiYnV0dG9uTGVmdC5zdHlsZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCkpXCIgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoKGl0ZW0oKS5zd2l0Y2hDb25maWd8TGlic1VpUGlwZXNDb252ZXJ0T2JqZWN0VG9TaWduYWxQaXBlKT8uKCk7IGFzIHN3aXRjaENvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2ggW2FjdGl2ZV09XCJzd2l0Y2hDb25maWcuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSlcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5jbGFzc0ljb25MZWZ0KSB7XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSWNvbkxlZnQgKyAnIG1yLVs4cHhdIHRleHQtWzE0cHhdJ1wiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghaXRlbSgpLmlnbm9yZVNob3dGaWVsZExhYmVsICYmICFjb25maWdUZW1wbGF0ZVRleHQucm93cykge1xuICAgICAgICAgICAgQGlmICgoaXRlbSgpLnBvcG92ZXJMYWJlbHxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUpPy4oKSA/PyB7dHlwZTondGV4dCd9OyBhcyBwb3BvdmVyTGFiZWwpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cInBvcG92ZXJMYWJlbC50eXBlIHx8ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicG9wb3ZlckxhYmVsLnR5cGUgPT09ICd0ZXh0Jz8gdW5kZWZpbmVkOml0ZW1SZWZcIlxuICAgICAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJwb3BvdmVyTGFiZWwuaWdub3JlU2hvd1BvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwicG9wb3ZlckxhYmVsLmNvbmZpZyA/PyBjb25maWdUZW1wbGF0ZVRleHQuY29uZmlnTGFiZWxQb3BvdmVyPy4oKSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJpdGVtKCkuZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtKCkuY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuZmllbGRQb3BvdmVyfExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBwb3BvdmVyKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJ7eyBwb3BvdmVyLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwicG9wb3Zlci5jb25maWdcIj5cbiAgICAgICAgICAgICAgQGlmIChwb3BvdmVyLmRhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInBvcG92ZXIuZGF0YVZpZXcgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dD8ucm93cykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yb3dzXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHt7IGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc1Jvd3NXcmFwcGVyIHx8IGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc1Jvd3MgfHwgJycgfX1cIlxuICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgIFtrZXlTZWxlY3RlZF09XCJrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlVGV4dFwiXG4gICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQuZXZlbnQsJGV2ZW50Lml0ZW0sJGV2ZW50LmFjdGlvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRDb21wb25lbnRPdXRsZXQpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGl0ZW0oKXxMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOmZpZWxkS2V5KCk6dW5kZWZpbmVkOnRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRDb21wb25lbnRPdXRsZXQ6aXRlbSgpKSB8IGFzeW5jOyBpbnB1dHM6e2l0ZW19XCIgLz5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKGtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTptdWx0aUtleVNlbGVjdGVkKCk6bXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGgpICYmICFjb25maWdUZW1wbGF0ZVRleHQuaWdub3JlSWNvblNlbGVjdGVkICYmICFjb25maWdUZW1wbGF0ZVRleHQuYWN0aW9uU29ydCkge1xuICAgICAgICAgICAgPGkgW2NsYXNzXT1cIidsaWJzLXVpLWljb24tY2hlY2sgJysoY29uZmlnVGVtcGxhdGVUZXh0LmNsYXNzSW5jbHVkZUljb25TZWxlY3RlZCB8fCAncmlnaHQtWzEycHhdJylcIj5cbiAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChrZXlTZWxlY3RlZCgpID09PSBpdGVtKClbZmllbGRLZXkoKV0gJiYgY29uZmlnVGVtcGxhdGVUZXh0LmFjdGlvblNvcnQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWxpc3QtdGVtcGxhdGUtdGV4dC1zb3J0XCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zb3J0LWFycm93IFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttb2RlXT1cImNvbmZpZ1RlbXBsYXRlVGV4dD8uaXRlbVNvcnQ/LigpPy5tb2RlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICBbZmllbGRTb3J0XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU29ydCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG59XG4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RleHQvdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL3RleHQvdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyx5Q0FBeUMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9GLE9BQU8sRUFB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QyxzQ0FBc0M7d0JBQ3RDLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQix5Q0FBeUM7d0JBQ3pDLCtDQUErQzt3QkFDL0MsaUNBQWlDO3dCQUNqQyxxQ0FBcUM7d0JBQ3JDLG9DQUFvQzt3QkFDcEMsK0JBQStCO3FCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCwgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnQGloYXJiZWNrL25neC12aXJ0dWFsLXNjcm9sbGVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWF2YXRhcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSVNvcnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydEFycm93Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXN3aXRjaCc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2FsbC1mdW5jdGlvbi1pbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jb252ZXJ0LW9iamVjdC10by1zaWduYWwnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGRlbGV0ZVVuaWNvZGUsIGVzY2FwZUh0bWwsIGlzRW1wdHkgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0LWtleS1zZWFyY2gvaGlnaGxpZ2h0LWtleS1zZWFyY2guZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9jaGVjay1zZWxlY3RlZC1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQgfSBmcm9tICcuLi9yb3dzL3Jvd3MuY29tcG9uZW50JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgfSBmcm9tICcuLi90ZW1wbGF0ZXMuY29tcG9uZW50LmFic3RyYWN0JztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbVRleHQgfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaVBpcGVzR2V0VmFsdWVPZk9iamVjdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1nZXQtdmFsdWUtb2Ytb2JqZWN0JztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc190ZXh0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVmlydHVhbFNjcm9sbGVyTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTmdDbGFzcywgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1N3aXRjaENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRBcnJvd0NvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdEhpZ2hsaWdodEtleVNlYXJjaERpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdFJvd3NDb21wb25lbnQsXG4gICAgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZSxcbiAgICBMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUsXG4gICAgTGlic1VpUGlwZXNHZXRWYWx1ZU9mT2JqZWN0UGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaXN0VGV4dENvbXBvbmVudCBleHRlbmRzIExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBjb25maWdUZW1wbGF0ZVRleHQgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtVGV4dCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbFNjcm9sbGVyQ29tcG9uZW50ID0gdmlld0NoaWxkPFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudD4oVmlydHVhbFNjcm9sbGVyQ29tcG9uZW50KTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZVRleHQ/LigpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQuc2V0KHRoaXMuY29uZmlnKCk/LmNvbmZpZ1RlbXBsYXRlVGV4dD8uKCkpO1xuICAgIHRoaXMuZmllbGRLZXkuc2V0KHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmZpZWxkS2V5ID8/IHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBoYW5kbGVyU2Nyb2xsQm90dG9tKCkge1xuICAgIGlmICh0aGlzLmxvYWRlZExhc3RJdGVtKCkpIHtcbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NTZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VhcmNoT25saW5lKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUmVsYXRpdmUoZTogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuY2xpY2tFeGFjdGx5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyU2VsZWN0SXRlbShlLCBpdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SXRlbShlOiBFdmVudCB8IHN0cmluZywgaXRlbTogYW55LCBhY3Rpb24/OiAoaXRlbTogYW55KSA9PiB2b2lkLCBpZ25vcmVEaXNhYmxlID0gZmFsc2UsIGlzQ2xpY2tNYW51YWwgPSB0cnVlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGl0ZW0uZGlzYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlKCkgJiYgIWlnbm9yZURpc2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlICE9PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXRlbSB8fCAodGhpcy5rZXlzRGlzYWJsZUl0ZW0oKSAmJiB0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGFjdGlvbihpdGVtLnJlZik7XG4gICAgICB0aGlzLml0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5idWlsZFZhbHVlQnlDb25maWcoaXRlbSwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uYWN0aW9uU29ydCkge1xuICAgICAgY29uc3QgY3VycmVudEl0ZW1Tb3J0ID0gdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LigpO1xuICAgICAgY29uc3QgbW9kZSA9IGN1cnJlbnRJdGVtU29ydD8uZmllbGRTb3J0ICE9PSBpdGVtW3RoaXMuZmllbGRLZXkoKV0gPyAnYXNjJyA6IGN1cnJlbnRJdGVtU29ydD8ubW9kZSA9PT0gJ2Rlc2MnID8gJ2FzYycgOiAnZGVzYyc7XG4gICAgICBjb25zdCBuZXdTb3J0OiBJU29ydCA9IHtcbiAgICAgICAgZmllbGRTb3J0OiBpdGVtW3RoaXMuZmllbGRLZXkoKV0sXG4gICAgICAgIG1vZGUsXG4gICAgICAgIG1vZGVOdW1iZXI6IG1vZGUgPT09ICdhc2MnID8gMSA6IDIsXG4gICAgICAgIHJlc2V0OiAoKSA9PiAwXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5pdGVtU29ydD8uc2V0KG5ld1NvcnQpO1xuXG4gICAgICB0aGlzLm91dFNvcnRTaW5nbGVTZWxlY3QuZW1pdCh0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5pdGVtU29ydD8uKCkgfHwgbmV3U29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICB0aGlzLm91dFNlbGVjdEtleS5lbWl0KHsga2V5OiB0aGlzLmtleVNlbGVjdGVkKCksIGl0ZW0sIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNvcnQoaXRlbVNvcnQ6IElTb3J0KSB7XG4gICAgaXRlbVNvcnQucmVzZXQgPSAoKSA9PiAwO1xuXG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LnNldChpdGVtU29ydCk7XG4gICAgdGhpcy5vdXRTb3J0U2luZ2xlU2VsZWN0LmVtaXQodGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uaXRlbVNvcnQ/LigpIHx8IGl0ZW1Tb3J0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzRGF0YShyZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1CeUtleVNlYXJjaDogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcbiAgICBjb25zdCBrZXlzSGlkZGVuID0gdGhpcy5rZXlzSGlkZGVuSXRlbSgpIHx8IFtdO1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIHRoaXMuaXRlbXMuc2V0KFtdKVxuICAgIH1cbiAgICB0aGlzLnN0b3JlKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVN0b3JlID0gY2xvbmVEZWVwKGl0ZW0pIGFzIFdyaXRhYmxlU2lnbmFsPGFueT47XG4gICAgICBjb25zdCBrZXkgPSBrZXlzSGlkZGVuLmZpbmQoa2V5ID0+IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG4gICAgICBkYXRhU3RvcmUudXBkYXRlKHN0b3JlID0+IHsgcmV0dXJuIHsgLi4uc3RvcmUsIHJlZjogaXRlbSgpIH0gfSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gZGVsZXRlVW5pY29kZSh0aGlzLmJ1aWxkVmFsdWVCeUNvbmZpZyhkYXRhU3RvcmUsIHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCkpKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0ZXh0RXNjYXBlID0gZXNjYXBlSHRtbCh0ZXh0KTtcbiAgICAgICAgY29uc3Qga2V5U2VhcmNoID0gZGVsZXRlVW5pY29kZShlc2NhcGVIdG1sKHRoaXMua2V5U2VhcmNoKCkudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xuXG4gICAgICAgIGlmICgoKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSAmJiB0aGlzLmNvbmZpZygpPy5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlTmFtZSAmJiAhdGhpcy5jb25maWcoKT8uaHR0cFJlcXVlc3REYXRhPy4oKT8uc2VydmljZU90aGVyKSB8fFxuICAgICAgICAgICh0ZXh0ICYmICh0ZXh0LmluY2x1ZGVzKGtleVNlYXJjaCkgfHwgdGV4dEVzY2FwZS5pbmNsdWRlcyhrZXlTZWFyY2gpKSkpICYmIChyZXBsYWNlIHx8ICghcmVwbGFjZSAmJiAhdGhpcy5pdGVtcygpLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldKSkpICYmICFpdGVtQnlLZXlTZWFyY2guZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0pKSB7XG4gICAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShzdG9yZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5zdG9yZSxcbiAgICAgICAgICAgICAgaHJlZkJ1dHRvbjogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0SHJlZkJ1dHRvbj8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJdGVtOiBpdGVtKCkuY2xhc3NJdGVtIHx8IHRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmdldENsYXNzSXRlbT8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlOiBzdG9yZS5jbGFzc0luY2x1ZGUgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q2xhc3NJbmNsdWRlUG9wb3Zlcj8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgYnV0dG9uTGVmdENvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnQnV0dG9uTGVmdD8uKHN0b3JlKSxcbiAgICAgICAgICAgICAgY2xhc3NJY29uTGVmdDogc3RvcmUuY2xhc3NJY29uTGVmdCB8fCB0aGlzLmNvbmZpZ1RlbXBsYXRlVGV4dCgpPy5nZXRDbGFzc0ljb25MZWZ0Py4oc3RvcmUpLFxuICAgICAgICAgICAgICBob3ZlckRhbmdlcjogc3RvcmUuaG92ZXJEYW5nZXIgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnSG92ZXJEYW5nZXI/LihzdG9yZSksXG4gICAgICAgICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0QXZhdGFyQ29uZmlnPy4oc3RvcmUpLFxuICAgICAgICAgICAgICBpdGVtQWxpZ25TdGFydDogc3RvcmUuaXRlbUFsaWduU3RhcnQgfHwgdGhpcy5jb25maWdUZW1wbGF0ZVRleHQoKT8uZ2V0Q29uZmlnQWxpZ25TdGFydD8uKHN0b3JlKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpdGVtQnlLZXlTZWFyY2gucHVzaChkYXRhU3RvcmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXhJdGVtUmVtb3ZlID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoaW5kZXhJdGVtUmVtb3ZlID4gLTEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleEl0ZW1SZW1vdmUsIDEpO1xuXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjYWxsYmFja0NoZWNrU2Nyb2xsID0gKHByZVN0YXRlSGFzU2Nyb2xsOiBib29sZWFuLCBjdXJyZW50SGFzU2Nyb2xsOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvSXRlbVNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5rZXlzSGlkZGVuSXRlbSgpPy5sZW5ndGggJiYgcHJlU3RhdGVIYXNTY3JvbGwgJiYgIWN1cnJlbnRIYXNTY3JvbGwgJiYgKHRoaXMuaXNTZWFyY2hPbmxpbmUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxsQXBpQnlTZXJ2aWNlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gY29udmVydE9iamVjdFRvU2lnbmFsPFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+Pj4oaXRlbUJ5S2V5U2VhcmNoKSgpO1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbXMpO1xuICAgICAgdGhpcy5jb25maWcoKT8uc29ydD8uKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLmVtaXRLZXlTZWxlY3RlZERlZmF1bHRJZkV4aXN0SXRlbSh0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5hdXRvU2VsZWN0Rmlyc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2hlY2tWaWV3UG9ydFNjcm9sbChjYWxsYmFja0NoZWNrU2Nyb2xsKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCksIHBhZ2luZzogdGhpcy5wYWdpbmdTdG9yZSgpIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtc0J5U2VhcmNoID0gY29udmVydE9iamVjdFRvU2lnbmFsPFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+Pj4oaXRlbUJ5S2V5U2VhcmNoKSgpO1xuICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IFsuLi5pdGVtcywgLi4uaXRlbXNCeVNlYXJjaF0pO1xuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCksIHBhZ2luZzogdGhpcy5wYWdpbmdTdG9yZSgpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0l0ZW1TZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVUZXh0KCk/LmF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkKCkpO1xuICAgIHRoaXMudGltZUF1dG9TY3JvbGxJdGVtU2VsZWN0ZWQuc2V0KChzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5rZXlTZWxlY3RlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcygpLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldENvbnRhaW5lciA9ICh0aGlzLmVsZW1lbnRTY3JvbGwoKT8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/Lm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbE9mZnNldCA9ICgob2Zmc2V0Q29udGFpbmVyID8gb2Zmc2V0Q29udGFpbmVyIC0gdGhpcy5oZWlnaHRJdGVtKCkgOiAwKSAvIDIpICogLTE7XG5cbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQoKT8uc2Nyb2xsVG9JbmRleChpbmRleCwgdHJ1ZSwgYWRkaXRpb25hbE9mZnNldCwgdGhpcy50aW1lQW5pbWF0aW9uU2Nyb2xsVG9JbmRleEl0ZW0oKSk7XG4gICAgICB9XG4gICAgfSkgYXMgdW5rbm93bikgYXMgbnVtYmVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdXRvU2VsZWN0Rmlyc3RJdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGlmICh0aGlzLmF1dG9TZWxlY3RlZEZpcnN0SXRlbUNhbGxPdXRzaWRlQmVmb3JlKCkgfHwgdGhpcy5rZXlTZWxlY3RlZCgpIHx8ICF0aGlzLmNvbmZpZygpPy5hdXRvU2VsZWN0Rmlyc3RJdGVtIHx8ICFpdGVtcyB8fCAhaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlclNlbGVjdEl0ZW0oJ2NsaWNrJywgaXRlbXNbMF0oKSwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEtleVNlbGVjdGVkRGVmYXVsdElmRXhpc3RJdGVtKGl0ZW1zOiBBcnJheTxXcml0YWJsZVNpZ25hbDxhbnk+Pikge1xuICAgIGNvbnN0IGl0ZW0gPSBpdGVtcy5maW5kKHN0b3JlID0+IHN0b3JlKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLmhhbmRsZXJTZWxlY3RJdGVtKCdjbGljaycsIGl0ZW0oKSwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldExlbmd0aEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcygpLmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VFcnJvcihldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGl0ZW0uc3BlY2lmaWNfbG9hZEltZ0Vycm9yID0gdHJ1ZTtcbiAgfVxufVxuIiwiQGlmIChjb25maWdUZW1wbGF0ZVRleHQoKTsgYXMgY29uZmlnVGVtcGxhdGVUZXh0KSB7XG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsXCI+XG4gICAgQGlmIChpdGVtcygpICYmIGl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiIGhlaWdodFZpZXdQb3J0KCkgJiYgKCFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIHx8IChjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoICYmIGNvbmZpZygpPy5pZ25vcmVGaXhIZWlnaHRTaG93RGF0YVdoZW5Ob3RTZWFyY2gpKSAgPyBoZWlnaHRWaWV3UG9ydCgpKydweCc6JzEwMCUnXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICAob3V0U2Nyb2xsQm90dG9tKT1cImhhbmRsZXJTY3JvbGxCb3R0b20oKVwiPlxuICAgICAgICBAaWYgKCFjb25maWdUZW1wbGF0ZVRleHQubm90VXNlVmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgIDx2aXJ0dWFsLXNjcm9sbGVyICNzY3JvbGxcbiAgICAgICAgICAgIFtwYXJlbnRTY3JvbGxdPVwiZWxlbWVudFNjcm9sbFwiXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImgtZnVsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0nbGlzdFJlZjtjb250ZXh0OntpdGVtc1ZpZXc6c2Nyb2xsLnZpZXdQb3J0SXRlbXN9JyAvPlxuICAgICAgICAgIDwvdmlydHVhbC1zY3JvbGxlcj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5ub3RVc2VWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD0nbGlzdFJlZjtjb250ZXh0OntpdGVtc1ZpZXc6aXRlbXMoKX0nIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpICYmICghY29uZmlnKCk/Lmlnbm9yZVNob3dEYXRhV2hlbk5vdFNlYXJjaCB8fCBrZXlTZWFyY2goKSkpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDVyIHRleHQtWyM5Y2EyYWRdICcrIChjb25maWcoKT8udGV4dE5vRGF0YUNsYXNzSW5jbHVkZSA/PyAncHktWzZweF0gcHgtWzE2cHhdJylcIj5cbiAgICAgICAgQGlmICgha2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIHt7IChjb25maWcoKT8udGV4dE5vRGF0YSA/PyAnaTE4bl9oYXZlX25vX3NlbGVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSZWZTZWFyY2hOb0RhdGEoKSB8fCBudWxsO2NvbnRleHQ6e2tleVNlYXJjaDprZXlTZWFyY2goKX1cIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIXRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIHt7IChjb25maWcoKT8udGV4dFNlYXJjaE5vRGF0YSA/PyAnaTE4bl9ub19yZXN1bHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICB9XG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIFtzaXplXT1cImxvYWRpbmdJY29uU2l6ZSgpIHx8ICdtZWRpdW0nXCIgLz5cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2xpc3RSZWZcbiAgICBsZXQtaXRlbXNWaWV3PSdpdGVtc1ZpZXcnPlxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNWaWV3OyB0cmFjayBpdGVtKClbZmllbGRLZXkoKV0pIHtcbiAgICAgIDxkaXYgI2l0ZW1SZWZcbiAgICAgICAgW2NsYXNzXT1cIml0ZW0oKS5jbGFzc0l0ZW1XcmFwcGVyIHx8ICcnXCI+XG4gICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmVcbiAgICAgICAgICBbaXNIaWdobGlnaHRdPVwiY29uZmlnKCk/LmhpZ2hsaWdodFRleHRTZWFyY2hJblJlc3VsdFwiXG4gICAgICAgICAgW2tleVNlYXJjaF09XCJrZXlTZWFyY2goKVwiXG4gICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtdGVtcGxhdGUtdGV4dC1pdGVtIGxpYnMtdWktZm9udC1oNXIgZmxleCAnKyhpdGVtKCkuY2xhc3NJdGVtIHx8ICcnKVwiXG4gICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCIhaXRlbSgpLml0ZW1BbGlnblN0YXJ0XCJcbiAgICAgICAgICBbY2xhc3MuaXRlbXMtc3RhcnRdPVwiaXRlbSgpLml0ZW1BbGlnblN0YXJ0XCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyLWRhbmdlcl09XCIhY2xpY2tFeGFjdGx5KCkgJiYgaXRlbSgpLmhvdmVyRGFuZ2VyXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1iZy1saXN0LWhvdmVyXT1cIiFjbGlja0V4YWN0bHkoKSAgJiYgIWl0ZW0oKS5ob3ZlckRhbmdlclwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYmctbGlzdC1hY3RpdmVdPVwiIWNsaWNrRXhhY3RseSgpICYmIGtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgW2NsYXNzLiFwbC1bMTZweF1dPVwicGFkZGluZ0xlZnRJdGVtKClcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bI2ZmZmZmZl1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItZmZmZmZmXT1cIml0ZW0oKS5kaXNhYmxlXCJcbiAgICAgICAgICBbY2xhc3MuY3Vyc29yLWRlZmF1bHRdPVwiaXRlbSgpLmRpc2FibGVcIlxuICAgICAgICAgIFtjbGFzcy4hcHktWzJweF1dPVwiY2xpY2tFeGFjdGx5KClcIlxuICAgICAgICAgIFtjbGFzcy4hcHItWzQ4cHhdXT1cImtleVNlbGVjdGVkKCkgPT09IGl0ZW0oKVtmaWVsZEtleSgpXSAmJiAoIWNvbmZpZ1RlbXBsYXRlVGV4dD8uaWdub3JlSWNvblNlbGVjdGVkIHx8IGNvbmZpZ1RlbXBsYXRlVGV4dD8uYWN0aW9uU29ydCkmJiAhY29uZmlnVGVtcGxhdGVUZXh0Py5zdHlsZVBhZGRpbmdSaWdodEl0ZW1PdGhlclwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyLWV2ZW50cy1ub25lIGxpYnMtdWktZGlzYWJsZSc6bG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6a2V5c0Rpc2FibGVJdGVtKCk6a2V5c0Rpc2FibGVJdGVtKCk/Lmxlbmd0aCkgJiYgIWlnbm9yZUNsYXNzRGlzYWJsZURlZmF1bHRXaGVuVXNlS2V5c0Rpc2FibGVJdGVtKCkpfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1JlbGF0aXZlKCRldmVudCxpdGVtKCkpXCI+XG4gICAgICAgICAgQGlmICgoaXRlbSgpLmJ1bGxldHxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUpPy4oKTsgYXMgYnVsbGV0KSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktbGlzdC10ZW1wbGF0ZS10ZXh0LWl0ZW0tYnVsbGV0IGZsZXggZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYnVsbGV0LmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQsaXRlbSgpKVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuYXZhdGFyQ29uZmlnfExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBhdmF0YXJDb25maWcpIHtcbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyIFt0eXBlU2hhcGVdPVwiYXZhdGFyQ29uZmlnLnR5cGVTaGFwZSA/PyAnY2lyY2xlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiYXZhdGFyQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbWFnZUluY2x1ZGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJhdmF0YXJDb25maWcuc2l6ZSA/PyAzMlwiXG4gICAgICAgICAgICAgIFtsaW5rQXZhdGFyXT1cImF2YXRhckNvbmZpZy5saW5rQXZhdGFyXCJcbiAgICAgICAgICAgICAgW2xpbmtBdmF0YXJFcnJvcl09XCJhdmF0YXJDb25maWcubGlua0F2YXRhckVycm9yXCJcbiAgICAgICAgICAgICAgW2lkR2VuQ29sb3JdPVwiYXZhdGFyQ29uZmlnLmlkR2VuQ29sb3JcIlxuICAgICAgICAgICAgICBbdGV4dEF2YXRhcl09XCJhdmF0YXJDb25maWcudGV4dEF2YXRhclwiXG4gICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJhdmF0YXJDb25maWcuY2xhc3NJbWFnZUluY2x1ZGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZSB8fCBjb25maWdUZW1wbGF0ZVRleHQuZmllbGRHZXRJbWFnZSkge1xuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBbc3JjXT1cImNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZSA/ICgoJ2F2YXRhcicgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOihpdGVtKCkuc3BlY2lmaWNfbG9hZEltZ0Vycm9yICYmIGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRJbWFnZUVycm9yID8gY29uZmlnVGVtcGxhdGVUZXh0LmdldEltYWdlRXJyb3IgOiBjb25maWdUZW1wbGF0ZVRleHQuZ2V0SW1hZ2UpOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVUZXh0LmZpZWxkR2V0SW1hZ2UgfHwgJyddXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWxpc3QtdGVtcGxhdGUtdGV4dC1pdGVtLWF2YXRhciAnICsgKGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc0luY2x1ZGVJbWFnZSA/PyAnJylcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1bMThweF1dPVwiY29uZmlnVGVtcGxhdGVUZXh0LmltZ1R5cGVJY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmgtWzE4cHhdXT1cImNvbmZpZ1RlbXBsYXRlVGV4dC5pbWdUeXBlSWNvblwiXG4gICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGl0ZW0oKSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSlcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuYnV0dG9uTGVmdENvbmZpZyB8IExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBidXR0b25MZWZ0KSB7XG4gICAgICAgICAgICBAaWYgKGl0ZW0oKS5ocmVmQnV0dG9uKSB7XG4gICAgICAgICAgICAgIDxhIFtjbGFzcy53LWZ1bGxdPVwiIWJ1dHRvbkxlZnQuaWdub3JlV2lkdGgxMDBcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIml0ZW0oKS5ocmVmQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRUZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWl0ZW0oKS5ocmVmQnV0dG9uKSB7XG4gICAgICAgICAgICAgIDxkaXYgW2NsYXNzLnctZnVsbF09XCIhYnV0dG9uTGVmdC5pZ25vcmVXaWR0aDEwMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25MZWZ0VGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b25MZWZ0LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYnV0dG9uTGVmdC5sYWJlbCA/PyAnICdcIlxuICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiYnV0dG9uTGVmdC56SW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImJ1dHRvbkxlZnQuZGlzYWJsZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiKGJ1dHRvbkxlZnQuY2xhc3NJY29uTGVmdCA/IChidXR0b25MZWZ0LmNsYXNzSWNvbkxlZnQrJyBmbGV4IG1yLVs4cHhdIHRleHQtWzEycHhdJykgOiAnJylcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiKGJ1dHRvbkxlZnQuY2xhc3NJbmNsdWRlPz8nJykrJyB3LWZ1bGwnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbF09XCJidXR0b25MZWZ0LmNsYXNzTGFiZWwgPz8gJ2xpYnMtdWktZm9udC1oNHInXCJcbiAgICAgICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiYnV0dG9uTGVmdC5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlSWNvbkxlZnRdPVwiYnV0dG9uTGVmdC5zdHlsZUljb25MZWZ0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGVCdXR0b25dPVwiYnV0dG9uTGVmdC5zdHlsZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3RJdGVtKCRldmVudCxpdGVtKCkpXCIgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoKGl0ZW0oKS5zd2l0Y2hDb25maWd8TGlic1VpUGlwZXNDb252ZXJ0T2JqZWN0VG9TaWduYWxQaXBlKT8uKCk7IGFzIHN3aXRjaENvbmZpZykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zd2l0Y2ggW2FjdGl2ZV09XCJzd2l0Y2hDb25maWcuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKG91dFN3aXRjaCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgnY2xpY2snLGl0ZW0oKSlcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGl0ZW0oKS5jbGFzc0ljb25MZWZ0KSB7XG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbSgpLmNsYXNzSWNvbkxlZnQgKyAnIG1yLVs4cHhdIHRleHQtWzE0cHhdJ1wiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghaXRlbSgpLmlnbm9yZVNob3dGaWVsZExhYmVsICYmICFjb25maWdUZW1wbGF0ZVRleHQucm93cykge1xuICAgICAgICAgICAgQGlmICgoaXRlbSgpLnBvcG92ZXJMYWJlbHxMaWJzVWlQaXBlc0NvbnZlcnRPYmplY3RUb1NpZ25hbFBpcGUpPy4oKSA/PyB7dHlwZTondGV4dCd9OyBhcyBwb3BvdmVyTGFiZWwpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFt0eXBlXT1cInBvcG92ZXJMYWJlbC50eXBlIHx8ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW2VsZW1lbnRSZWZDdXN0b21dPVwicG9wb3ZlckxhYmVsLnR5cGUgPT09ICd0ZXh0Jz8gdW5kZWZpbmVkOml0ZW1SZWZcIlxuICAgICAgICAgICAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJwb3BvdmVyTGFiZWwuaWdub3JlU2hvd1BvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwicG9wb3ZlckxhYmVsLmNvbmZpZyA/PyBjb25maWdUZW1wbGF0ZVRleHQuY29uZmlnTGFiZWxQb3BvdmVyPy4oKSA/PyB7fVwiXG4gICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJpdGVtKCkuZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJpdGVtKCkuY2xhc3NJbmNsdWRlXCJcbiAgICAgICAgICAgICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclNlbGVjdEl0ZW0oJGV2ZW50LGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKChpdGVtKCkuZmllbGRQb3BvdmVyfExpYnNVaVBpcGVzQ29udmVydE9iamVjdFRvU2lnbmFsUGlwZSk/LigpOyBhcyBwb3BvdmVyKSB7XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJ7eyBwb3BvdmVyLmNsYXNzSW5jbHVkZSB9fVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwicG9wb3Zlci5jb25maWdcIj5cbiAgICAgICAgICAgICAgQGlmIChwb3BvdmVyLmRhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cInBvcG92ZXIuZGF0YVZpZXcgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tdG9vbHRpcC1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dD8ucm93cykge1xuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yb3dzXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHt7IGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc1Jvd3NXcmFwcGVyIHx8IGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc1Jvd3MgfHwgJycgfX1cIlxuICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgIFtrZXlTZWxlY3RlZF09XCJrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlVGV4dFwiXG4gICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyU2VsZWN0SXRlbSgkZXZlbnQuZXZlbnQsJGV2ZW50Lml0ZW0sJGV2ZW50LmFjdGlvbilcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRDb21wb25lbnRPdXRsZXQpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGl0ZW0oKXxMaWJzVWlQaXBlc0dldFZhbHVlT2ZPYmplY3RQaXBlOmZpZWxkS2V5KCk6dW5kZWZpbmVkOnRydWUgfCBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlOmNvbmZpZ1RlbXBsYXRlVGV4dC5nZXRDb21wb25lbnRPdXRsZXQ6aXRlbSgpKSB8IGFzeW5jOyBpbnB1dHM6KHVuZGVmaW5lZCB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVUZXh0LmdldERhdGFDb21wb25lbnRPdXRsZXQ6aXRlbSgpOmZpZWxkS2V5KCk6e3ZhbHVlSXNFbXB0eTp7aXRlbTppdGVtKCl9fSkgfCBhc3luY1wiIC8+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChrZXlTZWxlY3RlZCgpID09PSBpdGVtKClbZmllbGRLZXkoKV0gfHwgKGl0ZW0oKVtmaWVsZEtleSgpXSB8IExpYnNVaUNoZWNrU2VsZWN0ZWRCeUtleVBpcGU6bXVsdGlLZXlTZWxlY3RlZCgpOm11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoKSAmJiAhY29uZmlnVGVtcGxhdGVUZXh0Lmlnbm9yZUljb25TZWxlY3RlZCAmJiAhY29uZmlnVGVtcGxhdGVUZXh0LmFjdGlvblNvcnQpIHtcbiAgICAgICAgICAgIDxpIFtjbGFzc109XCInbGlicy11aS1pY29uLWNoZWNrICcrKGNvbmZpZ1RlbXBsYXRlVGV4dC5jbGFzc0luY2x1ZGVJY29uU2VsZWN0ZWQgfHwgJ3JpZ2h0LVsxMnB4XScpXCI+XG4gICAgICAgICAgICA8L2k+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoa2V5U2VsZWN0ZWQoKSA9PT0gaXRlbSgpW2ZpZWxkS2V5KCldICYmIGNvbmZpZ1RlbXBsYXRlVGV4dC5hY3Rpb25Tb3J0KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1saXN0LXRlbXBsYXRlLXRleHQtc29ydFwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtc29ydC1hcnJvdyBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbW9kZV09XCJjb25maWdUZW1wbGF0ZVRleHQ/Lml0ZW1Tb3J0Py4oKT8ubW9kZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgW2ZpZWxkU29ydF09XCJpdGVtKClbZmllbGRLZXkoKV1cIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlclNvcnQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxufVxuIl19