@paperless/angular 1.52.3 → 1.52.5

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.
@@ -305,6 +305,12 @@ let Table = class Table {
305
305
  }
306
306
  this.emptyStateActionClick.emit();
307
307
  }
308
+ parseRowActionsRow(actions, rowIndex) {
309
+ if (!actions?.length) {
310
+ return [];
311
+ }
312
+ return actions.filter(a => !a.showFunction || a.showFunction(this.parsedItems[rowIndex]));
313
+ }
308
314
  _parseItems(items) {
309
315
  if (!items) {
310
316
  this.parsedItems = [];
@@ -689,14 +695,14 @@ let Table = class Table {
689
695
  }
690
696
  };
691
697
  Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
692
- Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", rowSelectionLimit: "rowSelectionLimit", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableFloatingMenu: "enableFloatingMenu", floatingMenuAmountSelectedText: "floatingMenuAmountSelectedText", floatingMenuAmountSelectedTemplate: "floatingMenuAmountSelectedTemplate", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", shadow: "shadow", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", action: "action", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "window:resize": "onResize($event)", "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "rowActions", predicate: TableRowAction }], usesOnChanges: true, ngImport: i0, template: "<p-table-container [shadow]=\"shadow\">\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t(change)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t/>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t[tableHasActions]=\"\n\t\t\t\t\t\t\t\t!!(rowActionsRow$ | async)?.length && !(isMobile$ | async)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t(change)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t!!(rowActionsRow$ | async)?.length &&\n\t\t\t\t\t\t\t!!(rowActionsRowDefinition$ | async) &&\n\t\t\t\t\t\t\t!(isMobile$ | async)\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\tvariant=\"actions\"\n\t\t\t\t\t\t\t[definition]=\"rowActionsRowDefinition$ | async\"\n\t\t\t\t\t\t\t[item]=\"parsedItems[rowIndex]\"\n\t\t\t\t\t\t\t[index]=\"columns.length - 1\"\n\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t[tableHasActions]=\"!!(rowActionsRow$ | async)?.length\"\n\t\t\t\t\t\t\t[template]=\"actionsTemplate\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</p-table-cell-ngx>\n\n\t\t\t\t\t\t<ng-template #actionsTemplate>\n\t\t\t\t\t\t\t<div class=\"ml-auto flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow$ | async\">\n\t\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[content]=\"action.label\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action.iconRotate\"\n\t\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"action.disabled\"\n\t\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePageSize]=\"enablePageSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePagination]=\"enablePagination\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"footerLoading\"\n\t></p-table-footer>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class.inactive]=\"!selectedRows.length\"\n\t\t\t[class.shown]=\"floatingMenuShown$ | async\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t[hover]=\"false\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t{{ floatingMenuAmountSelectedText }}\n\t\t\t</p-floating-menu-item>\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action.type === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction.disabled\n\t\t\t\t\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action.label }}\n\n\t\t\t\t<p-loader\n\t\t\t\t\t*ngIf=\"action.loading; else floatingMenuItemIconTemplate\"\n\t\t\t\t></p-loader>\n\n\t\t\t\t<ng-template #floatingMenuItemIconTemplate>\n\t\t\t\t\t<p-icon\n\t\t\t\t\t\t[variant]=\"action.icon\"\n\t\t\t\t\t\t[rotate]=\"action.iconRotate\"\n\t\t\t\t\t\t[flip]=\"action.iconFlip\"\n\t\t\t\t\t></p-icon>\n\t\t\t\t</ng-template>\n\t\t\t</p-floating-menu-item>\n\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t(click)=\"_selectAllChange(null, false)\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t>\n\t\t\t\t<p-icon variant=\"negative\"></p-icon>\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<div\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateFilteredIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateFilteredHeader }}\n\t\t</p>\n\t\t<p class=\"mb-14 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateFilteredContent }}\n\t\t</p>\n\t</div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<div\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t\t[class.cursor-pointer]=\"enableEmptyStateAction\"\n\t\t(click)=\"emptyStateClicked()\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateHeader }}\n\t\t</p>\n\t\t<p class=\"mb-6 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateContent }}\n\t\t</p>\n\t\t<p-button\n\t\t\t*ngIf=\"enableEmptyStateAction\"\n\t\t\tvariant=\"secondary\"\n\t\t\ticon=\"plus\"\n\t\t\tsize=\"small\"\n\t\t>\n\t\t\t{{ emptyStateAction }}\n\t\t</p-button>\n\t</div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container:not(.shown){display:none}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{display:flex;transform:translateY(0) translate(-50%);opacity:100}99%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(100%) translate(-50%);opacity:0;display:none}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0;display:none}1%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(0) translate(-50%);opacity:100;display:flex}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PDivider, selector: "p-divider", inputs: ["variant"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover"] }, { kind: "component", type: i3.PIcon, selector: "p-icon", inputs: ["flip", "rotate", "size", "variant"] }, { kind: "component", type: i3.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i3.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i3.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "padding", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container", inputs: ["shadow"] }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.PTooltip, selector: "p-tooltip", inputs: ["canManuallyClose", "content", "enableUserInput", "offset", "placement", "show", "strategy", "variant"] }, { kind: "component", type: i4.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "tableHasActions", "checkbox", "template"] }, { kind: "directive", type: i5.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i6.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
698
+ Table.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Table, selector: "p-table-ngx", inputs: { items: "items", loading: "loading", headerLoading: "headerLoading", footerLoading: "footerLoading", amountOfLoadingRows: "amountOfLoadingRows", enableRowSelection: "enableRowSelection", rowSelectionLimit: "rowSelectionLimit", enableRowClick: "enableRowClick", selectedRows: "selectedRows", selectionKey: "selectionKey", canSelectKey: "canSelectKey", enableFloatingMenu: "enableFloatingMenu", floatingMenuAmountSelectedText: "floatingMenuAmountSelectedText", floatingMenuAmountSelectedTemplate: "floatingMenuAmountSelectedTemplate", enableHeader: "enableHeader", quickFilters: "quickFilters", activeQuickFilterIdentifier: "activeQuickFilterIdentifier", enableSearch: "enableSearch", query: "query", enableFilter: "enableFilter", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePageSize: "enablePageSize", enablePagination: "enablePagination", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", shadow: "shadow", filterModalHeaderText: "filterModalHeaderText", filterModalSaveText: "filterModalSaveText", filterModalCancelText: "filterModalCancelText", filterModalResetText: "filterModalResetText", filterModalShowReset: "filterModalShowReset", filterModalShowResetMobile: "filterModalShowResetMobile" }, outputs: { selectedRowsChange: "selectedRowsChange", rowClick: "rowClick", rowSelected: "rowSelected", rowDeselected: "rowDeselected", quickFilter: "quickFilter", queryChange: "queryChange", filter: "filter", action: "action", pageChange: "pageChange", pageSizeChange: "pageSizeChange", export: "export", emptyStateActionClick: "emptyStateActionClick", filterModalShow: "filterModalShow", filterModalSave: "filterModalSave", filterModalReset: "filterModalReset" }, host: { listeners: { "window:resize": "onResize($event)", "document:keydown": "keyDown($event)", "document:keyup": "keyUp($event)", "document:visibilitychange": "visibilityChange($event)" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "rowActions", predicate: TableRowAction }], usesOnChanges: true, ngImport: i0, template: "<p-table-container [shadow]=\"shadow\">\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t(change)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t/>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t\t[tableHasActions]=\"\n\t\t\t\t\t\t\t\t\t!!rowActionsRow?.length && !(isMobile$ | async)\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t(change)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t!!rowActionsRow?.length &&\n\t\t\t\t\t\t\t\t!!(rowActionsRowDefinition$ | async) &&\n\t\t\t\t\t\t\t\t!(isMobile$ | async)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\tvariant=\"actions\"\n\t\t\t\t\t\t\t\t[definition]=\"rowActionsRowDefinition$ | async\"\n\t\t\t\t\t\t\t\t[item]=\"parsedItems[rowIndex]\"\n\t\t\t\t\t\t\t\t[index]=\"columns.length - 1\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[tableHasActions]=\"!!rowActionsRow?.length\"\n\t\t\t\t\t\t\t\t[template]=\"actionsTemplate\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #actionsTemplate>\n\t\t\t\t\t\t\t\t<div class=\"ml-auto flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[content]=\"action.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action.iconRotate\"\n\t\t\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"action.disabled\"\n\t\t\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t ) | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePageSize]=\"enablePageSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePagination]=\"enablePagination\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"footerLoading\"\n\t></p-table-footer>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class.inactive]=\"!selectedRows.length\"\n\t\t\t[class.shown]=\"floatingMenuShown$ | async\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t[hover]=\"false\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t{{ floatingMenuAmountSelectedText }}\n\t\t\t</p-floating-menu-item>\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action.type === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction.disabled\n\t\t\t\t\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action.label }}\n\n\t\t\t\t<p-loader\n\t\t\t\t\t*ngIf=\"action.loading; else floatingMenuItemIconTemplate\"\n\t\t\t\t></p-loader>\n\n\t\t\t\t<ng-template #floatingMenuItemIconTemplate>\n\t\t\t\t\t<p-icon\n\t\t\t\t\t\t[variant]=\"action.icon\"\n\t\t\t\t\t\t[rotate]=\"action.iconRotate\"\n\t\t\t\t\t\t[flip]=\"action.iconFlip\"\n\t\t\t\t\t></p-icon>\n\t\t\t\t</ng-template>\n\t\t\t</p-floating-menu-item>\n\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t(click)=\"_selectAllChange(null, false)\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t>\n\t\t\t\t<p-icon variant=\"negative\"></p-icon>\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<div\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateFilteredIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateFilteredHeader }}\n\t\t</p>\n\t\t<p class=\"mb-14 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateFilteredContent }}\n\t\t</p>\n\t</div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<div\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t\t[class.cursor-pointer]=\"enableEmptyStateAction\"\n\t\t(click)=\"emptyStateClicked()\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateHeader }}\n\t\t</p>\n\t\t<p class=\"mb-6 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateContent }}\n\t\t</p>\n\t\t<p-button\n\t\t\t*ngIf=\"enableEmptyStateAction\"\n\t\t\tvariant=\"secondary\"\n\t\t\ticon=\"plus\"\n\t\t\tsize=\"small\"\n\t\t>\n\t\t\t{{ emptyStateAction }}\n\t\t</p-button>\n\t</div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container:not(.shown){display:none}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{display:flex;transform:translateY(0) translate(-50%);opacity:100}99%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(100%) translate(-50%);opacity:0;display:none}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0;display:none}1%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(0) translate(-50%);opacity:100;display:flex}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PButton, selector: "p-button", inputs: ["chevron", "chevronPosition", "disabled", "href", "icon", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "loading", "size", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PDivider, selector: "p-divider", inputs: ["variant"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover"] }, { kind: "component", type: i3.PIcon, selector: "p-icon", inputs: ["flip", "rotate", "size", "variant"] }, { kind: "component", type: i3.PIllustration, selector: "p-illustration", inputs: ["variant"] }, { kind: "component", type: i3.PLoader, selector: "p-loader", inputs: ["color", "modalDescription", "modalTitle", "show", "variant"] }, { kind: "component", type: i3.PModal, selector: "p-modal", inputs: ["applyBlur", "backdropClickClose", "header", "padding", "scrollLock", "show", "showClose", "showMobileFooter", "size", "variant"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container", inputs: ["shadow"] }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enableExport", "enablePageSize", "enablePagination", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableFilter", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["enableHover", "variant"] }, { kind: "component", type: i3.PTooltip, selector: "p-tooltip", inputs: ["canManuallyClose", "content", "enableUserInput", "offset", "placement", "show", "strategy", "variant"] }, { kind: "component", type: i4.TableCell, selector: "p-table-cell-ngx", inputs: ["variant", "index", "rowIndex", "definition", "item", "value", "tableHasActions", "checkbox", "template"] }, { kind: "directive", type: i5.TableFooterDirective, selector: "p-table-footer" }, { kind: "directive", type: i6.TableHeaderDirective, selector: "p-table-header" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
693
699
  Table = __decorate([
694
700
  UntilDestroy({ checkProperties: true })
695
701
  ], Table);
696
702
  export { Table };
697
703
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, decorators: [{
698
704
  type: Component,
699
- args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container [shadow]=\"shadow\">\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t(change)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t/>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t[tableHasActions]=\"\n\t\t\t\t\t\t\t\t!!(rowActionsRow$ | async)?.length && !(isMobile$ | async)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t(change)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t!!(rowActionsRow$ | async)?.length &&\n\t\t\t\t\t\t\t!!(rowActionsRowDefinition$ | async) &&\n\t\t\t\t\t\t\t!(isMobile$ | async)\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\tvariant=\"actions\"\n\t\t\t\t\t\t\t[definition]=\"rowActionsRowDefinition$ | async\"\n\t\t\t\t\t\t\t[item]=\"parsedItems[rowIndex]\"\n\t\t\t\t\t\t\t[index]=\"columns.length - 1\"\n\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t[tableHasActions]=\"!!(rowActionsRow$ | async)?.length\"\n\t\t\t\t\t\t\t[template]=\"actionsTemplate\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</p-table-cell-ngx>\n\n\t\t\t\t\t\t<ng-template #actionsTemplate>\n\t\t\t\t\t\t\t<div class=\"ml-auto flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow$ | async\">\n\t\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[content]=\"action.label\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action.iconRotate\"\n\t\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"action.disabled\"\n\t\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(action.queryParams, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePageSize]=\"enablePageSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePagination]=\"enablePagination\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"footerLoading\"\n\t></p-table-footer>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class.inactive]=\"!selectedRows.length\"\n\t\t\t[class.shown]=\"floatingMenuShown$ | async\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t[hover]=\"false\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t{{ floatingMenuAmountSelectedText }}\n\t\t\t</p-floating-menu-item>\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action.type === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction.disabled\n\t\t\t\t\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action.label }}\n\n\t\t\t\t<p-loader\n\t\t\t\t\t*ngIf=\"action.loading; else floatingMenuItemIconTemplate\"\n\t\t\t\t></p-loader>\n\n\t\t\t\t<ng-template #floatingMenuItemIconTemplate>\n\t\t\t\t\t<p-icon\n\t\t\t\t\t\t[variant]=\"action.icon\"\n\t\t\t\t\t\t[rotate]=\"action.iconRotate\"\n\t\t\t\t\t\t[flip]=\"action.iconFlip\"\n\t\t\t\t\t></p-icon>\n\t\t\t\t</ng-template>\n\t\t\t</p-floating-menu-item>\n\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t(click)=\"_selectAllChange(null, false)\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t>\n\t\t\t\t<p-icon variant=\"negative\"></p-icon>\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<div\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateFilteredIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateFilteredHeader }}\n\t\t</p>\n\t\t<p class=\"mb-14 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateFilteredContent }}\n\t\t</p>\n\t</div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<div\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t\t[class.cursor-pointer]=\"enableEmptyStateAction\"\n\t\t(click)=\"emptyStateClicked()\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateHeader }}\n\t\t</p>\n\t\t<p class=\"mb-6 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateContent }}\n\t\t</p>\n\t\t<p-button\n\t\t\t*ngIf=\"enableEmptyStateAction\"\n\t\t\tvariant=\"secondary\"\n\t\t\ticon=\"plus\"\n\t\t\tsize=\"small\"\n\t\t>\n\t\t\t{{ emptyStateAction }}\n\t\t</p-button>\n\t</div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container:not(.shown){display:none}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{display:flex;transform:translateY(0) translate(-50%);opacity:100}99%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(100%) translate(-50%);opacity:0;display:none}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0;display:none}1%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(0) translate(-50%);opacity:100;display:flex}}\n"] }]
705
+ args: [{ selector: 'p-table-ngx', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container [shadow]=\"shadow\">\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\t[quickFilters]=\"quickFilters\"\n\t\t[activeQuickFilterIdentifier]=\"activeQuickFilterIdentifier\"\n\t\t(quickFilter)=\"onQuickFilter($event)\"\n\t\t[enableSearch]=\"enableSearch\"\n\t\t[query]=\"query\"\n\t\t(queryChange)=\"onQueryChange($event)\"\n\t\t[enableFilter]=\"enableFilter\"\n\t\t[selectedFiltersAmount]=\"selectedFiltersAmount\"\n\t\t[filterButtonTemplate]=\"filterButtonTemplate\"\n\t\t(filter)=\"filterModalShow$.next(true)\"\n\t\t[enableAction]=\"enableAction\"\n\t\t[canUseAction]=\"actionButtonEnabled\"\n\t\t[actionButtonTemplate]=\"actionButtonTemplate\"\n\t\t[actionLoading]=\"actionButtonLoading\"\n\t\t[actionText]=\"actionButtonText\"\n\t\t[actionIcon]=\"actionButtonIcon\"\n\t\t(action)=\"action.emit()\"\n\t\t[itemsSelectedAmount]=\"selectedRows.length\"\n\t\t[loading]=\"headerLoading\"\n\t>\n\t\t<ng-container *ngIf=\"headerCustomFilterTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomFilterTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\t[value]=\"col.name\"\n\t\t\t\tvariant=\"header\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkbox]=\"\n\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t: undefined\n\t\t\t\t\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t(change)=\"_selectAllChange($event)\"\n\t\t\t\t\t[checked]=\"_selectionContainsAll()\"\n\t\t\t\t\t[indeterminate]=\"_selectionIndeterminate()\"\n\t\t\t\t\t[class.opacity-0]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t\t[disabled]=\"rowSelectionLimit !== undefined\"\n\t\t\t\t/>\n\t\t\t</ng-template>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<div class=\"flex flex-1 flex-col\">\n\t\t<ng-container *ngIf=\"loading; else contentTemplate\">\n\t\t\t<p-table-row\n\t\t\t\t*ngFor=\"let r of loadingRows; let rowIndex = index\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\tvariant=\"loading\"\n\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t></p-table-cell-ngx>\n\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t<p-loader\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tclass=\"h-6 w-6 rounded\"\n\t\t\t\t\t\t></p-loader>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\n\t\t<ng-template #contentTemplate>\n\t\t\t<ng-container *ngIf=\"parsedItems?.length; else emptyStateTemplate\">\n\t\t\t\t<p-table-row\n\t\t\t\t\t*ngFor=\"let item of parsedItems; let rowIndex = index\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t(click)=\"_rowClick($event, rowIndex)\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\tparseRowActionsRow(\n\t\t\t\t\t\t\t\trowActionsRow$ | async,\n\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t) as rowActionsRow\n\t\t\t\t\t\t\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ng-container *ngFor=\"let col of columns; let index = index\">\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\t[definition]=\"col\"\n\t\t\t\t\t\t\t\t[item]=\"item\"\n\t\t\t\t\t\t\t\t[checkbox]=\"\n\t\t\t\t\t\t\t\t\t(index === 0 || col.hasCheckbox) && enableRowSelection\n\t\t\t\t\t\t\t\t\t\t? checkboxTemplate\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[index]=\"index\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[template]=\"col.template\"\n\t\t\t\t\t\t\t\t[tableHasActions]=\"\n\t\t\t\t\t\t\t\t\t!!rowActionsRow?.length && !(isMobile$ | async)\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t></p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tclass=\"p-input\"\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t(change)=\"_checkboxChange($event.target, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[disabled]=\"_checkboxDisabled(item, rowIndex)\"\n\t\t\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t!!rowActionsRow?.length &&\n\t\t\t\t\t\t\t\t!!(rowActionsRowDefinition$ | async) &&\n\t\t\t\t\t\t\t\t!(isMobile$ | async)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p-table-cell-ngx\n\t\t\t\t\t\t\t\tvariant=\"actions\"\n\t\t\t\t\t\t\t\t[definition]=\"rowActionsRowDefinition$ | async\"\n\t\t\t\t\t\t\t\t[item]=\"parsedItems[rowIndex]\"\n\t\t\t\t\t\t\t\t[index]=\"columns.length - 1\"\n\t\t\t\t\t\t\t\t[rowIndex]=\"rowIndex\"\n\t\t\t\t\t\t\t\t[tableHasActions]=\"!!rowActionsRow?.length\"\n\t\t\t\t\t\t\t\t[template]=\"actionsTemplate\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</p-table-cell-ngx>\n\n\t\t\t\t\t\t\t<ng-template #actionsTemplate>\n\t\t\t\t\t\t\t\t<div class=\"ml-auto flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\t\t\taction.showFunction\n\t\t\t\t\t\t\t\t\t\t\t\t\t? action.showFunction(parsedItems[rowIndex])\n\t\t\t\t\t\t\t\t\t\t\t\t\t: true\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[content]=\"action.label\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action.iconRotate\"\n\t\t\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t[disabled]=\"action.disabled\"\n\t\t\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taction.routerLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionRouterLink(action.routerLink, rowIndex)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (_getActionQueryParams(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taction.queryParams,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trowIndex\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t ) | async)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</p-table-row>\n\t\t\t</ng-container>\n\t\t</ng-template>\n\t</div>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePageSize]=\"enablePageSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePagination]=\"enablePagination\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\n\t\t[loading]=\"footerLoading\"\n\t></p-table-footer>\n\n\t<ng-container *ngIf=\"enableFloatingMenu && enableRowSelection\">\n\t\t<p-floating-menu-container\n\t\t\t[usedInTable]=\"true\"\n\t\t\t[class.inactive]=\"!selectedRows.length\"\n\t\t\t[class.shown]=\"floatingMenuShown$ | async\"\n\t\t>\n\t\t\t<p-floating-menu-item\n\t\t\t\t[hover]=\"false\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t{{ floatingMenuAmountSelectedText }}\n\t\t\t</p-floating-menu-item>\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\thidden: !!(rowActionsFloating$ | async)?.length,\n\t\t\t\t\t'tablet:flex': !!(rowActionsFloating$ | async)?.length\n\t\t\t\t}\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t*ngFor=\"let action of rowActionsFloating$ | async\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\t(action.type === 'single' && selectedRows.length > 1) ||\n\t\t\t\t\taction.disabled\n\t\t\t\t\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action.label }}\n\n\t\t\t\t<p-loader\n\t\t\t\t\t*ngIf=\"action.loading; else floatingMenuItemIconTemplate\"\n\t\t\t\t></p-loader>\n\n\t\t\t\t<ng-template #floatingMenuItemIconTemplate>\n\t\t\t\t\t<p-icon\n\t\t\t\t\t\t[variant]=\"action.icon\"\n\t\t\t\t\t\t[rotate]=\"action.iconRotate\"\n\t\t\t\t\t\t[flip]=\"action.iconFlip\"\n\t\t\t\t\t></p-icon>\n\t\t\t\t</ng-template>\n\t\t\t</p-floating-menu-item>\n\n\t\t\t<p-divider\n\t\t\t\tclass=\"mx-0 text-storm\"\n\t\t\t\tvariant=\"vertical\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t></p-divider>\n\n\t\t\t<p-floating-menu-item\n\t\t\t\t(click)=\"_selectAllChange(null, false)\"\n\t\t\t\tslot=\"floating-menu-item\"\n\t\t\t>\n\t\t\t\t<p-icon variant=\"negative\"></p-icon>\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n</p-table-container>\n\n<ng-container *ngIf=\"filterModalTemplate\">\n\t<p-modal\n\t\t[header]=\"filterModalHeaderText\"\n\t\t[show]=\"filterModalShow$ | async\"\n\t\t(closed)=\"filterModalShow$.next(false)\"\n\t>\n\t\t<div\n\t\t\tslot=\"content\"\n\t\t\tclass=\"flex flex-col gap-6\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"filterModalTemplate\"></ng-container>\n\t\t</div>\n\t\t<div\n\t\t\tslot=\"footer\"\n\t\t\tclass=\"flex w-full justify-between gap-4\"\n\t\t>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowResetMobile\"\n\t\t\t\tclass=\"flex w-full tablet:w-auto desktop-xs:hidden\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset(true)\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\t*ngIf=\"filterModalShowReset\"\n\t\t\t\tclass=\"hidden w-full tablet:w-auto desktop-xs:flex\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t(onClick)=\"onFilterModalReset()\"\n\t\t\t>\n\t\t\t\t{{ filterModalResetText }}\n\t\t\t</p-button>\n\t\t\t<p-button\n\t\t\t\tclass=\"ml-auto w-full tablet:w-auto\"\n\t\t\t\ticon=\"checkmark\"\n\t\t\t\t(onClick)=\"onFilterModalSave()\"\n\t\t\t>\n\t\t\t\t{{ filterModalSaveText }}\n\t\t\t</p-button>\n\t\t</div>\n\t</p-modal>\n</ng-container>\n\n<ng-template #emptyStateTemplate>\n\t<div\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateFilteredIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateFilteredHeader }}\n\t\t</p>\n\t\t<p class=\"mb-14 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateFilteredContent }}\n\t\t</p>\n\t</div>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<div\n\t\tclass=\"flex max-w-[20rem] flex-col items-center self-center py-24 text-center\"\n\t\t[class.cursor-pointer]=\"enableEmptyStateAction\"\n\t\t(click)=\"emptyStateClicked()\"\n\t>\n\t\t<p-illustration\n\t\t\t[variant]=\"emptyStateIllustration\"\n\t\t\tclass=\"mb-6\"\n\t\t></p-illustration>\n\t\t<p class=\"text-storm-default font-semibold\">\n\t\t\t{{ emptyStateHeader }}\n\t\t</p>\n\t\t<p class=\"mb-6 text-sm text-storm-medium\">\n\t\t\t{{ emptyStateContent }}\n\t\t</p>\n\t\t<p-button\n\t\t\t*ngIf=\"enableEmptyStateAction\"\n\t\t\tvariant=\"secondary\"\n\t\t\ticon=\"plus\"\n\t\t\tsize=\"small\"\n\t\t>\n\t\t\t{{ emptyStateAction }}\n\t\t</p-button>\n\t</div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column}:host .p-input[type=checkbox]{flex-shrink:0}:host p-table-container{position:relative}:host p-table-container p-floating-menu-container{position:fixed;bottom:1rem;left:50%;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));animation:forwards floatingMenuContainerIn .3s ease!important}@media (min-width: 40rem){:host p-table-container p-floating-menu-container{position:absolute;bottom:4rem}}:host p-table-container p-floating-menu-container:not(.shown){display:none}:host p-table-container p-floating-menu-container.inactive{animation:forwards floatingMenuContainerOut .3s ease!important}@keyframes floatingMenuContainerOut{0%{display:flex;transform:translateY(0) translate(-50%);opacity:100}99%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(100%) translate(-50%);opacity:0;display:none}}@keyframes floatingMenuContainerIn{0%{transform:translateY(100%) translate(-50%);opacity:0;display:none}1%{transform:translateY(100%) translate(-50%);opacity:0;display:flex}to{transform:translateY(0) translate(-50%);opacity:100;display:flex}}\n"] }]
700
706
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
701
707
  type: Input
702
708
  }], loading: [{
@@ -864,4 +870,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
864
870
  type: HostListener,
865
871
  args: ['document:visibilitychange', ['$event']]
866
872
  }] } });
867
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNOLFFBQVEsRUFHUixzQkFBc0IsR0FDdEIsTUFBTSxpQkFBaUIsQ0FBQztBQU16QixPQUFPLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNOLDBCQUEwQixFQUMxQix5QkFBeUIsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUVOLGNBQWMsR0FHZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQStWakIsWUFBb0IsZ0JBQW1DO1FBQW5DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUF6VnZEOztXQUVH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QyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3V0cHV0LFxuXHRRdWVyeUxpc3QsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG5cdGlzTW9iaWxlLFxuXHRRdWlja0ZpbHRlcixcblx0Um93Q2xpY2tFdmVudCxcblx0dGFibGVDb2x1bVNpemVzT3B0aW9ucyxcbn0gZnJvbSAnQHBhcGVybGVzcy9jb3JlJztcbmltcG9ydCB7XG5cdEljb25WYXJpYW50LFxuXHRJbGx1c3RyYXRpb25WYXJpYW50LFxuXHRUYWJsZUNvbHVtblNpemVzLFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUvZGlzdC90eXBlcy9jb21wb25lbnRzJztcbmltcG9ydCB7XG5cdEJlaGF2aW9yU3ViamVjdCxcblx0ZGlzdGluY3RVbnRpbENoYW5nZWQsXG5cdGZpbHRlcixcblx0U3Vic2NyaXB0aW9uLFxuXHR0YWtlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG5cdFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLFxuXHRUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLFxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL3RhYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0QXN5bmNJdGVtLFxuXHRUYWJsZVJvd0FjdGlvbixcblx0VGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0VGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxufSBmcm9tICcuLi90YWJsZS1yb3ctYWN0aW9uL3RhYmxlLXJvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRTaXplLCBkZWZhdWx0U2l6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3AtdGFibGUtbmd4Jyxcblx0dGVtcGxhdGVVcmw6ICd0YWJsZS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWyd0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cdC8qKlxuXHQgKiBUaGUgaXRlbXMgdG8gYmUgZmVkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0QElucHV0KCkgaXRlbXMhOiBzdHJpbmcgfCBhbnlbXTtcblxuXHQvKipcblx0ICogV2V0aGVyIGRhdGEgaXMgbG9hZGluZ1xuXHQgKi9cblx0QElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG5cdCAqL1xuXHRASW5wdXQoKSBoZWFkZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZm9vdGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGZvb3RlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBsb2FkaW5nIHJvd3MgdG8gc2hvd1xuXHQgKi9cblx0QElucHV0KCkgYW1vdW50T2ZMb2FkaW5nUm93czogbnVtYmVyID0gNjtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBzZWxlY3Rpb25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVJvd1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgbGltaXQgdG8gdGhlIGFtb3VudCBvZiByb3dzIHRoYXQgY2FuIGJlIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSByb3dTZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHJvdyBjbGlja2luZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgaXRlbXNcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEEga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIGNhblNlbGVjdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGbG9hdGluZ01lbnU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgZmxvYXRpbmcgbWVudSBhbW91bnQgaXRlbSB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHQ6IHN0cmluZyA9ICcwIGl0ZW1zIHNlbGVjdGVkJztcblxuXHQvKipcblx0ICogVGhlIHRlbXBsYXRlIGZvciBhbW91bnQgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgZmxvYXRpbmcgbWVudVxuXHQgKi9cblx0QElucHV0KCkgZmxvYXRpbmdNZW51QW1vdW50U2VsZWN0ZWRUZW1wbGF0ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGZsb2F0aW5nIG1lbnUgaGFzIGJlZW4gc2hvd24gYXRsZWFzdCBvbmNlXG5cdCAqL1xuXHRwdWJsaWMgZmxvYXRpbmdNZW51U2hvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgZGVzZWxlY3RlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBTVEFSVCBIRUFERVIgKi9cblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGhlYWRlclxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogUXVpY2sgZmlsdGVycyB0byBzaG93XG5cdCAqL1xuXHRASW5wdXQoKSBxdWlja0ZpbHRlcnM6IFF1aWNrRmlsdGVyW10gPSBbXTtcblxuXHQvKipcblx0ICogQWN0aXZlIHF1aWNrIGZpbHRlciBpZGVudGlmaWVyXG5cdCAqL1xuXHRASW5wdXQoKSBhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpbnB1dFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIHF1ZXJ5IHRvIHNob3cgaW4gdGhlIHNlYXJjaCBiYXJcblx0ICovXG5cdEBJbnB1dCgpIHF1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGxvYWRpbmdcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFjdGlvbiBidXR0b24gaWNvblxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSAncGVuY2lsJztcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGVuYWJsZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYWN0aW9uIGJ1dHRvbiB0ZXh0IGlmIGNoYW5nZWRcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGFjdGlvbiBidXR0b24gdGV4dFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiBvbmUgb2YgdGhlIHF1aWNrIGZpbHRlcnMgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHF1aWNrRmlsdGVyOiBFdmVudEVtaXR0ZXI8UXVpY2tGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBxdWVyeSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVlcnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBmaWx0ZXIgYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBmaWx0ZXI6IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgYWN0aW9uOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEZPT1RFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgZm9vdGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2Ugc2l6ZSBzZWxlY3Rcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2VTaXplOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBwYWdpbmF0aW9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBleHBvcnRcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUV4cG9ydDogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHBhZ2Vcblx0ICovXG5cdEBJbnB1dCgpIHBhZ2U6IG51bWJlciA9IDE7XG5cblx0LyoqXG5cdCAqIFRoZSB0b3RhbCBhbW91bnQgb2YgaXRlbXNcblx0ICovXG5cdEBJbnB1dCgpIHRvdGFsITogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgaXRlbXMgcGVyIHBhZ2Vcblx0ICovXG5cdEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSBkZWZhdWx0U2l6ZTtcblxuXHQvKipcblx0ICogVGhlIG9wdGlvbnMgZm9yIHRoZSBwYWdlIHNpemVcblx0ICovXG5cdEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBkZWZhdWx0U2l6ZU9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBleHBvcnQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gaGlkZSB3aGVuIHRoZXJlIGlzIG9ubHkgMSBwYWdlIGF2YWlsYWJsZVxuXHQgKi9cblx0QElucHV0KCkgaGlkZU9uU2luZ2xlUGFnZTogYm9vbGVhbiA9IHRydWU7XG5cblx0LyogRW1wdHkgc3RhdGUgc3RhcnQgKi9cblx0QElucHV0KCkgZW1wdHlTdGF0ZVR5cGU6ICdub19maWx0ZXInIHwgJ2ZpbHRlcmVkJyA9ICdub19maWx0ZXInO1xuXG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVJbGx1c3RyYXRpb246IElsbHVzdHJhdGlvblZhcmlhbnQgPSAnZW1wdHktc3RhdGUtYWRkJztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUhlYWRlciE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUNvbnRlbnQhOiBzdHJpbmc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVBY3Rpb24hOiBzdHJpbmc7XG5cblx0QElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID1cblx0XHQnZW1wdHktc3RhdGUtc2VhcmNoJztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgZW1wdHkgc3RhdGUgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIGVtcHR5U3RhdGVBY3Rpb25DbGljazogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qIEVtcHR5IHN0YXRlIGVuZCAqL1xuXG5cdC8qXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBzaGFkb3cgb3Igbm90XG5cdCAqL1xuXHRASW5wdXQoKSBzaGFkb3c6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdHB1YmxpYyBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuXHRwdWJsaWMgcGFyc2VkSXRlbXM6IGFueVtdID0gW107XG5cdHB1YmxpYyBsb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuXHRcdGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuXHR9KTtcblx0cHJpdmF0ZSBfY3RybERvd24gPSBmYWxzZTtcblxuXHQvLyBBbmd1bGFyIHN0dWZmXG5cdC8vIGN1c3RvbSBmaWx0ZXIgdGVtcGxhdGVcblx0QENvbnRlbnRDaGlsZChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG5cdC8vIGNvbHVtbiB0ZW1wbGF0ZXNcblx0cHJpdmF0ZSBfY29sdW1uRGVmaW5pdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pXG5cdHNldCBjb2x1bW5EZWZpbml0aW9ucyh2OiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+KSB7XG5cdFx0dGhpcy5fY29sdW1uRGVmaW5pdGlvbnMgPSB2O1xuXHRcdHRoaXMuX2dlbmVyYXRlQ29sdW1ucygpO1xuXHR9XG5cdGdldCBjb2x1bW5EZWZpbml0aW9ucygpOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+IHtcblx0XHRyZXR1cm4gdGhpcy5fY29sdW1uRGVmaW5pdGlvbnM7XG5cdH1cblxuXHQvLyBmaWx0ZXIgbW9kYWxcblx0QENvbnRlbnRDaGlsZChUYWJsZUZpbHRlck1vZGFsRGlyZWN0aXZlLCB7XG5cdFx0cmVhZDogVGVtcGxhdGVSZWYsXG5cdFx0c3RhdGljOiB0cnVlLFxuXHR9KVxuXHRwdWJsaWMgZmlsdGVyTW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHRwdWJsaWMgZmlsdGVyTW9kYWxTaG93JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG5cdC8vIHJvdyBhY3Rpb25zIHRlbXBsYXRlc1xuXHRwcml2YXRlIF9yb3dBY3Rpb25zITogUXVlcnlMaXN0PFRhYmxlUm93QWN0aW9uPjtcblx0cHJpdmF0ZSBfcm93QWN0aW9uc1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cblx0QENvbnRlbnRDaGlsZHJlbihUYWJsZVJvd0FjdGlvbilcblx0c2V0IHJvd0FjdGlvbnModjogUXVlcnlMaXN0PFRhYmxlUm93QWN0aW9uPikge1xuXHRcdHRoaXMuX3Jvd0FjdGlvbnMgPSB2O1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0fVxuXHRnZXQgcm93QWN0aW9ucygpOiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5fcm93QWN0aW9ucztcblx0fVxuXG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsSGVhZGVyVGV4dDogc3RyaW5nID0gJ0ZpbHRlcnMnO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNhdmVUZXh0OiBzdHJpbmcgPSAnU2F2ZSc7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsQ2FuY2VsVGV4dDogc3RyaW5nID0gJ0NhbmNlbCc7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsUmVzZXRUZXh0OiBzdHJpbmcgPSAnUmVzZXQgZmlsdGVycyc7XG5cblx0QElucHV0KCkgZmlsdGVyTW9kYWxTaG93UmVzZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0QElucHV0KCkgZmlsdGVyTW9kYWxTaG93UmVzZXRNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxTaG93OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNhdmU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGZpbHRlck1vZGFsUmVzZXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRwdWJsaWMgcm93QWN0aW9uc1JvdyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93QWN0aW9uW10+KFtdKTtcblx0cHVibGljIHJvd0FjdGlvbnNSb3dEZWZpbml0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55IHwgdW5kZWZpbmVkPihcblx0XHR1bmRlZmluZWRcblx0KTtcblx0cHVibGljIHJvd0FjdGlvbnNGbG9hdGluZ0FsbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93QWN0aW9uW10+KFtdKTtcblx0cHVibGljIHJvd0FjdGlvbnNGbG9hdGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlUm93QWN0aW9uW10+KFtdKTtcblxuXHRwdWJsaWMgaXNNb2JpbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChpc01vYmlsZSgpKTtcblxuXHRwcml2YXRlIF9yZXNpemVUaW1lb3V0OiB1bmtub3duO1xuXHRwcml2YXRlIF9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbjogYm9vbGVhbiA9IHRoaXMuZW5hYmxlUm93U2VsZWN0aW9uO1xuXHRwcml2YXRlIF9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0O1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5fcGFyc2VJdGVtcyh0aGlzLml0ZW1zKTtcblxuXHRcdHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRcdGxlbmd0aDogdGhpcy5hbW91bnRPZkxvYWRpbmdSb3dzLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckXG5cdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcblx0XHRcdC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUl0ZW1zKGNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAoY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRcdGxlbmd0aDogY2hhbmdlc1snYW1vdW50T2ZMb2FkaW5nUm93cyddLmN1cnJlbnRWYWx1ZSxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gZmFsc2U7XG5cdFx0aWYgKGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbiA9XG5cdFx0XHRcdGNoYW5nZXNbJ2VuYWJsZVJvd1NlbGVjdGlvbiddLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydyb3dTZWxlY3Rpb25MaW1pdCddKSB7XG5cdFx0XHR0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0ID0gY2hhbmdlc1sncm93U2VsZWN0aW9uTGltaXQnXS5jdXJyZW50VmFsdWU7XG5cdFx0XHRjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSB8fCBjaGFuZ2VzWydzZWxlY3RlZFJvd3MnXSkge1xuXHRcdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHRcdH1cblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLl9zZXRSb3dTZWxlY3Rpb25EYXRhKCk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcblx0a2V5RG93bih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcblx0XHRpZiAoa2V5ICE9PSAnQ29udHJvbCcgfHwgdGhpcy5fY3RybERvd24gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IHRydWU7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cCcsIFsnJGV2ZW50J10pXG5cdGtleVVwKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6dmlzaWJpbGl0eWNoYW5nZScsIFsnJGV2ZW50J10pXG5cdHZpc2liaWxpdHlDaGFuZ2UoKSB7XG5cdFx0aWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbicgfHwgdGhpcy5fY3RybERvd24gPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fY3RybERvd24gPSBmYWxzZTtcblx0fVxuXG5cdG9uUXVlcnlDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWVyeUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblF1aWNrRmlsdGVyKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucXVpY2tGaWx0ZXIuZW1pdChkZXRhaWwpO1xuXHR9XG5cblx0b25QYWdlU2l6ZUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnBhZ2VTaXplID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZVNpemVDaGFuZ2UuZW1pdChkZXRhaWwpO1xuXHR9XG5cblx0b25QYWdlQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZSA9IGRldGFpbDtcblx0XHR0aGlzLnBhZ2VDaGFuZ2UuZW1pdChkZXRhaWwpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFNhdmUoKSB7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNhdmUubmV4dCgpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdG9uRmlsdGVyTW9kYWxSZXNldChyZXNldFF1aWNrRmlsdGVyID0gZmFsc2UpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsUmVzZXQubmV4dChyZXNldFF1aWNrRmlsdGVyKTtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSk7XG5cdH1cblxuXHRlbXB0eVN0YXRlQ2xpY2tlZCgpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuZW1wdHlTdGF0ZUFjdGlvbkNsaWNrLmVtaXQoKTtcblx0fVxuXG5cdHByaXZhdGUgX3BhcnNlSXRlbXMoaXRlbXM6IHN0cmluZyB8IGFueVtdKSB7XG5cdFx0aWYgKCFpdGVtcykge1xuXHRcdFx0dGhpcy5wYXJzZWRJdGVtcyA9IFtdO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuXHRcdFx0dGhpcy5wYXJzZWRJdGVtcyA9IGl0ZW1zO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMucGFyc2VkSXRlbXMgPSBKU09OLnBhcnNlKGl0ZW1zKTtcblx0fVxuXG5cdHByaXZhdGUgX2dlbmVyYXRlQ29sdW1ucygpIHtcblx0XHRsZXQgZGVmaW5pdGlvbnNBcnJheSA9IEFycmF5LmZyb20odGhpcy5fY29sdW1uRGVmaW5pdGlvbnMpIGFzIFRhYmxlQ29sdW1uW107XG5cblx0XHRkZWZpbml0aW9uc0FycmF5ID0gdGhpcy5fcGFyc2VEZWZpbml0aW9ucyhkZWZpbml0aW9uc0FycmF5KTtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGRlZmluaXRpb25zQXJyYXk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrYm94RGlzYWJsZWQoaXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uQ29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCByb3dJbmRleCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLmNhblNlbGVjdEtleSAmJiAhaXRlbVt0aGlzLmNhblNlbGVjdEtleV0pIHx8XG5cdFx0XHQodGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdCFzZWxlY3Rpb25Db250YWlucyAmJlxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXQpXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0QWxsQ2hhbmdlKCRldmVudDogYW55LCBmb3JjZVZhbHVlPzogYm9vbGVhbikge1xuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9XG5cdFx0XHRmb3JjZVZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0aGlzLl9nZXRDaGVja2VkVmFsdWUoJGV2ZW50LnRhcmdldClcblx0XHRcdFx0OiBmb3JjZVZhbHVlO1xuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRjb25zdCB0b0FkZCA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG5cdFx0XHRcdGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvQWRkLnB1c2gocm93KTtcblx0XHRcdFx0dGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCArIHRvQWRkLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLnNlbGVjdGVkUm93cywgLi4udG9BZGRdO1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG5cblx0XHRcdGlmICh0aGlzLmVuYWJsZUZsb2F0aW5nTWVudSkge1xuXHRcdFx0XHR0aGlzLl9zaG93RmxvYXRpbmdNZW51KCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRSb3dzW2ldO1xuXHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtcy5maW5kKFxuXHRcdFx0XHRkID0+IHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGQsIGkpID09PSB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZSh2YWx1ZSwgaSlcblx0XHRcdCk7XG5cblx0XHRcdGlmICghcm93KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJvd0Rlc2VsZWN0ZWQuZW1pdChyb3cpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0dGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG5cdH1cblxuXHRwdWJsaWMgX2NoZWNrYm94Q2hhbmdlKHRhcmdldDogYW55LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q2hlY2tlZFZhbHVlKHRhcmdldCk7XG5cdFx0aWYgKFxuXHRcdFx0dmFsdWUgJiZcblx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID49IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHRhcmdldC5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG5cblx0XHRpZiAodGhpcy5jYW5TZWxlY3RLZXkgJiYgIXJvd1t0aGlzLmNhblNlbGVjdEtleV0pIHtcblx0XHRcdHRhcmdldC5jaGVja2VkID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLnNlbGVjdGVkUm93cywgcm93XTtcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHRcdFx0dGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XG5cblx0XHRcdGlmICh0aGlzLmVuYWJsZUZsb2F0aW5nTWVudSkge1xuXHRcdFx0XHR0aGlzLl9zaG93RmxvYXRpbmdNZW51KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5kZXhPZlRvUmVtb3ZlID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpbmRleCwgdHJ1ZSk7XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoaXMsIGJlY2F1c2Ugc3BsaWNlIGRvZXMgbm90IHRyaWdnZXIgdGhlIHNlbGVjdGlvbiBzZXR0ZXIuXG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcblx0XHRzZWxlY3Rpb24uc3BsaWNlKGluZGV4T2ZUb1JlbW92ZSwgMSk7XG5cdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBzZWxlY3Rpb247XG5cdFx0dGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG5cdFx0dGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcblx0fVxuXG5cdHByaXZhdGUgX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQ6IGFueSkge1xuXHRcdHJldHVybiB0YXJnZXQ/LmNoZWNrZWQ7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRTZWxlY3Rpb25WYWx1ZShyb3c6IGFueSwgaW5kZXg6IG51bWJlcikge1xuXHRcdHJldHVybiB0aGlzLnNlbGVjdGlvbktleSA/IHJvdz8uW3RoaXMuc2VsZWN0aW9uS2V5XSB8fCBpbmRleCA6IGluZGV4O1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25Db250YWlucyhyb3c6IGFueSwgaW5kZXg6IG51bWJlciwgcmV0dXJuSW5kZXggPSBmYWxzZSk6IGFueSB7XG5cdFx0Y29uc3QgcmV0dXJuVmFsdWUgPSB0aGlzLnNlbGVjdGVkUm93cy5maW5kSW5kZXgoXG5cdFx0XHRpdGVtID0+XG5cdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHJvdywgaW5kZXgpID09PVxuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShpdGVtLCBpbmRleClcblx0XHQpO1xuXHRcdHJldHVybiAhcmV0dXJuSW5kZXggPyByZXR1cm5WYWx1ZSA+PSAwIDogcmV0dXJuVmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zQWxsKCkge1xuXHRcdGxldCByZXR1cm5WYWx1ZSA9IHRydWU7XG5cdFx0aWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG5cdFx0XHRjb25zdCBjb250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIGkpO1xuXG5cdFx0XHRpZiAoIWNvbnRhaW5zKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpIHtcblx0XHRpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IGNvbnRhaW5zQ291bnQgPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuXHRcdFx0aWYgKGNvbnRhaW5zKSB7XG5cdFx0XHRcdGNvbnRhaW5zQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGFpbnNDb3VudCA+IDAgJiYgY29udGFpbnNDb3VudCAhPT0gdGhpcy5wYXJzZWRJdGVtcy5sZW5ndGg7XG5cdH1cblxuXHRwdWJsaWMgX3Jvd0NsaWNrKCRldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IHRhcmdldCA9ICRldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cblx0XHRpZiAoXG5cdFx0XHR0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8XG5cdFx0XHQodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09ICdjaGVja2JveCdcblx0XHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCByb3cgPSB0aGlzLl9maW5kUm93KHRhcmdldCk7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGhpcy5fZmluZFJvd0FjdGlvbih0YXJnZXQpO1xuXG5cdFx0aWYgKGFjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVuYWJsZVJvd0NsaWNrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpbmRleF07XG5cdFx0XHR0aGlzLnJvd0NsaWNrLmVtaXQoe1xuXHRcdFx0XHRpdGVtLFxuXHRcdFx0XHRjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tib3ggPSByb3c/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuXG5cdFx0aWYgKCFjaGVja2JveCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNoZWNrYm94LmNoZWNrZWQgPSAhY2hlY2tib3guY2hlY2tlZDtcblx0XHR0aGlzLl9jaGVja2JveENoYW5nZShjaGVja2JveCwgaW5kZXgpO1xuXHR9XG5cblx0cHVibGljIF9nZXRBY3Rpb25Sb3V0ZXJMaW5rKFxuXHRcdHJvdXRlckxpbms6IFRhYmxlUm93QWN0aW9uUm91dGVyTGluayxcblx0XHRyb3dJbmRleDogbnVtYmVyXG5cdCk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBhbnlbXT4gfCBBc3luY0l0ZW08c3RyaW5nIHwgYW55W10+IHtcblx0XHRpZiAodHlwZW9mIHJvdXRlckxpbmsgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRBY3Rpb25Sb3V0ZXJMaW5rKHJvdXRlckxpbmsoaXRlbSksIHJvd0luZGV4KTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHJvdXRlckxpbmsgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkocm91dGVyTGluaykpIHtcblx0XHRcdHJldHVybiBuZXcgQmVoYXZpb3JTdWJqZWN0KHJvdXRlckxpbmspO1xuXHRcdH1cblxuXHRcdHJldHVybiByb3V0ZXJMaW5rO1xuXHR9XG5cblx0cHVibGljIF9nZXRBY3Rpb25RdWVyeVBhcmFtcyhcblx0XHRxdWVyeVBhcmFtczogVGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0XHRyb3dJbmRleDogbnVtYmVyXG5cdCk6IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+IHwgQXN5bmNJdGVtPFBhcmFtcz4ge1xuXHRcdGlmICh0eXBlb2YgcXVlcnlQYXJhbXMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRBY3Rpb25RdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyhpdGVtKSwgcm93SW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeVBhcmFtcyBpbnN0YW5jZW9mIE9iamVjdCAmJiBxdWVyeVBhcmFtcy5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG5cdFx0XHRyZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdChxdWVyeVBhcmFtcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHF1ZXJ5UGFyYW1zIGFzIEFzeW5jSXRlbTxQYXJhbXM+O1xuXHR9XG5cblx0cHVibGljIF9yb3dBY3Rpb25DbGljayhhY3Rpb246IFRhYmxlUm93QWN0aW9uLCByb3dJbmRleD86IG51bWJlcikge1xuXHRcdGlmIChhY3Rpb24uZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoYWN0aW9uLmxvYWRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIWFjdGlvbi5hY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRhY3Rpb24udHlwZSA9PT0gJ211bHRpJyB8fFxuXHRcdFx0KGFjdGlvbi50eXBlID09PSAnYm90aCcgJiYgcm93SW5kZXggPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGFjdGlvbi5hY3Rpb24uZW1pdCh7XG5cdFx0XHRcdGl0ZW1zOiB0aGlzLnNlbGVjdGVkUm93cyxcblx0XHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGFjdGlvbi5yb3V0ZXJMaW5rIHx8XG5cdFx0XHQoQXJyYXkuaXNBcnJheShhY3Rpb24ucm91dGVyTGluaykgJiYgYWN0aW9uLnJvdXRlckxpbmsubGVuZ3RoKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW0gPVxuXHRcdFx0cm93SW5kZXggIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdXG5cdFx0XHRcdDogdGhpcy5zZWxlY3RlZFJvd3NbMF07XG5cdFx0YWN0aW9uLmFjdGlvbi5lbWl0KHtcblx0XHRcdGl0ZW0sXG5cdFx0XHRtdWx0aTogZmFsc2UsXG5cdFx0XHRjdHJsRG93bjogdGhpcy5fY3RybERvd24sXG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9maW5kUm93KGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBhbnkge1xuXHRcdGlmICghZWwpIHtcblx0XHRcdHJldHVybiBlbDtcblx0XHR9XG5cblx0XHRpZiAoZWw/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdwLXRhYmxlLXJvdycpIHtcblx0XHRcdHJldHVybiBlbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZmluZFJvdyhlbD8ucGFyZW50RWxlbWVudCk7XG5cdH1cblxuXHRwcml2YXRlIF9maW5kUm93QWN0aW9uKGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBhbnkge1xuXHRcdGlmICghZWwpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1pcy1hY3Rpb24nKSAhPT0gbnVsbCAmJlxuXHRcdFx0ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlzLWFjdGlvbicpICE9PSAnZmFsc2UnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0aWYgKGVsPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAncC10YWJsZS1yb3cnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZmluZFJvd0FjdGlvbihlbD8ucGFyZW50RWxlbWVudCk7XG5cdH1cblxuXHRwcml2YXRlIF9zZXRSb3dTZWxlY3Rpb25EYXRhKCkge1xuXHRcdGlmICh0aGlzLl9yZXNpemVUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplVGltZW91dCBhcyBudW1iZXIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIGFkZCBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIGl0J3MgYSBsb3QgZWFzaWVyIG9uIHRoZSBtYWNoaW5lIHRvIGRvIHRoZXNlIHdoZW4gc29tZW9uZSBpcyBkb25lXG5cdFx0Ly8gcmVzaXppbmcgYW5kIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlaXIgYnJvd3NlclxuXHRcdHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1vYmlsZSA9IGlzTW9iaWxlKCk7XG5cdFx0XHR0aGlzLmlzTW9iaWxlJC5uZXh0KG1vYmlsZSk7XG5cblx0XHRcdGNvbnN0IGFjdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuX3Jvd0FjdGlvbnMpIGFzIFRhYmxlUm93QWN0aW9uW107XG5cblx0XHRcdGlmICh0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgc3Vic2NyaXB0aW9uIG9mIHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zKSB7XG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMgPSBhY3Rpb25zLm1hcChhY3Rpb24gPT5cblx0XHRcdFx0YWN0aW9uLl9sb2FkaW5nQ2hhbmdlZFxuXHRcdFx0XHRcdC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKSlcblx0XHRcdCk7XG5cblx0XHRcdC8vIHdlIGhhY2sgdGhpcyB0byBhbnlbXSB0byBtYWtlIGl0IHdvcmsuLlxuXHRcdFx0Y29uc3Qgcm93QWN0aW9uc1JvdyA9IGFjdGlvbnMuZmlsdGVyKFxuXHRcdFx0XHRhID0+IGEudHlwZSA9PT0gJ2JvdGgnIHx8IGEudHlwZSA9PT0gJ3NpbmdsZSdcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByb3dBY3Rpb25zRmxvYXRpbmcgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0YSA9PlxuXHRcdFx0XHRcdCh0aGlzLl9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbiAmJlxuXHRcdFx0XHRcdFx0KGEudHlwZSA9PT0gJ2JvdGgnIHx8IGEudHlwZSA9PT0gJ211bHRpJykpIHx8XG5cdFx0XHRcdFx0KG1vYmlsZSAmJiBhLnR5cGUgPT09ICdzaW5nbGUnICYmICFhLnJvdXRlckxpbmspXG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgcm93U2VsZWN0aW9uTGltaXQgPSB0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtb2JpbGUgJiYgLy8gd2UncmUgbW9iaWxlXG5cdFx0XHRcdHJvd0FjdGlvbnNGbG9hdGluZz8ubGVuZ3RoICYmIC8vIHdlIGhhdmUgYXRsZWFzdCAxIGl0ZW0gaW4gX3Jvd0FjdGlvbnNGbG9hdGluZ1xuXHRcdFx0XHQoKHJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHx8XG5cdFx0XHRcdFx0IXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJvd1NlbGVjdGlvbkxpbWl0ID0gMTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9IHJvd1NlbGVjdGlvbkxpbWl0O1xuXG5cdFx0XHRsZXQgZW5hYmxlUm93U2VsZWN0aW9uID0gdGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb247XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1vYmlsZSAmJiAvLyB3ZSdyZSBtb2JpbGVcblx0XHRcdFx0cm93QWN0aW9uc0Zsb2F0aW5nPy5sZW5ndGggJiYgLy8gd2UgaGF2ZSBhdGxlYXN0IDEgaXRlbSBpbiBfcm93QWN0aW9uc0Zsb2F0aW5nXG5cdFx0XHRcdCFlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdCkge1xuXHRcdFx0XHRlbmFibGVSb3dTZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gPSBlbmFibGVSb3dTZWxlY3Rpb247XG5cblx0XHRcdHRoaXMucm93QWN0aW9uc1Jvd0RlZmluaXRpb24kLm5leHQodGhpcy5fcGFyc2VSb3dBY3Rpb25zUm93RGVmaW5pdGlvbigpKTtcblx0XHRcdHRoaXMucm93QWN0aW9uc1JvdyQubmV4dChyb3dBY3Rpb25zUm93KTtcblx0XHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nQWxsJC5uZXh0KHJvd0FjdGlvbnNGbG9hdGluZyk7XG5cblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kXG5cdFx0XHRcdC5waXBlKFxuXHRcdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdFx0ZmlsdGVyKHYgPT4gISF2KVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpKTtcblx0XHR9LCAyMDApO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2hvd0Zsb2F0aW5nTWVudSgpIHtcblx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZ0FsbCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoYWN0aW9ucyA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgPT09IDEgJiZcblx0XHRcdFx0YWN0aW9ucy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0YSA9PiAoYS50eXBlID09PSAnc2luZ2xlJyB8fCBhLnR5cGUgPT09ICdib3RoJykgJiYgYS5zaG93RnVuY3Rpb25cblx0XHRcdFx0KSA+PSAwXG5cdFx0XHQpIHtcblx0XHRcdFx0YWN0aW9ucyA9IGFjdGlvbnMuZmlsdGVyKFxuXHRcdFx0XHRcdGEgPT5cblx0XHRcdFx0XHRcdGEudHlwZSA9PT0gJ211bHRpJyB8fFxuXHRcdFx0XHRcdFx0IWEuc2hvd0Z1bmN0aW9uIHx8XG5cdFx0XHRcdFx0XHRhLnNob3dGdW5jdGlvbih0aGlzLnNlbGVjdGVkUm93c1swXSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dBY3Rpb25zRmxvYXRpbmckLm5leHQoYWN0aW9ucyk7XG5cdFx0XHR0aGlzLmZsb2F0aW5nTWVudVNob3duJC5uZXh0KHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VEZWZpbml0aW9ucyhkZWZpbml0aW9uc0FycmF5OiBUYWJsZUNvbHVtbltdKSB7XG5cdFx0Y29uc3QgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc0FycmF5Lm1hcChkZWZpbml0aW9uID0+IHtcblx0XHRcdGRlZmluaXRpb24gPSB0aGlzLl9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uKTtcblx0XHRcdGRlZmluaXRpb24uaXNMYXN0ID0ge307XG5cdFx0XHRyZXR1cm4gZGVmaW5pdGlvbjtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG1hdGNoZWRJc0xhc3QgPSB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLnJlZHVjZShcblx0XHRcdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSwgc2l6ZSkgPT4ge1xuXHRcdFx0XHRkYXRhW3NpemVdID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0fSxcblx0XHRcdHt9XG5cdFx0KTtcblxuXHRcdGZvciAobGV0IGkgPSBkZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3QgZGVmaW5pdGlvbiA9IGRlZmluaXRpb25zW2ldO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHNpemUgb2YgdGFibGVDb2x1bVNpemVzT3B0aW9ucykge1xuXHRcdFx0XHRpZiAobWF0Y2hlZElzTGFzdFtzaXplXSkge1xuXHRcdFx0XHRcdGRlZmluaXRpb24uaXNMYXN0W3NpemVdID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZGVmaW5pdGlvbi5wYXJzZWRTaXplcyFbc2l6ZV0gPT09ICdoaWRkZW4nKSB7XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5pc0xhc3Rbc2l6ZV0gPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGlzTGFzdEF0U2l6ZUZvdW5kID0gdGhpcy5fZmluZExhc3REZWZpbml0aW9uQnlTaXplKFxuXHRcdFx0XHRcdGRlZmluaXRpb25zLFxuXHRcdFx0XHRcdHNpemVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGlzTGFzdEF0U2l6ZUZvdW5kKSB7XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5pc0xhc3Rbc2l6ZV0gPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlZmluaXRpb24uaXNMYXN0W3NpemVdID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZGVmaW5pdGlvbnM7XG5cdH1cblxuXHRwcml2YXRlIF9maW5kTGFzdERlZmluaXRpb25CeVNpemUoZGVmaW5pdGlvbnM6IFRhYmxlQ29sdW1uW10sIHNpemU6IHN0cmluZykge1xuXHRcdHJldHVybiBkZWZpbml0aW9uc1xuXHRcdFx0LnNsaWNlKClcblx0XHRcdC5yZXZlcnNlKClcblx0XHRcdC5maW5kKGQgPT4gZC5pc0xhc3Rbc2l6ZV0gPT09IHRydWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VEZWZpbml0aW9uU2l6ZXMoZGVmaW5pdGlvbjogVGFibGVDb2x1bW4pIHtcblx0XHRjb25zdCBkZWZpbml0aW9uQW55ID0gZGVmaW5pdGlvbiBhcyBhbnk7XG5cdFx0bGV0IHBhcnNlZFNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiAnZnVsbCcgfTtcblxuXHRcdGZvciAoY29uc3QgW2luZGV4LCBzaXplXSBvZiB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2hpZGRlbicgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gJ2Z1bGwnIHx8XG5cdFx0XHRcdHR5cGVvZiBkZWZpbml0aW9uQW55LnNpemVzID09PSAnbnVtYmVyJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHBhcnNlZFNpemVzW3NpemVdID1cblx0XHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnYXV0bycgPyAnZnVsbCcgOiBkZWZpbml0aW9uQW55LnNpemVzO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0cGFyc2VkU2l6ZXNbc2l6ZV0gPVxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzW3NpemVdID8/XG5cdFx0XHRcdHBhcnNlZFNpemVzW3RhYmxlQ29sdW1TaXplc09wdGlvbnNbaW5kZXggLSAxXV07XG5cdFx0fVxuXG5cdFx0ZGVmaW5pdGlvbi5wYXJzZWRTaXplcyA9IHBhcnNlZFNpemVzO1xuXHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VSb3dBY3Rpb25zUm93RGVmaW5pdGlvbigpIHtcblx0XHRjb25zdCBpc0xhc3QgPSB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLnJlZHVjZShcblx0XHRcdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSwgc2l6ZSkgPT4ge1xuXHRcdFx0XHRkYXRhW3NpemVdID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHR9LFxuXHRcdFx0e31cblx0XHQpO1xuXHRcdGNvbnN0IHNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiAwIH07XG5cblx0XHRmb3IgKGNvbnN0IHNpemUgb2YgdGFibGVDb2x1bVNpemVzT3B0aW9ucykge1xuXHRcdFx0Y29uc3QgbGFzdENvbHVtbiA9IHRoaXMuX2ZpbmRMYXN0RGVmaW5pdGlvbkJ5U2l6ZSh0aGlzLmNvbHVtbnMsIHNpemUpO1xuXHRcdFx0c2l6ZXNbc2l6ZV0gPSBsYXN0Q29sdW1uIS5wYXJzZWRTaXplcyFbc2l6ZV0hO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRpc0xhc3QsXG5cdFx0XHRzaXplcyxcblx0XHRcdHBhcnNlZFNpemVzOiBzaXplcyxcblx0XHRcdGFsaWduOiAnZW5kJyxcblx0XHRcdHR5cGU6ICd0ZCcsXG5cdFx0XHRwYXRoOiBudWxsLFxuXHRcdH07XG5cdH1cbn1cbiIsIjxwLXRhYmxlLWNvbnRhaW5lciBbc2hhZG93XT1cInNoYWRvd1wiPlxuXHQ8cC10YWJsZS1oZWFkZXJcblx0XHQqbmdJZj1cImVuYWJsZUhlYWRlclwiXG5cdFx0W3F1aWNrRmlsdGVyc109XCJxdWlja0ZpbHRlcnNcIlxuXHRcdFthY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJdPVwiYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXCJcblx0XHQocXVpY2tGaWx0ZXIpPVwib25RdWlja0ZpbHRlcigkZXZlbnQpXCJcblx0XHRbZW5hYmxlU2VhcmNoXT1cImVuYWJsZVNlYXJjaFwiXG5cdFx0W3F1ZXJ5XT1cInF1ZXJ5XCJcblx0XHQocXVlcnlDaGFuZ2UpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcblx0XHRbZW5hYmxlRmlsdGVyXT1cImVuYWJsZUZpbHRlclwiXG5cdFx0W3NlbGVjdGVkRmlsdGVyc0Ftb3VudF09XCJzZWxlY3RlZEZpbHRlcnNBbW91bnRcIlxuXHRcdFtmaWx0ZXJCdXR0b25UZW1wbGF0ZV09XCJmaWx0ZXJCdXR0b25UZW1wbGF0ZVwiXG5cdFx0KGZpbHRlcik9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQodHJ1ZSlcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZW5hYmxlQWN0aW9uXCJcblx0XHRbY2FuVXNlQWN0aW9uXT1cImFjdGlvbkJ1dHRvbkVuYWJsZWRcIlxuXHRcdFthY3Rpb25CdXR0b25UZW1wbGF0ZV09XCJhY3Rpb25CdXR0b25UZW1wbGF0ZVwiXG5cdFx0W2FjdGlvbkxvYWRpbmddPVwiYWN0aW9uQnV0dG9uTG9hZGluZ1wiXG5cdFx0W2FjdGlvblRleHRdPVwiYWN0aW9uQnV0dG9uVGV4dFwiXG5cdFx0W2FjdGlvbkljb25dPVwiYWN0aW9uQnV0dG9uSWNvblwiXG5cdFx0KGFjdGlvbik9XCJhY3Rpb24uZW1pdCgpXCJcblx0XHRbaXRlbXNTZWxlY3RlZEFtb3VudF09XCJzZWxlY3RlZFJvd3MubGVuZ3RoXCJcblx0XHRbbG9hZGluZ109XCJoZWFkZXJMb2FkaW5nXCJcblx0PlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCJcblx0XHRcdD48L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9wLXRhYmxlLWhlYWRlcj5cblxuXHQ8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0W2RlZmluaXRpb25dPVwiY29sXCJcblx0XHRcdFx0W3ZhbHVlXT1cImNvbC5uYW1lXCJcblx0XHRcdFx0dmFyaWFudD1cImhlYWRlclwiXG5cdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHQoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XCJcblx0XHRcdD48L3AtdGFibGUtY2VsbC1uZ3g+XG5cdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdGNsYXNzPVwicC1pbnB1dFwiXG5cdFx0XHRcdFx0dHlwZT1cImNoZWNrYm94XCJcblx0XHRcdFx0XHQoY2hhbmdlKT1cIl9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zQWxsKClcIlxuXHRcdFx0XHRcdFtpbmRldGVybWluYXRlXT1cIl9zZWxlY3Rpb25JbmRldGVybWluYXRlKClcIlxuXHRcdFx0XHRcdFtjbGFzcy5vcGFjaXR5LTBdPVwicm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZFwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cInJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWRcIlxuXHRcdFx0XHQvPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9wLXRhYmxlLXJvdz5cblxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgZmxleC1jb2xcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZzsgZWxzZSBjb250ZW50VGVtcGxhdGVcIj5cblx0XHRcdDxwLXRhYmxlLXJvd1xuXHRcdFx0XHQqbmdGb3I9XCJsZXQgciBvZiBsb2FkaW5nUm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuXHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwibG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8cC1sb2FkZXJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoLTYgdy02IHJvdW5kZWRcIlxuXHRcdFx0XHRcdFx0PjwvcC1sb2FkZXI+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VkSXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cblx0XHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcblx0XHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdFx0XHQoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFx0W2RlZmluaXRpb25dPVwiY29sXCJcblx0XHRcdFx0XHRcdFx0W2l0ZW1dPVwiaXRlbVwiXG5cdFx0XHRcdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHRcdFx0XHQoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFx0W3Jvd0luZGV4XT1cInJvd0luZGV4XCJcblx0XHRcdFx0XHRcdFx0W3RlbXBsYXRlXT1cImNvbC50ZW1wbGF0ZVwiXG5cdFx0XHRcdFx0XHRcdFt0YWJsZUhhc0FjdGlvbnNdPVwiXG5cdFx0XHRcdFx0XHRcdFx0ISEocm93QWN0aW9uc1JvdyQgfCBhc3luYyk/Lmxlbmd0aCAmJiAhKGlzTW9iaWxlJCB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInAtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJfY2hlY2tib3hDaGFuZ2UoJGV2ZW50LnRhcmdldCwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiX2NoZWNrYm94RGlzYWJsZWQoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0XHQqbmdJZj1cIlxuXHRcdFx0XHRcdFx0XHQhIShyb3dBY3Rpb25zUm93JCB8IGFzeW5jKT8ubGVuZ3RoICYmXG5cdFx0XHRcdFx0XHRcdCEhKHJvd0FjdGlvbnNSb3dEZWZpbml0aW9uJCB8IGFzeW5jKSAmJlxuXHRcdFx0XHRcdFx0XHQhKGlzTW9iaWxlJCB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8cC10YWJsZS1jZWxsLW5neFxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiYWN0aW9uc1wiXG5cdFx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cInJvd0FjdGlvbnNSb3dEZWZpbml0aW9uJCB8IGFzeW5jXCJcblx0XHRcdFx0XHRcdFx0W2l0ZW1dPVwicGFyc2VkSXRlbXNbcm93SW5kZXhdXCJcblx0XHRcdFx0XHRcdFx0W2luZGV4XT1cImNvbHVtbnMubGVuZ3RoIC0gMVwiXG5cdFx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0XHRcdFt0YWJsZUhhc0FjdGlvbnNdPVwiISEocm93QWN0aW9uc1JvdyQgfCBhc3luYyk/Lmxlbmd0aFwiXG5cdFx0XHRcdFx0XHRcdFt0ZW1wbGF0ZV09XCJhY3Rpb25zVGVtcGxhdGVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PC9wLXRhYmxlLWNlbGwtbmd4PlxuXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2FjdGlvbnNUZW1wbGF0ZT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc1JvdyQgfCBhc3luY1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHAtdG9vbHRpcFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5zaG93RnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gYWN0aW9uLnNob3dGdW5jdGlvbihwYXJzZWRJdGVtc1tyb3dJbmRleF0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2NvbnRlbnRdPVwiYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1pcy1hY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzbG90PVwidHJpZ2dlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwiYWN0aW9uLmljb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtpY29uUm90YXRlXT1cImFjdGlvbi5pY29uUm90YXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uRmxpcD1cImFjdGlvbi5pY29uRmxpcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtyb3V0ZXJMaW5rXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnJvdXRlckxpbmtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoX2dldEFjdGlvblJvdXRlckxpbmsoYWN0aW9uLnJvdXRlckxpbmssIHJvd0luZGV4KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3F1ZXJ5UGFyYW1zXT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnF1ZXJ5UGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKF9nZXRBY3Rpb25RdWVyeVBhcmFtcyhhY3Rpb24ucXVlcnlQYXJhbXMsIHJvd0luZGV4KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG9uQ2xpY2spPVwiX3Jvd0FjdGlvbkNsaWNrKGFjdGlvbiwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PjwvcC1idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3AtdG9vbHRpcD5cblx0XHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cblx0PHAtdGFibGUtZm9vdGVyXG5cdFx0Km5nSWY9XCJlbmFibGVGb290ZXJcIlxuXHRcdFtoaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuXHRcdFtlbmFibGVQYWdlU2l6ZV09XCJlbmFibGVQYWdlU2l6ZVwiXG5cdFx0W3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcblx0XHRbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG5cdFx0KHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0W2VuYWJsZVBhZ2luYXRpb25dPVwiZW5hYmxlUGFnaW5hdGlvblwiXG5cdFx0W3BhZ2VdPVwicGFnZVwiXG5cdFx0W3RvdGFsXT1cInRvdGFsXCJcblx0XHQocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0W2VuYWJsZUV4cG9ydF09XCJlbmFibGVFeHBvcnRcIlxuXHRcdChleHBvcnQpPVwiZXhwb3J0LmVtaXQoKVwiXG5cdFx0W2xvYWRpbmddPVwiZm9vdGVyTG9hZGluZ1wiXG5cdD48L3AtdGFibGUtZm9vdGVyPlxuXG5cdDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVGbG9hdGluZ01lbnUgJiYgZW5hYmxlUm93U2VsZWN0aW9uXCI+XG5cdFx0PHAtZmxvYXRpbmctbWVudS1jb250YWluZXJcblx0XHRcdFt1c2VkSW5UYWJsZV09XCJ0cnVlXCJcblx0XHRcdFtjbGFzcy5pbmFjdGl2ZV09XCIhc2VsZWN0ZWRSb3dzLmxlbmd0aFwiXG5cdFx0XHRbY2xhc3Muc2hvd25dPVwiZmxvYXRpbmdNZW51U2hvd24kIHwgYXN5bmNcIlxuXHRcdD5cblx0XHRcdDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuXHRcdFx0XHRbaG92ZXJdPVwiZmFsc2VcIlxuXHRcdFx0XHRzbG90PVwiZmxvYXRpbmctbWVudS1pdGVtXCJcblx0XHRcdFx0W2NsYXNzXT1cIntcblx0XHRcdFx0XHRoaWRkZW46ICEhKHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luYyk/Lmxlbmd0aCxcblx0XHRcdFx0XHQndGFibGV0OmZsZXgnOiAhIShyb3dBY3Rpb25zRmxvYXRpbmckIHwgYXN5bmMpPy5sZW5ndGhcblx0XHRcdFx0fVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dCB9fVxuXHRcdFx0PC9wLWZsb2F0aW5nLW1lbnUtaXRlbT5cblx0XHRcdDxwLWRpdmlkZXJcblx0XHRcdFx0Y2xhc3M9XCJteC0wIHRleHQtc3Rvcm1cIlxuXHRcdFx0XHR2YXJpYW50PVwidmVydGljYWxcIlxuXHRcdFx0XHRzbG90PVwiZmxvYXRpbmctbWVudS1pdGVtXCJcblx0XHRcdFx0W2NsYXNzXT1cIntcblx0XHRcdFx0XHRoaWRkZW46ICEhKHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luYyk/Lmxlbmd0aCxcblx0XHRcdFx0XHQndGFibGV0OmZsZXgnOiAhIShyb3dBY3Rpb25zRmxvYXRpbmckIHwgYXN5bmMpPy5sZW5ndGhcblx0XHRcdFx0fVwiXG5cdFx0XHQ+PC9wLWRpdmlkZXI+XG5cblx0XHRcdDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuXHRcdFx0XHQqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luY1wiXG5cdFx0XHRcdHNsb3Q9XCJmbG9hdGluZy1tZW51LWl0ZW1cIlxuXHRcdFx0XHRbZGlzYWJsZWRdPVwiXG5cdFx0XHRcdFx0KGFjdGlvbi50eXBlID09PSAnc2luZ2xlJyAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMSkgfHxcblx0XHRcdFx0XHRhY3Rpb24uZGlzYWJsZWRcblx0XHRcdFx0XCJcblx0XHRcdFx0KGNsaWNrKT1cIl9yb3dBY3Rpb25DbGljayhhY3Rpb24pXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgYWN0aW9uLmxhYmVsIH19XG5cblx0XHRcdFx0PHAtbG9hZGVyXG5cdFx0XHRcdFx0Km5nSWY9XCJhY3Rpb24ubG9hZGluZzsgZWxzZSBmbG9hdGluZ01lbnVJdGVtSWNvblRlbXBsYXRlXCJcblx0XHRcdFx0PjwvcC1sb2FkZXI+XG5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICNmbG9hdGluZ01lbnVJdGVtSWNvblRlbXBsYXRlPlxuXHRcdFx0XHRcdDxwLWljb25cblx0XHRcdFx0XHRcdFt2YXJpYW50XT1cImFjdGlvbi5pY29uXCJcblx0XHRcdFx0XHRcdFtyb3RhdGVdPVwiYWN0aW9uLmljb25Sb3RhdGVcIlxuXHRcdFx0XHRcdFx0W2ZsaXBdPVwiYWN0aW9uLmljb25GbGlwXCJcblx0XHRcdFx0XHQ+PC9wLWljb24+XG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L3AtZmxvYXRpbmctbWVudS1pdGVtPlxuXG5cdFx0XHQ8cC1kaXZpZGVyXG5cdFx0XHRcdGNsYXNzPVwibXgtMCB0ZXh0LXN0b3JtXCJcblx0XHRcdFx0dmFyaWFudD1cInZlcnRpY2FsXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHQ+PC9wLWRpdmlkZXI+XG5cblx0XHRcdDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuXHRcdFx0XHQoY2xpY2spPVwiX3NlbGVjdEFsbENoYW5nZShudWxsLCBmYWxzZSlcIlxuXHRcdFx0XHRzbG90PVwiZmxvYXRpbmctbWVudS1pdGVtXCJcblx0XHRcdD5cblx0XHRcdFx0PHAtaWNvbiB2YXJpYW50PVwibmVnYXRpdmVcIj48L3AtaWNvbj5cblx0XHRcdDwvcC1mbG9hdGluZy1tZW51LWl0ZW0+XG5cdFx0PC9wLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyPlxuXHQ8L25nLWNvbnRhaW5lcj5cbjwvcC10YWJsZS1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCI+XG5cdDxwLW1vZGFsXG5cdFx0W2hlYWRlcl09XCJmaWx0ZXJNb2RhbEhlYWRlclRleHRcIlxuXHRcdFtzaG93XT1cImZpbHRlck1vZGFsU2hvdyQgfCBhc3luY1wiXG5cdFx0KGNsb3NlZCk9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpXCJcblx0PlxuXHRcdDxkaXZcblx0XHRcdHNsb3Q9XCJjb250ZW50XCJcblx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNlwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2XG5cdFx0XHRzbG90PVwiZm9vdGVyXCJcblx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcblx0XHQ+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Km5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZVwiXG5cdFx0XHRcdGNsYXNzPVwiZmxleCB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmhpZGRlblwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQodHJ1ZSlcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHQqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0XCJcblx0XHRcdFx0Y2xhc3M9XCJoaWRkZW4gdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpmbGV4XCJcblx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCgpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Y2xhc3M9XCJtbC1hdXRvIHctZnVsbCB0YWJsZXQ6dy1hdXRvXCJcblx0XHRcdFx0aWNvbj1cImNoZWNrbWFya1wiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxTYXZlKClcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFNhdmVUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L3AtbW9kYWw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlVGVtcGxhdGU+XG5cdDxkaXZcblx0XHQqbmdJZj1cImVtcHR5U3RhdGVUeXBlID09PSAnZmlsdGVyZWQnOyBlbHNlIGVtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZVwiXG5cdFx0Y2xhc3M9XCJmbGV4IG1heC13LVsyMHJlbV0gZmxleC1jb2wgaXRlbXMtY2VudGVyIHNlbGYtY2VudGVyIHB5LTI0IHRleHQtY2VudGVyXCJcblx0PlxuXHRcdDxwLWlsbHVzdHJhdGlvblxuXHRcdFx0W3ZhcmlhbnRdPVwiZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uXCJcblx0XHRcdGNsYXNzPVwibWItNlwiXG5cdFx0PjwvcC1pbGx1c3RyYXRpb24+XG5cdFx0PHAgY2xhc3M9XCJ0ZXh0LXN0b3JtLWRlZmF1bHQgZm9udC1zZW1pYm9sZFwiPlxuXHRcdFx0e3sgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyIH19XG5cdFx0PC9wPlxuXHRcdDxwIGNsYXNzPVwibWItMTQgdGV4dC1zbSB0ZXh0LXN0b3JtLW1lZGl1bVwiPlxuXHRcdFx0e3sgZW1wdHlTdGF0ZUZpbHRlcmVkQ29udGVudCB9fVxuXHRcdDwvcD5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZT5cblx0PGRpdlxuXHRcdGNsYXNzPVwiZmxleCBtYXgtdy1bMjByZW1dIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzZWxmLWNlbnRlciBweS0yNCB0ZXh0LWNlbnRlclwiXG5cdFx0W2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuXHRcdChjbGljayk9XCJlbXB0eVN0YXRlQ2xpY2tlZCgpXCJcblx0PlxuXHRcdDxwLWlsbHVzdHJhdGlvblxuXHRcdFx0W3ZhcmlhbnRdPVwiZW1wdHlTdGF0ZUlsbHVzdHJhdGlvblwiXG5cdFx0XHRjbGFzcz1cIm1iLTZcIlxuXHRcdD48L3AtaWxsdXN0cmF0aW9uPlxuXHRcdDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cblx0XHRcdHt7IGVtcHR5U3RhdGVIZWFkZXIgfX1cblx0XHQ8L3A+XG5cdFx0PHAgY2xhc3M9XCJtYi02IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cblx0XHRcdHt7IGVtcHR5U3RhdGVDb250ZW50IH19XG5cdFx0PC9wPlxuXHRcdDxwLWJ1dHRvblxuXHRcdFx0Km5nSWY9XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcblx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0aWNvbj1cInBsdXNcIlxuXHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHQ+XG5cdFx0XHR7eyBlbXB0eVN0YXRlQWN0aW9uIH19XG5cdFx0PC9wLWJ1dHRvbj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
873
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sV0FBVyxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUNOLFFBQVEsRUFHUixzQkFBc0IsR0FDdEIsTUFBTSxpQkFBaUIsQ0FBQztBQU16QixPQUFPLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNOLDBCQUEwQixFQUMxQix5QkFBeUIsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUVOLGNBQWMsR0FHZCxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7O0FBU3ZELElBQU0sS0FBSyxHQUFYLE1BQU0sS0FBSztJQStWakIsWUFBb0IsZ0JBQW1DO1FBQW5DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUF6VnZEOztXQUVH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LEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkEwRFAsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNekMsT0FBTztzQkFETixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVU1QyxLQUFLO3NCQURKLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3RMaXN0ZW5lcixcblx0SW5wdXQsXG5cdE9uQ2hhbmdlcyxcblx0T25Jbml0LFxuXHRPdXRwdXQsXG5cdFF1ZXJ5TGlzdCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0VGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtcblx0aXNNb2JpbGUsXG5cdFF1aWNrRmlsdGVyLFxuXHRSb3dDbGlja0V2ZW50LFxuXHR0YWJsZUNvbHVtU2l6ZXNPcHRpb25zLFxufSBmcm9tICdAcGFwZXJsZXNzL2NvcmUnO1xuaW1wb3J0IHtcblx0SWNvblZhcmlhbnQsXG5cdElsbHVzdHJhdGlvblZhcmlhbnQsXG5cdFRhYmxlQ29sdW1uU2l6ZXMsXG59IGZyb20gJ0BwYXBlcmxlc3MvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcblx0QmVoYXZpb3JTdWJqZWN0LFxuXHRkaXN0aW5jdFVudGlsQ2hhbmdlZCxcblx0ZmlsdGVyLFxuXHRTdWJzY3JpcHRpb24sXG5cdHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcblx0VGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsXG5cdFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsXG59IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuLi90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuXHRBc3luY0l0ZW0sXG5cdFRhYmxlUm93QWN0aW9uLFxuXHRUYWJsZVJvd0FjdGlvblF1ZXJ5UGFyYW1zLFxuXHRUYWJsZVJvd0FjdGlvblJvdXRlckxpbmssXG59IGZyb20gJy4uL3RhYmxlLXJvdy1hY3Rpb24vdGFibGUtcm93LWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVmYXVsdFNpemUsIGRlZmF1bHRTaXplT3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAncC10YWJsZS1uZ3gnLFxuXHR0ZW1wbGF0ZVVybDogJ3RhYmxlLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJ3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblx0LyoqXG5cdCAqIFRoZSBpdGVtcyB0byBiZSBmZWQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBpdGVtcyE6IHN0cmluZyB8IGFueVtdO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgZGF0YSBpcyBsb2FkaW5nXG5cdCAqL1xuXHRASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgaGVhZGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGhlYWRlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBmb290ZXIgc2hvdWxkIHNob3cgbG9hZGluZyBzdGF0ZVxuXHQgKi9cblx0QElucHV0KCkgZm9vdGVyTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGxvYWRpbmcgcm93cyB0byBzaG93XG5cdCAqL1xuXHRASW5wdXQoKSBhbW91bnRPZkxvYWRpbmdSb3dzOiBudW1iZXIgPSA2O1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNlbGVjdGlvblxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQSBsaW1pdCB0byB0aGUgYW1vdW50IG9mIHJvd3MgdGhhdCBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHJvd1NlbGVjdGlvbkxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcm93IGNsaWNraW5nXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVSb3dDbGljazogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkUm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRoZSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQSBrZXkgdG8gZGV0ZXJtaW5lIGlmIGEgcm93IGNhbiBiZSBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgY2FuU2VsZWN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgdGhlIGZsb2F0aW5nIG1lbnVcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZsb2F0aW5nTWVudTogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBmbG9hdGluZyBtZW51IGFtb3VudCBpdGVtIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZsb2F0aW5nTWVudUFtb3VudFNlbGVjdGVkVGV4dDogc3RyaW5nID0gJzAgaXRlbXMgc2VsZWN0ZWQnO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIGFtb3VudCBzZWxlY3RlZCBpdGVtIGluIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZmxvYXRpbmcgbWVudSBoYXMgYmVlbiBzaG93biBhdGxlYXN0IG9uY2Vcblx0ICovXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVTaG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEhFQURFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcblx0ICovXG5cdEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuXHQgKi9cblx0QElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBhbW91bnQgb2YgZmlsdGVycyBiZWluZyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0ZWRGaWx0ZXJzQW1vdW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGZpbHRlciBidXR0b24gdGV4dFxuXHQgKi9cblx0QElucHV0KCkgZmlsdGVyQnV0dG9uVGVtcGxhdGU6IGFueTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGFjdGlvbiBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gaXMgbG9hZGluZ1xuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYWN0aW9uIGJ1dHRvbiBpY29uXG5cdCAqL1xuXHRASW5wdXQoKSBhY3Rpb25CdXR0b25JY29uOiBJY29uVmFyaWFudCA9ICdwZW5jaWwnO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBhY3Rpb24gYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGV4dD86IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHRlbXBsYXRlIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBhY3Rpb25CdXR0b25UZW1wbGF0ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIG9uZSBvZiB0aGUgcXVpY2sgZmlsdGVycyBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVpY2tGaWx0ZXI6IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBxdWVyeUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIGZpbHRlciBidXR0b24gaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBhY3Rpb246IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogU1RBUlQgRk9PVEVSICovXG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmb290ZXJcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcGFnZSBzaXplIHNlbGVjdFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUGFnZVNpemU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIGV4cG9ydFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZTogbnVtYmVyID0gMTtcblxuXHQvKipcblx0ICogVGhlIHRvdGFsIGFtb3VudCBvZiBpdGVtc1xuXHQgKi9cblx0QElucHV0KCkgdG90YWwhOiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBwYWdlIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBpdGVtcyBwZXIgcGFnZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IGRlZmF1bHRTaXplO1xuXG5cdC8qKlxuXHQgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIHBhZ2Ugc2l6ZVxuXHQgKi9cblx0QElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGRlZmF1bHRTaXplT3B0aW9ucztcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIGV4cG9ydDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBoaWRlIHdoZW4gdGhlcmUgaXMgb25seSAxIHBhZ2UgYXZhaWxhYmxlXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlT25TaW5nbGVQYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKiBFbXB0eSBzdGF0ZSBzdGFydCAqL1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlVHlwZTogJ25vX2ZpbHRlcicgfCAnZmlsdGVyZWQnID0gJ25vX2ZpbHRlcic7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUlsbHVzdHJhdGlvbjogSWxsdXN0cmF0aW9uVmFyaWFudCA9ICdlbXB0eS1zdGF0ZS1hZGQnO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQ29udGVudCE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbiE6IHN0cmluZztcblxuXHRASW5wdXQoKSBlbmFibGVFbXB0eVN0YXRlQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuXHRASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb246IElsbHVzdHJhdGlvblZhcmlhbnQgPVxuXHRcdCdlbXB0eS1zdGF0ZS1zZWFyY2gnO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRIZWFkZXIhOiBzdHJpbmc7XG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBlbXB0eSBzdGF0ZSBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyogRW1wdHkgc3RhdGUgZW5kICovXG5cblx0Lypcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIHNoYWRvdyBvciBub3Rcblx0ICovXG5cdEBJbnB1dCgpIHNoYWRvdzogYm9vbGVhbiA9IHRydWU7XG5cblx0cHVibGljIGNvbHVtbnM6IGFueVtdID0gW107XG5cdHB1YmxpYyBwYXJzZWRJdGVtczogYW55W10gPSBbXTtcblx0cHVibGljIGxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0bGVuZ3RoOiB0aGlzLmFtb3VudE9mTG9hZGluZ1Jvd3MsXG5cdH0pO1xuXHRwcml2YXRlIF9jdHJsRG93biA9IGZhbHNlO1xuXG5cdC8vIEFuZ3VsYXIgc3R1ZmZcblx0Ly8gY3VzdG9tIGZpbHRlciB0ZW1wbGF0ZVxuXHRAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7XG5cdFx0cmVhZDogVGVtcGxhdGVSZWYsXG5cdFx0c3RhdGljOiB0cnVlLFxuXHR9KVxuXHRwdWJsaWMgaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cblx0Ly8gY29sdW1uIHRlbXBsYXRlc1xuXHRwcml2YXRlIF9jb2x1bW5EZWZpbml0aW9ucyE6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj47XG5cblx0QENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcblx0c2V0IGNvbHVtbkRlZmluaXRpb25zKHY6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4pIHtcblx0XHR0aGlzLl9jb2x1bW5EZWZpbml0aW9ucyA9IHY7XG5cdFx0dGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG5cdH1cblx0Z2V0IGNvbHVtbkRlZmluaXRpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj4ge1xuXHRcdHJldHVybiB0aGlzLl9jb2x1bW5EZWZpbml0aW9ucztcblx0fVxuXG5cdC8vIGZpbHRlciBtb2RhbFxuXHRAQ29udGVudENoaWxkKFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFNob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0Ly8gcm93IGFjdGlvbnMgdGVtcGxhdGVzXG5cdHByaXZhdGUgX3Jvd0FjdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+O1xuXHRwcml2YXRlIF9yb3dBY3Rpb25zU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuXHRAQ29udGVudENoaWxkcmVuKFRhYmxlUm93QWN0aW9uKVxuXHRzZXQgcm93QWN0aW9ucyh2OiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+KSB7XG5cdFx0dGhpcy5fcm93QWN0aW9ucyA9IHY7XG5cdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHR9XG5cdGdldCByb3dBY3Rpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLl9yb3dBY3Rpb25zO1xuXHR9XG5cblx0QElucHV0KCkgZmlsdGVyTW9kYWxIZWFkZXJUZXh0OiBzdHJpbmcgPSAnRmlsdGVycyc7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2F2ZVRleHQ6IHN0cmluZyA9ICdTYXZlJztcblx0QElucHV0KCkgZmlsdGVyTW9kYWxDYW5jZWxUZXh0OiBzdHJpbmcgPSAnQ2FuY2VsJztcblx0QElucHV0KCkgZmlsdGVyTW9kYWxSZXNldFRleHQ6IHN0cmluZyA9ICdSZXNldCBmaWx0ZXJzJztcblxuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNob3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGZpbHRlck1vZGFsU2F2ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxSZXNldDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHB1YmxpYyByb3dBY3Rpb25zUm93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc1Jvd0RlZmluaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnkgfCB1bmRlZmluZWQ+KFxuXHRcdHVuZGVmaW5lZFxuXHQpO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nQWxsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXG5cdHB1YmxpYyBpc01vYmlsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGlzTW9iaWxlKCkpO1xuXG5cdHByaXZhdGUgX3Jlc2l6ZVRpbWVvdXQ6IHVua25vd247XG5cdHByaXZhdGUgX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdGhpcy5lbmFibGVSb3dTZWxlY3Rpb247XG5cdHByaXZhdGUgX2lucHV0Um93U2VsZWN0aW9uTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMucm93U2VsZWN0aW9uTGltaXQ7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLl9wYXJzZUl0ZW1zKHRoaXMuaXRlbXMpO1xuXG5cdFx0dGhpcy5sb2FkaW5nUm93cyA9IEFycmF5LmZyb20oe1xuXHRcdFx0bGVuZ3RoOiB0aGlzLmFtb3VudE9mTG9hZGluZ1Jvd3MsXG5cdFx0fSk7XG5cblx0XHR0aGlzLmZpbHRlck1vZGFsU2hvdyRcblx0XHRcdC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuXHRcdFx0LnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLmZpbHRlck1vZGFsU2hvdy5uZXh0KHZhbHVlKSk7XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0aWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcblx0XHRcdHRoaXMuX3BhcnNlSXRlbXMoY2hhbmdlc1snaXRlbXMnXS5jdXJyZW50VmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzWydhbW91bnRPZkxvYWRpbmdSb3dzJ10pIHtcblx0XHRcdHRoaXMubG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRcdFx0bGVuZ3RoOiBjaGFuZ2VzWydhbW91bnRPZkxvYWRpbmdSb3dzJ10uY3VycmVudFZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSBmYWxzZTtcblx0XHRpZiAoY2hhbmdlc1snZW5hYmxlUm93U2VsZWN0aW9uJ10pIHtcblx0XHRcdHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uID1cblx0XHRcdFx0Y2hhbmdlc1snZW5hYmxlUm93U2VsZWN0aW9uJ10uY3VycmVudFZhbHVlO1xuXHRcdFx0Y2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZXNbJ3Jvd1NlbGVjdGlvbkxpbWl0J10pIHtcblx0XHRcdHRoaXMuX2lucHV0Um93U2VsZWN0aW9uTGltaXQgPSBjaGFuZ2VzWydyb3dTZWxlY3Rpb25MaW1pdCddLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjYWxjdWxhdGVSb3dTZWxlY3Rpb25EYXRhIHx8IGNoYW5nZXNbJ3NlbGVjdGVkUm93cyddKSB7XG5cdFx0XHR0aGlzLl9zZXRSb3dTZWxlY3Rpb25EYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuXHRrZXlEb3duKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09ICdDb250cm9sJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXVwJywgWyckZXZlbnQnXSlcblx0a2V5VXAoeyBrZXkgfTogeyBrZXk6IHN0cmluZyB9KSB7XG5cdFx0aWYgKGtleSAhPT0gJ0NvbnRyb2wnIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdkb2N1bWVudDp2aXNpYmlsaXR5Y2hhbmdlJywgWyckZXZlbnQnXSlcblx0dmlzaWJpbGl0eUNoYW5nZSgpIHtcblx0XHRpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJyB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQoZGV0YWlsKTtcblx0fVxuXG5cdG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG5cdFx0dGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5wYWdlID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvbkZpbHRlck1vZGFsU2F2ZSgpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGVtcHR5U3RhdGVDbGlja2VkKCkge1xuXHRcdGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuXHR9XG5cblx0cGFyc2VSb3dBY3Rpb25zUm93KGFjdGlvbnM6IFRhYmxlUm93QWN0aW9uW10gfCBudWxsLCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCFhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRhID0+ICFhLnNob3dGdW5jdGlvbiB8fCBhLnNob3dGdW5jdGlvbih0aGlzLnBhcnNlZEl0ZW1zW3Jvd0luZGV4XSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VJdGVtcyhpdGVtczogc3RyaW5nIHwgYW55W10pIHtcblx0XHRpZiAoIWl0ZW1zKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gW107XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gaXRlbXM7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXJzZWRJdGVtcyA9IEpTT04ucGFyc2UoaXRlbXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2VuZXJhdGVDb2x1bW5zKCkge1xuXHRcdGxldCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLl9jb2x1bW5EZWZpbml0aW9ucykgYXMgVGFibGVDb2x1bW5bXTtcblxuXHRcdGRlZmluaXRpb25zQXJyYXkgPSB0aGlzLl9wYXJzZURlZmluaXRpb25zKGRlZmluaXRpb25zQXJyYXkpO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZGVmaW5pdGlvbnNBcnJheTtcblx0fVxuXG5cdHB1YmxpYyBfY2hlY2tib3hEaXNhYmxlZChpdGVtOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBzZWxlY3Rpb25Db250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMuY2FuU2VsZWN0S2V5ICYmICFpdGVtW3RoaXMuY2FuU2VsZWN0S2V5XSkgfHxcblx0XHRcdCh0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0IXNlbGVjdGlvbkNvbnRhaW5zICYmXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdClcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnksIGZvcmNlVmFsdWU/OiBib29sZWFuKSB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID1cblx0XHRcdGZvcmNlVmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRoaXMuX2dldENoZWNrZWRWYWx1ZSgkZXZlbnQudGFyZ2V0KVxuXHRcdFx0XHQ6IGZvcmNlVmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGNvbnN0IHRvQWRkID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9BZGQucHVzaChyb3cpO1xuXHRcdFx0XHR0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoICsgdG9BZGQubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCAuLi50b0FkZF07XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblxuXHRcdFx0aWYgKHRoaXMuZW5hYmxlRmxvYXRpbmdNZW51KSB7XG5cdFx0XHRcdHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3NbaV07XG5cdFx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zLmZpbmQoXG5cdFx0XHRcdGQgPT4gdGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUoZCwgaSkgPT09IHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHZhbHVlLCBpKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKCFyb3cpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0fVxuXG5cdHB1YmxpYyBfY2hlY2tib3hDaGFuZ2UodGFyZ2V0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDaGVja2VkVmFsdWUodGFyZ2V0KTtcblx0XHRpZiAoXG5cdFx0XHR2YWx1ZSAmJlxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPj0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0dGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcblxuXHRcdGlmICh0aGlzLmNhblNlbGVjdEtleSAmJiAhcm93W3RoaXMuY2FuU2VsZWN0S2V5XSkge1xuXHRcdFx0dGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCByb3ddO1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG5cdFx0XHR0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcblxuXHRcdFx0aWYgKHRoaXMuZW5hYmxlRmxvYXRpbmdNZW51KSB7XG5cdFx0XHRcdHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpbmRleE9mVG9SZW1vdmUgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhyb3csIGluZGV4LCB0cnVlKTtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhpcywgYmVjYXVzZSBzcGxpY2UgZG9lcyBub3QgdHJpZ2dlciB0aGUgc2VsZWN0aW9uIHNldHRlci5cblx0XHRjb25zdCBzZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3RlZFJvd3NdO1xuXHRcdHNlbGVjdGlvbi5zcGxpY2UoaW5kZXhPZlRvUmVtb3ZlLCAxKTtcblx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IHNlbGVjdGlvbjtcblx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0XHR0aGlzLnJvd0Rlc2VsZWN0ZWQuZW1pdChyb3cpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0Q2hlY2tlZFZhbHVlKHRhcmdldDogYW55KSB7XG5cdFx0cmV0dXJuIHRhcmdldD8uY2hlY2tlZDtcblx0fVxuXG5cdHByaXZhdGUgX2dldFNlbGVjdGlvblZhbHVlKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uS2V5ID8gcm93Py5bdGhpcy5zZWxlY3Rpb25LZXldIHx8IGluZGV4IDogaW5kZXg7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkNvbnRhaW5zKHJvdzogYW55LCBpbmRleDogbnVtYmVyLCByZXR1cm5JbmRleCA9IGZhbHNlKTogYW55IHtcblx0XHRjb25zdCByZXR1cm5WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRSb3dzLmZpbmRJbmRleChcblx0XHRcdGl0ZW0gPT5cblx0XHRcdFx0dGhpcy5fZ2V0U2VsZWN0aW9uVmFsdWUocm93LCBpbmRleCkgPT09XG5cdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGl0ZW0sIGluZGV4KVxuXHRcdCk7XG5cdFx0cmV0dXJuICFyZXR1cm5JbmRleCA/IHJldHVyblZhbHVlID49IDAgOiByZXR1cm5WYWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnNBbGwoKSB7XG5cdFx0bGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcblx0XHRpZiAoIXRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMucm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cblx0XHRcdGlmICghY29udGFpbnMpIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25JbmRldGVybWluYXRlKCkge1xuXHRcdGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoIHx8ICF0aGlzLnNlbGVjdGVkUm93cz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgY29udGFpbnNDb3VudCA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbaV07XG5cdFx0XHRjb25zdCBjb250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIGkpO1xuXG5cdFx0XHRpZiAoY29udGFpbnMpIHtcblx0XHRcdFx0Y29udGFpbnNDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250YWluc0NvdW50ID4gMCAmJiBjb250YWluc0NvdW50ICE9PSB0aGlzLnBhcnNlZEl0ZW1zLmxlbmd0aDtcblx0fVxuXG5cdHB1YmxpYyBfcm93Q2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuXHRcdGlmIChcblx0XHRcdHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgfHxcblx0XHRcdCh0YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZSA9PT0gJ2NoZWNrYm94J1xuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuX2ZpbmRSb3codGFyZ2V0KTtcblx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKHRhcmdldCk7XG5cblx0XHRpZiAoYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlUm93Q2xpY2spIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcblx0XHRcdHRoaXMucm93Q2xpY2suZW1pdCh7XG5cdFx0XHRcdGl0ZW0sXG5cdFx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjaGVja2JveCA9IHJvdz8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cblx0XHRpZiAoIWNoZWNrYm94KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xuXHRcdHRoaXMuX2NoZWNrYm94Q2hhbmdlKGNoZWNrYm94LCBpbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgX2dldEFjdGlvblJvdXRlckxpbmsoXG5cdFx0cm91dGVyTGluazogVGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxuXHRcdHJvd0luZGV4OiBudW1iZXJcblx0KTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IGFueVtdPiB8IEFzeW5jSXRlbTxzdHJpbmcgfCBhbnlbXT4ge1xuXHRcdGlmICh0eXBlb2Ygcm91dGVyTGluayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldEFjdGlvblJvdXRlckxpbmsocm91dGVyTGluayhpdGVtKSwgcm93SW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygcm91dGVyTGluayA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShyb3V0ZXJMaW5rKSkge1xuXHRcdFx0cmV0dXJuIG5ldyBCZWhhdmlvclN1YmplY3Qocm91dGVyTGluayk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJvdXRlckxpbms7XG5cdH1cblxuXHRwdWJsaWMgX2dldEFjdGlvblF1ZXJ5UGFyYW1zKFxuXHRcdHF1ZXJ5UGFyYW1zOiBUYWJsZVJvd0FjdGlvblF1ZXJ5UGFyYW1zLFxuXHRcdHJvd0luZGV4OiBudW1iZXJcblx0KTogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4gfCBBc3luY0l0ZW08UGFyYW1zPiB7XG5cdFx0aWYgKHR5cGVvZiBxdWVyeVBhcmFtcyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldEFjdGlvblF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKGl0ZW0pLCByb3dJbmRleCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5UGFyYW1zIGluc3RhbmNlb2YgT2JqZWN0ICYmIHF1ZXJ5UGFyYW1zLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcblx0XHRcdHJldHVybiBuZXcgQmVoYXZpb3JTdWJqZWN0KHF1ZXJ5UGFyYW1zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcXVlcnlQYXJhbXMgYXMgQXN5bmNJdGVtPFBhcmFtcz47XG5cdH1cblxuXHRwdWJsaWMgX3Jvd0FjdGlvbkNsaWNrKGFjdGlvbjogVGFibGVSb3dBY3Rpb24sIHJvd0luZGV4PzogbnVtYmVyKSB7XG5cdFx0aWYgKGFjdGlvbi5kaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChhY3Rpb24ubG9hZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghYWN0aW9uLmFjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGFjdGlvbi50eXBlID09PSAnbXVsdGknIHx8XG5cdFx0XHQoYWN0aW9uLnR5cGUgPT09ICdib3RoJyAmJiByb3dJbmRleCA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9uLmFjdGlvbi5lbWl0KHtcblx0XHRcdFx0aXRlbXM6IHRoaXMuc2VsZWN0ZWRSb3dzLFxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnJvdXRlckxpbmsgfHxcblx0XHRcdChBcnJheS5pc0FycmF5KGFjdGlvbi5yb3V0ZXJMaW5rKSAmJiBhY3Rpb24ucm91dGVyTGluay5sZW5ndGgpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbSA9XG5cdFx0XHRyb3dJbmRleCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF1cblx0XHRcdFx0OiB0aGlzLnNlbGVjdGVkUm93c1swXTtcblx0XHRhY3Rpb24uYWN0aW9uLmVtaXQoe1xuXHRcdFx0aXRlbSxcblx0XHRcdG11bHRpOiBmYWxzZSxcblx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2ZpbmRSb3coZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG5cdFx0aWYgKCFlbCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AtdGFibGUtcm93Jykge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9maW5kUm93KGVsPy5wYXJlbnRFbGVtZW50KTtcblx0fVxuXG5cdHByaXZhdGUgX2ZpbmRSb3dBY3Rpb24oZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG5cdFx0aWYgKCFlbCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0ZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlzLWFjdGlvbicpICE9PSBudWxsICYmXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtYWN0aW9uJykgIT09ICdmYWxzZSdcblx0XHQpIHtcblx0XHRcdHJldHVybiBlbDtcblx0XHR9XG5cblx0XHRpZiAoZWw/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdwLXRhYmxlLXJvdycpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9maW5kUm93QWN0aW9uKGVsPy5wYXJlbnRFbGVtZW50KTtcblx0fVxuXG5cdHByaXZhdGUgX3NldFJvd1NlbGVjdGlvbkRhdGEoKSB7XG5cdFx0aWYgKHRoaXMuX3Jlc2l6ZVRpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVUaW1lb3V0IGFzIG51bWJlcik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgYWRkIGEgdGltZW91dCBoZXJlIGJlY2F1c2UgaXQncyBhIGxvdCBlYXNpZXIgb24gdGhlIG1hY2hpbmUgdG8gZG8gdGhlc2Ugd2hlbiBzb21lb25lIGlzIGRvbmVcblx0XHQvLyByZXNpemluZyBhbmQgcGxheWluZyBhcm91bmQgd2l0aCB0aGVpciBicm93c2VyXG5cdFx0dGhpcy5fcmVzaXplVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbW9iaWxlID0gaXNNb2JpbGUoKTtcblx0XHRcdHRoaXMuaXNNb2JpbGUkLm5leHQobW9iaWxlKTtcblxuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IEFycmF5LmZyb20odGhpcy5fcm93QWN0aW9ucykgYXMgVGFibGVSb3dBY3Rpb25bXTtcblxuXHRcdFx0aWYgKHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGxldCBzdWJzY3JpcHRpb24gb2YgdGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMpIHtcblx0XHRcdFx0XHRzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucyA9IGFjdGlvbnMubWFwKGFjdGlvbiA9PlxuXHRcdFx0XHRhY3Rpb24uX2xvYWRpbmdDaGFuZ2VkXG5cdFx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG5cdFx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gd2UgaGFjayB0aGlzIHRvIGFueVtdIHRvIG1ha2UgaXQgd29yay4uXG5cdFx0XHRjb25zdCByb3dBY3Rpb25zUm93ID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdGEgPT4gYS50eXBlID09PSAnYm90aCcgfHwgYS50eXBlID09PSAnc2luZ2xlJ1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJvd0FjdGlvbnNGbG9hdGluZyA9IGFjdGlvbnMuZmlsdGVyKFxuXHRcdFx0XHRhID0+XG5cdFx0XHRcdFx0KHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uICYmXG5cdFx0XHRcdFx0XHQoYS50eXBlID09PSAnYm90aCcgfHwgYS50eXBlID09PSAnbXVsdGknKSkgfHxcblx0XHRcdFx0XHQobW9iaWxlICYmIGEudHlwZSA9PT0gJ3NpbmdsZScgJiYgIWEucm91dGVyTGluaylcblx0XHRcdCk7XG5cblx0XHRcdGxldCByb3dTZWxlY3Rpb25MaW1pdCA9IHRoaXMuX2lucHV0Um93U2VsZWN0aW9uTGltaXQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1vYmlsZSAmJiAvLyB3ZSdyZSBtb2JpbGVcblx0XHRcdFx0cm93QWN0aW9uc0Zsb2F0aW5nPy5sZW5ndGggJiYgLy8gd2UgaGF2ZSBhdGxlYXN0IDEgaXRlbSBpbiBfcm93QWN0aW9uc0Zsb2F0aW5nXG5cdFx0XHRcdCgocm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikgfHxcblx0XHRcdFx0XHQhdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pXG5cdFx0XHQpIHtcblx0XHRcdFx0cm93U2VsZWN0aW9uTGltaXQgPSAxO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ID0gcm93U2VsZWN0aW9uTGltaXQ7XG5cblx0XHRcdGxldCBlbmFibGVSb3dTZWxlY3Rpb24gPSB0aGlzLl9pbnB1dEVuYWJsZVJvd1NlbGVjdGlvbjtcblx0XHRcdGlmIChcblx0XHRcdFx0bW9iaWxlICYmIC8vIHdlJ3JlIG1vYmlsZVxuXHRcdFx0XHRyb3dBY3Rpb25zRmxvYXRpbmc/Lmxlbmd0aCAmJiAvLyB3ZSBoYXZlIGF0bGVhc3QgMSBpdGVtIGluIF9yb3dBY3Rpb25zRmxvYXRpbmdcblx0XHRcdFx0IWVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGVuYWJsZVJvd1NlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbiA9IGVuYWJsZVJvd1NlbGVjdGlvbjtcblxuXHRcdFx0dGhpcy5yb3dBY3Rpb25zUm93RGVmaW5pdGlvbiQubmV4dCh0aGlzLl9wYXJzZVJvd0FjdGlvbnNSb3dEZWZpbml0aW9uKCkpO1xuXHRcdFx0dGhpcy5yb3dBY3Rpb25zUm93JC5uZXh0KHJvd0FjdGlvbnNSb3cpO1xuXHRcdFx0dGhpcy5yb3dBY3Rpb25zRmxvYXRpbmdBbGwkLm5leHQocm93QWN0aW9uc0Zsb2F0aW5nKTtcblxuXHRcdFx0dGhpcy5mbG9hdGluZ01lbnVTaG93biRcblx0XHRcdFx0LnBpcGUoXG5cdFx0XHRcdFx0dGFrZSgxKSxcblx0XHRcdFx0XHRmaWx0ZXIodiA9PiAhIXYpXG5cdFx0XHRcdClcblx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zaG93RmxvYXRpbmdNZW51KCkpO1xuXHRcdH0sIDIwMCk7XG5cdH1cblxuXHRwcml2YXRlIF9zaG93RmxvYXRpbmdNZW51KCkge1xuXHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nQWxsJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShhY3Rpb25zID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9PT0gMSAmJlxuXHRcdFx0XHRhY3Rpb25zLmZpbmRJbmRleChcblx0XHRcdFx0XHRhID0+IChhLnR5cGUgPT09ICdzaW5nbGUnIHx8IGEudHlwZSA9PT0gJ2JvdGgnKSAmJiBhLnNob3dGdW5jdGlvblxuXHRcdFx0XHQpID49IDBcblx0XHRcdCkge1xuXHRcdFx0XHRhY3Rpb25zID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdFx0YSA9PlxuXHRcdFx0XHRcdFx0YS50eXBlID09PSAnbXVsdGknIHx8XG5cdFx0XHRcdFx0XHQhYS5zaG93RnVuY3Rpb24gfHxcblx0XHRcdFx0XHRcdGEuc2hvd0Z1bmN0aW9uKHRoaXMuc2VsZWN0ZWRSb3dzWzBdKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZyQubmV4dChhY3Rpb25zKTtcblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kLm5leHQodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25zKGRlZmluaXRpb25zQXJyYXk6IFRhYmxlQ29sdW1uW10pIHtcblx0XHRjb25zdCBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zQXJyYXkubWFwKGRlZmluaXRpb24gPT4ge1xuXHRcdFx0ZGVmaW5pdGlvbiA9IHRoaXMuX3BhcnNlRGVmaW5pdGlvblNpemVzKGRlZmluaXRpb24pO1xuXHRcdFx0ZGVmaW5pdGlvbi5pc0xhc3QgPSB7fTtcblx0XHRcdHJldHVybiBkZWZpbml0aW9uO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbWF0Y2hlZElzTGFzdCA9IHRhYmxlQ29sdW1TaXplc09wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9LCBzaXplKSA9PiB7XG5cdFx0XHRcdGRhdGFbc2l6ZV0gPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHR9LFxuXHRcdFx0e31cblx0XHQpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IGRlZmluaXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnNbaV07XG5cblx0XHRcdGZvciAoY29uc3Qgc2l6ZSBvZiB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zKSB7XG5cdFx0XHRcdGlmIChtYXRjaGVkSXNMYXN0W3NpemVdKSB7XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5pc0xhc3Rbc2l6ZV0gPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkZWZpbml0aW9uLnBhcnNlZFNpemVzIVtzaXplXSA9PT0gJ2hpZGRlbicpIHtcblx0XHRcdFx0XHRkZWZpbml0aW9uLmlzTGFzdFtzaXplXSA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaXNMYXN0QXRTaXplRm91bmQgPSB0aGlzLl9maW5kTGFzdERlZmluaXRpb25CeVNpemUoXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbnMsXG5cdFx0XHRcdFx0c2l6ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoaXNMYXN0QXRTaXplRm91bmQpIHtcblx0XHRcdFx0XHRkZWZpbml0aW9uLmlzTGFzdFtzaXplXSA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVmaW5pdGlvbi5pc0xhc3Rbc2l6ZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkZWZpbml0aW9ucztcblx0fVxuXG5cdHByaXZhdGUgX2ZpbmRMYXN0RGVmaW5pdGlvbkJ5U2l6ZShkZWZpbml0aW9uczogVGFibGVDb2x1bW5bXSwgc2l6ZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGRlZmluaXRpb25zXG5cdFx0XHQuc2xpY2UoKVxuXHRcdFx0LnJldmVyc2UoKVxuXHRcdFx0LmZpbmQoZCA9PiBkLmlzTGFzdFtzaXplXSA9PT0gdHJ1ZSk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uOiBUYWJsZUNvbHVtbikge1xuXHRcdGNvbnN0IGRlZmluaXRpb25BbnkgPSBkZWZpbml0aW9uIGFzIGFueTtcblx0XHRsZXQgcGFyc2VkU2l6ZXM6IFRhYmxlQ29sdW1uU2l6ZXMgPSB7IGRlZmF1bHQ6ICdmdWxsJyB9O1xuXG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIHNpemVdIG9mIHRhYmxlQ29sdW1TaXplc09wdGlvbnMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09ICdhdXRvJyB8fFxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnaGlkZGVuJyB8fFxuXHRcdFx0XHRkZWZpbml0aW9uQW55LnNpemVzID09PSAnZnVsbCcgfHxcblx0XHRcdFx0dHlwZW9mIGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09ICdudW1iZXInXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyc2VkU2l6ZXNbc2l6ZV0gPVxuXHRcdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09ICdhdXRvJyA/ICdmdWxsJyA6IGRlZmluaXRpb25Bbnkuc2l6ZXM7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJzZWRTaXplc1tzaXplXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXNbc2l6ZV0gPz9cblx0XHRcdFx0cGFyc2VkU2l6ZXNbdGFibGVDb2x1bVNpemVzT3B0aW9uc1tpbmRleCAtIDFdXTtcblx0XHR9XG5cblx0XHRkZWZpbml0aW9uLnBhcnNlZFNpemVzID0gcGFyc2VkU2l6ZXM7XG5cdFx0cmV0dXJuIGRlZmluaXRpb247XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZVJvd0FjdGlvbnNSb3dEZWZpbml0aW9uKCkge1xuXHRcdGNvbnN0IGlzTGFzdCA9IHRhYmxlQ29sdW1TaXplc09wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9LCBzaXplKSA9PiB7XG5cdFx0XHRcdGRhdGFbc2l6ZV0gPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdH0sXG5cdFx0XHR7fVxuXHRcdCk7XG5cdFx0Y29uc3Qgc2l6ZXM6IFRhYmxlQ29sdW1uU2l6ZXMgPSB7IGRlZmF1bHQ6IDAgfTtcblxuXHRcdGZvciAoY29uc3Qgc2l6ZSBvZiB0YWJsZUNvbHVtU2l6ZXNPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBsYXN0Q29sdW1uID0gdGhpcy5fZmluZExhc3REZWZpbml0aW9uQnlTaXplKHRoaXMuY29sdW1ucywgc2l6ZSk7XG5cdFx0XHRzaXplc1tzaXplXSA9IGxhc3RDb2x1bW4hLnBhcnNlZFNpemVzIVtzaXplXSE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlzTGFzdCxcblx0XHRcdHNpemVzLFxuXHRcdFx0cGFyc2VkU2l6ZXM6IHNpemVzLFxuXHRcdFx0YWxpZ246ICdlbmQnLFxuXHRcdFx0dHlwZTogJ3RkJyxcblx0XHRcdHBhdGg6IG51bGwsXG5cdFx0fTtcblx0fVxufVxuIiwiPHAtdGFibGUtY29udGFpbmVyIFtzaGFkb3ddPVwic2hhZG93XCI+XG5cdDxwLXRhYmxlLWhlYWRlclxuXHRcdCpuZ0lmPVwiZW5hYmxlSGVhZGVyXCJcblx0XHRbcXVpY2tGaWx0ZXJzXT1cInF1aWNrRmlsdGVyc1wiXG5cdFx0W2FjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcl09XCJhY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJcIlxuXHRcdChxdWlja0ZpbHRlcik9XCJvblF1aWNrRmlsdGVyKCRldmVudClcIlxuXHRcdFtlbmFibGVTZWFyY2hdPVwiZW5hYmxlU2VhcmNoXCJcblx0XHRbcXVlcnldPVwicXVlcnlcIlxuXHRcdChxdWVyeUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVGaWx0ZXJdPVwiZW5hYmxlRmlsdGVyXCJcblx0XHRbc2VsZWN0ZWRGaWx0ZXJzQW1vdW50XT1cInNlbGVjdGVkRmlsdGVyc0Ftb3VudFwiXG5cdFx0W2ZpbHRlckJ1dHRvblRlbXBsYXRlXT1cImZpbHRlckJ1dHRvblRlbXBsYXRlXCJcblx0XHQoZmlsdGVyKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dCh0cnVlKVwiXG5cdFx0W2VuYWJsZUFjdGlvbl09XCJlbmFibGVBY3Rpb25cIlxuXHRcdFtjYW5Vc2VBY3Rpb25dPVwiYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG5cdFx0W2FjdGlvbkJ1dHRvblRlbXBsYXRlXT1cImFjdGlvbkJ1dHRvblRlbXBsYXRlXCJcblx0XHRbYWN0aW9uTG9hZGluZ109XCJhY3Rpb25CdXR0b25Mb2FkaW5nXCJcblx0XHRbYWN0aW9uVGV4dF09XCJhY3Rpb25CdXR0b25UZXh0XCJcblx0XHRbYWN0aW9uSWNvbl09XCJhY3Rpb25CdXR0b25JY29uXCJcblx0XHQoYWN0aW9uKT1cImFjdGlvbi5lbWl0KClcIlxuXHRcdFtpdGVtc1NlbGVjdGVkQW1vdW50XT1cInNlbGVjdGVkUm93cy5sZW5ndGhcIlxuXHRcdFtsb2FkaW5nXT1cImhlYWRlckxvYWRpbmdcIlxuXHQ+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCI+XG5cdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdCpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ3VzdG9tRmlsdGVyVGVtcGxhdGVcIlxuXHRcdFx0PjwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHQ8L3AtdGFibGUtaGVhZGVyPlxuXG5cdDxwLXRhYmxlLXJvdyB2YXJpYW50PVwiaGVhZGVyXCI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cdFx0XHQ8cC10YWJsZS1jZWxsLW5neFxuXHRcdFx0XHRbZGVmaW5pdGlvbl09XCJjb2xcIlxuXHRcdFx0XHRbdmFsdWVdPVwiY29sLm5hbWVcIlxuXHRcdFx0XHR2YXJpYW50PVwiaGVhZGVyXCJcblx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0W2NoZWNrYm94XT1cIlxuXHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0PyBjaGVja2JveFRlbXBsYXRlXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcIlxuXHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cblx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0Y2xhc3M9XCJwLWlucHV0XCJcblx0XHRcdFx0XHR0eXBlPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdChjaGFuZ2UpPVwiX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcblx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnNBbGwoKVwiXG5cdFx0XHRcdFx0W2luZGV0ZXJtaW5hdGVdPVwiX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKVwiXG5cdFx0XHRcdFx0W2NsYXNzLm9wYWNpdHktMF09XCJyb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwicm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZFwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHQ8L3AtdGFibGUtcm93PlxuXG5cdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBmbGV4LWNvbFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGNvbnRlbnRUZW1wbGF0ZVwiPlxuXHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdCpuZ0Zvcj1cImxldCByIG9mIGxvYWRpbmdSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG5cdFx0XHRcdFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdFx0XHQ8cC10YWJsZS1jZWxsLW5neFxuXHRcdFx0XHRcdFx0W2RlZmluaXRpb25dPVwiY29sXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJsb2FkaW5nXCJcblx0XHRcdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBjaGVja2JveFRlbXBsYXRlXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRbaW5kZXhdPVwiaW5kZXhcIlxuXHRcdFx0XHRcdFx0W3Jvd0luZGV4XT1cInJvd0luZGV4XCJcblx0XHRcdFx0XHQ+PC9wLXRhYmxlLWNlbGwtbmd4PlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cblx0XHRcdFx0XHRcdDxwLWxvYWRlclxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImgtNiB3LTYgcm91bmRlZFwiXG5cdFx0XHRcdFx0XHQ+PC9wLWxvYWRlcj5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvcC10YWJsZS1yb3c+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHQ8bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJzZWRJdGVtcz8ubGVuZ3RoOyBlbHNlIGVtcHR5U3RhdGVUZW1wbGF0ZVwiPlxuXHRcdFx0XHQ8cC10YWJsZS1yb3dcblx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgaXRlbSBvZiBwYXJzZWRJdGVtczsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuXHRcdFx0XHRcdFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuXHRcdFx0XHRcdChjbGljayk9XCJfcm93Q2xpY2soJGV2ZW50LCByb3dJbmRleClcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHRcdFx0Km5nSWY9XCJcblx0XHRcdFx0XHRcdFx0cGFyc2VSb3dBY3Rpb25zUm93KFxuXHRcdFx0XHRcdFx0XHRcdHJvd0FjdGlvbnNSb3ckIHwgYXN5bmMsXG5cdFx0XHRcdFx0XHRcdFx0cm93SW5kZXhcblx0XHRcdFx0XHRcdFx0KSBhcyByb3dBY3Rpb25zUm93XG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0XHRcdFx0XHQ8cC10YWJsZS1jZWxsLW5neFxuXHRcdFx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHRcdFx0W2l0ZW1dPVwiaXRlbVwiXG5cdFx0XHRcdFx0XHRcdFx0W2NoZWNrYm94XT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFx0XHRbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuXHRcdFx0XHRcdFx0XHRcdFt0ZW1wbGF0ZV09XCJjb2wudGVtcGxhdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFt0YWJsZUhhc0FjdGlvbnNdPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQhIXJvd0FjdGlvbnNSb3c/Lmxlbmd0aCAmJiAhKGlzTW9iaWxlJCB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdD48L3AtdGFibGUtY2VsbC1uZ3g+XG5cblx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJwLWlucHV0XCJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJjaGVja2JveFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQoY2hhbmdlKT1cIl9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJcblx0XHRcdFx0XHRcdFx0XHQhIXJvd0FjdGlvbnNSb3c/Lmxlbmd0aCAmJlxuXHRcdFx0XHRcdFx0XHRcdCEhKHJvd0FjdGlvbnNSb3dEZWZpbml0aW9uJCB8IGFzeW5jKSAmJlxuXHRcdFx0XHRcdFx0XHRcdCEoaXNNb2JpbGUkIHwgYXN5bmMpXG5cdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImFjdGlvbnNcIlxuXHRcdFx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cInJvd0FjdGlvbnNSb3dEZWZpbml0aW9uJCB8IGFzeW5jXCJcblx0XHRcdFx0XHRcdFx0XHRbaXRlbV09XCJwYXJzZWRJdGVtc1tyb3dJbmRleF1cIlxuXHRcdFx0XHRcdFx0XHRcdFtpbmRleF09XCJjb2x1bW5zLmxlbmd0aCAtIDFcIlxuXHRcdFx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0XHRcdFx0W3RhYmxlSGFzQWN0aW9uc109XCIhIXJvd0FjdGlvbnNSb3c/Lmxlbmd0aFwiXG5cdFx0XHRcdFx0XHRcdFx0W3RlbXBsYXRlXT1cImFjdGlvbnNUZW1wbGF0ZVwiXG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PC9wLXRhYmxlLWNlbGwtbmd4PlxuXG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjYWN0aW9uc1RlbXBsYXRlPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtbC1hdXRvIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93QWN0aW9uc1Jvd1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cC10b29sdGlwXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5zaG93RnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBhY3Rpb24uc2hvd0Z1bmN0aW9uKHBhcnNlZEl0ZW1zW3Jvd0luZGV4XSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbY29udGVudF09XCJhY3Rpb24ubGFiZWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLWlzLWFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzbG90PVwidHJpZ2dlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbaWNvbl09XCJhY3Rpb24uaWNvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbaWNvblJvdGF0ZV09XCJhY3Rpb24uaWNvblJvdGF0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uRmxpcD1cImFjdGlvbi5pY29uRmxpcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3JvdXRlckxpbmtdPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5yb3V0ZXJMaW5rXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoX2dldEFjdGlvblJvdXRlckxpbmsoYWN0aW9uLnJvdXRlckxpbmssIHJvd0luZGV4KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfCBhc3luYylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcXVlcnlQYXJhbXNdPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvbi5xdWVyeVBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKF9nZXRBY3Rpb25RdWVyeVBhcmFtcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnF1ZXJ5UGFyYW1zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dJbmRleFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgKSB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvbkNsaWNrKT1cIl9yb3dBY3Rpb25DbGljayhhY3Rpb24sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PjwvcC1idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvcC10b29sdGlwPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PC9wLXRhYmxlLXJvdz5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvZGl2PlxuXG5cdDxwLXRhYmxlLWZvb3RlclxuXHRcdCpuZ0lmPVwiZW5hYmxlRm9vdGVyXCJcblx0XHRbaGlkZU9uU2luZ2xlUGFnZV09XCJoaWRlT25TaW5nbGVQYWdlXCJcblx0XHRbZW5hYmxlUGFnZVNpemVdPVwiZW5hYmxlUGFnZVNpemVcIlxuXHRcdFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG5cdFx0W3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuXHRcdChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVQYWdpbmF0aW9uXT1cImVuYWJsZVBhZ2luYXRpb25cIlxuXHRcdFtwYWdlXT1cInBhZ2VcIlxuXHRcdFt0b3RhbF09XCJ0b3RhbFwiXG5cdFx0KHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVFeHBvcnRdPVwiZW5hYmxlRXhwb3J0XCJcblx0XHQoZXhwb3J0KT1cImV4cG9ydC5lbWl0KClcIlxuXHRcdFtsb2FkaW5nXT1cImZvb3RlckxvYWRpbmdcIlxuXHQ+PC9wLXRhYmxlLWZvb3Rlcj5cblxuXHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlRmxvYXRpbmdNZW51ICYmIGVuYWJsZVJvd1NlbGVjdGlvblwiPlxuXHRcdDxwLWZsb2F0aW5nLW1lbnUtY29udGFpbmVyXG5cdFx0XHRbdXNlZEluVGFibGVdPVwidHJ1ZVwiXG5cdFx0XHRbY2xhc3MuaW5hY3RpdmVdPVwiIXNlbGVjdGVkUm93cy5sZW5ndGhcIlxuXHRcdFx0W2NsYXNzLnNob3duXT1cImZsb2F0aW5nTWVudVNob3duJCB8IGFzeW5jXCJcblx0XHQ+XG5cdFx0XHQ8cC1mbG9hdGluZy1tZW51LWl0ZW1cblx0XHRcdFx0W2hvdmVyXT1cImZhbHNlXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHRcdFtjbGFzc109XCJ7XG5cdFx0XHRcdFx0aGlkZGVuOiAhIShyb3dBY3Rpb25zRmxvYXRpbmckIHwgYXN5bmMpPy5sZW5ndGgsXG5cdFx0XHRcdFx0J3RhYmxldDpmbGV4JzogISEocm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jKT8ubGVuZ3RoXG5cdFx0XHRcdH1cIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHQgfX1cblx0XHRcdDwvcC1mbG9hdGluZy1tZW51LWl0ZW0+XG5cdFx0XHQ8cC1kaXZpZGVyXG5cdFx0XHRcdGNsYXNzPVwibXgtMCB0ZXh0LXN0b3JtXCJcblx0XHRcdFx0dmFyaWFudD1cInZlcnRpY2FsXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHRcdFtjbGFzc109XCJ7XG5cdFx0XHRcdFx0aGlkZGVuOiAhIShyb3dBY3Rpb25zRmxvYXRpbmckIHwgYXN5bmMpPy5sZW5ndGgsXG5cdFx0XHRcdFx0J3RhYmxldDpmbGV4JzogISEocm93QWN0aW9uc0Zsb2F0aW5nJCB8IGFzeW5jKT8ubGVuZ3RoXG5cdFx0XHRcdH1cIlxuXHRcdFx0PjwvcC1kaXZpZGVyPlxuXG5cdFx0XHQ8cC1mbG9hdGluZy1tZW51LWl0ZW1cblx0XHRcdFx0Km5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dBY3Rpb25zRmxvYXRpbmckIHwgYXN5bmNcIlxuXHRcdFx0XHRzbG90PVwiZmxvYXRpbmctbWVudS1pdGVtXCJcblx0XHRcdFx0W2Rpc2FibGVkXT1cIlxuXHRcdFx0XHRcdChhY3Rpb24udHlwZSA9PT0gJ3NpbmdsZScgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDEpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmRpc2FibGVkXG5cdFx0XHRcdFwiXG5cdFx0XHRcdChjbGljayk9XCJfcm93QWN0aW9uQ2xpY2soYWN0aW9uKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGFjdGlvbi5sYWJlbCB9fVxuXG5cdFx0XHRcdDxwLWxvYWRlclxuXHRcdFx0XHRcdCpuZ0lmPVwiYWN0aW9uLmxvYWRpbmc7IGVsc2UgZmxvYXRpbmdNZW51SXRlbUljb25UZW1wbGF0ZVwiXG5cdFx0XHRcdD48L3AtbG9hZGVyPlxuXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAjZmxvYXRpbmdNZW51SXRlbUljb25UZW1wbGF0ZT5cblx0XHRcdFx0XHQ8cC1pY29uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJhY3Rpb24uaWNvblwiXG5cdFx0XHRcdFx0XHRbcm90YXRlXT1cImFjdGlvbi5pY29uUm90YXRlXCJcblx0XHRcdFx0XHRcdFtmbGlwXT1cImFjdGlvbi5pY29uRmxpcFwiXG5cdFx0XHRcdFx0PjwvcC1pY29uPlxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9wLWZsb2F0aW5nLW1lbnUtaXRlbT5cblxuXHRcdFx0PHAtZGl2aWRlclxuXHRcdFx0XHRjbGFzcz1cIm14LTAgdGV4dC1zdG9ybVwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJ2ZXJ0aWNhbFwiXG5cdFx0XHRcdHNsb3Q9XCJmbG9hdGluZy1tZW51LWl0ZW1cIlxuXHRcdFx0PjwvcC1kaXZpZGVyPlxuXG5cdFx0XHQ8cC1mbG9hdGluZy1tZW51LWl0ZW1cblx0XHRcdFx0KGNsaWNrKT1cIl9zZWxlY3RBbGxDaGFuZ2UobnVsbCwgZmFsc2UpXCJcblx0XHRcdFx0c2xvdD1cImZsb2F0aW5nLW1lbnUtaXRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxwLWljb24gdmFyaWFudD1cIm5lZ2F0aXZlXCI+PC9wLWljb24+XG5cdFx0XHQ8L3AtZmxvYXRpbmctbWVudS1pdGVtPlxuXHRcdDwvcC1mbG9hdGluZy1tZW51LWNvbnRhaW5lcj5cblx0PC9uZy1jb250YWluZXI+XG48L3AtdGFibGUtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyTW9kYWxUZW1wbGF0ZVwiPlxuXHQ8cC1tb2RhbFxuXHRcdFtoZWFkZXJdPVwiZmlsdGVyTW9kYWxIZWFkZXJUZXh0XCJcblx0XHRbc2hvd109XCJmaWx0ZXJNb2RhbFNob3ckIHwgYXN5bmNcIlxuXHRcdChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG5cdD5cblx0XHQ8ZGl2XG5cdFx0XHRzbG90PVwiY29udGVudFwiXG5cdFx0XHRjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTZcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdlxuXHRcdFx0c2xvdD1cImZvb3RlclwiXG5cdFx0XHRjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiXG5cdFx0PlxuXHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdCpuZ0lmPVwiZmlsdGVyTW9kYWxTaG93UmVzZXRNb2JpbGVcIlxuXHRcdFx0XHRjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuXHRcdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdFx0KG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFJlc2V0KHRydWUpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Km5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldFwiXG5cdFx0XHRcdGNsYXNzPVwiaGlkZGVuIHctZnVsbCB0YWJsZXQ6dy1hdXRvIGRlc2t0b3AteHM6ZmxleFwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQoKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGZpbHRlck1vZGFsUmVzZXRUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG5cdFx0XHRcdGljb249XCJjaGVja21hcmtcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsU2F2ZSgpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHQ8L2Rpdj5cblx0PC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuXHQ8ZGl2XG5cdFx0Km5nSWY9XCJlbXB0eVN0YXRlVHlwZSA9PT0gJ2ZpbHRlcmVkJzsgZWxzZSBlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGVcIlxuXHRcdGNsYXNzPVwiZmxleCBtYXgtdy1bMjByZW1dIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzZWxmLWNlbnRlciBweS0yNCB0ZXh0LWNlbnRlclwiXG5cdD5cblx0XHQ8cC1pbGx1c3RyYXRpb25cblx0XHRcdFt2YXJpYW50XT1cImVtcHR5U3RhdGVGaWx0ZXJlZElsbHVzdHJhdGlvblwiXG5cdFx0XHRjbGFzcz1cIm1iLTZcIlxuXHRcdD48L3AtaWxsdXN0cmF0aW9uPlxuXHRcdDxwIGNsYXNzPVwidGV4dC1zdG9ybS1kZWZhdWx0IGZvbnQtc2VtaWJvbGRcIj5cblx0XHRcdHt7IGVtcHR5U3RhdGVGaWx0ZXJlZEhlYWRlciB9fVxuXHRcdDwvcD5cblx0XHQ8cCBjbGFzcz1cIm1iLTE0IHRleHQtc20gdGV4dC1zdG9ybS1tZWRpdW1cIj5cblx0XHRcdHt7IGVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnQgfX1cblx0XHQ8L3A+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGU+XG5cdDxkaXZcblx0XHRjbGFzcz1cImZsZXggbWF4LXctWzIwcmVtXSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc2VsZi1jZW50ZXIgcHktMjQgdGV4dC1jZW50ZXJcIlxuXHRcdFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcblx0XHQoY2xpY2spPVwiZW1wdHlTdGF0ZUNsaWNrZWQoKVwiXG5cdD5cblx0XHQ8cC1pbGx1c3RyYXRpb25cblx0XHRcdFt2YXJpYW50XT1cImVtcHR5U3RhdGVJbGx1c3RyYXRpb25cIlxuXHRcdFx0Y2xhc3M9XCJtYi02XCJcblx0XHQ+PC9wLWlsbHVzdHJhdGlvbj5cblx0XHQ8cCBjbGFzcz1cInRleHQtc3Rvcm0tZGVmYXVsdCBmb250LXNlbWlib2xkXCI+XG5cdFx0XHR7eyBlbXB0eVN0YXRlSGVhZGVyIH19XG5cdFx0PC9wPlxuXHRcdDxwIGNsYXNzPVwibWItNiB0ZXh0LXNtIHRleHQtc3Rvcm0tbWVkaXVtXCI+XG5cdFx0XHR7eyBlbXB0eVN0YXRlQ29udGVudCB9fVxuXHRcdDwvcD5cblx0XHQ8cC1idXR0b25cblx0XHRcdCpuZ0lmPVwiZW5hYmxlRW1wdHlTdGF0ZUFjdGlvblwiXG5cdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdGljb249XCJwbHVzXCJcblx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0PlxuXHRcdFx0e3sgZW1wdHlTdGF0ZUFjdGlvbiB9fVxuXHRcdDwvcC1idXR0b24+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==