@paperless/angular 2.18.5 → 2.18.6

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.
@@ -795,14 +795,14 @@ let Table = class Table {
795
795
  }
796
796
  };
797
797
  Table.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
798
- 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", enableFilterDesktop: "enableFilterDesktop", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePaginationSize: "enablePaginationSize", enablePaginationPages: "enablePaginationPages", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", emptyStateActionIcon: "emptyStateActionIcon", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", enableScroll: "enableScroll", 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)" }, properties: { "class": "this.className", "attr.data-theme": "this.theme" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "headerCustomActionsTemplate", first: true, predicate: TableCustomActionsDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "extraHeaderDefinitions", predicate: TableExtraHeader }, { propertyName: "rowActions", predicate: TableRowAction }, { propertyName: "customRows", predicate: TableCustomRowDirective }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "tableRows", predicate: PTableRow, descendants: true, read: ElementRef }, { propertyName: "tableCells", predicate: TableCell, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\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[enableFilterDesktop]=\"enableFilterDesktop\"\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[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\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\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div\n\t\tclass=\"relative flex-1\"\n\t\t*ngIf=\"enableScroll; else rowsTemplate\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"\n\t\t\t\tcn(\n\t\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t\t'before:w-24 before:h-full before:transition-opacity',\n\t\t\t\t\t'before:bg-gradient-to-r before:from-white dark:before:from-hurricane-700 before:via-white/80 dark:before:via-hurricane-700/90 before:to-transparent',\n\t\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t\t'after:w-24 after:h-full after:transition-opacity',\n\t\t\t\t\t'after:bg-gradient-to-l after:from-white after:dark:from-hurricane-700 after:via-white/80 dark:after:via-hurricane-700/90 after:to-transparent',\n\t\t\t\t\t{\n\t\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\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]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\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[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t\t[tableHeaderHasAction]=\"enableHeader && enableAction && actionButtonEnabled\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row\n\t\t*ngIf=\"(extraHeaders$ | async)?.length\"\n\t\tvariant=\"header-secondary\"\n\t\tclassName=\"z-[2]\"\n\t\t[isLast]=\"true\"\n\t>\n\t\t<ng-container *ngFor=\"let col of extraHeaders$ | async; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\tvariant=\"header-secondary\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkboxOffset]=\"index === 0 && enableRowSelection\"\n\t\t\t\t[scrollable]=\"this.enableScroll\"\n\t\t\t>\n\t\t\t\t<b>{{ col.name }}</b>\n\t\t\t</p-table-cell-ngx>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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\tclass=\"group\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t[isLast]=\"rowIndex === loadingRows.length - 1\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\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\tclass=\"group\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t[isLast]=\"rowIndex === parsedItems.length - 1\"\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\n\t\t\t\t\t\t\t*ngFor=\"let col of columns$ | async; let index = index\"\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\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[scrollable]=\"this.enableScroll\"\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<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\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: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\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? (_getActionRouterLink(action.routerLink, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\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? (_getActionQueryParams(action.queryParams, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-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\n\t\t<ng-container *ngFor=\"let customRow of customRows\">\n\t\t\t<p-table-row\n\t\t\t\t[variant]=\"customRow.variant\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\t'z-[2]': customRow.variant === 'secondary'\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"customRow.templateRef\"></ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\t</div>\n</ng-template>\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<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t\t[enableAction]=\"false\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\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: ["active", "as", "buttonGroupPosition", "chevron", "chevronPosition", "class", "disabled", "error", "href", "icon", "iconClass", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "label", "loading", "size", "tabIndex", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PCheckbox, selector: "p-checkbox", inputs: ["checked", "disabled", "id", "indeterminate", "name", "required"] }, { kind: "component", type: i3.PEmptyState, selector: "p-empty-state", inputs: ["actionIcon", "actionIconPosition", "actionLoading", "actionText", "actionVariant", "content", "enableAction", "header", "illustration"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["amount", "amountSelectedTemplate", "enableAmountSelected", "enableClose", "usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover", "icon", "iconFlip", "iconPosition", "iconRotate", "loading"] }, { 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", "scrollLock", "show", "showClose", "showMobileFooter", "size"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enablePaginationPages", "enablePaginationSize", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "tableHeaderHasAction", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableExport", "enableFilter", "enableFilterDesktop", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["checked", "enableHover", "isLast", "variant"] }, { kind: "component", type: i3.PTableRowActionsContainer, selector: "p-table-row-actions-container", inputs: ["checked"] }, { 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", "checkbox", "checkboxOffset", "template", "scrollable"] }, { 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 });
798
+ 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", enableFilterDesktop: "enableFilterDesktop", selectedFiltersAmount: "selectedFiltersAmount", filterButtonTemplate: "filterButtonTemplate", enableAction: "enableAction", actionButtonLoading: "actionButtonLoading", actionButtonIcon: "actionButtonIcon", actionButtonEnabled: "actionButtonEnabled", actionButtonText: "actionButtonText", actionButtonTemplate: "actionButtonTemplate", enableFooter: "enableFooter", enablePaginationSize: "enablePaginationSize", enablePaginationPages: "enablePaginationPages", enableExport: "enableExport", page: "page", total: "total", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", hideOnSinglePage: "hideOnSinglePage", emptyStateType: "emptyStateType", emptyStateIllustration: "emptyStateIllustration", emptyStateHeader: "emptyStateHeader", emptyStateContent: "emptyStateContent", emptyStateAction: "emptyStateAction", emptyStateActionIcon: "emptyStateActionIcon", enableEmptyStateAction: "enableEmptyStateAction", emptyStateFilteredIllustration: "emptyStateFilteredIllustration", emptyStateFilteredHeader: "emptyStateFilteredHeader", emptyStateFilteredContent: "emptyStateFilteredContent", enableScroll: "enableScroll", 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)" }, properties: { "class": "this.className", "attr.data-theme": "this.theme" } }, queries: [{ propertyName: "headerCustomFilterTemplate", first: true, predicate: TableCustomFilterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "headerCustomActionsTemplate", first: true, predicate: TableCustomActionsDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "filterModalTemplate", first: true, predicate: TableFilterModalDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "columnDefinitions", predicate: TableColumn }, { propertyName: "extraHeaderDefinitions", predicate: TableExtraHeader }, { propertyName: "rowActions", predicate: TableRowAction }, { propertyName: "customRows", predicate: TableCustomRowDirective }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "tableRows", predicate: PTableRow, descendants: true, read: ElementRef }, { propertyName: "tableCells", predicate: TableCell, descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\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[enableFilterDesktop]=\"enableFilterDesktop\"\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[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\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\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div\n\t\tclass=\"relative flex-1\"\n\t\t*ngIf=\"enableScroll; else rowsTemplate\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"\n\t\t\t\tcn(\n\t\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t\t'before:w-24 before:h-full before:transition-opacity',\n\t\t\t\t\t'before:bg-gradient-to-r before:from-white dark:before:from-hurricane-700 before:via-white/80 dark:before:via-hurricane-700/90 before:to-transparent',\n\t\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t\t'after:w-24 after:h-full after:transition-opacity',\n\t\t\t\t\t'after:bg-gradient-to-l after:from-white after:dark:from-hurricane-700 after:via-white/80 dark:after:via-hurricane-700/90 after:to-transparent',\n\t\t\t\t\t{\n\t\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\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]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\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[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t\t[tableHeaderHasAction]=\"enableHeader && enableAction && actionButtonEnabled\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row\n\t\t*ngIf=\"(extraHeaders$ | async)?.length\"\n\t\tvariant=\"header-secondary\"\n\t\tclass=\"z-[2]\"\n\t\t[isLast]=\"true\"\n\t>\n\t\t<ng-container *ngFor=\"let col of extraHeaders$ | async; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\tvariant=\"header-secondary\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkboxOffset]=\"index === 0 && enableRowSelection\"\n\t\t\t\t[scrollable]=\"this.enableScroll\"\n\t\t\t>\n\t\t\t\t<b>{{ col.name }}</b>\n\t\t\t</p-table-cell-ngx>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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\tclass=\"group\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t[isLast]=\"rowIndex === loadingRows.length - 1\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\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\tclass=\"group\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t[isLast]=\"rowIndex === parsedItems.length - 1\"\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\n\t\t\t\t\t\t\t*ngFor=\"let col of columns$ | async; let index = index\"\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\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[scrollable]=\"this.enableScroll\"\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<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\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: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\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? (_getActionRouterLink(action.routerLink, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\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? (_getActionQueryParams(action.queryParams, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-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\n\t\t<ng-container *ngFor=\"let customRow of customRows\">\n\t\t\t<p-table-row\n\t\t\t\t[variant]=\"customRow.variant\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\t'z-[2]': customRow.variant === 'secondary'\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"customRow.templateRef\"></ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\t</div>\n</ng-template>\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<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t\t[enableAction]=\"false\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\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: ["active", "as", "buttonGroupPosition", "chevron", "chevronPosition", "class", "disabled", "error", "href", "icon", "iconClass", "iconFlip", "iconOnly", "iconPosition", "iconRotate", "inheritText", "label", "loading", "size", "tabIndex", "target", "type", "underline", "variant"] }, { kind: "component", type: i3.PCheckbox, selector: "p-checkbox", inputs: ["checked", "disabled", "id", "indeterminate", "name", "required"] }, { kind: "component", type: i3.PEmptyState, selector: "p-empty-state", inputs: ["actionIcon", "actionIconPosition", "actionLoading", "actionText", "actionVariant", "content", "enableAction", "header", "illustration"] }, { kind: "component", type: i3.PFloatingMenuContainer, selector: "p-floating-menu-container", inputs: ["amount", "amountSelectedTemplate", "enableAmountSelected", "enableClose", "usedInTable"] }, { kind: "component", type: i3.PFloatingMenuItem, selector: "p-floating-menu-item", inputs: ["disabled", "hover", "icon", "iconFlip", "iconPosition", "iconRotate", "loading"] }, { 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", "scrollLock", "show", "showClose", "showMobileFooter", "size"] }, { kind: "component", type: i3.PTableContainer, selector: "p-table-container" }, { kind: "component", type: i3.PTableFooter, selector: "p-table-footer", inputs: ["enablePaginationPages", "enablePaginationSize", "hideOnSinglePage", "loading", "page", "pageSize", "pageSizeOptions", "tableHeaderHasAction", "total"] }, { kind: "component", type: i3.PTableHeader, selector: "p-table-header", inputs: ["actionButtonTemplate", "actionIcon", "actionLoading", "actionText", "activeQuickFilterIdentifier", "canUseAction", "enableAction", "enableExport", "enableFilter", "enableFilterDesktop", "enableSearch", "filterButtonTemplate", "itemsSelectedAmount", "loading", "query", "quickFilters", "selectedFiltersAmount"] }, { kind: "component", type: i3.PTableRow, selector: "p-table-row", inputs: ["checked", "enableHover", "isLast", "variant"] }, { kind: "component", type: i3.PTableRowActionsContainer, selector: "p-table-row-actions-container", inputs: ["checked"] }, { 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", "checkbox", "checkboxOffset", "template", "scrollable"] }, { 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 });
799
799
  Table = __decorate([
800
800
  UntilDestroy({ checkProperties: true })
801
801
  ], Table);
802
802
  export { Table };
803
803
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Table, decorators: [{
804
804
  type: Component,
805
- args: [{ selector: "p-table-ngx", changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\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[enableFilterDesktop]=\"enableFilterDesktop\"\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[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\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\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div\n\t\tclass=\"relative flex-1\"\n\t\t*ngIf=\"enableScroll; else rowsTemplate\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"\n\t\t\t\tcn(\n\t\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t\t'before:w-24 before:h-full before:transition-opacity',\n\t\t\t\t\t'before:bg-gradient-to-r before:from-white dark:before:from-hurricane-700 before:via-white/80 dark:before:via-hurricane-700/90 before:to-transparent',\n\t\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t\t'after:w-24 after:h-full after:transition-opacity',\n\t\t\t\t\t'after:bg-gradient-to-l after:from-white after:dark:from-hurricane-700 after:via-white/80 dark:after:via-hurricane-700/90 after:to-transparent',\n\t\t\t\t\t{\n\t\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\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]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\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[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t\t[tableHeaderHasAction]=\"enableHeader && enableAction && actionButtonEnabled\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row\n\t\t*ngIf=\"(extraHeaders$ | async)?.length\"\n\t\tvariant=\"header-secondary\"\n\t\tclassName=\"z-[2]\"\n\t\t[isLast]=\"true\"\n\t>\n\t\t<ng-container *ngFor=\"let col of extraHeaders$ | async; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\tvariant=\"header-secondary\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkboxOffset]=\"index === 0 && enableRowSelection\"\n\t\t\t\t[scrollable]=\"this.enableScroll\"\n\t\t\t>\n\t\t\t\t<b>{{ col.name }}</b>\n\t\t\t</p-table-cell-ngx>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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\tclass=\"group\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t[isLast]=\"rowIndex === loadingRows.length - 1\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\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\tclass=\"group\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t[isLast]=\"rowIndex === parsedItems.length - 1\"\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\n\t\t\t\t\t\t\t*ngFor=\"let col of columns$ | async; let index = index\"\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\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[scrollable]=\"this.enableScroll\"\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<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\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: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\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? (_getActionRouterLink(action.routerLink, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\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? (_getActionQueryParams(action.queryParams, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-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\n\t\t<ng-container *ngFor=\"let customRow of customRows\">\n\t\t\t<p-table-row\n\t\t\t\t[variant]=\"customRow.variant\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\t'z-[2]': customRow.variant === 'secondary'\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"customRow.templateRef\"></ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\t</div>\n</ng-template>\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<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t\t[enableAction]=\"false\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n" }]
805
+ args: [{ selector: "p-table-ngx", changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table-container>\n\t<p-table-header\n\t\t*ngIf=\"enableHeader\"\n\t\tclass=\"mb-8\"\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[enableFilterDesktop]=\"enableFilterDesktop\"\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[enableExport]=\"enableExport\"\n\t\t(export)=\"export.emit()\"\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\n\t\t<ng-container *ngIf=\"headerCustomActionsTemplate\">\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"headerCustomActionsTemplate\"\n\t\t\t></ng-container>\n\t\t</ng-container>\n\t</p-table-header>\n\n\t<div\n\t\tclass=\"relative flex-1\"\n\t\t*ngIf=\"enableScroll; else rowsTemplate\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex flex-col overflow-x-auto\"\n\t\t\t#scrollContainer\n\t\t\t[class]=\"\n\t\t\t\tcn(\n\t\t\t\t\t'before:absolute before:top-0 before:left-0 before:z-[1] before:pointer-events-none',\n\t\t\t\t\t'before:w-24 before:h-full before:transition-opacity',\n\t\t\t\t\t'before:bg-gradient-to-r before:from-white dark:before:from-hurricane-700 before:via-white/80 dark:before:via-hurricane-700/90 before:to-transparent',\n\t\t\t\t\t'after:absolute after:top-0 after:right-0 after:z-[0] before:pointer-events-none',\n\t\t\t\t\t'after:w-24 after:h-full after:transition-opacity',\n\t\t\t\t\t'after:bg-gradient-to-l after:from-white after:dark:from-hurricane-700 after:via-white/80 dark:after:via-hurricane-700/90 after:to-transparent',\n\t\t\t\t\t{\n\t\t\t\t\t\t'before:opacity-0': reachedScrollStart$ | async,\n\t\t\t\t\t\t'after:opacity-0': reachedScrollEnd$ | async,\n\t\t\t\t\t\t'before:opacity-100': (reachedScrollStart$ | async) === false,\n\t\t\t\t\t\t'after:opacity-100': (reachedScrollEnd$ | async) === false\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\"\n\t\t\t(scroll)=\"onContainerXScroll($event)\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"rowsTemplate\"></ng-container>\n\t\t</div>\n\t</div>\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]=\"\n\t\t\t\tfloatingMenuContainerClass({\n\t\t\t\t\thasFooter: enableFooter && (footerHidden$ | async) === false,\n\t\t\t\t\tactive: selectedRows.length > 0,\n\t\t\t\t\tshown: $any(floatingMenuShown$ | async)\n\t\t\t\t})\n\t\t\t\"\n\t\t\t[amount]=\"floatingMenuAmountSelectedText\"\n\t\t\t[enableAmountSelected]=\"!!(rowActionsFloating$ | async)?.length\"\n\t\t\t(close)=\"_selectAllChange(null, false)\"\n\t\t>\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[loading]=\"action['loading']\"\n\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t[iconFlip]=\"action['iconFlip']\"\n\t\t\t\t(click)=\"_rowActionClick(action)\"\n\t\t\t>\n\t\t\t\t{{ action['label'] }}\n\t\t\t</p-floating-menu-item>\n\t\t</p-floating-menu-container>\n\t</ng-container>\n\n\t<p-table-footer\n\t\t*ngIf=\"enableFooter\"\n\t\t[hideOnSinglePage]=\"hideOnSinglePage\"\n\t\t[enablePaginationSize]=\"enablePaginationSize\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t(pageSizeChange)=\"onPageSizeChange($event)\"\n\t\t[enablePaginationPages]=\"enablePaginationPages\"\n\t\t[page]=\"page\"\n\t\t[total]=\"total\"\n\t\t(pageChange)=\"onPageChange($event)\"\n\t\t[loading]=\"footerLoading\"\n\t\t(hiddenChange)=\"footerHidden$.next($event.detail)\"\n\t\t[tableHeaderHasAction]=\"enableHeader && enableAction && actionButtonEnabled\"\n\t></p-table-footer>\n</p-table-container>\n\n<ng-template #rowsTemplate>\n\t<p-table-row\n\t\t*ngIf=\"(extraHeaders$ | async)?.length\"\n\t\tvariant=\"header-secondary\"\n\t\tclass=\"z-[2]\"\n\t\t[isLast]=\"true\"\n\t>\n\t\t<ng-container *ngFor=\"let col of extraHeaders$ | async; let index = index\">\n\t\t\t<p-table-cell-ngx\n\t\t\t\t[definition]=\"col\"\n\t\t\t\tvariant=\"header-secondary\"\n\t\t\t\t[index]=\"index\"\n\t\t\t\t[checkboxOffset]=\"index === 0 && enableRowSelection\"\n\t\t\t\t[scrollable]=\"this.enableScroll\"\n\t\t\t>\n\t\t\t\t<b>{{ col.name }}</b>\n\t\t\t</p-table-cell-ngx>\n\t\t</ng-container>\n\t</p-table-row>\n\n\t<p-table-row variant=\"header\">\n\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\n\t\t\t></p-table-cell-ngx>\n\t\t\t<ng-template #checkboxTemplate>\n\t\t\t\t<p-checkbox\n\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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\tclass=\"group\"\n\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t[isLast]=\"rowIndex === loadingRows.length - 1\"\n\t\t\t>\n\t\t\t\t<ng-container *ngFor=\"let col of columns$ | async; 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\t[scrollable]=\"this.enableScroll\"\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\tclass=\"group\"\n\t\t\t\t\t[enableHover]=\"enableRowSelection || enableRowClick\"\n\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t[isLast]=\"rowIndex === parsedItems.length - 1\"\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\n\t\t\t\t\t\t\t*ngFor=\"let col of columns$ | async; let index = index\"\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\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[scrollable]=\"this.enableScroll\"\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<p-checkbox\n\t\t\t\t\t\t\t\t\t(checkedChange)=\"_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></p-checkbox>\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<p-table-row-actions-container\n\t\t\t\t\t\t\t*ngIf=\"!!rowActionsRow?.length && !(isMobile$ | async)\"\n\t\t\t\t\t\t\t[checked]=\"_selectionContains(item, rowIndex)\"\n\t\t\t\t\t\t\tslot=\"actions\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let action of rowActionsRow\">\n\t\t\t\t\t\t\t\t<p-tooltip\n\t\t\t\t\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\t\t\t\t\taction.showFunction\n\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: true\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[content]=\"action['label']\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<p-button\n\t\t\t\t\t\t\t\t\t\tdata-is-action\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\t\t[icon]=\"action['icon']\"\n\t\t\t\t\t\t\t\t\t\t[iconRotate]=\"action['iconRotate']\"\n\t\t\t\t\t\t\t\t\t\ticonFlip=\"action.iconFlip\"\n\t\t\t\t\t\t\t\t\t\ticonOnly=\"true\"\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t[loading]=\"action['loading']\"\n\t\t\t\t\t\t\t\t\t\t[disabled]=\"action['disabled']\"\n\t\t\t\t\t\t\t\t\t\t[routerLink]=\"\n\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? (_getActionRouterLink(action.routerLink, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t[queryParams]=\"\n\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? (_getActionQueryParams(action.queryParams, rowIndex)\n\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: null\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t(onClick)=\"_rowActionClick(action, rowIndex)\"\n\t\t\t\t\t\t\t\t\t></p-button>\n\t\t\t\t\t\t\t\t</p-tooltip>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</p-table-row-actions-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\n\t\t<ng-container *ngFor=\"let customRow of customRows\">\n\t\t\t<p-table-row\n\t\t\t\t[variant]=\"customRow.variant\"\n\t\t\t\t[class]=\"{\n\t\t\t\t\t'z-[2]': customRow.variant === 'secondary'\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"customRow.templateRef\"></ng-container>\n\t\t\t</p-table-row>\n\t\t</ng-container>\n\t</div>\n</ng-template>\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<p-empty-state\n\t\t*ngIf=\"emptyStateType === 'filtered'; else emptyStateNonFilterTemplate\"\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateFilteredIllustration\"\n\t\t[header]=\"emptyStateFilteredHeader\"\n\t\t[content]=\"emptyStateFilteredContent\"\n\t\t[enableAction]=\"false\"\n\t></p-empty-state>\n</ng-template>\n\n<ng-template #emptyStateNonFilterTemplate>\n\t<p-empty-state\n\t\tclass=\"my-16 self-center\"\n\t\t[illustration]=\"emptyStateIllustration\"\n\t\t[header]=\"emptyStateHeader\"\n\t\t[content]=\"emptyStateContent\"\n\t\t[enableAction]=\"enableEmptyStateAction\"\n\t\t[actionText]=\"emptyStateAction\"\n\t\t[actionIcon]=\"emptyStateActionIcon\"\n\t\t(action)=\"emptyStateClicked()\"\n\t></p-empty-state>\n</ng-template>\n" }]
806
806
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { className: [{
807
807
  type: HostBinding,
808
808
  args: ["class"]
@@ -1003,4 +1003,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1003
1003
  type: HostListener,
1004
1004
  args: ["document:visibilitychange", ["$event"]]
1005
1005
  }] } });
1006
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTixFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLFFBQVEsRUFDUixhQUFhLEVBR2IsS0FBSyxFQUNMLHNCQUFzQixHQUN0QixNQUFNLGlCQUFpQixDQUFDO0FBTXpCLE9BQU8sRUFDTixlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFDTiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMv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QUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRFbGVtZW50UmVmLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3RCaW5kaW5nLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3V0cHV0LFxuXHRRdWVyeUxpc3QsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5pbXBvcnQge1xuXHRjbixcblx0ZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3MsXG5cdGlzTW9iaWxlLFxuXHRvblN0YXRlQ2hhbmdlLFxuXHRRdWlja0ZpbHRlcixcblx0Um93Q2xpY2tFdmVudCxcblx0c3RhdGUsXG5cdHRhYmxlQ29sdW1TaXplc09wdGlvbnMsXG59IGZyb20gXCJAcGFwZXJsZXNzL2NvcmVcIjtcbmltcG9ydCB7XG5cdEljb25WYXJpYW50LFxuXHRJbGx1c3RyYXRpb25WYXJpYW50LFxuXHRUYWJsZUNvbHVtblNpemVzLFxufSBmcm9tIFwiQHBhcGVybGVzcy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHtcblx0QmVoYXZpb3JTdWJqZWN0LFxuXHRkZWJvdW5jZVRpbWUsXG5cdGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuXHRmaWx0ZXIsXG5cdFN1YnNjcmlwdGlvbixcblx0dGFrZSxcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFBUYWJsZVJvdyB9IGZyb20gXCIuLi8uLi8uLi8uLi9zdGVuY2lsL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7XG5cdFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSxcblx0VGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsXG5cdFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsXG59IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzXCI7XG5pbXBvcnQgeyBUYWJsZUN1c3RvbVJvd0RpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3AtdGFibGUtY3VzdG9tLXJvdy5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gXCIuLi90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFibGVFeHRyYUhlYWRlciB9IGZyb20gXCIuLi90YWJsZS1leHRyYS1oZWFkZXIvdGFibGUtZXh0cmEtaGVhZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcblx0QXN5bmNJdGVtLFxuXHRUYWJsZVJvd0FjdGlvbixcblx0VGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0VGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxufSBmcm9tIFwiLi4vdGFibGUtcm93LWFjdGlvbi90YWJsZS1yb3ctYWN0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVmYXVsdFNpemUsIGRlZmF1bHRTaXplT3B0aW9ucyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5AVW50aWxEZXN0cm95KHsgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlIH0pXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwicC10YWJsZS1uZ3hcIixcblx0dGVtcGxhdGVVcmw6IFwidGFibGUuY29tcG9uZW50Lmh0bWxcIixcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc05hbWUgPSBcImZsZXggZmxleC1jb2wgei0wXCI7XG5cdEBIb3N0QmluZGluZyhcImF0dHIuZGF0YS10aGVtZVwiKSB0aGVtZSA9IHN0YXRlLnRoZW1lO1xuXG5cdC8qKlxuXHQgKiBUaGUgaXRlbXMgdG8gYmUgZmVkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0QElucHV0KCkgaXRlbXMhOiBzdHJpbmcgfCBhbnlbXTtcblxuXHQvKipcblx0ICogV2V0aGVyIGRhdGEgaXMgbG9hZGluZ1xuXHQgKi9cblx0QElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG5cdCAqL1xuXHRASW5wdXQoKSBoZWFkZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZm9vdGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGZvb3RlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBsb2FkaW5nIHJvd3MgdG8gc2hvd1xuXHQgKi9cblx0QElucHV0KCkgYW1vdW50T2ZMb2FkaW5nUm93czogbnVtYmVyID0gNjtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBzZWxlY3Rpb25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVJvd1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgbGltaXQgdG8gdGhlIGFtb3VudCBvZiByb3dzIHRoYXQgY2FuIGJlIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSByb3dTZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHJvdyBjbGlja2luZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgaXRlbXNcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEEga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIGNhblNlbGVjdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGbG9hdGluZ01lbnU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgZmxvYXRpbmcgbWVudSBhbW91bnQgaXRlbSB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHQ6IHN0cmluZyA9IFwiMCBpdGVtcyBzZWxlY3RlZFwiO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIGFtb3VudCBzZWxlY3RlZCBpdGVtIGluIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZmxvYXRpbmcgbWVudSBoYXMgYmVlbiBzaG93biBhdGxlYXN0IG9uY2Vcblx0ICovXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVTaG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEhFQURFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcblx0ICovXG5cdEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuXHQgKi9cblx0QElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uIG9uIGRlc2t0b3Bcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlckRlc2t0b3A6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGxvYWRpbmdcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFjdGlvbiBidXR0b24gaWNvblxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSBcInBlbmNpbFwiO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBhY3Rpb24gYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGV4dD86IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHRlbXBsYXRlIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBhY3Rpb25CdXR0b25UZW1wbGF0ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIG9uZSBvZiB0aGUgcXVpY2sgZmlsdGVycyBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVpY2tGaWx0ZXI6IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBxdWVyeUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIGZpbHRlciBidXR0b24gaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBhY3Rpb246IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogU1RBUlQgRk9PVEVSICovXG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmb290ZXJcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcGFnaW5hdGlvbiBzaXplIHNlbGVjdFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUGFnaW5hdGlvblNpemU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb24gcGFnZXNcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb25QYWdlczogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgZXhwb3J0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVFeHBvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBwYWdlXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlOiBudW1iZXIgPSAxO1xuXG5cdC8qKlxuXHQgKiBUaGUgdG90YWwgYW1vdW50IG9mIGl0ZW1zXG5cdCAqL1xuXHRASW5wdXQoKSB0b3RhbCE6IG51bWJlcjtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGl0ZW1zIHBlciBwYWdlXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gZGVmYXVsdFNpemU7XG5cblx0LyoqXG5cdCAqIFRoZSBvcHRpb25zIGZvciB0aGUgcGFnZSBzaXplXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gZGVmYXVsdFNpemVPcHRpb25zO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgZXhwb3J0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGhpZGUgd2hlbiB0aGVyZSBpcyBvbmx5IDEgcGFnZSBhdmFpbGFibGVcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVPblNpbmdsZVBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qIEVtcHR5IHN0YXRlIHN0YXJ0ICovXG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVUeXBlOiBcIm5vX2ZpbHRlclwiIHwgXCJmaWx0ZXJlZFwiID0gXCJub19maWx0ZXJcIjtcblxuXHRASW5wdXQoKSBlbXB0eVN0YXRlSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gXCJ0YWJsZVwiO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQ29udGVudCE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbiE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkljb246IEljb25WYXJpYW50ID0gXCJwbHVzXCI7XG5cblx0QElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gXCJzZWFyY2hcIjtcblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNjcm9sbGluZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGRyZW4oUFRhYmxlUm93LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVSb3dzITogUXVlcnlMaXN0PFxuXHRcdEVsZW1lbnRSZWY8UFRhYmxlUm93PlxuXHQ+O1xuXHRAVmlld0NoaWxkcmVuKFRhYmxlQ2VsbCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRhYmxlQ2VsbHMhOiBRdWVyeUxpc3Q8XG5cdFx0RWxlbWVudFJlZjxUYWJsZUNlbGw+XG5cdD47XG5cdEBWaWV3Q2hpbGQoXCJzY3JvbGxDb250YWluZXJcIikgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cblx0cHVibGljIHJlYWNoZWRTY3JvbGxTdGFydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXHRwdWJsaWMgcmVhY2hlZFNjcm9sbEVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblx0cHJpdmF0ZSBfdG90YWxXaWR0aCA9IDA7XG5cdHByaXZhdGUgX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQ/OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcm93Q2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBfY2VsbENoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBlbXB0eSBzdGF0ZSBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyogRW1wdHkgc3RhdGUgZW5kICovXG5cblx0Lypcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIHNoYWRvdyBvciBub3Rcblx0ICovXG5cdEBJbnB1dCgpIHNoYWRvdzogYm9vbGVhbiA9IHRydWU7XG5cblx0cHVibGljIGV4dHJhSGVhZGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG5cdHB1YmxpYyBjb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblx0cHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0fSk7XG5cdHByaXZhdGUgX2N0cmxEb3duID0gZmFsc2U7XG5cblx0Ly8gQW5ndWxhciBzdHVmZlxuXHQvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG5cdEBDb250ZW50Q2hpbGQoVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjdXN0b20gYWN0aW9ucyB0ZW1wbGF0ZVxuXHRAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjb2x1bW4gdGVtcGxhdGVzXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pIGNvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblx0QENvbnRlbnRDaGlsZHJlbihUYWJsZUV4dHJhSGVhZGVyKVxuXHRleHRyYUhlYWRlckRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlRXh0cmFIZWFkZXI+O1xuXG5cdC8vIGZpbHRlciBtb2RhbFxuXHRAQ29udGVudENoaWxkKFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFNob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0Ly8gcm93IGFjdGlvbnMgdGVtcGxhdGVzXG5cdHByaXZhdGUgX3Jvd0FjdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+O1xuXHRwcml2YXRlIF9yb3dBY3Rpb25zU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuXHRAQ29udGVudENoaWxkcmVuKFRhYmxlUm93QWN0aW9uKVxuXHRzZXQgcm93QWN0aW9ucyh2OiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+KSB7XG5cdFx0dGhpcy5fcm93QWN0aW9ucyA9IHY7XG5cdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHR9XG5cdGdldCByb3dBY3Rpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLl9yb3dBY3Rpb25zO1xuXHR9XG5cblx0Ly8gY3VzdG9tIHJvd3MgdGVtcGxhdGVzXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDdXN0b21Sb3dEaXJlY3RpdmUpXG5cdGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8VGFibGVDdXN0b21Sb3dEaXJlY3RpdmU+O1xuXG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsSGVhZGVyVGV4dDogc3RyaW5nID0gXCJGaWx0ZXJzXCI7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2F2ZVRleHQ6IHN0cmluZyA9IFwiU2F2ZVwiO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9IFwiQ2FuY2VsXCI7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsUmVzZXRUZXh0OiBzdHJpbmcgPSBcIlJlc2V0IGZpbHRlcnNcIjtcblxuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNob3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGZpbHRlck1vZGFsU2F2ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxSZXNldDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHB1YmxpYyByb3dBY3Rpb25zUm93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nQWxsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXG5cdHB1YmxpYyBpc01vYmlsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGlzTW9iaWxlKCkpO1xuXG5cdC8vIHN0aWNreSBzZWxmLWNlbnRlclxuXHQvLyBtdC00IC1tYi01IGJvdHRvbS0xMSB6LVszXVxuXHQvLyBteS00IGJvdHRvbS0wXG5cdC8vIHBvaW50ZXItZXZlbnRzLW5vbmUgYW5pbWF0ZS1mbG9hdGluZy1tZW51LWNvbnRhaW5lci1vdXRcblx0Ly8gYW5pbWF0ZS1mbG9hdGluZy1tZW51LWNvbnRhaW5lci1pblxuXHQvLyBoaWRkZW5cblx0Ly8gaW5saW5lLWJsb2NrXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVDb250YWluZXJDbGFzcyA9IGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzO1xuXG5cdHByaXZhdGUgX3Jlc2l6ZVRpbWVvdXQ6IHVua25vd247XG5cdHByaXZhdGUgX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdGhpcy5lbmFibGVSb3dTZWxlY3Rpb247XG5cdHByaXZhdGUgX2lucHV0Um93U2VsZWN0aW9uTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMucm93U2VsZWN0aW9uTGltaXQ7XG5cblx0cHJpdmF0ZSBfdGhlbWVEZWJvdW5jZT86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHB1YmxpYyBmb290ZXJIaWRkZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0cHVibGljIGNuID0gY247XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuX3BhcnNlSXRlbXModGhpcy5pdGVtcyk7XG5cblx0XHRvblN0YXRlQ2hhbmdlKFwidGhlbWVcIiwgKHZhbHVlKSA9PiB0aGlzLl9jaGVja1RoZW1lKHZhbHVlKSk7XG5cblx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0XHR9KTtcblxuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JFxuXHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG5cdFx0XHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzW1wiaXRlbXNcIl0pIHtcblx0XHRcdHRoaXMuX3BhcnNlSXRlbXMoY2hhbmdlc1tcIml0ZW1zXCJdLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZXNbXCJhbW91bnRPZkxvYWRpbmdSb3dzXCJdKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRcdGxlbmd0aDogY2hhbmdlc1tcImFtb3VudE9mTG9hZGluZ1Jvd3NcIl0uY3VycmVudFZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSBmYWxzZTtcblx0XHRpZiAoY2hhbmdlc1tcImVuYWJsZVJvd1NlbGVjdGlvblwiXSkge1xuXHRcdFx0dGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb24gPVxuXHRcdFx0XHRjaGFuZ2VzW1wiZW5hYmxlUm93U2VsZWN0aW9uXCJdLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzW1wicm93U2VsZWN0aW9uTGltaXRcIl0pIHtcblx0XHRcdHRoaXMuX2lucHV0Um93U2VsZWN0aW9uTGltaXQgPSBjaGFuZ2VzW1wicm93U2VsZWN0aW9uTGltaXRcIl0uY3VycmVudFZhbHVlO1xuXHRcdFx0Y2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgfHwgY2hhbmdlc1tcInNlbGVjdGVkUm93c1wiXSkge1xuXHRcdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzW1wiZW5hYmxlU2Nyb2xsXCJdPy5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMuX2NoZWNrQ2hhbmdlc1N1YnNjcmlwdGlvbnMoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0aWYgKHRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHR0aGlzLl9jaGVja0NoYW5nZXNTdWJzY3JpcHRpb25zKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuY29sdW1uRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRoaXMuY29sdW1uRGVmaW5pdGlvbnMuY2hhbmdlc1xuXHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGVib3VuY2VUaW1lKDEwMCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCkpO1xuXHRcdFx0dGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZXh0cmFIZWFkZXJEZWZpbml0aW9ucykge1xuXHRcdFx0dGhpcy5leHRyYUhlYWRlckRlZmluaXRpb25zLmNoYW5nZXNcblx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRlYm91bmNlVGltZSgxMDApKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2dlbmVyYXRlRXh0cmFIZWFkZXJzKCkpO1xuXHRcdFx0dGhpcy5fZ2VuZXJhdGVFeHRyYUhlYWRlcnMoKTtcblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXCIkZXZlbnRcIl0pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duXCIsIFtcIiRldmVudFwiXSlcblx0a2V5RG93bih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcblx0XHRpZiAoa2V5ICE9PSBcIkNvbnRyb2xcIiB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXl1cFwiLCBbXCIkZXZlbnRcIl0pXG5cdGtleVVwKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09IFwiQ29udHJvbFwiIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6dmlzaWJpbGl0eWNoYW5nZVwiLCBbXCIkZXZlbnRcIl0pXG5cdHZpc2liaWxpdHlDaGFuZ2UoKSB7XG5cdFx0aWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gXCJoaWRkZW5cIiB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQoZGV0YWlsKTtcblx0fVxuXG5cdG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG5cdFx0dGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5wYWdlID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvbkZpbHRlck1vZGFsU2F2ZSgpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGVtcHR5U3RhdGVDbGlja2VkKCkge1xuXHRcdGlmICh0aGlzLmVuYWJsZUFjdGlvbikge1xuXHRcdFx0dGhpcy5hY3Rpb24uZW1pdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuXHR9XG5cblx0cGFyc2VSb3dBY3Rpb25zUm93KGFjdGlvbnM6IFRhYmxlUm93QWN0aW9uW10gfCBudWxsLCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCFhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHQoYSkgPT4gIWEuc2hvd0Z1bmN0aW9uIHx8IGEuc2hvd0Z1bmN0aW9uKHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdKSxcblx0XHQpO1xuXHR9XG5cblx0b25Db250YWluZXJYU2Nyb2xsKGV2OiBhbnkpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oZXYpO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VJdGVtcyhpdGVtczogc3RyaW5nIHwgYW55W10pIHtcblx0XHRpZiAoIWl0ZW1zKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gW107XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gaXRlbXM7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXJzZWRJdGVtcyA9IEpTT04ucGFyc2UoaXRlbXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2VuZXJhdGVDb2x1bW5zKCkge1xuXHRcdGxldCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtbkRlZmluaXRpb25zKTtcblxuXHRcdGRlZmluaXRpb25zQXJyYXkgPSB0aGlzLl9wYXJzZURlZmluaXRpb25zKFxuXHRcdFx0ZGVmaW5pdGlvbnNBcnJheSxcblx0XHQpIGFzIHVua25vd24gYXMgVGFibGVDb2x1bW5bXTtcblxuXHRcdHRoaXMuY29sdW1ucyQubmV4dChkZWZpbml0aW9uc0FycmF5KTtcblx0fVxuXG5cdHByaXZhdGUgX2dlbmVyYXRlRXh0cmFIZWFkZXJzKCkge1xuXHRcdGxldCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmV4dHJhSGVhZGVyRGVmaW5pdGlvbnMpO1xuXG5cdFx0ZGVmaW5pdGlvbnNBcnJheSA9IHRoaXMuX3BhcnNlRGVmaW5pdGlvbnMoXG5cdFx0XHRkZWZpbml0aW9uc0FycmF5LFxuXHRcdCkgYXMgdW5rbm93biBhcyBUYWJsZUV4dHJhSGVhZGVyW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbCBvZiBkZWZpbml0aW9uc0FycmF5KSB7XG5cdFx0XHRjb2wuc3RpY2t5ID0gY29sLnN0aWNreSA9PT0gdHJ1ZSA/IFwic2Vjb25kYXJ5XCIgOiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmV4dHJhSGVhZGVycyQubmV4dChkZWZpbml0aW9uc0FycmF5KTtcblx0fVxuXG5cdHB1YmxpYyBfY2hlY2tib3hEaXNhYmxlZChpdGVtOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBzZWxlY3Rpb25Db250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMuY2FuU2VsZWN0S2V5ICYmICFpdGVtW3RoaXMuY2FuU2VsZWN0S2V5XSkgfHxcblx0XHRcdCh0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0IXNlbGVjdGlvbkNvbnRhaW5zICYmXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdClcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnksIGZvcmNlVmFsdWU/OiBib29sZWFuKSB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gZm9yY2VWYWx1ZSA9PT0gdW5kZWZpbmVkID8gJGV2ZW50LmRldGFpbCA6IGZvcmNlVmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGNvbnN0IHRvQWRkID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9BZGQucHVzaChyb3cpO1xuXHRcdFx0XHR0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoICsgdG9BZGQubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCAuLi50b0FkZF07XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblxuXHRcdFx0aWYgKHRoaXMuZW5hYmxlRmxvYXRpbmdNZW51KSB7XG5cdFx0XHRcdHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3NbaV07XG5cdFx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zLmZpbmQoXG5cdFx0XHRcdChkKSA9PlxuXHRcdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGQsIGkpID09PSB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZSh2YWx1ZSwgaSksXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXJvdykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveENoYW5nZSh0YXJnZXQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQpO1xuXHRcdGlmIChcblx0XHRcdHZhbHVlICYmXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4T2ZUb1JlbW92ZSA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaW5kZXgsIHRydWUpO1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG5cdFx0c2VsZWN0aW9uLnNwbGljZShpbmRleE9mVG9SZW1vdmUsIDEpO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHRcdHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U2VsZWN0aW9uVmFsdWUocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMocm93OiBhbnksIGluZGV4OiBudW1iZXIsIHJldHVybkluZGV4ID0gZmFsc2UpOiBhbnkge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuXHRcdFx0KGl0ZW0pID0+XG5cdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHJvdywgaW5kZXgpID09PVxuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShpdGVtLCBpbmRleCksXG5cdFx0KTtcblx0XHRyZXR1cm4gIXJldHVybkluZGV4ID8gcmV0dXJuVmFsdWUgPj0gMCA6IHJldHVyblZhbHVlO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcblx0XHRsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuXHRcdGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuXHRcdFx0aWYgKCFjb250YWlucykge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG5cdFx0aWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGggfHwgIXRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBjb250YWluc0NvdW50ID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cblx0XHRcdGlmIChjb250YWlucykge1xuXHRcdFx0XHRjb250YWluc0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0cHVibGljIF9yb3dDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0aWYgKFxuXHRcdFx0dGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiIHx8XG5cdFx0XHQodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09IFwiY2hlY2tib3hcIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuX2ZpbmRSb3codGFyZ2V0KTtcblx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKHRhcmdldCk7XG5cblx0XHRpZiAoYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlUm93Q2xpY2spIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcblx0XHRcdHRoaXMucm93Q2xpY2suZW1pdCh7XG5cdFx0XHRcdGl0ZW0sXG5cdFx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjaGVja2JveCA9IHJvdz8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cblx0XHRpZiAoIWNoZWNrYm94KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xuXHRcdHRoaXMuX2NoZWNrYm94Q2hhbmdlKGNoZWNrYm94LCBpbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgX2dldEFjdGlvblJvdXRlckxpbmsoXG5cdFx0cm91dGVyTGluazogVGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxuXHRcdHJvd0luZGV4OiBudW1iZXIsXG5cdCk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBhbnlbXT4gfCBBc3luY0l0ZW08c3RyaW5nIHwgYW55W10+IHtcblx0XHRpZiAodHlwZW9mIHJvdXRlckxpbmsgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldEFjdGlvblJvdXRlckxpbmsocm91dGVyTGluayhpdGVtKSwgcm93SW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygcm91dGVyTGluayA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHJvdXRlckxpbmspKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdChyb3V0ZXJMaW5rKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm91dGVyTGluaztcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUXVlcnlQYXJhbXMoXG5cdFx0cXVlcnlQYXJhbXM6IFRhYmxlUm93QWN0aW9uUXVlcnlQYXJhbXMsXG5cdFx0cm93SW5kZXg6IG51bWJlcixcblx0KTogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4gfCBBc3luY0l0ZW08UGFyYW1zPiB7XG5cdFx0aWYgKHR5cGVvZiBxdWVyeVBhcmFtcyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMoaXRlbSksIHJvd0luZGV4KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlQYXJhbXMgaW5zdGFuY2VvZiBPYmplY3QgJiYgcXVlcnlQYXJhbXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIG5ldyBCZWhhdmlvclN1YmplY3QocXVlcnlQYXJhbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBxdWVyeVBhcmFtcyBhcyBBc3luY0l0ZW08UGFyYW1zPjtcblx0fVxuXG5cdHB1YmxpYyBfcm93QWN0aW9uQ2xpY2soYWN0aW9uOiBUYWJsZVJvd0FjdGlvbiwgcm93SW5kZXg/OiBudW1iZXIpIHtcblx0XHRpZiAoYWN0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGlvbi5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFhY3Rpb24uYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnR5cGUgPT09IFwibXVsdGlcIiB8fFxuXHRcdFx0KGFjdGlvbi50eXBlID09PSBcImJvdGhcIiAmJiByb3dJbmRleCA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9uLmFjdGlvbi5lbWl0KHtcblx0XHRcdFx0aXRlbXM6IHRoaXMuc2VsZWN0ZWRSb3dzLFxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnJvdXRlckxpbmsgfHxcblx0XHRcdChBcnJheS5pc0FycmF5KGFjdGlvbi5yb3V0ZXJMaW5rKSAmJiBhY3Rpb24ucm91dGVyTGluay5sZW5ndGgpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbSA9XG5cdFx0XHRyb3dJbmRleCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF1cblx0XHRcdFx0OiB0aGlzLnNlbGVjdGVkUm93c1swXTtcblx0XHRhY3Rpb24uYWN0aW9uLmVtaXQoe1xuXHRcdFx0aXRlbSxcblx0XHRcdG11bHRpOiBmYWxzZSxcblx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2ZpbmRSb3coZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG5cdFx0aWYgKCFlbCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJwLXRhYmxlLXJvd1wiKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlzLWFjdGlvblwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0ZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1pcy1hY3Rpb25cIikgIT09IFwiZmFsc2VcIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJwLXRhYmxlLXJvd1wiKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZmluZFJvd0FjdGlvbihlbD8ucGFyZW50RWxlbWVudCk7XG5cdH1cblxuXHRwcml2YXRlIF9zZXRSb3dTZWxlY3Rpb25EYXRhKCkge1xuXHRcdGlmICh0aGlzLl9yZXNpemVUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplVGltZW91dCBhcyBudW1iZXIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIGFkZCBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIGl0J3MgYSBsb3QgZWFzaWVyIG9uIHRoZSBtYWNoaW5lIHRvIGRvIHRoZXNlIHdoZW4gc29tZW9uZSBpcyBkb25lXG5cdFx0Ly8gcmVzaXppbmcgYW5kIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlaXIgYnJvd3NlclxuXHRcdHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1vYmlsZSA9IGlzTW9iaWxlKCk7XG5cdFx0XHR0aGlzLmlzTW9iaWxlJC5uZXh0KG1vYmlsZSk7XG5cblx0XHRcdGNvbnN0IGFjdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuX3Jvd0FjdGlvbnMpIGFzIFRhYmxlUm93QWN0aW9uW107XG5cblx0XHRcdGlmICh0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgc3Vic2NyaXB0aW9uIG9mIHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zKSB7XG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMgPSBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PlxuXHRcdFx0XHRhY3Rpb24uX2xvYWRpbmdDaGFuZ2VkXG5cdFx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG5cdFx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCkpLFxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gd2UgaGFjayB0aGlzIHRvIGFueVtdIHRvIG1ha2UgaXQgd29yay4uXG5cdFx0XHRjb25zdCByb3dBY3Rpb25zUm93ID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdChhKSA9PiBhLnR5cGUgPT09IFwiYm90aFwiIHx8IGEudHlwZSA9PT0gXCJzaW5nbGVcIixcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByb3dBY3Rpb25zRmxvYXRpbmcgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0KGEpID0+XG5cdFx0XHRcdFx0KHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uICYmXG5cdFx0XHRcdFx0XHQoYS50eXBlID09PSBcImJvdGhcIiB8fCBhLnR5cGUgPT09IFwibXVsdGlcIikpIHx8XG5cdFx0XHRcdFx0KG1vYmlsZSAmJiBhLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIWEucm91dGVyTGluayksXG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgcm93U2VsZWN0aW9uTGltaXQgPSB0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtb2JpbGUgJiYgLy8gd2UncmUgbW9iaWxlXG5cdFx0XHRcdHJvd0FjdGlvbnNGbG9hdGluZz8ubGVuZ3RoICYmIC8vIHdlIGhhdmUgYXRsZWFzdCAxIGl0ZW0gaW4gX3Jvd0FjdGlvbnNGbG9hdGluZ1xuXHRcdFx0XHQoKHJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHx8XG5cdFx0XHRcdFx0IXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJvd1NlbGVjdGlvbkxpbWl0ID0gMTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9IHJvd1NlbGVjdGlvbkxpbWl0O1xuXG5cdFx0XHRsZXQgZW5hYmxlUm93U2VsZWN0aW9uID0gdGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb247XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1vYmlsZSAmJiAvLyB3ZSdyZSBtb2JpbGVcblx0XHRcdFx0cm93QWN0aW9uc0Zsb2F0aW5nPy5sZW5ndGggJiYgLy8gd2UgaGF2ZSBhdGxlYXN0IDEgaXRlbSBpbiBfcm93QWN0aW9uc0Zsb2F0aW5nXG5cdFx0XHRcdCFlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdCkge1xuXHRcdFx0XHRlbmFibGVSb3dTZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gPSBlbmFibGVSb3dTZWxlY3Rpb247XG5cblx0XHRcdHRoaXMucm93QWN0aW9uc1JvdyQubmV4dChyb3dBY3Rpb25zUm93KTtcblx0XHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nQWxsJC5uZXh0KHJvd0FjdGlvbnNGbG9hdGluZyk7XG5cblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kXG5cdFx0XHRcdC5waXBlKFxuXHRcdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdFx0ZmlsdGVyKCh2KSA9PiAhIXYpLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpKTtcblx0XHR9LCAyMDApO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2hvd0Zsb2F0aW5nTWVudSgpIHtcblx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZ0FsbCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGFjdGlvbnMpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9PT0gMSAmJlxuXHRcdFx0XHRhY3Rpb25zLmZpbmRJbmRleChcblx0XHRcdFx0XHQoYSkgPT4gKGEudHlwZSA9PT0gXCJzaW5nbGVcIiB8fCBhLnR5cGUgPT09IFwiYm90aFwiKSAmJiBhLnNob3dGdW5jdGlvbixcblx0XHRcdFx0KSA+PSAwXG5cdFx0XHQpIHtcblx0XHRcdFx0YWN0aW9ucyA9IGFjdGlvbnMuZmlsdGVyKFxuXHRcdFx0XHRcdChhKSA9PlxuXHRcdFx0XHRcdFx0YS50eXBlID09PSBcIm11bHRpXCIgfHxcblx0XHRcdFx0XHRcdCFhLnNob3dGdW5jdGlvbiB8fFxuXHRcdFx0XHRcdFx0YS5zaG93RnVuY3Rpb24odGhpcy5zZWxlY3RlZFJvd3NbMF0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZyQubmV4dChhY3Rpb25zKTtcblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kLm5leHQodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25zKFxuXHRcdGRlZmluaXRpb25zQXJyYXk6IFRhYmxlQ29sdW1uW10gfCBUYWJsZUV4dHJhSGVhZGVyW10sXG5cdCkge1xuXHRcdHJldHVybiBkZWZpbml0aW9uc0FycmF5Lm1hcCgoZGVmaW5pdGlvbikgPT5cblx0XHRcdHRoaXMuX3BhcnNlRGVmaW5pdGlvblNpemVzKGRlZmluaXRpb24pLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uOiBUYWJsZUNvbHVtbiB8IFRhYmxlRXh0cmFIZWFkZXIpIHtcblx0XHRjb25zdCBkZWZpbml0aW9uQW55ID0gZGVmaW5pdGlvbiBhcyBhbnk7XG5cdFx0bGV0IHBhcnNlZFNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiBcImZ1bGxcIiB9O1xuXG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIHNpemVdIG9mIHRhYmxlQ29sdW1TaXplc09wdGlvbnMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwiYXV0b1wiIHx8XG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwiaGlkZGVuXCIgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gXCJmdWxsXCIgfHxcblx0XHRcdFx0dHlwZW9mIGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwibnVtYmVyXCJcblx0XHRcdCkge1xuXHRcdFx0XHRwYXJzZWRTaXplc1tzaXplXSA9XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gXCJhdXRvXCIgPyBcImZ1bGxcIiA6IGRlZmluaXRpb25Bbnkuc2l6ZXM7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJzZWRTaXplc1tzaXplXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXNbc2l6ZV0gPz9cblx0XHRcdFx0cGFyc2VkU2l6ZXNbdGFibGVDb2x1bVNpemVzT3B0aW9uc1tpbmRleCAtIDFdXTtcblx0XHR9XG5cblx0XHRkZWZpbml0aW9uLnBhcnNlZFNpemVzID0gcGFyc2VkU2l6ZXM7XG5cdFx0cmV0dXJuIGRlZmluaXRpb247XG5cdH1cblxuXHRwcml2YXRlIF9jaGVja0NoYW5nZXNTdWJzY3JpcHRpb25zKCkge1xuXHRcdGlmICghdGhpcy5fcm93Q2hhbmdlc1N1YnNjcmlwdGlvbiAmJiB0aGlzLnRhYmxlUm93cykge1xuXHRcdFx0dGhpcy5fcm93Q2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVSb3dzLmNoYW5nZXNcblx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRlYm91bmNlVGltZSgxMDApKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX2NlbGxDaGFuZ2VzU3Vic2NyaXB0aW9uICYmIHRoaXMudGFibGVDZWxscykge1xuXHRcdFx0dGhpcy5fY2VsbENoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ2VsbHMuY2hhbmdlc1xuXHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGVib3VuY2VUaW1lKDEwMCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnRhYmxlQ2VsbHMgfHwgIXRoaXMudGFibGVSb3dzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0KTtcblx0XHRcdHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQgPSAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlUm93cy5tYXAoXG5cdFx0XHQoYykgPT4gYy5uYXRpdmVFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsXG5cdFx0KTtcblx0XHRjb25zdCBjZWxscyA9IHJvd3MuZmxhdE1hcChcblx0XHRcdChyb3cpID0+XG5cdFx0XHRcdEFycmF5LmZyb20ocm93LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwLXRhYmxlLWNlbGwtbmd4XCIpKSBhcyBIVE1MRWxlbWVudFtdLFxuXHRcdCk7XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cyk7XG5cblx0XHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykge1xuXHRcdFx0XHRpZiAoY2VsbC5zdHlsZS53aWR0aD8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y2VsbC5zdHlsZS53aWR0aCA9IFwidW5zZXRcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUpID0+XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVjdCA9IGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYHdpZHRoOiAke3JlY3Qud2lkdGh9cHggIWltcG9ydGFudGApO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LCAxMDApLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuXHRcdFx0dGhpcy5fc2V0Um93c1dpZHRoKHJvd3MsIFwibWluLWNvbnRlbnRcIik7XG5cblx0XHRcdHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oKTtcblx0XHR9LCAyMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2V0Um93c1dpZHRoKFxuXHRcdHJvd3M6IEhUTUxFbGVtZW50W10sXG5cdFx0dmFsdWU6IFwibWluLWNvbnRlbnRcIiB8IG51bGwgPSBudWxsLFxuXHQpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHJvdyA9IHJvd3NbaV07XG5cblx0XHRcdGNvbnN0IHNoYWRvdyA9IHJvdy5zaGFkb3dSb290O1xuXHRcdFx0aWYgKCFzaGFkb3cpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpcnN0RGl2ID0gc2hhZG93LnF1ZXJ5U2VsZWN0b3IoXCIqOm50aC1jaGlsZCgxKVwiKTtcblx0XHRcdGlmICghZmlyc3REaXYpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlY29uZERpdiA9IGZpcnN0RGl2LnF1ZXJ5U2VsZWN0b3IoXCIqOm50aC1jaGlsZCgxKVwiKTtcblx0XHRcdGlmICghc2Vjb25kRGl2KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Zmlyc3REaXYuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJcIik7XG5cdFx0XHRcdHNlY29uZERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIlwiKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpcnN0RGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6IG1pbi1jb250ZW50O1wiKTtcblx0XHRcdHNlY29uZERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiBtaW4tY29udGVudDtcIik7XG5cblx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuX3RvdGFsV2lkdGggPSBmaXJzdERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9yZXNldFNjcm9sbFBvc2l0aW9uKCkge1xuXHRcdGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuXHRcdFx0dGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0cnVlKTtcblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxFbmQkLm5leHQoZmFsc2UpO1xuXG5cdFx0dGhpcy5fY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oe1xuXHRcdFx0dGFyZ2V0OiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oeyB0YXJnZXQgfTogeyB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50IH0pIHtcblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0YXJnZXQuc2Nyb2xsTGVmdCA8IDEwKTtcblxuXHRcdGNvbnN0IHJpZ2h0ID0gdGFyZ2V0LnNjcm9sbExlZnQgKyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0dGhpcy5yZWFjaGVkU2Nyb2xsRW5kJC5uZXh0KHJpZ2h0ID4gdGhpcy5fdG90YWxXaWR0aCAtIDEwKTtcblx0fVxuXG5cdHByaXZhdGUgX2NoZWNrVGhlbWUodmFsdWU6IFwiZGFya1wiIHwgXCJsaWdodFwiKSB7XG5cdFx0aWYgKHRoaXMuX3RoZW1lRGVib3VuY2UpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl90aGVtZURlYm91bmNlKTtcblx0XHRcdHRoaXMuX3RoZW1lRGVib3VuY2UgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGhlbWVEZWJvdW5jZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy50aGVtZSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdH0sIDEwMCk7XG5cdH1cbn1cbiIsIjxwLXRhYmxlLWNvbnRhaW5lcj5cblx0PHAtdGFibGUtaGVhZGVyXG5cdFx0Km5nSWY9XCJlbmFibGVIZWFkZXJcIlxuXHRcdGNsYXNzPVwibWItOFwiXG5cdFx0W3F1aWNrRmlsdGVyc109XCJxdWlja0ZpbHRlcnNcIlxuXHRcdFthY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJdPVwiYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXCJcblx0XHQocXVpY2tGaWx0ZXIpPVwib25RdWlja0ZpbHRlcigkZXZlbnQpXCJcblx0XHRbZW5hYmxlU2VhcmNoXT1cImVuYWJsZVNlYXJjaFwiXG5cdFx0W3F1ZXJ5XT1cInF1ZXJ5XCJcblx0XHQocXVlcnlDaGFuZ2UpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcblx0XHRbZW5hYmxlRmlsdGVyXT1cImVuYWJsZUZpbHRlclwiXG5cdFx0W2VuYWJsZUZpbHRlckRlc2t0b3BdPVwiZW5hYmxlRmlsdGVyRGVza3RvcFwiXG5cdFx0W3NlbGVjdGVkRmlsdGVyc0Ftb3VudF09XCJzZWxlY3RlZEZpbHRlcnNBbW91bnRcIlxuXHRcdFtmaWx0ZXJCdXR0b25UZW1wbGF0ZV09XCJmaWx0ZXJCdXR0b25UZW1wbGF0ZVwiXG5cdFx0KGZpbHRlcik9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQodHJ1ZSlcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZW5hYmxlQWN0aW9uXCJcblx0XHRbY2FuVXNlQWN0aW9uXT1cImFjdGlvbkJ1dHRvbkVuYWJsZWRcIlxuXHRcdFthY3Rpb25CdXR0b25UZW1wbGF0ZV09XCJhY3Rpb25CdXR0b25UZW1wbGF0ZVwiXG5cdFx0W2FjdGlvbkxvYWRpbmddPVwiYWN0aW9uQnV0dG9uTG9hZGluZ1wiXG5cdFx0W2FjdGlvblRleHRdPVwiYWN0aW9uQnV0dG9uVGV4dFwiXG5cdFx0W2FjdGlvbkljb25dPVwiYWN0aW9uQnV0dG9uSWNvblwiXG5cdFx0KGFjdGlvbik9XCJhY3Rpb24uZW1pdCgpXCJcblx0XHRbaXRlbXNTZWxlY3RlZEFtb3VudF09XCJzZWxlY3RlZFJvd3MubGVuZ3RoXCJcblx0XHRbZW5hYmxlRXhwb3J0XT1cImVuYWJsZUV4cG9ydFwiXG5cdFx0KGV4cG9ydCk9XCJleHBvcnQuZW1pdCgpXCJcblx0XHRbbG9hZGluZ109XCJoZWFkZXJMb2FkaW5nXCJcblx0PlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCJcblx0XHRcdD48L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21BY3Rpb25zVGVtcGxhdGVcIj5cblx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0Km5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJDdXN0b21BY3Rpb25zVGVtcGxhdGVcIlxuXHRcdFx0PjwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHQ8L3AtdGFibGUtaGVhZGVyPlxuXG5cdDxkaXZcblx0XHRjbGFzcz1cInJlbGF0aXZlIGZsZXgtMVwiXG5cdFx0Km5nSWY9XCJlbmFibGVTY3JvbGw7IGVsc2Ugcm93c1RlbXBsYXRlXCJcblx0PlxuXHRcdDxkaXZcblx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy14LWF1dG9cIlxuXHRcdFx0I3Njcm9sbENvbnRhaW5lclxuXHRcdFx0W2NsYXNzXT1cIlxuXHRcdFx0XHRjbihcblx0XHRcdFx0XHQnYmVmb3JlOmFic29sdXRlIGJlZm9yZTp0b3AtMCBiZWZvcmU6bGVmdC0wIGJlZm9yZTp6LVsxXSBiZWZvcmU6cG9pbnRlci1ldmVudHMtbm9uZScsXG5cdFx0XHRcdFx0J2JlZm9yZTp3LTI0IGJlZm9yZTpoLWZ1bGwgYmVmb3JlOnRyYW5zaXRpb24tb3BhY2l0eScsXG5cdFx0XHRcdFx0J2JlZm9yZTpiZy1ncmFkaWVudC10by1yIGJlZm9yZTpmcm9tLXdoaXRlIGRhcms6YmVmb3JlOmZyb20taHVycmljYW5lLTcwMCBiZWZvcmU6dmlhLXdoaXRlLzgwIGRhcms6YmVmb3JlOnZpYS1odXJyaWNhbmUtNzAwLzkwIGJlZm9yZTp0by10cmFuc3BhcmVudCcsXG5cdFx0XHRcdFx0J2FmdGVyOmFic29sdXRlIGFmdGVyOnRvcC0wIGFmdGVyOnJpZ2h0LTAgYWZ0ZXI6ei1bMF0gYmVmb3JlOnBvaW50ZXItZXZlbnRzLW5vbmUnLFxuXHRcdFx0XHRcdCdhZnRlcjp3LTI0IGFmdGVyOmgtZnVsbCBhZnRlcjp0cmFuc2l0aW9uLW9wYWNpdHknLFxuXHRcdFx0XHRcdCdhZnRlcjpiZy1ncmFkaWVudC10by1sIGFmdGVyOmZyb20td2hpdGUgYWZ0ZXI6ZGFyazpmcm9tLWh1cnJpY2FuZS03MDAgYWZ0ZXI6dmlhLXdoaXRlLzgwIGRhcms6YWZ0ZXI6dmlhLWh1cnJpY2FuZS03MDAvOTAgYWZ0ZXI6dG8tdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCdiZWZvcmU6b3BhY2l0eS0wJzogcmVhY2hlZFNjcm9sbFN0YXJ0JCB8IGFzeW5jLFxuXHRcdFx0XHRcdFx0J2FmdGVyOm9wYWNpdHktMCc6IHJlYWNoZWRTY3JvbGxFbmQkIHwgYXN5bmMsXG5cdFx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdFx0J2FmdGVyOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxFbmQkIHwgYXN5bmMpID09PSBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KVxuXHRcdFx0XCJcblx0XHRcdChzY3JvbGwpPVwib25Db250YWluZXJYU2Nyb2xsKCRldmVudClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUZsb2F0aW5nTWVudSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cIj5cblx0XHQ8cC1mbG9hdGluZy1tZW51LWNvbnRhaW5lclxuXHRcdFx0W3VzZWRJblRhYmxlXT1cInRydWVcIlxuXHRcdFx0W2NsYXNzXT1cIlxuXHRcdFx0XHRmbG9hdGluZ01lbnVDb250YWluZXJDbGFzcyh7XG5cdFx0XHRcdFx0aGFzRm9vdGVyOiBlbmFibGVGb290ZXIgJiYgKGZvb3RlckhpZGRlbiQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdGFjdGl2ZTogc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAsXG5cdFx0XHRcdFx0c2hvd246ICRhbnkoZmxvYXRpbmdNZW51U2hvd24kIHwgYXN5bmMpXG5cdFx0XHRcdH0pXG5cdFx0XHRcIlxuXHRcdFx0W2Ftb3VudF09XCJmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHRcIlxuXHRcdFx0W2VuYWJsZUFtb3VudFNlbGVjdGVkXT1cIiEhKHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luYyk/Lmxlbmd0aFwiXG5cdFx0XHQoY2xvc2UpPVwiX3NlbGVjdEFsbENoYW5nZShudWxsLCBmYWxzZSlcIlxuXHRcdD5cblx0XHRcdDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuXHRcdFx0XHQqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luY1wiXG5cdFx0XHRcdHNsb3Q9XCJmbG9hdGluZy1tZW51LWl0ZW1cIlxuXHRcdFx0XHRbZGlzYWJsZWRdPVwiXG5cdFx0XHRcdFx0KGFjdGlvblsndHlwZSddID09PSAnc2luZ2xlJyAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMSkgfHxcblx0XHRcdFx0XHRhY3Rpb25bJ2Rpc2FibGVkJ11cblx0XHRcdFx0XCJcblx0XHRcdFx0W2xvYWRpbmddPVwiYWN0aW9uWydsb2FkaW5nJ11cIlxuXHRcdFx0XHRbaWNvbl09XCJhY3Rpb25bJ2ljb24nXVwiXG5cdFx0XHRcdFtpY29uUm90YXRlXT1cImFjdGlvblsnaWNvblJvdGF0ZSddXCJcblx0XHRcdFx0W2ljb25GbGlwXT1cImFjdGlvblsnaWNvbkZsaXAnXVwiXG5cdFx0XHRcdChjbGljayk9XCJfcm93QWN0aW9uQ2xpY2soYWN0aW9uKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGFjdGlvblsnbGFiZWwnXSB9fVxuXHRcdFx0PC9wLWZsb2F0aW5nLW1lbnUtaXRlbT5cblx0XHQ8L3AtZmxvYXRpbmctbWVudS1jb250YWluZXI+XG5cdDwvbmctY29udGFpbmVyPlxuXG5cdDxwLXRhYmxlLWZvb3RlclxuXHRcdCpuZ0lmPVwiZW5hYmxlRm9vdGVyXCJcblx0XHRbaGlkZU9uU2luZ2xlUGFnZV09XCJoaWRlT25TaW5nbGVQYWdlXCJcblx0XHRbZW5hYmxlUGFnaW5hdGlvblNpemVdPVwiZW5hYmxlUGFnaW5hdGlvblNpemVcIlxuXHRcdFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG5cdFx0W3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuXHRcdChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVQYWdpbmF0aW9uUGFnZXNdPVwiZW5hYmxlUGFnaW5hdGlvblBhZ2VzXCJcblx0XHRbcGFnZV09XCJwYWdlXCJcblx0XHRbdG90YWxdPVwidG90YWxcIlxuXHRcdChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcblx0XHRbbG9hZGluZ109XCJmb290ZXJMb2FkaW5nXCJcblx0XHQoaGlkZGVuQ2hhbmdlKT1cImZvb3RlckhpZGRlbiQubmV4dCgkZXZlbnQuZGV0YWlsKVwiXG5cdFx0W3RhYmxlSGVhZGVySGFzQWN0aW9uXT1cImVuYWJsZUhlYWRlciAmJiBlbmFibGVBY3Rpb24gJiYgYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG5cdD48L3AtdGFibGUtZm9vdGVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNyb3dzVGVtcGxhdGU+XG5cdDxwLXRhYmxlLXJvd1xuXHRcdCpuZ0lmPVwiKGV4dHJhSGVhZGVycyQgfCBhc3luYyk/Lmxlbmd0aFwiXG5cdFx0dmFyaWFudD1cImhlYWRlci1zZWNvbmRhcnlcIlxuXHRcdGNsYXNzTmFtZT1cInotWzJdXCJcblx0XHRbaXNMYXN0XT1cInRydWVcIlxuXHQ+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGV4dHJhSGVhZGVycyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJoZWFkZXItc2Vjb25kYXJ5XCJcblx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0W2NoZWNrYm94T2Zmc2V0XT1cImluZGV4ID09PSAwICYmIGVuYWJsZVJvd1NlbGVjdGlvblwiXG5cdFx0XHRcdFtzY3JvbGxhYmxlXT1cInRoaXMuZW5hYmxlU2Nyb2xsXCJcblx0XHRcdD5cblx0XHRcdFx0PGI+e3sgY29sLm5hbWUgfX08L2I+XG5cdFx0XHQ8L3AtdGFibGUtY2VsbC1uZ3g+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdDwvcC10YWJsZS1yb3c+XG5cblx0PHAtdGFibGUtcm93IHZhcmlhbnQ9XCJoZWFkZXJcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1ucyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIj5cblx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFt2YWx1ZV09XCJjb2wubmFtZVwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJoZWFkZXJcIlxuXHRcdFx0XHRbaW5kZXhdPVwiaW5kZXhcIlxuXHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFwiXG5cdFx0XHRcdFtzY3JvbGxhYmxlXT1cInRoaXMuZW5hYmxlU2Nyb2xsXCJcblx0XHRcdD48L3AtdGFibGUtY2VsbC1uZ3g+XG5cdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdDxwLWNoZWNrYm94XG5cdFx0XHRcdFx0KGNoZWNrZWRDaGFuZ2UpPVwiX3NlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCJcblx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnNBbGwoKVwiXG5cdFx0XHRcdFx0W2luZGV0ZXJtaW5hdGVdPVwiX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKVwiXG5cdFx0XHRcdFx0W2NsYXNzLm9wYWNpdHktMF09XCJyb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwicm93U2VsZWN0aW9uTGltaXQgIT09IHVuZGVmaW5lZFwiXG5cdFx0XHRcdD48L3AtY2hlY2tib3g+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHQ8L3AtdGFibGUtcm93PlxuXG5cdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBmbGV4LWNvbFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGNvbnRlbnRUZW1wbGF0ZVwiPlxuXHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdCpuZ0Zvcj1cImxldCByIG9mIGxvYWRpbmdSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG5cdFx0XHRcdGNsYXNzPVwiZ3JvdXBcIlxuXHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdFx0W2lzTGFzdF09XCJyb3dJbmRleCA9PT0gbG9hZGluZ1Jvd3MubGVuZ3RoIC0gMVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0XHRcdDxwLXRhYmxlLWNlbGwtbmd4XG5cdFx0XHRcdFx0XHRbZGVmaW5pdGlvbl09XCJjb2xcIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImxvYWRpbmdcIlxuXHRcdFx0XHRcdFx0W2NoZWNrYm94XT1cIlxuXHRcdFx0XHRcdFx0XHQoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFx0XHRbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuXHRcdFx0XHRcdFx0W3Njcm9sbGFibGVdPVwidGhpcy5lbmFibGVTY3JvbGxcIlxuXHRcdFx0XHRcdD48L3AtdGFibGUtY2VsbC1uZ3g+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PHAtbG9hZGVyXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiaC02IHctNiByb3VuZGVkXCJcblx0XHRcdFx0XHRcdD48L3AtbG9hZGVyPlxuXHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0PC9wLXRhYmxlLXJvdz5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcnNlZEl0ZW1zPy5sZW5ndGg7IGVsc2UgZW1wdHlTdGF0ZVRlbXBsYXRlXCI+XG5cdFx0XHRcdDxwLXRhYmxlLXJvd1xuXHRcdFx0XHRcdCpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhcnNlZEl0ZW1zOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJncm91cFwiXG5cdFx0XHRcdFx0W2VuYWJsZUhvdmVyXT1cImVuYWJsZVJvd1NlbGVjdGlvbiB8fCBlbmFibGVSb3dDbGlja1wiXG5cdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0W2lzTGFzdF09XCJyb3dJbmRleCA9PT0gcGFyc2VkSXRlbXMubGVuZ3RoIC0gMVwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIl9yb3dDbGljaygkZXZlbnQsIHJvd0luZGV4KVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0XHQqbmdJZj1cIlxuXHRcdFx0XHRcdFx0XHRwYXJzZVJvd0FjdGlvbnNSb3coXG5cdFx0XHRcdFx0XHRcdFx0cm93QWN0aW9uc1JvdyQgfCBhc3luYyxcblx0XHRcdFx0XHRcdFx0XHRyb3dJbmRleFxuXHRcdFx0XHRcdFx0XHQpIGFzIHJvd0FjdGlvbnNSb3dcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFx0XHRbZGVmaW5pdGlvbl09XCJjb2xcIlxuXHRcdFx0XHRcdFx0XHRcdFtpdGVtXT1cIml0ZW1cIlxuXHRcdFx0XHRcdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IGNoZWNrYm94VGVtcGxhdGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFx0XHRcdFx0W3Jvd0luZGV4XT1cInJvd0luZGV4XCJcblx0XHRcdFx0XHRcdFx0XHRbdGVtcGxhdGVdPVwiY29sLnRlbXBsYXRlXCJcblx0XHRcdFx0XHRcdFx0XHRbc2Nyb2xsYWJsZV09XCJ0aGlzLmVuYWJsZVNjcm9sbFwiXG5cdFx0XHRcdFx0XHRcdD48L3AtdGFibGUtY2VsbC1uZ3g+XG5cblx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNjaGVja2JveFRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0XHRcdDxwLWNoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHQoY2hlY2tlZENoYW5nZSk9XCJfY2hlY2tib3hDaGFuZ2UoJGV2ZW50LnRhcmdldCwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJfY2hlY2tib3hEaXNhYmxlZChpdGVtLCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0PjwvcC1jaGVja2JveD5cblx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0XHRcdFx0XHQ8cC10YWJsZS1yb3ctYWN0aW9ucy1jb250YWluZXJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCIhIXJvd0FjdGlvbnNSb3c/Lmxlbmd0aCAmJiAhKGlzTW9iaWxlJCB8IGFzeW5jKVwiXG5cdFx0XHRcdFx0XHRcdFtjaGVja2VkXT1cIl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRzbG90PVwiYWN0aW9uc1wiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dBY3Rpb25zUm93XCI+XG5cdFx0XHRcdFx0XHRcdFx0PHAtdG9vbHRpcFxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnNob3dGdW5jdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gYWN0aW9uLnNob3dGdW5jdGlvbihwYXJzZWRJdGVtc1tyb3dJbmRleF0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2NvbnRlbnRdPVwiYWN0aW9uWydsYWJlbCddXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1pcy1hY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNsb3Q9XCJ0cmlnZ2VyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwiYWN0aW9uWydpY29uJ11cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbaWNvblJvdGF0ZV09XCJhY3Rpb25bJ2ljb25Sb3RhdGUnXVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGljb25GbGlwPVwiYWN0aW9uLmljb25GbGlwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2xvYWRpbmddPVwiYWN0aW9uWydsb2FkaW5nJ11cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiYWN0aW9uWydkaXNhYmxlZCddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W3JvdXRlckxpbmtdPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnJvdXRlckxpbmtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKF9nZXRBY3Rpb25Sb3V0ZXJMaW5rKGFjdGlvbi5yb3V0ZXJMaW5rLCByb3dJbmRleClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfCBhc3luYylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcXVlcnlQYXJhbXNdPVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uLnF1ZXJ5UGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IChfZ2V0QWN0aW9uUXVlcnlQYXJhbXMoYWN0aW9uLnF1ZXJ5UGFyYW1zLCByb3dJbmRleClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgfCBhc3luYylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQob25DbGljayk9XCJfcm93QWN0aW9uQ2xpY2soYWN0aW9uLCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvcC1idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0PC9wLXRvb2x0aXA+XG5cdFx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PC9wLXRhYmxlLXJvdy1hY3Rpb25zLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PC9wLXRhYmxlLXJvdz5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjdXN0b21Sb3cgb2YgY3VzdG9tUm93c1wiPlxuXHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdFt2YXJpYW50XT1cImN1c3RvbVJvdy52YXJpYW50XCJcblx0XHRcdFx0W2NsYXNzXT1cIntcblx0XHRcdFx0XHQnei1bMl0nOiBjdXN0b21Sb3cudmFyaWFudCA9PT0gJ3NlY29uZGFyeSdcblx0XHRcdFx0fVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Sb3cudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvcC10YWJsZS1yb3c+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck1vZGFsVGVtcGxhdGVcIj5cblx0PHAtbW9kYWxcblx0XHRbaGVhZGVyXT1cImZpbHRlck1vZGFsSGVhZGVyVGV4dFwiXG5cdFx0W3Nob3ddPVwiZmlsdGVyTW9kYWxTaG93JCB8IGFzeW5jXCJcblx0XHQoY2xvc2VkKT1cImZpbHRlck1vZGFsU2hvdyQubmV4dChmYWxzZSlcIlxuXHQ+XG5cdFx0PGRpdlxuXHRcdFx0c2xvdD1cImNvbnRlbnRcIlxuXHRcdFx0Y2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC02XCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyTW9kYWxUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXZcblx0XHRcdHNsb3Q9XCJmb290ZXJcIlxuXHRcdFx0Y2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIlxuXHRcdD5cblx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHQqbmdJZj1cImZpbHRlck1vZGFsU2hvd1Jlc2V0TW9iaWxlXCJcblx0XHRcdFx0Y2xhc3M9XCJmbGV4IHctZnVsbCB0YWJsZXQ6dy1hdXRvIGRlc2t0b3AteHM6aGlkZGVuXCJcblx0XHRcdFx0dmFyaWFudD1cInNlY29uZGFyeVwiXG5cdFx0XHRcdChvbkNsaWNrKT1cIm9uRmlsdGVyTW9kYWxSZXNldCh0cnVlKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGZpbHRlck1vZGFsUmVzZXRUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdCpuZ0lmPVwiZmlsdGVyTW9kYWxTaG93UmVzZXRcIlxuXHRcdFx0XHRjbGFzcz1cImhpZGRlbiB3LWZ1bGwgdGFibGV0OnctYXV0byBkZXNrdG9wLXhzOmZsZXhcIlxuXHRcdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdFx0KG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFJlc2V0KClcIlxuXHRcdFx0PlxuXHRcdFx0XHR7eyBmaWx0ZXJNb2RhbFJlc2V0VGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRjbGFzcz1cIm1sLWF1dG8gdy1mdWxsIHRhYmxldDp3LWF1dG9cIlxuXHRcdFx0XHRpY29uPVwiY2hlY2ttYXJrXCJcblx0XHRcdFx0KG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFNhdmUoKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGZpbHRlck1vZGFsU2F2ZVRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0PC9kaXY+XG5cdDwvcC1tb2RhbD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5U3RhdGVUZW1wbGF0ZT5cblx0PHAtZW1wdHktc3RhdGVcblx0XHQqbmdJZj1cImVtcHR5U3RhdGVUeXBlID09PSAnZmlsdGVyZWQnOyBlbHNlIGVtcHR5U3RhdGVOb25GaWx0ZXJUZW1wbGF0ZVwiXG5cdFx0Y2xhc3M9XCJteS0xNiBzZWxmLWNlbnRlclwiXG5cdFx0W2lsbHVzdHJhdGlvbl09XCJlbXB0eVN0YXRlRmlsdGVyZWRJbGx1c3RyYXRpb25cIlxuXHRcdFtoZWFkZXJdPVwiZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyXCJcblx0XHRbY29udGVudF09XCJlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50XCJcblx0XHRbZW5hYmxlQWN0aW9uXT1cImZhbHNlXCJcblx0PjwvcC1lbXB0eS1zdGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZU5vbkZpbHRlclRlbXBsYXRlPlxuXHQ8cC1lbXB0eS1zdGF0ZVxuXHRcdGNsYXNzPVwibXktMTYgc2VsZi1jZW50ZXJcIlxuXHRcdFtpbGx1c3RyYXRpb25dPVwiZW1wdHlTdGF0ZUlsbHVzdHJhdGlvblwiXG5cdFx0W2hlYWRlcl09XCJlbXB0eVN0YXRlSGVhZGVyXCJcblx0XHRbY29udGVudF09XCJlbXB0eVN0YXRlQ29udGVudFwiXG5cdFx0W2VuYWJsZUFjdGlvbl09XCJlbmFibGVFbXB0eVN0YXRlQWN0aW9uXCJcblx0XHRbYWN0aW9uVGV4dF09XCJlbXB0eVN0YXRlQWN0aW9uXCJcblx0XHRbYWN0aW9uSWNvbl09XCJlbXB0eVN0YXRlQWN0aW9uSWNvblwiXG5cdFx0KGFjdGlvbik9XCJlbXB0eVN0YXRlQ2xpY2tlZCgpXCJcblx0PjwvcC1lbXB0eS1zdGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
1006
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhcGVybGVzcy9zcmMvbGliL21vZHVsZXMvdGFibGUvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTixFQUFFLEVBQ0YsMEJBQTBCLEVBQzFCLFFBQVEsRUFDUixhQUFhLEVBR2IsS0FBSyxFQUNMLHNCQUFzQixHQUN0QixNQUFNLGlCQUFpQixDQUFDO0FBTXpCLE9BQU8sRUFDTixlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBRU4sSUFBSSxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFDTiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMv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QUUsQ0FBQyxRQUFRLENBQUM7Z0JBVTFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdENvbnRlbnRDaGlsZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRFbGVtZW50UmVmLFxuXHRFdmVudEVtaXR0ZXIsXG5cdEhvc3RCaW5kaW5nLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRPbkNoYW5nZXMsXG5cdE9uSW5pdCxcblx0T3V0cHV0LFxuXHRRdWVyeUxpc3QsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5pbXBvcnQge1xuXHRjbixcblx0ZmxvYXRpbmdNZW51Q29udGFpbmVyQ2xhc3MsXG5cdGlzTW9iaWxlLFxuXHRvblN0YXRlQ2hhbmdlLFxuXHRRdWlja0ZpbHRlcixcblx0Um93Q2xpY2tFdmVudCxcblx0c3RhdGUsXG5cdHRhYmxlQ29sdW1TaXplc09wdGlvbnMsXG59IGZyb20gXCJAcGFwZXJsZXNzL2NvcmVcIjtcbmltcG9ydCB7XG5cdEljb25WYXJpYW50LFxuXHRJbGx1c3RyYXRpb25WYXJpYW50LFxuXHRUYWJsZUNvbHVtblNpemVzLFxufSBmcm9tIFwiQHBhcGVybGVzcy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHtcblx0QmVoYXZpb3JTdWJqZWN0LFxuXHRkZWJvdW5jZVRpbWUsXG5cdGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuXHRmaWx0ZXIsXG5cdFN1YnNjcmlwdGlvbixcblx0dGFrZSxcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFBUYWJsZVJvdyB9IGZyb20gXCIuLi8uLi8uLi8uLi9zdGVuY2lsL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7XG5cdFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSxcblx0VGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsXG5cdFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsXG59IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzXCI7XG5pbXBvcnQgeyBUYWJsZUN1c3RvbVJvd0RpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL3AtdGFibGUtY3VzdG9tLXJvdy5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gXCIuLi90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFibGVFeHRyYUhlYWRlciB9IGZyb20gXCIuLi90YWJsZS1leHRyYS1oZWFkZXIvdGFibGUtZXh0cmEtaGVhZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcblx0QXN5bmNJdGVtLFxuXHRUYWJsZVJvd0FjdGlvbixcblx0VGFibGVSb3dBY3Rpb25RdWVyeVBhcmFtcyxcblx0VGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxufSBmcm9tIFwiLi4vdGFibGUtcm93LWFjdGlvbi90YWJsZS1yb3ctYWN0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVmYXVsdFNpemUsIGRlZmF1bHRTaXplT3B0aW9ucyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5AVW50aWxEZXN0cm95KHsgY2hlY2tQcm9wZXJ0aWVzOiB0cnVlIH0pXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwicC10YWJsZS1uZ3hcIixcblx0dGVtcGxhdGVVcmw6IFwidGFibGUuY29tcG9uZW50Lmh0bWxcIixcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzc1wiKSBjbGFzc05hbWUgPSBcImZsZXggZmxleC1jb2wgei0wXCI7XG5cdEBIb3N0QmluZGluZyhcImF0dHIuZGF0YS10aGVtZVwiKSB0aGVtZSA9IHN0YXRlLnRoZW1lO1xuXG5cdC8qKlxuXHQgKiBUaGUgaXRlbXMgdG8gYmUgZmVkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0QElucHV0KCkgaXRlbXMhOiBzdHJpbmcgfCBhbnlbXTtcblxuXHQvKipcblx0ICogV2V0aGVyIGRhdGEgaXMgbG9hZGluZ1xuXHQgKi9cblx0QElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgc2hvdyBsb2FkaW5nIHN0YXRlXG5cdCAqL1xuXHRASW5wdXQoKSBoZWFkZXJMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZm9vdGVyIHNob3VsZCBzaG93IGxvYWRpbmcgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGZvb3RlckxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFtb3VudCBvZiBsb2FkaW5nIHJvd3MgdG8gc2hvd1xuXHQgKi9cblx0QElucHV0KCkgYW1vdW50T2ZMb2FkaW5nUm93czogbnVtYmVyID0gNjtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGVuYWJsZSBzZWxlY3Rpb25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVJvd1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEEgbGltaXQgdG8gdGhlIGFtb3VudCBvZiByb3dzIHRoYXQgY2FuIGJlIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSByb3dTZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHJvdyBjbGlja2luZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUm93Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgaXRlbXNcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZFJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEEga2V5IHRvIGRldGVybWluZSBpZiBhIHJvdyBjYW4gYmUgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIGNhblNlbGVjdEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVGbG9hdGluZ01lbnU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgZmxvYXRpbmcgbWVudSBhbW91bnQgaXRlbSB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHQ6IHN0cmluZyA9IFwiMCBpdGVtcyBzZWxlY3RlZFwiO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIGFtb3VudCBzZWxlY3RlZCBpdGVtIGluIHRoZSBmbG9hdGluZyBtZW51XG5cdCAqL1xuXHRASW5wdXQoKSBmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0aGUgZmxvYXRpbmcgbWVudSBoYXMgYmVlbiBzaG93biBhdGxlYXN0IG9uY2Vcblx0ICovXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVTaG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgYSByb3cgaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIGEgcm93IGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciBhIHJvdyBpcyBkZXNlbGVjdGVkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93RGVzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIFNUQVJUIEhFQURFUiAqL1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVyXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBRdWljayBmaWx0ZXJzIHRvIHNob3dcblx0ICovXG5cdEBJbnB1dCgpIHF1aWNrRmlsdGVyczogUXVpY2tGaWx0ZXJbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBBY3RpdmUgcXVpY2sgZmlsdGVyIGlkZW50aWZpZXJcblx0ICovXG5cdEBJbnB1dCgpIGFjdGl2ZVF1aWNrRmlsdGVySWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgcXVlcnkgdG8gc2hvdyBpbiB0aGUgc2VhcmNoIGJhclxuXHQgKi9cblx0QElucHV0KCkgcXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIGZpbHRlciBidXR0b25cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmaWx0ZXIgYnV0dG9uIG9uIGRlc2t0b3Bcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZpbHRlckRlc2t0b3A6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGZpbHRlcnMgYmVpbmcgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkRmlsdGVyc0Ftb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBmaWx0ZXIgYnV0dG9uIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIGZpbHRlckJ1dHRvblRlbXBsYXRlOiBhbnk7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBhY3Rpb24gYnV0dG9uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGxvYWRpbmdcblx0ICovXG5cdEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGFjdGlvbiBidXR0b24gaWNvblxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uSWNvbjogSWNvblZhcmlhbnQgPSBcInBlbmNpbFwiO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdGhlIGFjdGlvbiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFRoZSBhY3Rpb24gYnV0dG9uIHRleHQgaWYgY2hhbmdlZFxuXHQgKi9cblx0QElucHV0KCkgYWN0aW9uQnV0dG9uVGV4dD86IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHRlbXBsYXRlIGZvciB0aGUgYWN0aW9uIGJ1dHRvbiB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSBhY3Rpb25CdXR0b25UZW1wbGF0ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIG9uZSBvZiB0aGUgcXVpY2sgZmlsdGVycyBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgcXVpY2tGaWx0ZXI6IEV2ZW50RW1pdHRlcjxRdWlja0ZpbHRlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIHF1ZXJ5IGNoYW5nZXNcblx0ICovXG5cdEBPdXRwdXQoKSBxdWVyeUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW4gdGhlIGZpbHRlciBidXR0b24gaXMgY2xpY2tlZFxuXHQgKi9cblx0QE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWRcblx0ICovXG5cdEBPdXRwdXQoKSBhY3Rpb246IEV2ZW50RW1pdHRlcjxudWxsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogU1RBUlQgRk9PVEVSICovXG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBzaG93IHRoZSBmb290ZXJcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUZvb3RlcjogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgcGFnaW5hdGlvbiBzaXplIHNlbGVjdFxuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlUGFnaW5hdGlvblNpemU6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHBhZ2luYXRpb24gcGFnZXNcblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZVBhZ2luYXRpb25QYWdlczogYm9vbGVhbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFdldGhlciB0byBlbmFibGUgZXhwb3J0XG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVFeHBvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBwYWdlXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlOiBudW1iZXIgPSAxO1xuXG5cdC8qKlxuXHQgKiBUaGUgdG90YWwgYW1vdW50IG9mIGl0ZW1zXG5cdCAqL1xuXHRASW5wdXQoKSB0b3RhbCE6IG51bWJlcjtcblxuXHQvKipcblx0ICogRXZlbnQgd2hlbmV2ZXIgdGhlIHBhZ2UgY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIHBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgYW1vdW50IG9mIGl0ZW1zIHBlciBwYWdlXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gZGVmYXVsdFNpemU7XG5cblx0LyoqXG5cdCAqIFRoZSBvcHRpb25zIGZvciB0aGUgcGFnZSBzaXplXG5cdCAqL1xuXHRASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gZGVmYXVsdFNpemVPcHRpb25zO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCB3aGVuZXZlciB0aGUgcGFnZSBjaGFuZ2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgZXhwb3J0OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogV2V0aGVyIHRvIGhpZGUgd2hlbiB0aGVyZSBpcyBvbmx5IDEgcGFnZSBhdmFpbGFibGVcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVPblNpbmdsZVBhZ2U6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdC8qIEVtcHR5IHN0YXRlIHN0YXJ0ICovXG5cdEBJbnB1dCgpIGVtcHR5U3RhdGVUeXBlOiBcIm5vX2ZpbHRlclwiIHwgXCJmaWx0ZXJlZFwiID0gXCJub19maWx0ZXJcIjtcblxuXHRASW5wdXQoKSBlbXB0eVN0YXRlSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gXCJ0YWJsZVwiO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlQ29udGVudCE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbiE6IHN0cmluZztcblx0QElucHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkljb246IEljb25WYXJpYW50ID0gXCJwbHVzXCI7XG5cblx0QElucHV0KCkgZW5hYmxlRW1wdHlTdGF0ZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSWxsdXN0cmF0aW9uOiBJbGx1c3RyYXRpb25WYXJpYW50ID0gXCJzZWFyY2hcIjtcblx0QElucHV0KCkgZW1wdHlTdGF0ZUZpbHRlcmVkSGVhZGVyITogc3RyaW5nO1xuXHRASW5wdXQoKSBlbXB0eVN0YXRlRmlsdGVyZWRDb250ZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gZW5hYmxlIHNjcm9sbGluZ1xuXHQgKi9cblx0QElucHV0KCkgZW5hYmxlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cdEBWaWV3Q2hpbGRyZW4oUFRhYmxlUm93LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVSb3dzITogUXVlcnlMaXN0PFxuXHRcdEVsZW1lbnRSZWY8UFRhYmxlUm93PlxuXHQ+O1xuXHRAVmlld0NoaWxkcmVuKFRhYmxlQ2VsbCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRhYmxlQ2VsbHMhOiBRdWVyeUxpc3Q8XG5cdFx0RWxlbWVudFJlZjxUYWJsZUNlbGw+XG5cdD47XG5cdEBWaWV3Q2hpbGQoXCJzY3JvbGxDb250YWluZXJcIikgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cblx0cHVibGljIHJlYWNoZWRTY3JvbGxTdGFydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXHRwdWJsaWMgcmVhY2hlZFNjcm9sbEVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblx0cHJpdmF0ZSBfdG90YWxXaWR0aCA9IDA7XG5cdHByaXZhdGUgX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQ/OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcm93Q2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBfY2VsbENoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cblx0LyoqXG5cdCAqIEV2ZW50IHdoZW5ldmVyIHRoZSBlbXB0eSBzdGF0ZSBpcyBjbGlja2VkXG5cdCAqL1xuXHRAT3V0cHV0KCkgZW1wdHlTdGF0ZUFjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8bnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyogRW1wdHkgc3RhdGUgZW5kICovXG5cblx0Lypcblx0ICogV2V0aGVyIHRvIHNob3cgdGhlIHNoYWRvdyBvciBub3Rcblx0ICovXG5cdEBJbnB1dCgpIHNoYWRvdzogYm9vbGVhbiA9IHRydWU7XG5cblx0cHVibGljIGV4dHJhSGVhZGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG5cdHB1YmxpYyBjb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblx0cHVibGljIHBhcnNlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRwdWJsaWMgbG9hZGluZ1Jvd3MgPSBBcnJheS5mcm9tKHtcblx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0fSk7XG5cdHByaXZhdGUgX2N0cmxEb3duID0gZmFsc2U7XG5cblx0Ly8gQW5ndWxhciBzdHVmZlxuXHQvLyBjdXN0b20gZmlsdGVyIHRlbXBsYXRlXG5cdEBDb250ZW50Q2hpbGQoVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjdXN0b20gYWN0aW9ucyB0ZW1wbGF0ZVxuXHRAQ29udGVudENoaWxkKFRhYmxlQ3VzdG9tQWN0aW9uc0RpcmVjdGl2ZSwge1xuXHRcdHJlYWQ6IFRlbXBsYXRlUmVmLFxuXHRcdHN0YXRpYzogdHJ1ZSxcblx0fSlcblx0cHVibGljIGhlYWRlckN1c3RvbUFjdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXHQvLyBjb2x1bW4gdGVtcGxhdGVzXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pIGNvbHVtbkRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcblx0QENvbnRlbnRDaGlsZHJlbihUYWJsZUV4dHJhSGVhZGVyKVxuXHRleHRyYUhlYWRlckRlZmluaXRpb25zITogUXVlcnlMaXN0PFRhYmxlRXh0cmFIZWFkZXI+O1xuXG5cdC8vIGZpbHRlciBtb2RhbFxuXHRAQ29udGVudENoaWxkKFRhYmxlRmlsdGVyTW9kYWxEaXJlY3RpdmUsIHtcblx0XHRyZWFkOiBUZW1wbGF0ZVJlZixcblx0XHRzdGF0aWM6IHRydWUsXG5cdH0pXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG5cdHB1YmxpYyBmaWx0ZXJNb2RhbFNob3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0Ly8gcm93IGFjdGlvbnMgdGVtcGxhdGVzXG5cdHByaXZhdGUgX3Jvd0FjdGlvbnMhOiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+O1xuXHRwcml2YXRlIF9yb3dBY3Rpb25zU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuXHRAQ29udGVudENoaWxkcmVuKFRhYmxlUm93QWN0aW9uKVxuXHRzZXQgcm93QWN0aW9ucyh2OiBRdWVyeUxpc3Q8VGFibGVSb3dBY3Rpb24+KSB7XG5cdFx0dGhpcy5fcm93QWN0aW9ucyA9IHY7XG5cdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHR9XG5cdGdldCByb3dBY3Rpb25zKCk6IFF1ZXJ5TGlzdDxUYWJsZVJvd0FjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLl9yb3dBY3Rpb25zO1xuXHR9XG5cblx0Ly8gY3VzdG9tIHJvd3MgdGVtcGxhdGVzXG5cdEBDb250ZW50Q2hpbGRyZW4oVGFibGVDdXN0b21Sb3dEaXJlY3RpdmUpXG5cdGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8VGFibGVDdXN0b21Sb3dEaXJlY3RpdmU+O1xuXG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsSGVhZGVyVGV4dDogc3RyaW5nID0gXCJGaWx0ZXJzXCI7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsU2F2ZVRleHQ6IHN0cmluZyA9IFwiU2F2ZVwiO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbENhbmNlbFRleHQ6IHN0cmluZyA9IFwiQ2FuY2VsXCI7XG5cdEBJbnB1dCgpIGZpbHRlck1vZGFsUmVzZXRUZXh0OiBzdHJpbmcgPSBcIlJlc2V0IGZpbHRlcnNcIjtcblxuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldDogYm9vbGVhbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBmaWx0ZXJNb2RhbFNob3dSZXNldE1vYmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdEBPdXRwdXQoKSBmaWx0ZXJNb2RhbFNob3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIGZpbHRlck1vZGFsU2F2ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRAT3V0cHV0KCkgZmlsdGVyTW9kYWxSZXNldDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHB1YmxpYyByb3dBY3Rpb25zUm93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nQWxsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXHRwdWJsaWMgcm93QWN0aW9uc0Zsb2F0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGFibGVSb3dBY3Rpb25bXT4oW10pO1xuXG5cdHB1YmxpYyBpc01vYmlsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGlzTW9iaWxlKCkpO1xuXG5cdC8vIHN0aWNreSBzZWxmLWNlbnRlclxuXHQvLyBtdC00IC1tYi01IGJvdHRvbS0xMSB6LVszXVxuXHQvLyBteS00IGJvdHRvbS0wXG5cdC8vIHBvaW50ZXItZXZlbnRzLW5vbmUgYW5pbWF0ZS1mbG9hdGluZy1tZW51LWNvbnRhaW5lci1vdXRcblx0Ly8gYW5pbWF0ZS1mbG9hdGluZy1tZW51LWNvbnRhaW5lci1pblxuXHQvLyBoaWRkZW5cblx0Ly8gaW5saW5lLWJsb2NrXG5cdHB1YmxpYyBmbG9hdGluZ01lbnVDb250YWluZXJDbGFzcyA9IGZsb2F0aW5nTWVudUNvbnRhaW5lckNsYXNzO1xuXG5cdHByaXZhdGUgX3Jlc2l6ZVRpbWVvdXQ6IHVua25vd247XG5cdHByaXZhdGUgX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uOiBib29sZWFuID0gdGhpcy5lbmFibGVSb3dTZWxlY3Rpb247XG5cdHByaXZhdGUgX2lucHV0Um93U2VsZWN0aW9uTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMucm93U2VsZWN0aW9uTGltaXQ7XG5cblx0cHJpdmF0ZSBfdGhlbWVEZWJvdW5jZT86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHB1YmxpYyBmb290ZXJIaWRkZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cblx0cHVibGljIGNuID0gY247XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuX3BhcnNlSXRlbXModGhpcy5pdGVtcyk7XG5cblx0XHRvblN0YXRlQ2hhbmdlKFwidGhlbWVcIiwgKHZhbHVlKSA9PiB0aGlzLl9jaGVja1RoZW1lKHZhbHVlKSk7XG5cblx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRsZW5ndGg6IHRoaXMuYW1vdW50T2ZMb2FkaW5nUm93cyxcblx0XHR9KTtcblxuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JFxuXHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG5cdFx0XHQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5maWx0ZXJNb2RhbFNob3cubmV4dCh2YWx1ZSkpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzW1wiaXRlbXNcIl0pIHtcblx0XHRcdHRoaXMuX3BhcnNlSXRlbXMoY2hhbmdlc1tcIml0ZW1zXCJdLmN1cnJlbnRWYWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZXNbXCJhbW91bnRPZkxvYWRpbmdSb3dzXCJdKSB7XG5cdFx0XHR0aGlzLmxvYWRpbmdSb3dzID0gQXJyYXkuZnJvbSh7XG5cdFx0XHRcdGxlbmd0aDogY2hhbmdlc1tcImFtb3VudE9mTG9hZGluZ1Jvd3NcIl0uY3VycmVudFZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSBmYWxzZTtcblx0XHRpZiAoY2hhbmdlc1tcImVuYWJsZVJvd1NlbGVjdGlvblwiXSkge1xuXHRcdFx0dGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb24gPVxuXHRcdFx0XHRjaGFuZ2VzW1wiZW5hYmxlUm93U2VsZWN0aW9uXCJdLmN1cnJlbnRWYWx1ZTtcblx0XHRcdGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzW1wicm93U2VsZWN0aW9uTGltaXRcIl0pIHtcblx0XHRcdHRoaXMuX2lucHV0Um93U2VsZWN0aW9uTGltaXQgPSBjaGFuZ2VzW1wicm93U2VsZWN0aW9uTGltaXRcIl0uY3VycmVudFZhbHVlO1xuXHRcdFx0Y2FsY3VsYXRlUm93U2VsZWN0aW9uRGF0YSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGN1bGF0ZVJvd1NlbGVjdGlvbkRhdGEgfHwgY2hhbmdlc1tcInNlbGVjdGVkUm93c1wiXSkge1xuXHRcdFx0dGhpcy5fc2V0Um93U2VsZWN0aW9uRGF0YSgpO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VzW1wiZW5hYmxlU2Nyb2xsXCJdPy5jdXJyZW50VmFsdWUpIHtcblx0XHRcdHRoaXMuX2NoZWNrQ2hhbmdlc1N1YnNjcmlwdGlvbnMoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0aWYgKHRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHR0aGlzLl9jaGVja0NoYW5nZXNTdWJzY3JpcHRpb25zKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuY29sdW1uRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRoaXMuY29sdW1uRGVmaW5pdGlvbnMuY2hhbmdlc1xuXHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGVib3VuY2VUaW1lKDEwMCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCkpO1xuXHRcdFx0dGhpcy5fZ2VuZXJhdGVDb2x1bW5zKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZXh0cmFIZWFkZXJEZWZpbml0aW9ucykge1xuXHRcdFx0dGhpcy5leHRyYUhlYWRlckRlZmluaXRpb25zLmNoYW5nZXNcblx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRlYm91bmNlVGltZSgxMDApKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2dlbmVyYXRlRXh0cmFIZWFkZXJzKCkpO1xuXHRcdFx0dGhpcy5fZ2VuZXJhdGVFeHRyYUhlYWRlcnMoKTtcblx0XHR9XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXCIkZXZlbnRcIl0pXG5cdG9uUmVzaXplKCkge1xuXHRcdHRoaXMuX3NldFJvd1NlbGVjdGlvbkRhdGEoKTtcblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHMoKTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXlkb3duXCIsIFtcIiRldmVudFwiXSlcblx0a2V5RG93bih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcblx0XHRpZiAoa2V5ICE9PSBcIkNvbnRyb2xcIiB8fCB0aGlzLl9jdHJsRG93biA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDprZXl1cFwiLCBbXCIkZXZlbnRcIl0pXG5cdGtleVVwKHsga2V5IH06IHsga2V5OiBzdHJpbmcgfSkge1xuXHRcdGlmIChrZXkgIT09IFwiQ29udHJvbFwiIHx8IHRoaXMuX2N0cmxEb3duID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX2N0cmxEb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6dmlzaWJpbGl0eWNoYW5nZVwiLCBbXCIkZXZlbnRcIl0pXG5cdHZpc2liaWxpdHlDaGFuZ2UoKSB7XG5cdFx0aWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gXCJoaWRkZW5cIiB8fCB0aGlzLl9jdHJsRG93biA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9jdHJsRG93biA9IGZhbHNlO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZSh7IGRldGFpbCB9OiBhbnkpIHtcblx0XHR0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQoZGV0YWlsKTtcblx0fVxuXG5cdG9uUXVpY2tGaWx0ZXIoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5xdWlja0ZpbHRlci5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VTaXplQ2hhbmdlKHsgZGV0YWlsIH06IGFueSkge1xuXHRcdHRoaXMucGFnZVNpemUgPSBkZXRhaWw7XG5cdFx0dGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvblBhZ2VDaGFuZ2UoeyBkZXRhaWwgfTogYW55KSB7XG5cdFx0dGhpcy5wYWdlID0gZGV0YWlsO1xuXHRcdHRoaXMucGFnZUNoYW5nZS5lbWl0KGRldGFpbCk7XG5cdH1cblxuXHRvbkZpbHRlck1vZGFsU2F2ZSgpIHtcblx0XHR0aGlzLmZpbHRlck1vZGFsU2F2ZS5uZXh0KCk7XG5cdFx0dGhpcy5maWx0ZXJNb2RhbFNob3ckLm5leHQoZmFsc2UpO1xuXHR9XG5cblx0b25GaWx0ZXJNb2RhbFJlc2V0KHJlc2V0UXVpY2tGaWx0ZXIgPSBmYWxzZSkge1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxSZXNldC5uZXh0KHJlc2V0UXVpY2tGaWx0ZXIpO1xuXHRcdHRoaXMuZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGVtcHR5U3RhdGVDbGlja2VkKCkge1xuXHRcdGlmICh0aGlzLmVuYWJsZUFjdGlvbikge1xuXHRcdFx0dGhpcy5hY3Rpb24uZW1pdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbmFibGVFbXB0eVN0YXRlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5lbXB0eVN0YXRlQWN0aW9uQ2xpY2suZW1pdCgpO1xuXHR9XG5cblx0cGFyc2VSb3dBY3Rpb25zUm93KGFjdGlvbnM6IFRhYmxlUm93QWN0aW9uW10gfCBudWxsLCByb3dJbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKCFhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHQoYSkgPT4gIWEuc2hvd0Z1bmN0aW9uIHx8IGEuc2hvd0Z1bmN0aW9uKHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdKSxcblx0XHQpO1xuXHR9XG5cblx0b25Db250YWluZXJYU2Nyb2xsKGV2OiBhbnkpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oZXYpO1xuXHR9XG5cblx0cHJpdmF0ZSBfcGFyc2VJdGVtcyhpdGVtczogc3RyaW5nIHwgYW55W10pIHtcblx0XHRpZiAoIWl0ZW1zKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gW107XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG5cdFx0XHR0aGlzLnBhcnNlZEl0ZW1zID0gaXRlbXM7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXJzZWRJdGVtcyA9IEpTT04ucGFyc2UoaXRlbXMpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2VuZXJhdGVDb2x1bW5zKCkge1xuXHRcdGxldCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmNvbHVtbkRlZmluaXRpb25zKTtcblxuXHRcdGRlZmluaXRpb25zQXJyYXkgPSB0aGlzLl9wYXJzZURlZmluaXRpb25zKFxuXHRcdFx0ZGVmaW5pdGlvbnNBcnJheSxcblx0XHQpIGFzIHVua25vd24gYXMgVGFibGVDb2x1bW5bXTtcblxuXHRcdHRoaXMuY29sdW1ucyQubmV4dChkZWZpbml0aW9uc0FycmF5KTtcblx0fVxuXG5cdHByaXZhdGUgX2dlbmVyYXRlRXh0cmFIZWFkZXJzKCkge1xuXHRcdGxldCBkZWZpbml0aW9uc0FycmF5ID0gQXJyYXkuZnJvbSh0aGlzLmV4dHJhSGVhZGVyRGVmaW5pdGlvbnMpO1xuXG5cdFx0ZGVmaW5pdGlvbnNBcnJheSA9IHRoaXMuX3BhcnNlRGVmaW5pdGlvbnMoXG5cdFx0XHRkZWZpbml0aW9uc0FycmF5LFxuXHRcdCkgYXMgdW5rbm93biBhcyBUYWJsZUV4dHJhSGVhZGVyW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbCBvZiBkZWZpbml0aW9uc0FycmF5KSB7XG5cdFx0XHRjb2wuc3RpY2t5ID0gY29sLnN0aWNreSA9PT0gdHJ1ZSA/IFwic2Vjb25kYXJ5XCIgOiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmV4dHJhSGVhZGVycyQubmV4dChkZWZpbml0aW9uc0FycmF5KTtcblx0fVxuXG5cdHB1YmxpYyBfY2hlY2tib3hEaXNhYmxlZChpdGVtOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBzZWxlY3Rpb25Db250YWlucyA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMuY2FuU2VsZWN0S2V5ICYmICFpdGVtW3RoaXMuY2FuU2VsZWN0S2V5XSkgfHxcblx0XHRcdCh0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0IXNlbGVjdGlvbkNvbnRhaW5zICYmXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdClcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3RBbGxDaGFuZ2UoJGV2ZW50OiBhbnksIGZvcmNlVmFsdWU/OiBib29sZWFuKSB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZVJvd1NlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gZm9yY2VWYWx1ZSA9PT0gdW5kZWZpbmVkID8gJGV2ZW50LmRldGFpbCA6IGZvcmNlVmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdGNvbnN0IHRvQWRkID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgcm93ID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5fc2VsZWN0aW9uQ29udGFpbnMocm93LCBpKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9BZGQucHVzaChyb3cpO1xuXHRcdFx0XHR0aGlzLnJvd1NlbGVjdGVkLmVtaXQocm93KTtcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoICsgdG9BZGQubGVuZ3RoID09PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzLCAuLi50b0FkZF07XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblxuXHRcdFx0aWYgKHRoaXMuZW5hYmxlRmxvYXRpbmdNZW51KSB7XG5cdFx0XHRcdHRoaXMuX3Nob3dGbG9hdGluZ01lbnUoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3NbaV07XG5cdFx0XHRjb25zdCByb3cgPSB0aGlzLnBhcnNlZEl0ZW1zLmZpbmQoXG5cdFx0XHRcdChkKSA9PlxuXHRcdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKGQsIGkpID09PSB0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZSh2YWx1ZSwgaSksXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXJvdykge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dEZXNlbGVjdGVkLmVtaXQocm93KTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHR9XG5cblx0cHVibGljIF9jaGVja2JveENoYW5nZSh0YXJnZXQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuX2dldENoZWNrZWRWYWx1ZSh0YXJnZXQpO1xuXHRcdGlmIChcblx0XHRcdHZhbHVlICYmXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+PSB0aGlzLnJvd1NlbGVjdGlvbkxpbWl0XG5cdFx0KSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMucGFyc2VkSXRlbXNbaW5kZXhdO1xuXG5cdFx0aWYgKHRoaXMuY2FuU2VsZWN0S2V5ICYmICFyb3dbdGhpcy5jYW5TZWxlY3RLZXldKSB7XG5cdFx0XHR0YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIHJvd107XG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblx0XHRcdHRoaXMucm93U2VsZWN0ZWQuZW1pdChyb3cpO1xuXG5cdFx0XHRpZiAodGhpcy5lbmFibGVGbG9hdGluZ01lbnUpIHtcblx0XHRcdFx0dGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4T2ZUb1JlbW92ZSA9IHRoaXMuX3NlbGVjdGlvbkNvbnRhaW5zKHJvdywgaW5kZXgsIHRydWUpO1xuXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGlzLCBiZWNhdXNlIHNwbGljZSBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBzZWxlY3Rpb24gc2V0dGVyLlxuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG5cdFx0c2VsZWN0aW9uLnNwbGljZShpbmRleE9mVG9SZW1vdmUsIDEpO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzID0gc2VsZWN0aW9uO1xuXHRcdHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuXHRcdHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KHJvdyk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRDaGVja2VkVmFsdWUodGFyZ2V0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGFyZ2V0Py5jaGVja2VkO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U2VsZWN0aW9uVmFsdWUocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3Rpb25LZXkgPyByb3c/Llt0aGlzLnNlbGVjdGlvbktleV0gfHwgaW5kZXggOiBpbmRleDtcblx0fVxuXG5cdHB1YmxpYyBfc2VsZWN0aW9uQ29udGFpbnMocm93OiBhbnksIGluZGV4OiBudW1iZXIsIHJldHVybkluZGV4ID0gZmFsc2UpOiBhbnkge1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5zZWxlY3RlZFJvd3MuZmluZEluZGV4KFxuXHRcdFx0KGl0ZW0pID0+XG5cdFx0XHRcdHRoaXMuX2dldFNlbGVjdGlvblZhbHVlKHJvdywgaW5kZXgpID09PVxuXHRcdFx0XHR0aGlzLl9nZXRTZWxlY3Rpb25WYWx1ZShpdGVtLCBpbmRleCksXG5cdFx0KTtcblx0XHRyZXR1cm4gIXJldHVybkluZGV4ID8gcmV0dXJuVmFsdWUgPj0gMCA6IHJldHVyblZhbHVlO1xuXHR9XG5cblx0cHVibGljIF9zZWxlY3Rpb25Db250YWluc0FsbCgpIHtcblx0XHRsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuXHRcdGlmICghdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IHRoaXMucm93U2VsZWN0aW9uTGltaXRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJzZWRJdGVtcz8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgY29udGFpbnMgPSB0aGlzLl9zZWxlY3Rpb25Db250YWlucyhpdGVtLCBpKTtcblxuXHRcdFx0aWYgKCFjb250YWlucykge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgX3NlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKSB7XG5cdFx0aWYgKCF0aGlzLnBhcnNlZEl0ZW1zPy5sZW5ndGggfHwgIXRoaXMuc2VsZWN0ZWRSb3dzPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLnJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dTZWxlY3Rpb25MaW1pdFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGxldCBjb250YWluc0NvdW50ID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFyc2VkSXRlbXM/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tpXTtcblx0XHRcdGNvbnN0IGNvbnRhaW5zID0gdGhpcy5fc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgaSk7XG5cblx0XHRcdGlmIChjb250YWlucykge1xuXHRcdFx0XHRjb250YWluc0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5zQ291bnQgPiAwICYmIGNvbnRhaW5zQ291bnQgIT09IHRoaXMucGFyc2VkSXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0cHVibGljIF9yb3dDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG5cdFx0aWYgKFxuXHRcdFx0dGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiIHx8XG5cdFx0XHQodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09IFwiY2hlY2tib3hcIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvdyA9IHRoaXMuX2ZpbmRSb3codGFyZ2V0KTtcblx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLl9maW5kUm93QWN0aW9uKHRhcmdldCk7XG5cblx0XHRpZiAoYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZW5hYmxlUm93Q2xpY2spIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLnBhcnNlZEl0ZW1zW2luZGV4XTtcblx0XHRcdHRoaXMucm93Q2xpY2suZW1pdCh7XG5cdFx0XHRcdGl0ZW0sXG5cdFx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjaGVja2JveCA9IHJvdz8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG5cblx0XHRpZiAoIWNoZWNrYm94KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2hlY2tib3guY2hlY2tlZCA9ICFjaGVja2JveC5jaGVja2VkO1xuXHRcdHRoaXMuX2NoZWNrYm94Q2hhbmdlKGNoZWNrYm94LCBpbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgX2dldEFjdGlvblJvdXRlckxpbmsoXG5cdFx0cm91dGVyTGluazogVGFibGVSb3dBY3Rpb25Sb3V0ZXJMaW5rLFxuXHRcdHJvd0luZGV4OiBudW1iZXIsXG5cdCk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBhbnlbXT4gfCBBc3luY0l0ZW08c3RyaW5nIHwgYW55W10+IHtcblx0XHRpZiAodHlwZW9mIHJvdXRlckxpbmsgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMucGFyc2VkSXRlbXNbcm93SW5kZXhdO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldEFjdGlvblJvdXRlckxpbmsocm91dGVyTGluayhpdGVtKSwgcm93SW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygcm91dGVyTGluayA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHJvdXRlckxpbmspKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdChyb3V0ZXJMaW5rKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcm91dGVyTGluaztcblx0fVxuXG5cdHB1YmxpYyBfZ2V0QWN0aW9uUXVlcnlQYXJhbXMoXG5cdFx0cXVlcnlQYXJhbXM6IFRhYmxlUm93QWN0aW9uUXVlcnlQYXJhbXMsXG5cdFx0cm93SW5kZXg6IG51bWJlcixcblx0KTogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4gfCBBc3luY0l0ZW08UGFyYW1zPiB7XG5cdFx0aWYgKHR5cGVvZiBxdWVyeVBhcmFtcyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF07XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0QWN0aW9uUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMoaXRlbSksIHJvd0luZGV4KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlQYXJhbXMgaW5zdGFuY2VvZiBPYmplY3QgJiYgcXVlcnlQYXJhbXMuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIG5ldyBCZWhhdmlvclN1YmplY3QocXVlcnlQYXJhbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBxdWVyeVBhcmFtcyBhcyBBc3luY0l0ZW08UGFyYW1zPjtcblx0fVxuXG5cdHB1YmxpYyBfcm93QWN0aW9uQ2xpY2soYWN0aW9uOiBUYWJsZVJvd0FjdGlvbiwgcm93SW5kZXg/OiBudW1iZXIpIHtcblx0XHRpZiAoYWN0aW9uLmRpc2FibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGlvbi5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFhY3Rpb24uYWN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnR5cGUgPT09IFwibXVsdGlcIiB8fFxuXHRcdFx0KGFjdGlvbi50eXBlID09PSBcImJvdGhcIiAmJiByb3dJbmRleCA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0YWN0aW9uLmFjdGlvbi5lbWl0KHtcblx0XHRcdFx0aXRlbXM6IHRoaXMuc2VsZWN0ZWRSb3dzLFxuXHRcdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdFx0Y3RybERvd246IHRoaXMuX2N0cmxEb3duLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0YWN0aW9uLnJvdXRlckxpbmsgfHxcblx0XHRcdChBcnJheS5pc0FycmF5KGFjdGlvbi5yb3V0ZXJMaW5rKSAmJiBhY3Rpb24ucm91dGVyTGluay5sZW5ndGgpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbSA9XG5cdFx0XHRyb3dJbmRleCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGhpcy5wYXJzZWRJdGVtc1tyb3dJbmRleF1cblx0XHRcdFx0OiB0aGlzLnNlbGVjdGVkUm93c1swXTtcblx0XHRhY3Rpb24uYWN0aW9uLmVtaXQoe1xuXHRcdFx0aXRlbSxcblx0XHRcdG11bHRpOiBmYWxzZSxcblx0XHRcdGN0cmxEb3duOiB0aGlzLl9jdHJsRG93bixcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2ZpbmRSb3coZWw6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGFueSB7XG5cdFx0aWYgKCFlbCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJwLXRhYmxlLXJvd1wiKSB7XG5cdFx0XHRyZXR1cm4gZWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2ZpbmRSb3coZWw/LnBhcmVudEVsZW1lbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmluZFJvd0FjdGlvbihlbDogSFRNTEVsZW1lbnQgfCBudWxsKTogYW55IHtcblx0XHRpZiAoIWVsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlzLWFjdGlvblwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0ZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1pcy1hY3Rpb25cIikgIT09IFwiZmFsc2VcIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGVsO1xuXHRcdH1cblxuXHRcdGlmIChlbD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJwLXRhYmxlLXJvd1wiKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZmluZFJvd0FjdGlvbihlbD8ucGFyZW50RWxlbWVudCk7XG5cdH1cblxuXHRwcml2YXRlIF9zZXRSb3dTZWxlY3Rpb25EYXRhKCkge1xuXHRcdGlmICh0aGlzLl9yZXNpemVUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplVGltZW91dCBhcyBudW1iZXIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIGFkZCBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIGl0J3MgYSBsb3QgZWFzaWVyIG9uIHRoZSBtYWNoaW5lIHRvIGRvIHRoZXNlIHdoZW4gc29tZW9uZSBpcyBkb25lXG5cdFx0Ly8gcmVzaXppbmcgYW5kIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlaXIgYnJvd3NlclxuXHRcdHRoaXMuX3Jlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IG1vYmlsZSA9IGlzTW9iaWxlKCk7XG5cdFx0XHR0aGlzLmlzTW9iaWxlJC5uZXh0KG1vYmlsZSk7XG5cblx0XHRcdGNvbnN0IGFjdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuX3Jvd0FjdGlvbnMpIGFzIFRhYmxlUm93QWN0aW9uW107XG5cblx0XHRcdGlmICh0aGlzLl9yb3dBY3Rpb25zU3Vic2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgc3Vic2NyaXB0aW9uIG9mIHRoaXMuX3Jvd0FjdGlvbnNTdWJzY3JpcHRpb25zKSB7XG5cdFx0XHRcdFx0c3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcm93QWN0aW9uc1N1YnNjcmlwdGlvbnMgPSBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PlxuXHRcdFx0XHRhY3Rpb24uX2xvYWRpbmdDaGFuZ2VkXG5cdFx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG5cdFx0XHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCkpLFxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gd2UgaGFjayB0aGlzIHRvIGFueVtdIHRvIG1ha2UgaXQgd29yay4uXG5cdFx0XHRjb25zdCByb3dBY3Rpb25zUm93ID0gYWN0aW9ucy5maWx0ZXIoXG5cdFx0XHRcdChhKSA9PiBhLnR5cGUgPT09IFwiYm90aFwiIHx8IGEudHlwZSA9PT0gXCJzaW5nbGVcIixcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByb3dBY3Rpb25zRmxvYXRpbmcgPSBhY3Rpb25zLmZpbHRlcihcblx0XHRcdFx0KGEpID0+XG5cdFx0XHRcdFx0KHRoaXMuX2lucHV0RW5hYmxlUm93U2VsZWN0aW9uICYmXG5cdFx0XHRcdFx0XHQoYS50eXBlID09PSBcImJvdGhcIiB8fCBhLnR5cGUgPT09IFwibXVsdGlcIikpIHx8XG5cdFx0XHRcdFx0KG1vYmlsZSAmJiBhLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIWEucm91dGVyTGluayksXG5cdFx0XHQpO1xuXG5cdFx0XHRsZXQgcm93U2VsZWN0aW9uTGltaXQgPSB0aGlzLl9pbnB1dFJvd1NlbGVjdGlvbkxpbWl0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtb2JpbGUgJiYgLy8gd2UncmUgbW9iaWxlXG5cdFx0XHRcdHJvd0FjdGlvbnNGbG9hdGluZz8ubGVuZ3RoICYmIC8vIHdlIGhhdmUgYXRsZWFzdCAxIGl0ZW0gaW4gX3Jvd0FjdGlvbnNGbG9hdGluZ1xuXHRcdFx0XHQoKHJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbmFibGVSb3dTZWxlY3Rpb24pIHx8XG5cdFx0XHRcdFx0IXRoaXMuZW5hYmxlUm93U2VsZWN0aW9uKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJvd1NlbGVjdGlvbkxpbWl0ID0gMTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9IHJvd1NlbGVjdGlvbkxpbWl0O1xuXG5cdFx0XHRsZXQgZW5hYmxlUm93U2VsZWN0aW9uID0gdGhpcy5faW5wdXRFbmFibGVSb3dTZWxlY3Rpb247XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1vYmlsZSAmJiAvLyB3ZSdyZSBtb2JpbGVcblx0XHRcdFx0cm93QWN0aW9uc0Zsb2F0aW5nPy5sZW5ndGggJiYgLy8gd2UgaGF2ZSBhdGxlYXN0IDEgaXRlbSBpbiBfcm93QWN0aW9uc0Zsb2F0aW5nXG5cdFx0XHRcdCFlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdCkge1xuXHRcdFx0XHRlbmFibGVSb3dTZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5lbmFibGVSb3dTZWxlY3Rpb24gPSBlbmFibGVSb3dTZWxlY3Rpb247XG5cblx0XHRcdHRoaXMucm93QWN0aW9uc1JvdyQubmV4dChyb3dBY3Rpb25zUm93KTtcblx0XHRcdHRoaXMucm93QWN0aW9uc0Zsb2F0aW5nQWxsJC5uZXh0KHJvd0FjdGlvbnNGbG9hdGluZyk7XG5cblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kXG5cdFx0XHRcdC5waXBlKFxuXHRcdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdFx0ZmlsdGVyKCh2KSA9PiAhIXYpLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2hvd0Zsb2F0aW5nTWVudSgpKTtcblx0XHR9LCAyMDApO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2hvd0Zsb2F0aW5nTWVudSgpIHtcblx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZ0FsbCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGFjdGlvbnMpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5yb3dTZWxlY3Rpb25MaW1pdCA9PT0gMSAmJlxuXHRcdFx0XHRhY3Rpb25zLmZpbmRJbmRleChcblx0XHRcdFx0XHQoYSkgPT4gKGEudHlwZSA9PT0gXCJzaW5nbGVcIiB8fCBhLnR5cGUgPT09IFwiYm90aFwiKSAmJiBhLnNob3dGdW5jdGlvbixcblx0XHRcdFx0KSA+PSAwXG5cdFx0XHQpIHtcblx0XHRcdFx0YWN0aW9ucyA9IGFjdGlvbnMuZmlsdGVyKFxuXHRcdFx0XHRcdChhKSA9PlxuXHRcdFx0XHRcdFx0YS50eXBlID09PSBcIm11bHRpXCIgfHxcblx0XHRcdFx0XHRcdCFhLnNob3dGdW5jdGlvbiB8fFxuXHRcdFx0XHRcdFx0YS5zaG93RnVuY3Rpb24odGhpcy5zZWxlY3RlZFJvd3NbMF0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJvd0FjdGlvbnNGbG9hdGluZyQubmV4dChhY3Rpb25zKTtcblx0XHRcdHRoaXMuZmxvYXRpbmdNZW51U2hvd24kLm5leHQodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25zKFxuXHRcdGRlZmluaXRpb25zQXJyYXk6IFRhYmxlQ29sdW1uW10gfCBUYWJsZUV4dHJhSGVhZGVyW10sXG5cdCkge1xuXHRcdHJldHVybiBkZWZpbml0aW9uc0FycmF5Lm1hcCgoZGVmaW5pdGlvbikgPT5cblx0XHRcdHRoaXMuX3BhcnNlRGVmaW5pdGlvblNpemVzKGRlZmluaXRpb24pLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9wYXJzZURlZmluaXRpb25TaXplcyhkZWZpbml0aW9uOiBUYWJsZUNvbHVtbiB8IFRhYmxlRXh0cmFIZWFkZXIpIHtcblx0XHRjb25zdCBkZWZpbml0aW9uQW55ID0gZGVmaW5pdGlvbiBhcyBhbnk7XG5cdFx0bGV0IHBhcnNlZFNpemVzOiBUYWJsZUNvbHVtblNpemVzID0geyBkZWZhdWx0OiBcImZ1bGxcIiB9O1xuXG5cdFx0Zm9yIChjb25zdCBbaW5kZXgsIHNpemVdIG9mIHRhYmxlQ29sdW1TaXplc09wdGlvbnMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwiYXV0b1wiIHx8XG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwiaGlkZGVuXCIgfHxcblx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gXCJmdWxsXCIgfHxcblx0XHRcdFx0dHlwZW9mIGRlZmluaXRpb25Bbnkuc2l6ZXMgPT09IFwibnVtYmVyXCJcblx0XHRcdCkge1xuXHRcdFx0XHRwYXJzZWRTaXplc1tzaXplXSA9XG5cdFx0XHRcdFx0ZGVmaW5pdGlvbkFueS5zaXplcyA9PT0gXCJhdXRvXCIgPyBcImZ1bGxcIiA6IGRlZmluaXRpb25Bbnkuc2l6ZXM7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRwYXJzZWRTaXplc1tzaXplXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Bbnkuc2l6ZXNbc2l6ZV0gPz9cblx0XHRcdFx0cGFyc2VkU2l6ZXNbdGFibGVDb2x1bVNpemVzT3B0aW9uc1tpbmRleCAtIDFdXTtcblx0XHR9XG5cblx0XHRkZWZpbml0aW9uLnBhcnNlZFNpemVzID0gcGFyc2VkU2l6ZXM7XG5cdFx0cmV0dXJuIGRlZmluaXRpb247XG5cdH1cblxuXHRwcml2YXRlIF9jaGVja0NoYW5nZXNTdWJzY3JpcHRpb25zKCkge1xuXHRcdGlmICghdGhpcy5fcm93Q2hhbmdlc1N1YnNjcmlwdGlvbiAmJiB0aGlzLnRhYmxlUm93cykge1xuXHRcdFx0dGhpcy5fcm93Q2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVSb3dzLmNoYW5nZXNcblx0XHRcdFx0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcyksIGRlYm91bmNlVGltZSgxMDApKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuX2NlbGxDaGFuZ2VzU3Vic2NyaXB0aW9uICYmIHRoaXMudGFibGVDZWxscykge1xuXHRcdFx0dGhpcy5fY2VsbENoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ2VsbHMuY2hhbmdlc1xuXHRcdFx0XHQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSwgZGVib3VuY2VUaW1lKDEwMCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgX2NhbGN1bGF0ZUNvbHVtbldpZHRocygpIHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlU2Nyb2xsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLnRhYmxlQ2VsbHMgfHwgIXRoaXMudGFibGVSb3dzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0KTtcblx0XHRcdHRoaXMuX2NhbGN1bGF0ZUNvbHVtbldpZHRoc1RpbWVvdXQgPSAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlUm93cy5tYXAoXG5cdFx0XHQoYykgPT4gYy5uYXRpdmVFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsXG5cdFx0KTtcblx0XHRjb25zdCBjZWxscyA9IHJvd3MuZmxhdE1hcChcblx0XHRcdChyb3cpID0+XG5cdFx0XHRcdEFycmF5LmZyb20ocm93LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwLXRhYmxlLWNlbGwtbmd4XCIpKSBhcyBIVE1MRWxlbWVudFtdLFxuXHRcdCk7XG5cblx0XHR0aGlzLl9jYWxjdWxhdGVDb2x1bW5XaWR0aHNUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG5cdFx0XHR0aGlzLl9zZXRSb3dzV2lkdGgocm93cyk7XG5cblx0XHRcdGNvbnN0IHByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykge1xuXHRcdFx0XHRpZiAoY2VsbC5zdHlsZS53aWR0aD8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y2VsbC5zdHlsZS53aWR0aCA9IFwidW5zZXRcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUpID0+XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVjdCA9IGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNlbGwuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYHdpZHRoOiAke3JlY3Qud2lkdGh9cHggIWltcG9ydGFudGApO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LCAxMDApLFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuXHRcdFx0dGhpcy5fc2V0Um93c1dpZHRoKHJvd3MsIFwibWluLWNvbnRlbnRcIik7XG5cblx0XHRcdHRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oKTtcblx0XHR9LCAyMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0cHJpdmF0ZSBfc2V0Um93c1dpZHRoKFxuXHRcdHJvd3M6IEhUTUxFbGVtZW50W10sXG5cdFx0dmFsdWU6IFwibWluLWNvbnRlbnRcIiB8IG51bGwgPSBudWxsLFxuXHQpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHJvdyA9IHJvd3NbaV07XG5cblx0XHRcdGNvbnN0IHNoYWRvdyA9IHJvdy5zaGFkb3dSb290O1xuXHRcdFx0aWYgKCFzaGFkb3cpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpcnN0RGl2ID0gc2hhZG93LnF1ZXJ5U2VsZWN0b3IoXCIqOm50aC1jaGlsZCgxKVwiKTtcblx0XHRcdGlmICghZmlyc3REaXYpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNlY29uZERpdiA9IGZpcnN0RGl2LnF1ZXJ5U2VsZWN0b3IoXCIqOm50aC1jaGlsZCgxKVwiKTtcblx0XHRcdGlmICghc2Vjb25kRGl2KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Zmlyc3REaXYuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJcIik7XG5cdFx0XHRcdHNlY29uZERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIlwiKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpcnN0RGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6IG1pbi1jb250ZW50O1wiKTtcblx0XHRcdHNlY29uZERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiBtaW4tY29udGVudDtcIik7XG5cblx0XHRcdGlmIChpID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuX3RvdGFsV2lkdGggPSBmaXJzdERpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9yZXNldFNjcm9sbFBvc2l0aW9uKCkge1xuXHRcdGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuXHRcdFx0dGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0cnVlKTtcblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxFbmQkLm5leHQoZmFsc2UpO1xuXG5cdFx0dGhpcy5fY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oe1xuXHRcdFx0dGFyZ2V0OiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2FsY3VsYXRlU2Nyb2xsUG9zaXRpb24oeyB0YXJnZXQgfTogeyB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50IH0pIHtcblx0XHR0aGlzLnJlYWNoZWRTY3JvbGxTdGFydCQubmV4dCh0YXJnZXQuc2Nyb2xsTGVmdCA8IDEwKTtcblxuXHRcdGNvbnN0IHJpZ2h0ID0gdGFyZ2V0LnNjcm9sbExlZnQgKyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdFx0dGhpcy5yZWFjaGVkU2Nyb2xsRW5kJC5uZXh0KHJpZ2h0ID4gdGhpcy5fdG90YWxXaWR0aCAtIDEwKTtcblx0fVxuXG5cdHByaXZhdGUgX2NoZWNrVGhlbWUodmFsdWU6IFwiZGFya1wiIHwgXCJsaWdodFwiKSB7XG5cdFx0aWYgKHRoaXMuX3RoZW1lRGVib3VuY2UpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl90aGVtZURlYm91bmNlKTtcblx0XHRcdHRoaXMuX3RoZW1lRGVib3VuY2UgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGhlbWVEZWJvdW5jZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy50aGVtZSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdH0sIDEwMCk7XG5cdH1cbn1cbiIsIjxwLXRhYmxlLWNvbnRhaW5lcj5cblx0PHAtdGFibGUtaGVhZGVyXG5cdFx0Km5nSWY9XCJlbmFibGVIZWFkZXJcIlxuXHRcdGNsYXNzPVwibWItOFwiXG5cdFx0W3F1aWNrRmlsdGVyc109XCJxdWlja0ZpbHRlcnNcIlxuXHRcdFthY3RpdmVRdWlja0ZpbHRlcklkZW50aWZpZXJdPVwiYWN0aXZlUXVpY2tGaWx0ZXJJZGVudGlmaWVyXCJcblx0XHQocXVpY2tGaWx0ZXIpPVwib25RdWlja0ZpbHRlcigkZXZlbnQpXCJcblx0XHRbZW5hYmxlU2VhcmNoXT1cImVuYWJsZVNlYXJjaFwiXG5cdFx0W3F1ZXJ5XT1cInF1ZXJ5XCJcblx0XHQocXVlcnlDaGFuZ2UpPVwib25RdWVyeUNoYW5nZSgkZXZlbnQpXCJcblx0XHRbZW5hYmxlRmlsdGVyXT1cImVuYWJsZUZpbHRlclwiXG5cdFx0W2VuYWJsZUZpbHRlckRlc2t0b3BdPVwiZW5hYmxlRmlsdGVyRGVza3RvcFwiXG5cdFx0W3NlbGVjdGVkRmlsdGVyc0Ftb3VudF09XCJzZWxlY3RlZEZpbHRlcnNBbW91bnRcIlxuXHRcdFtmaWx0ZXJCdXR0b25UZW1wbGF0ZV09XCJmaWx0ZXJCdXR0b25UZW1wbGF0ZVwiXG5cdFx0KGZpbHRlcik9XCJmaWx0ZXJNb2RhbFNob3ckLm5leHQodHJ1ZSlcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZW5hYmxlQWN0aW9uXCJcblx0XHRbY2FuVXNlQWN0aW9uXT1cImFjdGlvbkJ1dHRvbkVuYWJsZWRcIlxuXHRcdFthY3Rpb25CdXR0b25UZW1wbGF0ZV09XCJhY3Rpb25CdXR0b25UZW1wbGF0ZVwiXG5cdFx0W2FjdGlvbkxvYWRpbmddPVwiYWN0aW9uQnV0dG9uTG9hZGluZ1wiXG5cdFx0W2FjdGlvblRleHRdPVwiYWN0aW9uQnV0dG9uVGV4dFwiXG5cdFx0W2FjdGlvbkljb25dPVwiYWN0aW9uQnV0dG9uSWNvblwiXG5cdFx0KGFjdGlvbik9XCJhY3Rpb24uZW1pdCgpXCJcblx0XHRbaXRlbXNTZWxlY3RlZEFtb3VudF09XCJzZWxlY3RlZFJvd3MubGVuZ3RoXCJcblx0XHRbZW5hYmxlRXhwb3J0XT1cImVuYWJsZUV4cG9ydFwiXG5cdFx0KGV4cG9ydCk9XCJleHBvcnQuZW1pdCgpXCJcblx0XHRbbG9hZGluZ109XCJoZWFkZXJMb2FkaW5nXCJcblx0PlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21GaWx0ZXJUZW1wbGF0ZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lclxuXHRcdFx0XHQqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckN1c3RvbUZpbHRlclRlbXBsYXRlXCJcblx0XHRcdD48L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJDdXN0b21BY3Rpb25zVGVtcGxhdGVcIj5cblx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0Km5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJDdXN0b21BY3Rpb25zVGVtcGxhdGVcIlxuXHRcdFx0PjwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHQ8L3AtdGFibGUtaGVhZGVyPlxuXG5cdDxkaXZcblx0XHRjbGFzcz1cInJlbGF0aXZlIGZsZXgtMVwiXG5cdFx0Km5nSWY9XCJlbmFibGVTY3JvbGw7IGVsc2Ugcm93c1RlbXBsYXRlXCJcblx0PlxuXHRcdDxkaXZcblx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvdmVyZmxvdy14LWF1dG9cIlxuXHRcdFx0I3Njcm9sbENvbnRhaW5lclxuXHRcdFx0W2NsYXNzXT1cIlxuXHRcdFx0XHRjbihcblx0XHRcdFx0XHQnYmVmb3JlOmFic29sdXRlIGJlZm9yZTp0b3AtMCBiZWZvcmU6bGVmdC0wIGJlZm9yZTp6LVsxXSBiZWZvcmU6cG9pbnRlci1ldmVudHMtbm9uZScsXG5cdFx0XHRcdFx0J2JlZm9yZTp3LTI0IGJlZm9yZTpoLWZ1bGwgYmVmb3JlOnRyYW5zaXRpb24tb3BhY2l0eScsXG5cdFx0XHRcdFx0J2JlZm9yZTpiZy1ncmFkaWVudC10by1yIGJlZm9yZTpmcm9tLXdoaXRlIGRhcms6YmVmb3JlOmZyb20taHVycmljYW5lLTcwMCBiZWZvcmU6dmlhLXdoaXRlLzgwIGRhcms6YmVmb3JlOnZpYS1odXJyaWNhbmUtNzAwLzkwIGJlZm9yZTp0by10cmFuc3BhcmVudCcsXG5cdFx0XHRcdFx0J2FmdGVyOmFic29sdXRlIGFmdGVyOnRvcC0wIGFmdGVyOnJpZ2h0LTAgYWZ0ZXI6ei1bMF0gYmVmb3JlOnBvaW50ZXItZXZlbnRzLW5vbmUnLFxuXHRcdFx0XHRcdCdhZnRlcjp3LTI0IGFmdGVyOmgtZnVsbCBhZnRlcjp0cmFuc2l0aW9uLW9wYWNpdHknLFxuXHRcdFx0XHRcdCdhZnRlcjpiZy1ncmFkaWVudC10by1sIGFmdGVyOmZyb20td2hpdGUgYWZ0ZXI6ZGFyazpmcm9tLWh1cnJpY2FuZS03MDAgYWZ0ZXI6dmlhLXdoaXRlLzgwIGRhcms6YWZ0ZXI6dmlhLWh1cnJpY2FuZS03MDAvOTAgYWZ0ZXI6dG8tdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCdiZWZvcmU6b3BhY2l0eS0wJzogcmVhY2hlZFNjcm9sbFN0YXJ0JCB8IGFzeW5jLFxuXHRcdFx0XHRcdFx0J2FmdGVyOm9wYWNpdHktMCc6IHJlYWNoZWRTY3JvbGxFbmQkIHwgYXN5bmMsXG5cdFx0XHRcdFx0XHQnYmVmb3JlOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxTdGFydCQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdFx0J2FmdGVyOm9wYWNpdHktMTAwJzogKHJlYWNoZWRTY3JvbGxFbmQkIHwgYXN5bmMpID09PSBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KVxuXHRcdFx0XCJcblx0XHRcdChzY3JvbGwpPVwib25Db250YWluZXJYU2Nyb2xsKCRldmVudClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZUZsb2F0aW5nTWVudSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cIj5cblx0XHQ8cC1mbG9hdGluZy1tZW51LWNvbnRhaW5lclxuXHRcdFx0W3VzZWRJblRhYmxlXT1cInRydWVcIlxuXHRcdFx0W2NsYXNzXT1cIlxuXHRcdFx0XHRmbG9hdGluZ01lbnVDb250YWluZXJDbGFzcyh7XG5cdFx0XHRcdFx0aGFzRm9vdGVyOiBlbmFibGVGb290ZXIgJiYgKGZvb3RlckhpZGRlbiQgfCBhc3luYykgPT09IGZhbHNlLFxuXHRcdFx0XHRcdGFjdGl2ZTogc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAsXG5cdFx0XHRcdFx0c2hvd246ICRhbnkoZmxvYXRpbmdNZW51U2hvd24kIHwgYXN5bmMpXG5cdFx0XHRcdH0pXG5cdFx0XHRcIlxuXHRcdFx0W2Ftb3VudF09XCJmbG9hdGluZ01lbnVBbW91bnRTZWxlY3RlZFRleHRcIlxuXHRcdFx0W2VuYWJsZUFtb3VudFNlbGVjdGVkXT1cIiEhKHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luYyk/Lmxlbmd0aFwiXG5cdFx0XHQoY2xvc2UpPVwiX3NlbGVjdEFsbENoYW5nZShudWxsLCBmYWxzZSlcIlxuXHRcdD5cblx0XHRcdDxwLWZsb2F0aW5nLW1lbnUtaXRlbVxuXHRcdFx0XHQqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNGbG9hdGluZyQgfCBhc3luY1wiXG5cdFx0XHRcdHNsb3Q9XCJmbG9hdGluZy1tZW51LWl0ZW1cIlxuXHRcdFx0XHRbZGlzYWJsZWRdPVwiXG5cdFx0XHRcdFx0KGFjdGlvblsndHlwZSddID09PSAnc2luZ2xlJyAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMSkgfHxcblx0XHRcdFx0XHRhY3Rpb25bJ2Rpc2FibGVkJ11cblx0XHRcdFx0XCJcblx0XHRcdFx0W2xvYWRpbmddPVwiYWN0aW9uWydsb2FkaW5nJ11cIlxuXHRcdFx0XHRbaWNvbl09XCJhY3Rpb25bJ2ljb24nXVwiXG5cdFx0XHRcdFtpY29uUm90YXRlXT1cImFjdGlvblsnaWNvblJvdGF0ZSddXCJcblx0XHRcdFx0W2ljb25GbGlwXT1cImFjdGlvblsnaWNvbkZsaXAnXVwiXG5cdFx0XHRcdChjbGljayk9XCJfcm93QWN0aW9uQ2xpY2soYWN0aW9uKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGFjdGlvblsnbGFiZWwnXSB9fVxuXHRcdFx0PC9wLWZsb2F0aW5nLW1lbnUtaXRlbT5cblx0XHQ8L3AtZmxvYXRpbmctbWVudS1jb250YWluZXI+XG5cdDwvbmctY29udGFpbmVyPlxuXG5cdDxwLXRhYmxlLWZvb3RlclxuXHRcdCpuZ0lmPVwiZW5hYmxlRm9vdGVyXCJcblx0XHRbaGlkZU9uU2luZ2xlUGFnZV09XCJoaWRlT25TaW5nbGVQYWdlXCJcblx0XHRbZW5hYmxlUGFnaW5hdGlvblNpemVdPVwiZW5hYmxlUGFnaW5hdGlvblNpemVcIlxuXHRcdFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG5cdFx0W3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuXHRcdChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuXHRcdFtlbmFibGVQYWdpbmF0aW9uUGFnZXNdPVwiZW5hYmxlUGFnaW5hdGlvblBhZ2VzXCJcblx0XHRbcGFnZV09XCJwYWdlXCJcblx0XHRbdG90YWxdPVwidG90YWxcIlxuXHRcdChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcblx0XHRbbG9hZGluZ109XCJmb290ZXJMb2FkaW5nXCJcblx0XHQoaGlkZGVuQ2hhbmdlKT1cImZvb3RlckhpZGRlbiQubmV4dCgkZXZlbnQuZGV0YWlsKVwiXG5cdFx0W3RhYmxlSGVhZGVySGFzQWN0aW9uXT1cImVuYWJsZUhlYWRlciAmJiBlbmFibGVBY3Rpb24gJiYgYWN0aW9uQnV0dG9uRW5hYmxlZFwiXG5cdD48L3AtdGFibGUtZm9vdGVyPlxuPC9wLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNyb3dzVGVtcGxhdGU+XG5cdDxwLXRhYmxlLXJvd1xuXHRcdCpuZ0lmPVwiKGV4dHJhSGVhZGVycyQgfCBhc3luYyk/Lmxlbmd0aFwiXG5cdFx0dmFyaWFudD1cImhlYWRlci1zZWNvbmRhcnlcIlxuXHRcdGNsYXNzPVwiei1bMl1cIlxuXHRcdFtpc0xhc3RdPVwidHJ1ZVwiXG5cdD5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZXh0cmFIZWFkZXJzJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0W2RlZmluaXRpb25dPVwiY29sXCJcblx0XHRcdFx0dmFyaWFudD1cImhlYWRlci1zZWNvbmRhcnlcIlxuXHRcdFx0XHRbaW5kZXhdPVwiaW5kZXhcIlxuXHRcdFx0XHRbY2hlY2tib3hPZmZzZXRdPVwiaW5kZXggPT09IDAgJiYgZW5hYmxlUm93U2VsZWN0aW9uXCJcblx0XHRcdFx0W3Njcm9sbGFibGVdPVwidGhpcy5lbmFibGVTY3JvbGxcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8Yj57eyBjb2wubmFtZSB9fTwvYj5cblx0XHRcdDwvcC10YWJsZS1jZWxsLW5neD5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9wLXRhYmxlLXJvdz5cblxuXHQ8cC10YWJsZS1yb3cgdmFyaWFudD1cImhlYWRlclwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuXHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0W2RlZmluaXRpb25dPVwiY29sXCJcblx0XHRcdFx0W3ZhbHVlXT1cImNvbC5uYW1lXCJcblx0XHRcdFx0dmFyaWFudD1cImhlYWRlclwiXG5cdFx0XHRcdFtpbmRleF09XCJpbmRleFwiXG5cdFx0XHRcdFtjaGVja2JveF09XCJcblx0XHRcdFx0XHQoaW5kZXggPT09IDAgfHwgY29sLmhhc0NoZWNrYm94KSAmJiBlbmFibGVSb3dTZWxlY3Rpb25cblx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XCJcblx0XHRcdFx0W3Njcm9sbGFibGVdPVwidGhpcy5lbmFibGVTY3JvbGxcIlxuXHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hUZW1wbGF0ZT5cblx0XHRcdFx0PHAtY2hlY2tib3hcblx0XHRcdFx0XHQoY2hlY2tlZENoYW5nZSk9XCJfc2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdFtjaGVja2VkXT1cIl9zZWxlY3Rpb25Db250YWluc0FsbCgpXCJcblx0XHRcdFx0XHRbaW5kZXRlcm1pbmF0ZV09XCJfc2VsZWN0aW9uSW5kZXRlcm1pbmF0ZSgpXCJcblx0XHRcdFx0XHRbY2xhc3Mub3BhY2l0eS0wXT1cInJvd1NlbGVjdGlvbkxpbWl0ICE9PSB1bmRlZmluZWRcIlxuXHRcdFx0XHRcdFtkaXNhYmxlZF09XCJyb3dTZWxlY3Rpb25MaW1pdCAhPT0gdW5kZWZpbmVkXCJcblx0XHRcdFx0PjwvcC1jaGVja2JveD5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdDwvcC10YWJsZS1yb3c+XG5cblx0PGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGZsZXgtY29sXCI+XG5cdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgY29udGVudFRlbXBsYXRlXCI+XG5cdFx0XHQ8cC10YWJsZS1yb3dcblx0XHRcdFx0Km5nRm9yPVwibGV0IHIgb2YgbG9hZGluZ1Jvd3M7IGxldCByb3dJbmRleCA9IGluZGV4XCJcblx0XHRcdFx0Y2xhc3M9XCJncm91cFwiXG5cdFx0XHRcdFtlbmFibGVIb3Zlcl09XCJlbmFibGVSb3dTZWxlY3Rpb24gfHwgZW5hYmxlUm93Q2xpY2tcIlxuXHRcdFx0XHRbaXNMYXN0XT1cInJvd0luZGV4ID09PSBsb2FkaW5nUm93cy5sZW5ndGggLSAxXCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCI+XG5cdFx0XHRcdFx0PHAtdGFibGUtY2VsbC1uZ3hcblx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwibG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbY2hlY2tib3hdPVwiXG5cdFx0XHRcdFx0XHRcdChpbmRleCA9PT0gMCB8fCBjb2wuaGFzQ2hlY2tib3gpICYmIGVuYWJsZVJvd1NlbGVjdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcIlxuXHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG5cdFx0XHRcdFx0XHRbc2Nyb2xsYWJsZV09XCJ0aGlzLmVuYWJsZVNjcm9sbFwiXG5cdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8cC1sb2FkZXJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoLTYgdy02IHJvdW5kZWRcIlxuXHRcdFx0XHRcdFx0PjwvcC1sb2FkZXI+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VkSXRlbXM/Lmxlbmd0aDsgZWxzZSBlbXB0eVN0YXRlVGVtcGxhdGVcIj5cblx0XHRcdFx0PHAtdGFibGUtcm93XG5cdFx0XHRcdFx0Km5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyc2VkSXRlbXM7IGxldCByb3dJbmRleCA9IGluZGV4XCJcblx0XHRcdFx0XHRjbGFzcz1cImdyb3VwXCJcblx0XHRcdFx0XHRbZW5hYmxlSG92ZXJdPVwiZW5hYmxlUm93U2VsZWN0aW9uIHx8IGVuYWJsZVJvd0NsaWNrXCJcblx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRbaXNMYXN0XT1cInJvd0luZGV4ID09PSBwYXJzZWRJdGVtcy5sZW5ndGggLSAxXCJcblx0XHRcdFx0XHQoY2xpY2spPVwiX3Jvd0NsaWNrKCRldmVudCwgcm93SW5kZXgpXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHRcdCpuZ0lmPVwiXG5cdFx0XHRcdFx0XHRcdHBhcnNlUm93QWN0aW9uc1Jvdyhcblx0XHRcdFx0XHRcdFx0XHRyb3dBY3Rpb25zUm93JCB8IGFzeW5jLFxuXHRcdFx0XHRcdFx0XHRcdHJvd0luZGV4XG5cdFx0XHRcdFx0XHRcdCkgYXMgcm93QWN0aW9uc1Jvd1xuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyXG5cdFx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1ucyQgfCBhc3luYzsgbGV0IGluZGV4ID0gaW5kZXhcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8cC10YWJsZS1jZWxsLW5neFxuXHRcdFx0XHRcdFx0XHRcdFtkZWZpbml0aW9uXT1cImNvbFwiXG5cdFx0XHRcdFx0XHRcdFx0W2l0ZW1dPVwiaXRlbVwiXG5cdFx0XHRcdFx0XHRcdFx0W2NoZWNrYm94XT1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0KGluZGV4ID09PSAwIHx8IGNvbC5oYXNDaGVja2JveCkgJiYgZW5hYmxlUm93U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gY2hlY2tib3hUZW1wbGF0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0W2luZGV4XT1cImluZGV4XCJcblx0XHRcdFx0XHRcdFx0XHRbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuXHRcdFx0XHRcdFx0XHRcdFt0ZW1wbGF0ZV09XCJjb2wudGVtcGxhdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFtzY3JvbGxhYmxlXT1cInRoaXMuZW5hYmxlU2Nyb2xsXCJcblx0XHRcdFx0XHRcdFx0PjwvcC10YWJsZS1jZWxsLW5neD5cblxuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2NoZWNrYm94VGVtcGxhdGU+XG5cdFx0XHRcdFx0XHRcdFx0PHAtY2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdChjaGVja2VkQ2hhbmdlKT1cIl9jaGVja2JveENoYW5nZSgkZXZlbnQudGFyZ2V0LCByb3dJbmRleClcIlxuXHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIl9jaGVja2JveERpc2FibGVkKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJfc2VsZWN0aW9uQ29udGFpbnMoaXRlbSwgcm93SW5kZXgpXCJcblx0XHRcdFx0XHRcdFx0XHQ+PC9wLWNoZWNrYm94PlxuXHRcdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0XHRcdDxwLXRhYmxlLXJvdy1hY3Rpb25zLWNvbnRhaW5lclxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cIiEhcm93QWN0aW9uc1Jvdz8ubGVuZ3RoICYmICEoaXNNb2JpbGUkIHwgYXN5bmMpXCJcblx0XHRcdFx0XHRcdFx0W2NoZWNrZWRdPVwiX3NlbGVjdGlvbkNvbnRhaW5zKGl0ZW0sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdHNsb3Q9XCJhY3Rpb25zXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNSb3dcIj5cblx0XHRcdFx0XHRcdFx0XHQ8cC10b29sdGlwXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb24uc2hvd0Z1bmN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBhY3Rpb24uc2hvd0Z1bmN0aW9uKHBhcnNlZEl0ZW1zW3Jvd0luZGV4XSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRbY29udGVudF09XCJhY3Rpb25bJ2xhYmVsJ11cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLWlzLWFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2xvdD1cInRyaWdnZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbaWNvbl09XCJhY3Rpb25bJ2ljb24nXVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtpY29uUm90YXRlXT1cImFjdGlvblsnaWNvblJvdGF0ZSddXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWNvbkZsaXA9XCJhY3Rpb24uaWNvbkZsaXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb25bJ2xvYWRpbmcnXVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb25bJ2Rpc2FibGVkJ11cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcm91dGVyTGlua109XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb24ucm91dGVyTGlua1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAoX2dldEFjdGlvblJvdXRlckxpbmsoYWN0aW9uLnJvdXRlckxpbmssIHJvd0luZGV4KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtxdWVyeVBhcmFtc109XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb24ucXVlcnlQYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gKF9nZXRBY3Rpb25RdWVyeVBhcmFtcyhhY3Rpb24ucXVlcnlQYXJhbXMsIHJvd0luZGV4KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ICB8IGFzeW5jKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChvbkNsaWNrKT1cIl9yb3dBY3Rpb25DbGljayhhY3Rpb24sIHJvd0luZGV4KVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+PC9wLWJ1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQ8L3AtdG9vbHRpcD5cblx0XHRcdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8L3AtdGFibGUtcm93LWFjdGlvbnMtY29udGFpbmVyPlxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8L3AtdGFibGUtcm93PlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblxuXHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN1c3RvbVJvdyBvZiBjdXN0b21Sb3dzXCI+XG5cdFx0XHQ8cC10YWJsZS1yb3dcblx0XHRcdFx0W3ZhcmlhbnRdPVwiY3VzdG9tUm93LnZhcmlhbnRcIlxuXHRcdFx0XHRbY2xhc3NdPVwie1xuXHRcdFx0XHRcdCd6LVsyXSc6IGN1c3RvbVJvdy52YXJpYW50ID09PSAnc2Vjb25kYXJ5J1xuXHRcdFx0XHR9XCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVJvdy50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuXHRcdFx0PC9wLXRhYmxlLXJvdz5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyTW9kYWxUZW1wbGF0ZVwiPlxuXHQ8cC1tb2RhbFxuXHRcdFtoZWFkZXJdPVwiZmlsdGVyTW9kYWxIZWFkZXJUZXh0XCJcblx0XHRbc2hvd109XCJmaWx0ZXJNb2RhbFNob3ckIHwgYXN5bmNcIlxuXHRcdChjbG9zZWQpPVwiZmlsdGVyTW9kYWxTaG93JC5uZXh0KGZhbHNlKVwiXG5cdD5cblx0XHQ8ZGl2XG5cdFx0XHRzbG90PVwiY29udGVudFwiXG5cdFx0XHRjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTZcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNb2RhbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdlxuXHRcdFx0c2xvdD1cImZvb3RlclwiXG5cdFx0XHRjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiXG5cdFx0PlxuXHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdCpuZ0lmPVwiZmlsdGVyTW9kYWxTaG93UmVzZXRNb2JpbGVcIlxuXHRcdFx0XHRjbGFzcz1cImZsZXggdy1mdWxsIHRhYmxldDp3LWF1dG8gZGVza3RvcC14czpoaWRkZW5cIlxuXHRcdFx0XHR2YXJpYW50PVwic2Vjb25kYXJ5XCJcblx0XHRcdFx0KG9uQ2xpY2spPVwib25GaWx0ZXJNb2RhbFJlc2V0KHRydWUpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxSZXNldFRleHQgfX1cblx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0Km5nSWY9XCJmaWx0ZXJNb2RhbFNob3dSZXNldFwiXG5cdFx0XHRcdGNsYXNzPVwiaGlkZGVuIHctZnVsbCB0YWJsZXQ6dy1hdXRvIGRlc2t0b3AteHM6ZmxleFwiXG5cdFx0XHRcdHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsUmVzZXQoKVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7IGZpbHRlck1vZGFsUmVzZXRUZXh0IH19XG5cdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdGNsYXNzPVwibWwtYXV0byB3LWZ1bGwgdGFibGV0OnctYXV0b1wiXG5cdFx0XHRcdGljb249XCJjaGVja21hcmtcIlxuXHRcdFx0XHQob25DbGljayk9XCJvbkZpbHRlck1vZGFsU2F2ZSgpXCJcblx0XHRcdD5cblx0XHRcdFx0e3sgZmlsdGVyTW9kYWxTYXZlVGV4dCB9fVxuXHRcdFx0PC9wLWJ1dHRvbj5cblx0XHQ8L2Rpdj5cblx0PC9wLW1vZGFsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZVRlbXBsYXRlPlxuXHQ8cC1lbXB0eS1zdGF0ZVxuXHRcdCpuZ0lmPVwiZW1wdHlTdGF0ZVR5cGUgPT09ICdmaWx0ZXJlZCc7IGVsc2UgZW1wdHlTdGF0ZU5vbkZpbHRlclRlbXBsYXRlXCJcblx0XHRjbGFzcz1cIm15LTE2IHNlbGYtY2VudGVyXCJcblx0XHRbaWxsdXN0cmF0aW9uXT1cImVtcHR5U3RhdGVGaWx0ZXJlZElsbHVzdHJhdGlvblwiXG5cdFx0W2hlYWRlcl09XCJlbXB0eVN0YXRlRmlsdGVyZWRIZWFkZXJcIlxuXHRcdFtjb250ZW50XT1cImVtcHR5U3RhdGVGaWx0ZXJlZENvbnRlbnRcIlxuXHRcdFtlbmFibGVBY3Rpb25dPVwiZmFsc2VcIlxuXHQ+PC9wLWVtcHR5LXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlTm9uRmlsdGVyVGVtcGxhdGU+XG5cdDxwLWVtcHR5LXN0YXRlXG5cdFx0Y2xhc3M9XCJteS0xNiBzZWxmLWNlbnRlclwiXG5cdFx0W2lsbHVzdHJhdGlvbl09XCJlbXB0eVN0YXRlSWxsdXN0cmF0aW9uXCJcblx0XHRbaGVhZGVyXT1cImVtcHR5U3RhdGVIZWFkZXJcIlxuXHRcdFtjb250ZW50XT1cImVtcHR5U3RhdGVDb250ZW50XCJcblx0XHRbZW5hYmxlQWN0aW9uXT1cImVuYWJsZUVtcHR5U3RhdGVBY3Rpb25cIlxuXHRcdFthY3Rpb25UZXh0XT1cImVtcHR5U3RhdGVBY3Rpb25cIlxuXHRcdFthY3Rpb25JY29uXT1cImVtcHR5U3RhdGVBY3Rpb25JY29uXCJcblx0XHQoYWN0aW9uKT1cImVtcHR5U3RhdGVDbGlja2VkKClcIlxuXHQ+PC9wLWVtcHR5LXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==