@ieeesa-npm/presentation 0.30.2 → 0.30.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/accordion/accordion.component.mjs +3 -3
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +40 -99
- package/esm2022/lib/components/card/card.component.mjs +3 -3
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/components/chips/chips.component.mjs +3 -3
- package/esm2022/lib/components/data-table/data-table.component.mjs +3 -3
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +3 -3
- package/esm2022/lib/components/date-picker-header/date-picker-header.component.mjs +3 -3
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +3 -3
- package/esm2022/lib/components/file-download/file-download.component.mjs +3 -3
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +3 -3
- package/esm2022/lib/components/filter/filter.component.mjs +3 -3
- package/esm2022/lib/components/footer/footer.component.mjs +3 -3
- package/esm2022/lib/components/form-error/form-error.component.mjs +3 -3
- package/esm2022/lib/components/form-support-text/form-support-text.component.mjs +3 -3
- package/esm2022/lib/components/header/header.component.mjs +3 -3
- package/esm2022/lib/components/icon-button/icon-button.component.mjs +3 -3
- package/esm2022/lib/components/image-preview/image-preview.component.mjs +3 -3
- package/esm2022/lib/components/inactive-tenant/inactive-tenant.component.mjs +3 -3
- package/esm2022/lib/components/input/input.component.mjs +3 -3
- package/esm2022/lib/components/list/list.component.mjs +3 -3
- package/esm2022/lib/components/loader/loader.component.mjs +3 -3
- package/esm2022/lib/components/menu/menu.component.mjs +3 -3
- package/esm2022/lib/components/modal/modal.component.mjs +3 -3
- package/esm2022/lib/components/modal-confirmation/modal-confirmation.component.mjs +3 -3
- package/esm2022/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.mjs +3 -3
- package/esm2022/lib/components/navigation-menu/navigation-menu.component.mjs +3 -3
- package/esm2022/lib/components/notification/notification.component.mjs +3 -3
- package/esm2022/lib/components/radio/radio.component.mjs +3 -3
- package/esm2022/lib/components/rich-text-editor/rich-text-editor.component.mjs +3 -3
- package/esm2022/lib/components/search/search.component.mjs +3 -3
- package/esm2022/lib/components/select/select.component.mjs +3 -3
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +3 -3
- package/esm2022/lib/components/tabs/tabs.component.mjs +3 -3
- package/esm2022/lib/components/text-area/text-area.component.mjs +3 -3
- package/esm2022/lib/components/tile/tile.component.mjs +3 -3
- package/esm2022/lib/components/time-picker/time-picker.component.mjs +3 -3
- package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +3 -3
- package/esm2022/lib/components/welcome/welcome.component.mjs +3 -3
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/ieeesa-npm-presentation.mjs +117 -204
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/breadcrumb/breadcrumb.component.d.ts +4 -12
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +1 -1
- package/lib/components/file-upload/file-upload.component.d.ts +1 -1
- package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +1 -1
- package/lib/directives/file-upload/file-upload.directive.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/esm2022/lib/services/breadcrumb.service.mjs +0 -32
- package/lib/services/breadcrumb.service.d.ts +0 -18
|
@@ -585,7 +585,7 @@ export class DataTableComponent {
|
|
|
585
585
|
this.destroy$.unsubscribe();
|
|
586
586
|
}
|
|
587
587
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.BreakpointObserverService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
588
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataTableComponent, isStandalone: true, selector: "ieeesa-data-table", inputs: { tableDataInfo: "tableDataInfo", nestedTableDataInfo: "nestedTableDataInfo", columnSchemaInfo: "columnSchemaInfo", nestedTableColumnSchemaInfo: "nestedTableColumnSchemaInfo", tableActions: "tableActions", hasNestedTable: "hasNestedTable", tableColumnActions: "tableColumnActions", tableColumnActionMenuSize: "tableColumnActionMenuSize", tableRowActions: "tableRowActions", nestedTableRowActions: "nestedTableRowActions", caption: "caption", viewAll: "viewAll", paginatorConfig: "paginatorConfig", nestedPaginatorConfig: "nestedPaginatorConfig", legends: "legends", pageIndex: "pageIndex", pageSize: "pageSize", searchPlaceHolderText: "searchPlaceHolderText", rowEditButton: "rowEditButton", rowDeleteButton: "rowDeleteButton", tableEditButton: "tableEditButton", tableDeleteButton: "tableDeleteButton", rowExpandButton: "rowExpandButton", rowCollapseButton: "rowCollapseButton", isNestedTableHeaderNeeded: "isNestedTableHeaderNeeded", addButton: "addButton", defaultColumnSortDirection: "defaultColumnSortDirection", defaultSortedColumn: "defaultSortedColumn", isClearSortNeeded: "isClearSortNeeded", filters: "filters", selectedFilterOptions: "selectedFilterOptions", appliedFilterOptions: "appliedFilterOptions", searchType: "searchType", className: "className", searchSupportMessage: "searchSupportMessage", inbuiltSortingNeeded: "inbuiltSortingNeeded", isCellTextOverflowEllipsis: "isCellTextOverflowEllipsis", isTableHeaderNeeded: "isTableHeaderNeeded", tableColumnsHeaderText: "tableColumnsHeaderText", verticalColumnHeaderNumber: "verticalColumnHeaderNumber", scrollbarSupportMessage: "scrollbarSupportMessage", isScrollSupportMessageNeeded: "isScrollSupportMessageNeeded", isStickyHeaderNeeded: "isStickyHeaderNeeded", customStickyHeaderNeeded: "customStickyHeaderNeeded", headerElementClassName: "headerElementClassName", minCharToSearch: "minCharToSearch", searchResultMessage: "searchResultMessage", rowMenuActionIcon: "rowMenuActionIcon", canDisableCheckbox: "canDisableCheckbox", isEllipsisRequiredForLink: "isEllipsisRequiredForLink" }, outputs: { rowSelected: "rowSelected", selectedRowToEdit: "selectedRowToEdit", selectedRowToDelete: "selectedRowToDelete", selectedRowsToDelete: "selectedRowsToDelete", rowLink: "rowLink", addRow: "addRow", columnDataOnRowLinkClick: "columnDataOnRowLinkClick", menuActionClick: "menuActionClick", selectActionMenu: "selectActionMenu", paginationChange: "paginationChange", selectedFilter: "selectedFilter", removeFilteredOption: "removeFilteredOption", filteredOptions: "filteredOptions", searchedValue: "searchedValue", sortChange: "sortChange", selectedRowsInfo: "selectedRowsInfo", rowExpansionClick: "rowExpansionClick", tableColumnMenuActionClick: "tableColumnMenuActionClick", tableColumnMenuToggleButton: "tableColumnMenuToggleButton", rowSlideToggle: "rowSlideToggle" }, host: { listeners: { "document:scroll": "setStickyTableHeader()" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "tableContent", first: true, predicate: ["tableContent"], descendants: true }], ngImport: i0, template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em;width:100%}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-arrow{opacity:1!important;transform:none!important;color:#777a7e}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-sorted .mat-sort-header-arrow{color:#00629b}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-indicator{transform:translateY(0)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-right{transform:rotate(45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-left{transform:rotate(-45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link{height:auto;text-decoration:underline;color:#00629b!important;font-size:.875rem;text-align:left}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link:focus{border:2px solid #000000}.ieeesa-data-table__content .ieeesa-data-table__cell-content-under-link{margin-bottom:0;font-size:.75rem;color:#63666a!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content--text{color:#333436}.ieeesa-data-table__cell-content--ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:0}.ieeesa-data-table__message{color:#ba0c2f!important}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__cell-content-link{padding:0!important;white-space:normal;word-wrap:break-word;border:none;background:none;min-width:auto!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:12.25em}.ieeesa-data-table__cell-content-link--ellipsis .mdc-button__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ieeesa-data-table__actions{padding:.75em 0 .75em .15em;position:relative;margin-right:0}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table .ieeesa-icon-button{padding:0 3px}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table .mat-mdc-table{background:none}.ieeesa-data-table tbody{border-bottom:1px solid #9ba0a6}.ieeesa-data-table tbody tr{border-top:.0625em solid #dbe2eb;box-shadow:0 1px #dbe2eb inset}.ieeesa-data-table tbody tr.odd{background-color:#f8fcff}.ieeesa-data-table tbody tr.even{background-color:#fff}.ieeesa-data-table thead tr{box-shadow:0 1px #9ba0a6 inset;background-color:#fff;border-top:1px solid #9ba0a6}.ieeesa-data-table thead tr th{font-size:.75rem;color:#323232}.ieeesa-data-table__column-select{width:1em;padding:0!important}.ieeesa-data-table tr.ieeesa-row-expanded-table-detail{height:0}.ieeesa-data-table .ieeesa-expanded-row{padding-left:5.5em}.ieeesa-data-table .ieeesa-expanded-row .ieeesa-nested-data-table__cell-row{background-color:#f8fcff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table .ieeesa-expanded-row__footer{border-top:1px solid #323232;padding:.25em .75em .25em .5em}.ieeesa-data-table .ieeesa-expanded-row__footer--detail{color:#000;font-size:.875rem}.ieeesa-data-table .cdk-column-expandedDetail{padding:0!important;background-color:#f8fcff!important}.ieeesa-data-table__cell-content-under-link{color:#63666a!important}.ieeesa-data-table__pagination-container .mat-mdc-paginator-page-size-label{color:#0009;position:relative;left:2em}.ieeesa-data-table__pagination-container .mat-mdc-paginator-range-label{color:#000000de}.ieeesa-data-table__pagination{background-color:#fff}.ieeesa-data-table__pagination .mat-mdc-select-value{display:flex;justify-content:center}.ieeesa-data-table__pagination .mdc-notched-outline__trailing,.ieeesa-data-table__pagination .mdc-notched-outline__notch,.ieeesa-data-table__pagination .mdc-notched-outline__leading{border:none!important}.ieeesa-data-table__pagination .mat-mdc-paginator-container{padding:0;flex-wrap:nowrap}.ieeesa-data-table__pagination .mat-mdc-paginator-page-size,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-label,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-select,.ieeesa-data-table__pagination .mat-mdc-paginator-range-label{margin:0}@media (max-width: 767px){.ieeesa-expanded-row{padding-left:4.85em!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:6.875em}}\n"], dependencies: [{ kind: "pipe", type: i0.forwardRef(function () { return SafePipe; }), name: "safe" }, { kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatSortModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i3.MatSort; }), selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i0.forwardRef(function () { return i3.MatSortHeader; }), selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i0.forwardRef(function () { return SlideToggleComponent; }), selector: "ieeesa-slide-toggle", inputs: ["formControlName", "slideToggle", "isDisabled", "canShowIcon"], outputs: ["slideToggleChange"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatSlideToggleModule; }) }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatTableModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i4.MatTable; }), selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderCellDef; }), selector: "[matHeaderCellDef]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderRowDef; }), selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatColumnDef; }), selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatCellDef; }), selector: "[matCellDef]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatRowDef; }), selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderCell; }), selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatCell; }), selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i0.forwardRef(function () { return i4.MatHeaderRow; }), selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i0.forwardRef(function () { return i4.MatRow; }), selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatPaginatorModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i5.MatPaginator; }), selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatCheckboxModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i6.MatCheckbox; }), selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatButtonModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i7.MatButton; }), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(function () { return IconButtonComponent; }), selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "component", type: i0.forwardRef(function () { return SearchComponent; }), selector: "ieeesa-search", inputs: ["formControlName", "placeholderLabel", "searchTerm", "supportMessage", "searchType", "minCharacterToSearch"], outputs: ["searchValue"] }, { kind: "component", type: i0.forwardRef(function () { return FilterComponent; }), selector: "ieeesa-filter", inputs: ["filterOptionType", "appliedFilterOptions", "filterButton", "filters", "canShowSelection", "selectedFilterOptions"], outputs: ["selectedFilter", "filteredOptions", "removeFilteredOption", "filterDropdownSearch"] }, { kind: "directive", type: i0.forwardRef(function () { return TextTruncatedDirective; }), selector: "[matTooltip][ieeesaTextTruncated]", inputs: ["elementClassNameToAddTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return MenuComponent; }), selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatTooltipModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i8.MatTooltip; }), selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return LegendComponent; }), selector: "ieeesa-legend", inputs: ["legends", "isSorting"] }], animations: [
|
|
588
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataTableComponent, isStandalone: true, selector: "ieeesa-data-table", inputs: { tableDataInfo: "tableDataInfo", nestedTableDataInfo: "nestedTableDataInfo", columnSchemaInfo: "columnSchemaInfo", nestedTableColumnSchemaInfo: "nestedTableColumnSchemaInfo", tableActions: "tableActions", hasNestedTable: "hasNestedTable", tableColumnActions: "tableColumnActions", tableColumnActionMenuSize: "tableColumnActionMenuSize", tableRowActions: "tableRowActions", nestedTableRowActions: "nestedTableRowActions", caption: "caption", viewAll: "viewAll", paginatorConfig: "paginatorConfig", nestedPaginatorConfig: "nestedPaginatorConfig", legends: "legends", pageIndex: "pageIndex", pageSize: "pageSize", searchPlaceHolderText: "searchPlaceHolderText", rowEditButton: "rowEditButton", rowDeleteButton: "rowDeleteButton", tableEditButton: "tableEditButton", tableDeleteButton: "tableDeleteButton", rowExpandButton: "rowExpandButton", rowCollapseButton: "rowCollapseButton", isNestedTableHeaderNeeded: "isNestedTableHeaderNeeded", addButton: "addButton", defaultColumnSortDirection: "defaultColumnSortDirection", defaultSortedColumn: "defaultSortedColumn", isClearSortNeeded: "isClearSortNeeded", filters: "filters", selectedFilterOptions: "selectedFilterOptions", appliedFilterOptions: "appliedFilterOptions", searchType: "searchType", className: "className", searchSupportMessage: "searchSupportMessage", inbuiltSortingNeeded: "inbuiltSortingNeeded", isCellTextOverflowEllipsis: "isCellTextOverflowEllipsis", isTableHeaderNeeded: "isTableHeaderNeeded", tableColumnsHeaderText: "tableColumnsHeaderText", verticalColumnHeaderNumber: "verticalColumnHeaderNumber", scrollbarSupportMessage: "scrollbarSupportMessage", isScrollSupportMessageNeeded: "isScrollSupportMessageNeeded", isStickyHeaderNeeded: "isStickyHeaderNeeded", customStickyHeaderNeeded: "customStickyHeaderNeeded", headerElementClassName: "headerElementClassName", minCharToSearch: "minCharToSearch", searchResultMessage: "searchResultMessage", rowMenuActionIcon: "rowMenuActionIcon", canDisableCheckbox: "canDisableCheckbox", isEllipsisRequiredForLink: "isEllipsisRequiredForLink" }, outputs: { rowSelected: "rowSelected", selectedRowToEdit: "selectedRowToEdit", selectedRowToDelete: "selectedRowToDelete", selectedRowsToDelete: "selectedRowsToDelete", rowLink: "rowLink", addRow: "addRow", columnDataOnRowLinkClick: "columnDataOnRowLinkClick", menuActionClick: "menuActionClick", selectActionMenu: "selectActionMenu", paginationChange: "paginationChange", selectedFilter: "selectedFilter", removeFilteredOption: "removeFilteredOption", filteredOptions: "filteredOptions", searchedValue: "searchedValue", sortChange: "sortChange", selectedRowsInfo: "selectedRowsInfo", rowExpansionClick: "rowExpansionClick", tableColumnMenuActionClick: "tableColumnMenuActionClick", tableColumnMenuToggleButton: "tableColumnMenuToggleButton", rowSlideToggle: "rowSlideToggle" }, host: { listeners: { "document:scroll": "setStickyTableHeader()" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "tableContent", first: true, predicate: ["tableContent"], descendants: true }], ngImport: i0, template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em;width:100%}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-arrow{opacity:1!important;transform:none!important;color:#777a7e}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-sorted .mat-sort-header-arrow{color:#00629b}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-indicator{transform:translateY(0)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-right{transform:rotate(45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-left{transform:rotate(-45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link{height:auto;text-decoration:underline;color:#00629b!important;font-size:.875rem;text-align:left}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link:focus{border:2px solid #000000}.ieeesa-data-table__content .ieeesa-data-table__cell-content-under-link{margin-bottom:0;font-size:.75rem;color:#63666a!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content--text{color:#333436}.ieeesa-data-table__cell-content--ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:0}.ieeesa-data-table__message{color:#ba0c2f!important}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__cell-content-link{padding:0!important;white-space:normal;word-wrap:break-word;border:none;background:none;min-width:auto!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:12.25em}.ieeesa-data-table__cell-content-link--ellipsis .mdc-button__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ieeesa-data-table__actions{padding:.75em 0 .75em .15em;position:relative;margin-right:0}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table .ieeesa-icon-button{padding:0 3px}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table .mat-mdc-table{background:none}.ieeesa-data-table tbody{border-bottom:1px solid #9ba0a6}.ieeesa-data-table tbody tr{border-top:.0625em solid #dbe2eb;box-shadow:0 1px #dbe2eb inset}.ieeesa-data-table tbody tr.odd{background-color:#f8fcff}.ieeesa-data-table tbody tr.even{background-color:#fff}.ieeesa-data-table thead tr{box-shadow:0 1px #9ba0a6 inset;background-color:#fff;border-top:1px solid #9ba0a6}.ieeesa-data-table thead tr th{font-size:.75rem;color:#323232}.ieeesa-data-table__column-select{width:1em;padding:0!important}.ieeesa-data-table tr.ieeesa-row-expanded-table-detail{height:0}.ieeesa-data-table .ieeesa-expanded-row{padding-left:5.5em}.ieeesa-data-table .ieeesa-expanded-row .ieeesa-nested-data-table__cell-row{background-color:#f8fcff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table .ieeesa-expanded-row__footer{border-top:1px solid #323232;padding:.25em .75em .25em .5em}.ieeesa-data-table .ieeesa-expanded-row__footer--detail{color:#000;font-size:.875rem}.ieeesa-data-table .cdk-column-expandedDetail{padding:0!important;background-color:#f8fcff!important}.ieeesa-data-table__cell-content-under-link{color:#63666a!important}.ieeesa-data-table__pagination-container .mat-mdc-paginator-page-size-label{color:#0009;position:relative;left:2em}.ieeesa-data-table__pagination-container .mat-mdc-paginator-range-label{color:#000000de}.ieeesa-data-table__pagination{background-color:#fff}.ieeesa-data-table__pagination .mat-mdc-select-value{display:flex;justify-content:center}.ieeesa-data-table__pagination .mdc-notched-outline__trailing,.ieeesa-data-table__pagination .mdc-notched-outline__notch,.ieeesa-data-table__pagination .mdc-notched-outline__leading{border:none!important}.ieeesa-data-table__pagination .mat-mdc-paginator-container{padding:0;flex-wrap:nowrap}.ieeesa-data-table__pagination .mat-mdc-paginator-page-size,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-label,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-select,.ieeesa-data-table__pagination .mat-mdc-paginator-range-label{margin:0}@media (max-width: 767px){.ieeesa-expanded-row{padding-left:4.85em!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:6.875em}}\n"], dependencies: [{ kind: "pipe", type: i0.forwardRef(function () { return SafePipe; }), name: "safe" }, { kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatSortModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i3.MatSort; }), selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i0.forwardRef(function () { return i3.MatSortHeader; }), selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i0.forwardRef(function () { return SlideToggleComponent; }), selector: "ieeesa-slide-toggle", inputs: ["formControlName", "slideToggle", "isDisabled", "canShowIcon"], outputs: ["slideToggleChange"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatSlideToggleModule; }) }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatTableModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i4.MatTable; }), selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderCellDef; }), selector: "[matHeaderCellDef]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderRowDef; }), selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatColumnDef; }), selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatCellDef; }), selector: "[matCellDef]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatRowDef; }), selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatHeaderCell; }), selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.MatCell; }), selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i0.forwardRef(function () { return i4.MatHeaderRow; }), selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i0.forwardRef(function () { return i4.MatRow; }), selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatPaginatorModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i5.MatPaginator; }), selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatCheckboxModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i6.MatCheckbox; }), selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatButtonModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i7.MatButton; }), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(function () { return IconButtonComponent; }), selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "component", type: i0.forwardRef(function () { return SearchComponent; }), selector: "ieeesa-search", inputs: ["formControlName", "placeholderLabel", "searchTerm", "supportMessage", "searchType", "minCharacterToSearch"], outputs: ["searchValue"] }, { kind: "component", type: i0.forwardRef(function () { return FilterComponent; }), selector: "ieeesa-filter", inputs: ["filterOptionType", "appliedFilterOptions", "filterButton", "filters", "canShowSelection", "selectedFilterOptions"], outputs: ["selectedFilter", "filteredOptions", "removeFilteredOption", "filterDropdownSearch"] }, { kind: "directive", type: i0.forwardRef(function () { return TextTruncatedDirective; }), selector: "[matTooltip][ieeesaTextTruncated]", inputs: ["elementClassNameToAddTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return MenuComponent; }), selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatTooltipModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i8.MatTooltip; }), selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return LegendComponent; }), selector: "ieeesa-legend", inputs: ["legends", "isSorting"] }], animations: [
|
|
589
589
|
trigger('detailExpand', [
|
|
590
590
|
state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),
|
|
591
591
|
state('expanded', style({ height: '*' })),
|
|
@@ -623,7 +623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
623
623
|
state('expanded', style({ height: '*' })),
|
|
624
624
|
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
625
625
|
]),
|
|
626
|
-
], template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em;width:100%}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-arrow{opacity:1!important;transform:none!important;color:#777a7e}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-sorted .mat-sort-header-arrow{color:#00629b}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-indicator{transform:translateY(0)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-right{transform:rotate(45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-left{transform:rotate(-45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link{height:auto;text-decoration:underline;color:#00629b!important;font-size:.875rem;text-align:left}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link:focus{border:2px solid #000000}.ieeesa-data-table__content .ieeesa-data-table__cell-content-under-link{margin-bottom:0;font-size:.75rem;color:#63666a!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content--text{color:#333436}.ieeesa-data-table__cell-content--ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:0}.ieeesa-data-table__message{color:#ba0c2f!important}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__cell-content-link{padding:0!important;white-space:normal;word-wrap:break-word;border:none;background:none;min-width:auto!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:12.25em}.ieeesa-data-table__cell-content-link--ellipsis .mdc-button__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ieeesa-data-table__actions{padding:.75em 0 .75em .15em;position:relative;margin-right:0}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table .ieeesa-icon-button{padding:0 3px}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table .mat-mdc-table{background:none}.ieeesa-data-table tbody{border-bottom:1px solid #9ba0a6}.ieeesa-data-table tbody tr{border-top:.0625em solid #dbe2eb;box-shadow:0 1px #dbe2eb inset}.ieeesa-data-table tbody tr.odd{background-color:#f8fcff}.ieeesa-data-table tbody tr.even{background-color:#fff}.ieeesa-data-table thead tr{box-shadow:0 1px #9ba0a6 inset;background-color:#fff;border-top:1px solid #9ba0a6}.ieeesa-data-table thead tr th{font-size:.75rem;color:#323232}.ieeesa-data-table__column-select{width:1em;padding:0!important}.ieeesa-data-table tr.ieeesa-row-expanded-table-detail{height:0}.ieeesa-data-table .ieeesa-expanded-row{padding-left:5.5em}.ieeesa-data-table .ieeesa-expanded-row .ieeesa-nested-data-table__cell-row{background-color:#f8fcff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table .ieeesa-expanded-row__footer{border-top:1px solid #323232;padding:.25em .75em .25em .5em}.ieeesa-data-table .ieeesa-expanded-row__footer--detail{color:#000;font-size:.875rem}.ieeesa-data-table .cdk-column-expandedDetail{padding:0!important;background-color:#f8fcff!important}.ieeesa-data-table__cell-content-under-link{color:#63666a!important}.ieeesa-data-table__pagination-container .mat-mdc-paginator-page-size-label{color:#0009;position:relative;left:2em}.ieeesa-data-table__pagination-container .mat-mdc-paginator-range-label{color:#000000de}.ieeesa-data-table__pagination{background-color:#fff}.ieeesa-data-table__pagination .mat-mdc-select-value{display:flex;justify-content:center}.ieeesa-data-table__pagination .mdc-notched-outline__trailing,.ieeesa-data-table__pagination .mdc-notched-outline__notch,.ieeesa-data-table__pagination .mdc-notched-outline__leading{border:none!important}.ieeesa-data-table__pagination .mat-mdc-paginator-container{padding:0;flex-wrap:nowrap}.ieeesa-data-table__pagination .mat-mdc-paginator-page-size,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-label,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-select,.ieeesa-data-table__pagination .mat-mdc-paginator-range-label{margin:0}@media (max-width: 767px){.ieeesa-expanded-row{padding-left:4.85em!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:6.875em}}\n"] }]
|
|
626
|
+
], template: "<div class=\"ieeesa-data-table d-flex flex-column container-fluid\">\r\n <div\r\n class=\"d-flex\"\r\n [ngClass]=\"\r\n isMobileView\r\n ? 'flex-column ms-4'\r\n : 'justify-content-center position-relative'\r\n \"\r\n >\r\n <caption\r\n class=\"ieeesa-data-table--caption\"\r\n *ngIf=\"caption\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-title-lg-24' : 'ieeesa-title-md-18'\"\r\n >\r\n {{\r\n caption\r\n }}\r\n </caption>\r\n <p\r\n *ngIf=\"isScrollingEnabled && isScrollSupportMessageNeeded\"\r\n class=\"m-0 mb-2\"\r\n [ngClass]=\"{ 'position-absolute bottom-0 end-0': !isMobileView }\"\r\n >\r\n {{ scrollbarSupportMessage }}\r\n </p>\r\n </div>\r\n <div\r\n *ngIf=\"tableActions\"\r\n class=\"ieeesa-data-table__actions d-flex row justify-content-between align-items-lg-baseline p-sm-0\"\r\n [ngClass]=\"isMobileView ? 'ieeesa-data-table__mobile-view-actions' : ''\"\r\n >\r\n <ng-container\r\n *ngIf=\"!isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'col-md-7 col-lg-6' }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex align-items-center gap-lg-4 gap-md-3 gap-sm-3 gap-3 col-md-5 col-lg-6 justify-content-end ps-0\"\r\n [ngClass]=\"!tableActions?.isFilterNeeded ? 'col-md-12 col-lg-12' : ''\"\r\n >\r\n <ng-container *ngIf=\"!isMobileView\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isAddNeeded\"\r\n [iconButton]=\"addButton\"\r\n (iconButtonClick)=\"onAddClick()\"\r\n [ngClass]=\"\r\n addButton?.disabled ? 'ieeesa-data-table__actions--disabled' : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isEditNeeded\"\r\n [iconButton]=\"tableEditButton\"\r\n (iconButtonClick)=\"onTableEditClick()\"\r\n [ngClass]=\"\r\n selectedRows.selected.length !== 1\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <ieeesa-icon-button\r\n *ngIf=\"tableActions?.isDeleteNeeded\"\r\n [iconButton]=\"tableDeleteButton\"\r\n (iconButtonClick)=\"onDeleteTableClick()\"\r\n class=\"d-flex justify-content-between align-items-center\"\r\n [ngClass]=\"\r\n selectedRows.selected.length === 0 || tableDeleteButton.disabled\r\n ? 'ieeesa-data-table__actions--disabled'\r\n : ''\r\n \"\r\n ></ieeesa-icon-button>\r\n <button\r\n mat-button\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.search\"\r\n class=\"d-flex d-sm-flex d-md-none d-lg-none d-xl-none ieeesa-data-table__actions--search-group-icon\"\r\n type=\"button\"\r\n (click)=\"onTableSearchClick()\"\r\n >\r\n <i class=\"fa-solid fa-magnifying-glass\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"isMobileView\"\r\n [ngTemplateOutlet]=\"filterTemplateRef\"\r\n [ngTemplateOutletContext]=\"{ data: 'ieeesa-data-table__filter' }\"\r\n >\r\n </ng-container>\r\n <ng-template #filterTemplateRef let-className=\"data\">\r\n <ieeesa-filter\r\n class=\"{{ className }} p-0\"\r\n [filters]=\"filters\"\r\n *ngIf=\"tableActions?.isFilterNeeded\"\r\n [selectedFilterOptions]=\"selectedFilterOptions\"\r\n [appliedFilterOptions]=\"appliedFilterOptions\"\r\n (selectedFilter)=\"selectedFilterTypeInfo($event)\"\r\n (removeFilteredOption)=\"onRemovalOfFilteredOption($event)\"\r\n (filteredOptions)=\"onSelectedFilterOptions($event)\"\r\n ></ieeesa-filter>\r\n </ng-template>\r\n <ng-container *ngIf=\"isMobileView && isSearchActive\">\r\n <ng-container *ngTemplateOutlet=\"ieeesaSearch\"> </ng-container>\r\n </ng-container>\r\n <ng-template #ieeesaSearch>\r\n <ieeesa-search\r\n [placeholderLabel]=\"searchPlaceHolderText\"\r\n [searchType]=\"searchType\"\r\n (searchValue)=\"searchValue($event)\"\r\n *ngIf=\"tableActions?.isSearchNeeded\"\r\n class=\"ieeesa-data-table__search-wrapper mt-sm-2 md-sm-2 mt-2 md-2\"\r\n [supportMessage]=\"searchSupportMessage\"\r\n ></ieeesa-search>\r\n </ng-template>\r\n <p\r\n class=\"ieeesa-data-table__search_result_label\"\r\n *ngIf=\"searchResultMessage\"\r\n [innerHTML]=\"searchResultMessage | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-data-table__columns-header-text mb-0 ieeesa-title-md-18 text-center\"\r\n *ngIf=\"tableColumnsHeaderText\"\r\n [innerHTML]=\"tableColumnsHeaderText | safe : safeType\"\r\n ></p>\r\n <div\r\n class=\"ieeesa-data-table__content\"\r\n [ngClass]=\"\r\n tableDataInfo && tableDataInfo.length === 0\r\n ? 'ieeesa-data-table__no-table-data'\r\n : ''\r\n \"\r\n #tableContent\r\n >\r\n <table\r\n mat-table\r\n [ngClass]=\"className\"\r\n [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortDisableClear]=\"isClearSortNeeded\"\r\n [matSortActive]=\"defaultSortedColumn\"\r\n [matSortDirection]=\"defaultColumnSortDirection\"\r\n (matSortChange)=\"sortTableData($event)\"\r\n [trackBy]=\"trackById\"\r\n multiTemplateDataRows\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of columnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n mat-sort-header\r\n [disabled]=\"!column?.isSortableColumn\"\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleAllRowsSelection() : null\"\r\n [checked]=\"selectedRows?.hasValue() && isAllRowsSelected()\"\r\n [indeterminate]=\"selectedRows?.hasValue() && !isAllRowsSelected()\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.selectAll\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span [ngClass]=\"{ 'me-2': column.hasColumnActions }\">{{\r\n column.heading\r\n }}</span>\r\n <ng-container *ngIf=\"column.hasColumnActions\">\r\n <ieeesa-menu\r\n [menuItems]=\"tableColumnActions\"\r\n [defaultIconSize]=\"tableColumnActionMenuSize\"\r\n (menuItemClick)=\"tableColumnActionClick(column, $event)\"\r\n (menuToggleButtonElement)=\"tableColumnActionElement($event)\"\r\n class=\"ieeesa-data-table__column-menu\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: tableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n [attr.colspan]=\"displayedColumns?.length\"\r\n >\r\n <div\r\n class=\"ieeesa-expanded-row\"\r\n [@detailExpand]=\"row === expandedElement ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"ieeesa-nested-data-table\">\r\n <table\r\n #nestedTable\r\n mat-table\r\n [trackBy]=\"trackById\"\r\n [dataSource]=\"nestedTableDataSource\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let column of nestedTableColumnSchemaInfo;\r\n trackBy: trackById;\r\n let id = index\r\n \"\r\n matColumnDef=\"{{ column?.columnDef }}\"\r\n [sticky]=\"column?.isStickyColumn\"\r\n [stickyEnd]=\"column?.isStickyEndColumn\"\r\n >\r\n <th\r\n mat-header-cell\r\n [ngSwitch]=\"column?.columnDef\"\r\n class=\"ieeesa-data-table-header ieeesa-body-sm-bold-14\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n *matHeaderCellDef\r\n [attr.aria-label]=\"column?.heading\"\r\n >\r\n <ng-container *ngSwitchDefault>\r\n <span>{{ column.heading }}</span>\r\n </ng-container>\r\n </th>\r\n <td\r\n mat-cell\r\n class=\"ieeesa-data-table__cell-content ieeesa-title-sm-16\"\r\n *matCellDef=\"let row\"\r\n [ngClass]=\"\r\n column?.columnDef === columnType?.SELECT\r\n ? 'ieeesa-data-table__column-select'\r\n : ''\r\n \"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n tableData;\r\n context: {\r\n column: column,\r\n row: row,\r\n tableRowActions: nestedTableRowActions\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNestedTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"\r\n nestedTableDisplayedColumns;\r\n sticky: false\r\n \"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-nested-data-table__cell-row\"\r\n *matRowDef=\"let row; columns: nestedTableDisplayedColumns\"\r\n [ngStyle]=\"\r\n row?.legendColor\r\n ? getRowBorderLeftColor(row?.legendColor)\r\n : ''\r\n \"\r\n ></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"row === expandedElement\">\r\n <div\r\n class=\"d-flex justify-content-between align-items-center ieeesa-expanded-row__footer\"\r\n *ngIf=\"\r\n nestedPaginatorConfig.totalRecords >\r\n nestedPaginatorConfig.recordsPerPage &&\r\n nestedPaginatorConfig.recordsPerPage > 0\r\n \"\r\n >\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.link\"\r\n >\r\n {{ viewAll ?? \"\" }}\r\n </button>\r\n <span class=\"nested-element-detail__footer--detail\">{{\r\n showNestedTablePaginationInfo\r\n }}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"isTableHeaderNeeded\">\r\n <tr\r\n mat-header-row\r\n class=\"ieeesa-data-table__header-row\"\r\n *matHeaderRowDef=\"displayedColumns; sticky: false\"\r\n ></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n class=\"ieeesa-data-table__cell-row\"\r\n [ngClass]=\"(i + 1) % 2 === 0 ? 'even' : 'odd'\"\r\n [ngStyle]=\"\r\n row?.legendColor ? getRowBorderLeftColor(row?.legendColor) : ''\r\n \"\r\n *matRowDef=\"let row; columns: displayedColumns; let i = dataIndex\"\r\n ></tr>\r\n <ng-container *ngIf=\"hasNestedTable\">\r\n <tr\r\n mat-row\r\n *matRowDef=\"let details; columns: ['expandedDetail']\"\r\n class=\"ieeesa-row-expanded-table-detail\"\r\n ></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n<p\r\n class=\"ieeesa-data-table__message ieeesa-title-lg-bold-24 text-center p-5\"\r\n *ngIf=\"tableDataInfo && tableDataInfo.length === 0\"\r\n>\r\n {{ noRecordFound }}\r\n</p>\r\n<div class=\"row ieeesa-data-table__pagination-container\">\r\n <ieeesa-legend\r\n class=\"col-sm-12 col-md-5 d-flex align-items-end px-4\"\r\n *ngIf=\"legends?.length\"\r\n [ngClass]=\"!tableActions?.isPaginationNeeded ? 'col-md-12' : ''\"\r\n [legends]=\"legends\"\r\n [isSorting]=\"true\"\r\n ></ieeesa-legend>\r\n <div\r\n *ngIf=\"tableActions?.isPaginationNeeded\"\r\n class=\"ieeesa-data-table__pagination d-flex flex-row-reverse col-sm-12 col-md-7\"\r\n [ngClass]=\"!legends?.length ? 'col-md-12' : ''\"\r\n [attr.aria-label]=\"constants?.dataTable?.ariaLabel?.pagination\"\r\n >\r\n <mat-paginator\r\n #paginator\r\n [pageSize]=\"paginatorConfig?.recordsPerPage\"\r\n [pageSizeOptions]=\"paginatorConfig.pageSizeOptions\"\r\n (page)=\"handlePagination($event)\"\r\n [length]=\"paginatorConfig?.totalRecords\"\r\n ></mat-paginator>\r\n </div>\r\n</div>\r\n<ng-template\r\n #tableData\r\n let-column=\"column\"\r\n let-row=\"row\"\r\n let-tableRowActions=\"tableRowActions\"\r\n>\r\n <ng-container [ngSwitch]=\"column?.columnType\">\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngIf=\"isCellTextOverflowEllipsis; then ellipsisCell; else textWrapCell\"\r\n >\r\n </ng-container>\r\n <ng-template #textWrapCell>\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"column?.cellData(row) | safe : safeType\"\r\n ></p>\r\n <ng-container *ngIf=\"!column?.isHTMLCellData\">\r\n <p\r\n class=\"m-0 ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p></ng-container\r\n >\r\n </ng-template>\r\n <ng-template #ellipsisCell>\r\n <p\r\n ieeesaTextTruncated\r\n [matTooltip]=\"column?.cellData(row)\"\r\n class=\"ieeesa-data-table__cell-content--ellipsis ieeesa-body-color-sm-14 ieeesa-data-table__cell-content--text\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </p>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.LINK\">\r\n <div class=\"ieeesa-cell-data\">\r\n <ng-container\r\n *ngIf=\"\r\n isEllipsisRequiredForLink;\r\n then ellipsisCell;\r\n else textWrapCell\r\n \"\r\n >\r\n </ng-container>\r\n <ng-template #ellipsisCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n ieeesaTextTruncated\r\n [elementClassNameToAddTooltip]=\"'.mdc-button .mdc-button__label'\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link ieeesa-data-table__cell-content-link--ellipsis\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText ?? column?.cellData(row)\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n <ng-template #textWrapCell>\r\n <button\r\n mat-button\r\n (click)=\"onLinkClick(row, column)\"\r\n class=\"ieeesa-btn-label-lg-bold-16 ieeesa-data-table__cell-content-link\"\r\n [attr.aria-label]=\"column?.cellData(row)\"\r\n [matTooltip]=\"row?.toolTipText\"\r\n >\r\n {{ column?.cellData(row) }}\r\n </button>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"column?.isContentUnderLink\">\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"column?.isHTMLCellData\"\r\n [innerHTML]=\"row?.contentUnderLink | safe : safeType\"\r\n ></p>\r\n <p\r\n class=\"ieeesa-body-sm-14 ieeesa-data-table__cell-content-under-link\"\r\n *ngIf=\"!column?.isHTMLCellData\"\r\n >\r\n {{ row?.contentUnderLink }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.NESTED_TABLE\">\r\n <ieeesa-icon-button\r\n mat-button\r\n *ngIf=\"row?.hasChildren\"\r\n (iconButtonClick)=\"\r\n expandedElement = expandedElement === row ? null : row;\r\n onTableRowExpansionClick(row)\r\n \"\r\n [iconButton]=\"\r\n expandedElement === row ? rowExpandButton : rowCollapseButton\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.SELECT\">\r\n <mat-checkbox\r\n class=\"col-2\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onSelectClick(row) : null\"\r\n [checked]=\"selectedRows.isSelected(row)\"\r\n [aria-label]=\"constants?.dataTable?.ariaLabel?.select\"\r\n [disabled]=\"row?.disable && canDisableCheckbox\"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.EDIT\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowEditButton\"\r\n (iconButtonClick)=\"onEditClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.DELETE\">\r\n <ieeesa-icon-button\r\n [iconButton]=\"rowDeleteButton\"\r\n (iconButtonClick)=\"onDeleteClick(row)\"\r\n ></ieeesa-icon-button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType.SLIDE_TOGGLE\">\r\n <ieeesa-slide-toggle\r\n [slideToggle]=\"column?.cellData(row)\"\r\n (slideToggleChange)=\"rowSlideToggleChange($event, row)\"\r\n [canShowIcon]=\"true\"\r\n ></ieeesa-slide-toggle>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"columnType?.ACTIONS\">\r\n <ieeesa-menu\r\n [button]=\"rowMenuActionIcon\"\r\n [menuItems]=\"tableRowActions ?? row.menuAction\"\r\n (click)=\"menuItemAction(row)\"\r\n (menuItemClick)=\"onRowActionClick($event)\"\r\n ></ieeesa-menu>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-data-table{--mdc-checkbox-selected-focus-icon-color: #00629b;--mdc-checkbox-selected-hover-icon-color: #00629b;--mdc-checkbox-selected-icon-color: #00629b;--mdc-checkbox-selected-pressed-icon-color: #00629b;--mdc-checkbox-selected-focus-state-layer-color: #00629b;--mdc-checkbox-selected-hover-state-layer-color: #00629b;--mdc-checkbox-selected-pressed-state-layer-color: #00629b;--mat-option-selected-state-label-text-color: #00629b}.ieeesa-data-table__content{position:relative;overflow:auto;margin-top:.75em;width:100%}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-arrow{opacity:1!important;transform:none!important;color:#777a7e}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-sorted .mat-sort-header-arrow{color:#00629b}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-indicator{transform:translateY(0)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-right{transform:rotate(45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__header-row .mat-sort-header-container:not(.mat-sort-header-sorted) .mat-sort-header-pointer-left{transform:rotate(-45deg)!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link{height:auto;text-decoration:underline;color:#00629b!important;font-size:.875rem;text-align:left}.ieeesa-data-table__content .ieeesa-data-table__cell-content-link:focus{border:2px solid #000000}.ieeesa-data-table__content .ieeesa-data-table__cell-content-under-link{margin-bottom:0;font-size:.75rem;color:#63666a!important}.ieeesa-data-table__content .ieeesa-data-table__cell-content--text{color:#333436}.ieeesa-data-table__cell-content--ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;margin:0}.ieeesa-data-table__message{color:#ba0c2f!important}.ieeesa-data-table__mobile-view-actions{margin-left:3.125em}.ieeesa-data-table__actions-right{width:50%}.ieeesa-data-table__cell-content-link{padding:0!important;white-space:normal;word-wrap:break-word;border:none;background:none;min-width:auto!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:12.25em}.ieeesa-data-table__cell-content-link--ellipsis .mdc-button__label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ieeesa-data-table__actions{padding:.75em 0 .75em .15em;position:relative;margin-right:0}.ieeesa-data-table__actions--disabled .ieeesa-icon-button__svg{fill:#c9c5ca!important}.ieeesa-data-table__actions--search-group-icon{height:1.5em;right:0;min-width:auto!important;padding-left:1em;padding-top:.1875em;color:#00629b!important}.ieeesa-data-table__filter{margin-top:-45px}.ieeesa-data-table__search-wrapper{width:-webkit-fill-available;width:-moz-available}.ieeesa-data-table .ieeesa-icon-button{padding:0 3px}.ieeesa-data-table .ieeesa-icon-button__svg{height:1.5em;width:1.5em;fill:#00629b}.ieeesa-data-table .cell-text{white-space:normal;word-wrap:break-word}.ieeesa-data-table .mat-mdc-table{background:none}.ieeesa-data-table tbody{border-bottom:1px solid #9ba0a6}.ieeesa-data-table tbody tr{border-top:.0625em solid #dbe2eb;box-shadow:0 1px #dbe2eb inset}.ieeesa-data-table tbody tr.odd{background-color:#f8fcff}.ieeesa-data-table tbody tr.even{background-color:#fff}.ieeesa-data-table thead tr{box-shadow:0 1px #9ba0a6 inset;background-color:#fff;border-top:1px solid #9ba0a6}.ieeesa-data-table thead tr th{font-size:.75rem;color:#323232}.ieeesa-data-table__column-select{width:1em;padding:0!important}.ieeesa-data-table tr.ieeesa-row-expanded-table-detail{height:0}.ieeesa-data-table .ieeesa-expanded-row{padding-left:5.5em}.ieeesa-data-table .ieeesa-expanded-row .ieeesa-nested-data-table__cell-row{background-color:#f8fcff!important;box-shadow:0 1px #dce3e9 inset}.ieeesa-data-table .ieeesa-expanded-row__footer{border-top:1px solid #323232;padding:.25em .75em .25em .5em}.ieeesa-data-table .ieeesa-expanded-row__footer--detail{color:#000;font-size:.875rem}.ieeesa-data-table .cdk-column-expandedDetail{padding:0!important;background-color:#f8fcff!important}.ieeesa-data-table__cell-content-under-link{color:#63666a!important}.ieeesa-data-table__pagination-container .mat-mdc-paginator-page-size-label{color:#0009;position:relative;left:2em}.ieeesa-data-table__pagination-container .mat-mdc-paginator-range-label{color:#000000de}.ieeesa-data-table__pagination{background-color:#fff}.ieeesa-data-table__pagination .mat-mdc-select-value{display:flex;justify-content:center}.ieeesa-data-table__pagination .mdc-notched-outline__trailing,.ieeesa-data-table__pagination .mdc-notched-outline__notch,.ieeesa-data-table__pagination .mdc-notched-outline__leading{border:none!important}.ieeesa-data-table__pagination .mat-mdc-paginator-container{padding:0;flex-wrap:nowrap}.ieeesa-data-table__pagination .mat-mdc-paginator-page-size,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-label,.ieeesa-data-table__pagination .mat-mdc-paginator-page-size-select,.ieeesa-data-table__pagination .mat-mdc-paginator-range-label{margin:0}@media (max-width: 767px){.ieeesa-expanded-row{padding-left:4.85em!important}.ieeesa-data-table__cell-content-link--ellipsis{max-width:6.875em}}\n"] }]
|
|
627
627
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserverService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { tableDataInfo: [{
|
|
628
628
|
type: Input
|
|
629
629
|
}], nestedTableDataInfo: [{
|
|
@@ -777,4 +777,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
777
777
|
}], isEllipsisRequiredForLink: [{
|
|
778
778
|
type: Input
|
|
779
779
|
}] } });
|
|
780
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsRUFFakIsVUFBVSxFQUVWLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBRUwsa0JBQWtCLEdBRW5CLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLE9BQU8sRUFDUCxhQUFhLEdBR2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFFTCxRQUFRLEVBQ1IsUUFB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QXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDUSxvQkFBb0I7c0JBQXBELFlBQVk7dUJBQUMsaUJBQWlCO2dCQTZEM0IsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVFHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25EZXN0cm95LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgUmVuZGVyZXIyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7XHJcbiAgTWF0UGFnaW5hdG9yLFxyXG4gIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICBQYWdlRXZlbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHtcclxuICBNYXRTb3J0LFxyXG4gIE1hdFNvcnRNb2R1bGUsXHJcbiAgU29ydCxcclxuICBTb3J0RGlyZWN0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2UsXHJcbiAgU2FmZVBpcGUsXHJcbiAgU2FmZVR5cGUsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gIFRhYmxlQ29sdW1uVHlwZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc2NoZW1hLm1vZGVsJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BhZ2luYXRvci1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9jaGVja2JveC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ljb24tYnV0dG9uLm1vZGVsJztcclxuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQWN0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1hY3Rpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hpcE9wdGlvbiwgQ2hpcHNUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoaXAtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IFNlYXJjaFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VhcmNoLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyc0FuZE9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVycy1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGV4dC10cnVuY2F0ZWQvdGV4dC10cnVuY2F0ZWQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IExlZ2VuZENvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGVnZW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xlZ2VuZC5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uTWVudUluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29sdW1uLW1lbnUtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFNsaWRlVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vc2xpZGUtdG9nZ2xlL3NsaWRlLXRvZ2dsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbGlkZVRvZ2dsZU9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9zbGlkZS10b2dnbGUtb3B0aW9ucy5tb2RlbCc7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgYSBNYXRlcmlhbCBEZXNpZ24gc3R5bGVkIGRhdGEtdGFibGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHJvd3Mgb2YgZGF0YSB3aXRoIHNvcnRCeSwgZmlsdGVyQnksIGFkZC9lZGl0L2RlbGV0ZSB0YWJsZSByb3cgZGF0YSwgcGFnaW5hdGlvbiwgc2VhcmNoIHRhYmxlIGRhdGEuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKiBAaW1wbGVtZW50cyB7QWZ0ZXJWaWV3SW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWRhdGEtdGFibGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgZm9yd2FyZFJlZigoKSA9PiBTYWZlUGlwZSksXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U29ydE1vZHVsZSxcclxuICAgIFNsaWRlVG9nZ2xlQ29tcG9uZW50LFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgU2VhcmNoQ29tcG9uZW50LFxyXG4gICAgRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWVudUNvbXBvbmVudCxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgTGVnZW5kQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2NvbGxhcHNlZCcsXHJcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcclxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHByaXZhdGUgdGFibGVEYXRhITogYW55W107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIG5lc3RlZFRhYmxlRGF0YSE6IGFueVtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZXhwYW5kZWRFbGVtZW50OiBhbnk7XHJcbiAgQElucHV0KClcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldCB0YWJsZURhdGFJbmZvKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSB2YWx1ZTtcclxuICAgIHRoaXMudGFibGVEYXRhQ2hhbmdlcygpO1xyXG4gIH1cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldCB0YWJsZURhdGFJbmZvKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXQgbmVzdGVkVGFibGVEYXRhSW5mbyh2YWx1ZTogYW55W10pIHtcclxuICAgIHRoaXMubmVzdGVkVGFibGVEYXRhID0gdmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXQgbmVzdGVkVGFibGVEYXRhSW5mbygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRUYWJsZURhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgY29sdW1uU2NoZW1hITogVGFibGVDb2x1bW5TY2hlbWFbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2x1bW5TY2hlbWFJbmZvKHZhbHVlOiBUYWJsZUNvbHVtblNjaGVtYVtdKSB7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuY29sdW1uU2NoZW1hKVxyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtblNjaGVtYT8ubWFwKChjKSA9PiBjPy5jb2x1bW5EZWYpO1xyXG4gIH1cclxuICBnZXQgY29sdW1uU2NoZW1hSW5mbygpOiBUYWJsZUNvbHVtblNjaGVtYVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtblNjaGVtYTtcclxuICB9XHJcbiAgcHJpdmF0ZSBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYSE6IFRhYmxlQ29sdW1uU2NoZW1hW107XHJcbiAgQElucHV0KClcclxuICBzZXQgbmVzdGVkVGFibGVDb2x1bW5TY2hlbWFJbmZvKHZhbHVlOiBUYWJsZUNvbHVtblNjaGVtYVtdKSB7XHJcbiAgICB0aGlzLm5lc3RlZFRhYmxlQ29sdW1uU2NoZW1hID0gdmFsdWU7XHJcbiAgICB0aGlzLm5lc3RlZFRhYmxlRGlzcGxheWVkQ29sdW1ucyA9IHRoaXMubmVzdGVkVGFibGVDb2x1bW5TY2hlbWE/Lm1hcChcclxuICAgICAgKGMpID0+IGM/LmNvbHVtbkRlZlxyXG4gICAgKTtcclxuICAgIHRoaXMubmVzdGVkVGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLm5lc3RlZFRhYmxlRGF0YSk7XHJcbiAgfVxyXG4gIGdldCBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYUluZm8oKTogVGFibGVDb2x1bW5TY2hlbWFbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRUYWJsZUNvbHVtblNjaGVtYTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBASW5wdXQoKSB0YWJsZUFjdGlvbnMhOiBUYWJsZUFjdGlvbnM7XHJcbiAgQElucHV0KCkgaGFzTmVzdGVkVGFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZUNvbHVtbkFjdGlvbnMhOiBNZW51W107XHJcbiAgQElucHV0KCkgdGFibGVDb2x1bW5BY3Rpb25NZW51U2l6ZSA9ICcnO1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93QWN0aW9ucyE6IE1lbnVbXTtcclxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZVJvd0FjdGlvbnMhOiBNZW51W107XHJcbiAgQElucHV0KCkgY2FwdGlvbiE6IHN0cmluZztcclxuICBASW5wdXQoKSB2aWV3QWxsITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFnaW5hdG9yQ29uZmlndXJhdGlvbiE6IFBhZ2luYXRvckNvbmZpZztcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdpbmF0b3JDb25maWcodmFsdWU6IFBhZ2luYXRvckNvbmZpZykge1xyXG4gICAgdGhpcy5wYWdpbmF0b3JDb25maWd1cmF0aW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBwYWdpbmF0b3JDb25maWcoKTogUGFnaW5hdG9yQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvckNvbmZpZ3VyYXRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgbmVzdGVkUGFnaW5hdG9yQ29uZmlndXJhdGlvbiE6IFBhZ2luYXRvckNvbmZpZztcclxuICBASW5wdXQoKVxyXG4gIHNldCBuZXN0ZWRQYWdpbmF0b3JDb25maWcodmFsdWU6IFBhZ2luYXRvckNvbmZpZykge1xyXG4gICAgdGhpcy5uZXN0ZWRQYWdpbmF0b3JDb25maWd1cmF0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLnNob3dOZXN0ZWRUYWJsZVBhZ2luYXRpb25JbmZvID1cclxuICAgICAgJzEgLSAnICtcclxuICAgICAgK2Ake3RoaXMubmVzdGVkUGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlfWAgK1xyXG4gICAgICAnIG9mICcgK1xyXG4gICAgICArYCR7dGhpcy5uZXN0ZWRQYWdpbmF0b3JDb25maWcudG90YWxSZWNvcmRzfWA7XHJcbiAgfVxyXG4gIGdldCBuZXN0ZWRQYWdpbmF0b3JDb25maWcoKTogUGFnaW5hdG9yQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLm5lc3RlZFBhZ2luYXRvckNvbmZpZ3VyYXRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgbGVnZW5kc0luZm8hOiBMZWdlbmRbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBsZWdlbmRzKHZhbHVlOiBMZWdlbmRbXSkge1xyXG4gICAgdGhpcy5sZWdlbmRzSW5mbyA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgbGVnZW5kcygpOiBMZWdlbmRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZWdlbmRzSW5mbztcclxuICB9XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZUluZGV4ID0gMDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdlSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwYWdlSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlSW5kZXg7XHJcbiAgfVxyXG4gIHByaXZhdGUgY3VycmVudFBhZ2VTaXplID0gMDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VTaXplO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZWFyY2hQbGFjZUhvbGRlclRleHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcm93RWRpdEJ1dHRvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgcm93RGVsZXRlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSB0YWJsZUVkaXRCdXR0b24hOiBJY29uQnV0dG9uO1xyXG4gIEBJbnB1dCgpIHRhYmxlRGVsZXRlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSByb3dFeHBhbmRCdXR0b24hOiBJY29uQnV0dG9uO1xyXG4gIEBJbnB1dCgpIHJvd0NvbGxhcHNlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSBpc05lc3RlZFRhYmxlSGVhZGVyTmVlZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWRkQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9XHJcbiAgICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24uQVNDRU5ESU5HO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0ZWRDb2x1bW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNDbGVhclNvcnROZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnMhOiBDaGlwT3B0aW9uW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBASW5wdXQoKSBhcHBsaWVkRmlsdGVyT3B0aW9ucyE6IENoaXBPcHRpb25bXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBTZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5PTl9DTElDSztcclxuICBASW5wdXQoKSBjbGFzc05hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VhcmNoU3VwcG9ydE1lc3NhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5idWlsdFNvcnRpbmdOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0NlbGxUZXh0T3ZlcmZsb3dFbGxpcHNpcyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVIZWFkZXJOZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRhYmxlQ29sdW1uc0hlYWRlclRleHQgPSAnJztcclxuICBASW5wdXQoKSB2ZXJ0aWNhbENvbHVtbkhlYWRlck51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgc2Nyb2xsYmFyU3VwcG9ydE1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSBpc1Njcm9sbFN1cHBvcnRNZXNzYWdlTmVlZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNTdGlja3lIZWFkZXJOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21TdGlja3lIZWFkZXJOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoZWFkZXJFbGVtZW50Q2xhc3NOYW1lID0gJyc7XHJcbiAgQElucHV0KCkgbWluQ2hhclRvU2VhcmNoID0gdGhpcy5jb25zdGFudHM/LnNlYXJjaD8ubWluQ2hhclRvU2VhcmNoO1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dUb0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93VG9EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c1RvRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtblNjaGVtYVtdPigpO1xyXG4gIEBPdXRwdXQoKSByb3dMaW5rID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkRhdGFPblJvd0xpbmtDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbWVudUFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RBY3Rpb25NZW51ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwT3B0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSByZW1vdmVGaWx0ZXJlZE9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyZWRPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJzQW5kT3B0aW9uc1tdPigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hlZFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0luZm8gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uU2NoZW1hW10+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0V4cGFuc2lvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0YWJsZUNvbHVtbk1lbnVBY3Rpb25DbGljayA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uTWVudUluZm8+KCk7XHJcbiAgQE91dHB1dCgpIHRhYmxlQ29sdW1uTWVudVRvZ2dsZUJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBAT3V0cHV0KCkgcm93U2xpZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHNsaWRlVG9nZ2xlOiBTbGlkZVRvZ2dsZU9wdGlvbjtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICByb3dEYXRhOiBhbnk7XHJcbiAgfT4oKTtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvcicpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuICBoZWFkZXJDZWxsRWxlbWVudCE6IEhUTUxFbGVtZW50O1xyXG4gIGhlYWRlckhlaWdodCE6IERPTVJlY3Q7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250ZW50JykgdGFibGVDb250ZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2Nyb2xsJykgc2V0U3RpY2t5VGFibGVIZWFkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50ICYmIHRoaXMuY3VzdG9tU3RpY2t5SGVhZGVyTmVlZGVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFUYWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmllZWVzYS1kYXRhLXRhYmxlX19jb250ZW50JylcclxuICAgICAgICAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGlmICh0aGlzLmhlYWRlckVsZW1lbnRDbGFzc05hbWUpXHJcbiAgICAgICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBkb2N1bWVudFxyXG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKHRoaXMuaGVhZGVyRWxlbWVudENsYXNzTmFtZSlcclxuICAgICAgICAgID8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgYXMgRE9NUmVjdDtcclxuICAgICAgaWYgKGRhdGFUYWJsZUNvbnRlbnQpIHtcclxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcgLm1hdC1tZGMtaGVhZGVyLWNlbGwnKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZGF0YVRhYmxlQ29udGVudC50b3AgPFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuaGVhZGVySGVpZ2h0ID8gdGhpcy5oZWFkZXJIZWlnaHQuYm90dG9tIDogMCkgJiZcclxuICAgICAgICAgICAgICBkYXRhVGFibGVDb250ZW50LmJvdHRvbSA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlQ29udGVudC50b3AgKiAtMSArXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLmhlYWRlckhlaWdodCA/IHRoaXMuaGVhZGVySGVpZ2h0LmhlaWdodCA6IDApIC1cclxuICAgICAgICAgICAgICAgICAgMSArXHJcbiAgICAgICAgICAgICAgICAgICdweCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtbWRjLXRhYmxlLXN0aWNreScpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbHVtbiwgJ3pJbmRleCcsIDIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbHVtbiwgJ3Bvc2l0aW9uJywgJ3N0aWNreScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb2x1bW4sICd6SW5kZXgnLCAxKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb2x1bW4sICd0b3AnLCAwICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcclxuICBuZXN0ZWRUYWJsZURpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcclxuICBpc01vYmlsZVZpZXcgPSBmYWxzZTtcclxuICBpc1Njcm9sbGluZ0VuYWJsZWQgPSBmYWxzZTtcclxuICByZXNpemVPYnNlcnZlckZvclRhYmxlQ29udGVudCE6IFJlc2l6ZU9ic2VydmVyO1xyXG4gIHJlc2l6ZU9ic2VydmVyRm9yVGFibGVDZWxsITogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBuZXN0ZWRUYWJsZURhdGFTb3VyY2UhOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuICBzZWxlY3RlZFJvd3MgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVDb2x1bW5TY2hlbWE+KHRydWUsIFtdKTtcclxuICBwYWdlTGltaXQhOiBudW1iZXI7XHJcbiAgcGFnZU9mZnNldCE6IG51bWJlcjtcclxuICBjb2x1bW5UeXBlID0gVGFibGVDb2x1bW5UeXBlO1xyXG4gIGlzU2VhcmNoQWN0aXZlID0gZmFsc2U7XHJcbiAgY2xlYXJBbGwgPSB0aGlzLmNvbnN0YW50cz8uZGF0YVRhYmxlPy5sYWJlbD8uY2xlYXJBbGw7XHJcbiAgbm9SZWNvcmRGb3VuZCA9IHRoaXMuY29uc3RhbnRzPy5kYXRhVGFibGU/Lm1lc3NhZ2U/Lm5vUmVjb3JkRm91bmQ7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHNob3dOZXN0ZWRUYWJsZVBhZ2luYXRpb25JbmZvITogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3NlYXJjaFJlc3VsdE1lc3NhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBzZXQgc2VhcmNoUmVzdWx0TWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zZWFyY2hSZXN1bHRNZXNzYWdlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hSZXN1bHRNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0TWVzc2FnZTtcclxuICB9XHJcbiAgc2FmZVR5cGU6IFNhZmVUeXBlID0gU2FmZVR5cGUuSFRNTDtcclxuICBASW5wdXQoKSByb3dNZW51QWN0aW9uSWNvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgY2FuRGlzYWJsZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFbGxpcHNpc1JlcXVpcmVkRm9yTGluayA9IGZhbHNlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICApIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG4gICAgICAuZ2V0QnJlYWtwb2ludCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSByZXN1bHQubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgZGF0YSB0YWJsZSBjb21wb25lbnQgYW5kIHNldHMgdGhlIHRhYmxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1uU2NoZW1hPy5tYXAoKGMpID0+IGM/LmNvbHVtbkRlZik7XHJcbiAgICBjb25zdCB0YWJsZUFjdGlvbkJ1dHRvbnM6IEljb25CdXR0b25bXSA9IHRoaXMuY29uc3RhbnRzPy5kYXRhVGFibGU/LmJ1dHRvbnM7XHJcbiAgICB0aGlzLnJvd0VkaXRCdXR0b24gPSB0aGlzLnJvd0VkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzNdO1xyXG4gICAgdGhpcy5yb3dEZWxldGVCdXR0b24gPSB0aGlzLnJvd0RlbGV0ZUJ1dHRvbiA/PyB0YWJsZUFjdGlvbkJ1dHRvbnNbNF07XHJcbiAgICB0aGlzLmFkZEJ1dHRvbiA9IHRoaXMuYWRkQnV0dG9uID8/IHRhYmxlQWN0aW9uQnV0dG9uc1syXTtcclxuICAgIHRoaXMudGFibGVFZGl0QnV0dG9uID0gdGhpcy50YWJsZUVkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzBdO1xyXG4gICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbiA9IHRoaXMudGFibGVEZWxldGVCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzFdO1xyXG4gICAgdGhpcy5yb3dFeHBhbmRCdXR0b24gPSB0aGlzLnJvd0V4cGFuZEJ1dHRvbiA/PyB0YWJsZUFjdGlvbkJ1dHRvbnNbNV07XHJcbiAgICB0aGlzLnJvd0NvbGxhcHNlQnV0dG9uID1cclxuICAgICAgdGhpcy5yb3dDb2xsYXBzZUJ1dHRvbiA/PyB0aGlzLnJvd0NvbGxhcHNlQnV0dG9uID8/IHRhYmxlQWN0aW9uQnV0dG9uc1s2XTtcclxuICAgIHRoaXMudGFibGVEZWxldGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuY2hhbmdlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uc291cmNlPy5zZWxlY3RlZD8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRWRpdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcmVzdWx0Py5zb3VyY2U/LnNlbGVjdGVkPy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICAgICFyZXN1bHQ/LnNvdXJjZT8uc2VsZWN0ZWQ/LlswXT8uY2FuRGVsZXRlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uc291cmNlPy5zZWxlY3RlZD8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMudGFibGVEYXRhKTtcclxuICAgIGlmICh0aGlzLnNjcm9sbGJhclN1cHBvcnRNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNvbnRlbnQgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoXHJcbiAgICAgICAgKGVsZW1lbnQ6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1Njcm9sbGluZ0VuYWJsZWQgPVxyXG4gICAgICAgICAgICBlbGVtZW50WzBdPy50YXJnZXQ/LnNjcm9sbFdpZHRoID4gZWxlbWVudFswXT8udGFyZ2V0Py5jbGllbnRXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJsZUNvbHVtbnNIZWFkZXJUZXh0ICYmIHRoaXMudmVydGljYWxDb2x1bW5IZWFkZXJOdW1iZXIpXHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNlbGwgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0TWFyZ2luTGVmdEZvckhlYWRlclRleHQoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBzb3J0IGZlYXR1cmUgb2YgZGF0YVNvdXJjZSBhbmQgc2V0IG1hcmdpbiBsZWZ0IGZvciB0YWJsZUNvbHVtbnNIZWFkZXJUZXh0IGlmIGl0IGlzbid0IGVtcHR5LlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbmJ1aWx0U29ydGluZ05lZWRlZCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5zb3J0LmRpc2FibGVDbGVhciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlckNlbGxFbGVtZW50ID0gdGhpcy50YWJsZUNvbnRlbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAnLm1hdC1tZGMtaGVhZGVyLWNlbGwnXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlckZvclRhYmxlQ2VsbD8ub2JzZXJ2ZSh0aGlzLmhlYWRlckNlbGxFbGVtZW50KTtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNvbnRlbnQ/Lm9ic2VydmUoXHJcbiAgICAgIHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCBtYXJnaW4gbGVmdCBmb3IgdGFibGUgY29sdW1uIGhlYWRlciB0ZXh0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbHVtbnMuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldE1hcmdpbkxlZnRGb3JIZWFkZXJUZXh0KCk6IHZvaWQge1xyXG4gICAgbGV0IGNvbHVtbnNXaWR0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLnZlcnRpY2FsQ29sdW1uSGVhZGVyTnVtYmVyOyBjb2x1bW4rKykge1xyXG4gICAgICBjb25zdCB2ZXJ0aWNhbENvbHVtbkhlYWRlckNsYXNzTmFtZSA9XHJcbiAgICAgICAgJy5tYXQtY29sdW1uLScgKyB0aGlzLmNvbHVtblNjaGVtYVtjb2x1bW5dLmNvbHVtbkRlZjtcclxuICAgICAgY29uc3QgY29sdW1uRWxlbWVudCA9IHRoaXMuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgdmVydGljYWxDb2x1bW5IZWFkZXJDbGFzc05hbWVcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGNvbHVtbkVsZW1lbnQpIGNvbHVtbnNXaWR0aCArPSBjb2x1bW5FbGVtZW50Py5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnNIZWFkZXJFbGVtZW50ID0gdGhpcy5lbFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcclxuICAgICAgJy5pZWVlc2EtZGF0YS10YWJsZV9fY29sdW1ucy1oZWFkZXItdGV4dCdcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoY29sdW1uc0hlYWRlckVsZW1lbnQpXHJcbiAgICAgIGNvbHVtbnNIZWFkZXJFbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBjb2x1bW5zV2lkdGggKyAncHgnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdoZW5ldmVyIHRoZSB0YWJsZSBkYXRhIGNoYW5nZXMuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRhYmxlRGF0YUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZURhdGE7XHJcbiAgICAgIGlmICh0aGlzLmluYnVpbHRTb3J0aW5nTmVlZGVkKSB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5lc3RlZFRhYmxlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLm5lc3RlZFRhYmxlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5uZXN0ZWRUYWJsZURhdGE7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgLyoqXHJcbiAgICogU29ydFRhYmxlRGF0YSBtZXRob2QgZW1pdHMgdGhlIGNsaWNrZWQgdGFibGUgY29sdW1uIG5hbWUgYW5kIHNvcnRpbmcgZGlyZWN0aW9uXHJcbiAgICogQHBhcmFtIHtTb3J0fSBzb3J0XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRUYWJsZURhdGEoc29ydDogU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBlZGl0IGFjdGlvbnMgbWV0aG9kIGVtaXRzIHRoZSBjbGlja2VkIHJvdyBkYXRhXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvblJvd0FjdGlvbkNsaWNrKHJvdzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFjdGlvbk1lbnUuZW1pdChyb3cpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgc2xpZGUgdG9nZ2xlIG9wdGlvbiBhbG9uZyB3aXRoIHRoZSBzZWxlY3RlZCByb3cgaW5mby5cclxuICAgKiBAcGFyYW0ge1NsaWRlVG9nZ2xlT3B0aW9ufSBzbGlkZVRvZ2dsZU9wdGlvblxyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcm93U2xpZGVUb2dnbGVDaGFuZ2Uoc2xpZGVUb2dnbGVPcHRpb246IFNsaWRlVG9nZ2xlT3B0aW9uLCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5yb3dTbGlkZVRvZ2dsZS5lbWl0KHsgc2xpZGVUb2dnbGU6IHNsaWRlVG9nZ2xlT3B0aW9uLCByb3dEYXRhOiByb3cgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1lbnUgaXRlbSBhY3Rpb24gbWV0aG9kIGVtaXRzIHRoZSBjbGlja2VkIG1lbnUgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgbWVudUl0ZW1BY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudUFjdGlvbkNsaWNrLmVtaXQocm93KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT25TZWxlY3RDbGljayBtZXRob2QgZW1pdHMgdGhlIHJvd1NlbGVjdGVkIGV2ZW50IHdpdGggc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrZWRcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvblNlbGVjdENsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93cy50b2dnbGUocm93KTtcclxuICAgIHJvdy5jaGVja2VkID0gIXJvdy5jaGVja2VkO1xyXG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93c0luZm8uZW1pdCh0aGlzLnNlbGVjdGVkUm93cy5zZWxlY3RlZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRhYmxlQ29sdW1uQWN0aW9uSW5mbyBldmVudCB3aXRoIHRhYmxlQ29sdW1uSW5mbyBhbmQgbWVudUFjdGlvbkluZm8uXHJcbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtblNjaGVtYX0gY29sdW1uXHJcbiAgICogQHBhcmFtIHtNZW51fSBtZW51QWN0aW9uXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRhYmxlQ29sdW1uQWN0aW9uQ2xpY2soY29sdW1uOiBUYWJsZUNvbHVtblNjaGVtYSwgbWVudUFjdGlvbjogTWVudSk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbk1lbnVBY3Rpb25DbGljay5lbWl0KHtcclxuICAgICAgdGFibGVDb2x1bW5JbmZvOiBjb2x1bW4sXHJcbiAgICAgIG1lbnVBY3Rpb25JbmZvOiBtZW51QWN0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRhYmxlQ29sdW1uQWN0aW9uRWxlbWVudCBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCBIVE1MIEVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICB0YWJsZUNvbHVtbkFjdGlvbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5NZW51VG9nZ2xlQnV0dG9uLmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uRWRpdENsaWNrIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRSb3dUb0VkaXQgZXZlbnQgd2l0aCB0aGUgc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvbkVkaXRDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd1RvRWRpdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbkRlbGV0ZUNsaWNrIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRSb3dUb0RlbGV0ZSBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCByb3cgZGF0YS5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uRGVsZXRlQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dUb0RlbGV0ZS5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKk9uTGlua0NsaWNrIG1ldGhvZCBlbWl0cyB0aGUgZXZlbnQgd2l0aCByb3cgYW5kIGNvbHVtbi5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBwYXJhbSB7VGFibGVDb2x1bW5TY2hlbWF9IFtjb2x1bW5dXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb25MaW5rQ2xpY2socm93OiBhbnksIGNvbHVtbj86IFRhYmxlQ29sdW1uU2NoZW1hKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvd0xpbmsuZW1pdChyb3cpO1xyXG4gICAgdGhpcy5jb2x1bW5EYXRhT25Sb3dMaW5rQ2xpY2suZW1pdCh7IHJvdywgY29sdW1uIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25UYWJsZUVkaXRDbGljayBtZXRob2QgZW1pdHMgZXZlbnQgd2l0aCBzZWxlY3RlZCByb3dzIGRhdGEgd2hlbiBlZGl0IGJ1dHRvbiBjbGlja2VkLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBvblRhYmxlRWRpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd1RvRWRpdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uRGVsZXRlVGFibGVDbGljayBtZXRob2QgZW1pdHMgZXZlbnQgd2l0aCBzZWxlY3RlZCByb3cgZGF0YSB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZC5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25EZWxldGVUYWJsZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3NUb0RlbGV0ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uQWRkQ2xpY2sgbWV0aG9kIGVtaXRzIHRoZSBhZGQgZXZlbnQgd2hlbiBhZGQgYnV0dG9uIGNsaWNrZWQuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uQWRkQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFJvdy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPblRhYmxlU2VhcmNoQ2xpY2sgbWV0aG9kIHRvZ2dsZXMgdGhlIGlzU2VhcmNoQWN0aXZlIHN0YXRlIHdoZW4gdGhlIHNlYXJjaCBpY29uIGlzIGNsaWNrZWQgZm9yIHRoZSBtb2JpbGUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25UYWJsZVNlYXJjaENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NlYXJjaEFjdGl2ZSA9ICF0aGlzLmlzU2VhcmNoQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWRGaWx0ZXJJbmZvIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRGaWx0ZXIgZXZlbnQgd2l0aCBzZWxlY3RlZCBmaWx0ZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtDaGlwT3B0aW9ufSBvcHRpb25cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VsZWN0ZWRGaWx0ZXJUeXBlSW5mbyhvcHRpb246IENoaXBPcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIuZW1pdChvcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIHJvd0V4cGFuc2lvbkNsaWNrIGV2ZW50IHdpdGggdGhlIHNlbGVjdGVkIHJvdyBkYXRhIHdoZW4gdGhlIHJvdyBpcyBleHBhbmRlZC5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uVGFibGVSb3dFeHBhbnNpb25DbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXN0ZWRUYWJsZURhdGFTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRFbGVtZW50ID09PSByb3cpIHRoaXMucm93RXhwYW5zaW9uQ2xpY2suZW1pdChyb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25TZWxlY3RlZEZpbHRlck9wdGlvbnMgbWV0aG9kIGVtaXRzIHRoZSBmaWx0ZXJlZE9wdGlvbnMgZXZlbnQgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBhbmQgYWRkcyBcIkNsZWFyIGFsbFwiIG9wdGlvbiB0byBjbGVhciB0aGUgYWxsIHNlbGVjdGlvbnMuXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbltdfSBvcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2VsZWN0ZWRGaWx0ZXJPcHRpb25zKHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuZW1pdChzZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucyA9IFtdO1xyXG4gICAgc2VsZWN0ZWRPcHRpb25zPy5mb3JFYWNoKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIG5vLXVudXNlZC12YXJzXHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdmFsdWU/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbi5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ubmFtZSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogb3B0aW9uLmNoZWNrZWQsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucy5wdXNoKHtcclxuICAgICAgaWQ6IHRoaXMuY2xlYXJBbGwsXHJcbiAgICAgIG5hbWU6IHRoaXMuY2xlYXJBbGwsXHJcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuU1RBVElDLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24gbWV0aG9kIGVtaXRzIHRoZSByZW1vdmVGaWx0ZXJlZE9wdGlvbiBldmVudCB3aXRoIHJlbW92ZWQgb3B0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24ob3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVGaWx0ZXJlZE9wdGlvbi5lbWl0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoVmFsdWUgbWV0aG9kIGVtaXRzIHRoZSBzZWFyY2hlZCB2YWx1ZSBhbmQgcmVzZXRzIHBhZ2UgaW5kZXggdG8gemVyby5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VhcmNoVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hlZFZhbHVlLmVtaXQodmFsdWUpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhZ2luYXRvciAmJlxyXG4gICAgICAodmFsdWU/Lmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS50cmltKCk/Lmxlbmd0aCA+PSB0aGlzLm1pbkNoYXJUb1NlYXJjaClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBwYWdpbmF0aW9uIGZvciBldmVyeSBwYWdlLlxyXG4gICAqIEBwYXJhbSB7UGFnZUV2ZW50fSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVQYWdpbmF0aW9uKGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSXNBbGxSb3dTZWxlY3RlZCBtZXRob2QgcmV0dXJucyB0aGUgYm9vbGVhbiB2YWx1ZSBieSBjaGVja2luZyBzZWxlY3RlZFJvd3MgYW5kIHRvdGFsUm93cyBsZW5ndGguXHJcbiAgICogQHJldHVybiB7Kn0gIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBpc0FsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNhbkRpc2FibGVDaGVja2JveClcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZWxlY3RlZC5sZW5ndGggPT09XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEuZmlsdGVyKChpdGVtKSA9PiAhaXRlbT8uZGlzYWJsZSk/Lmxlbmd0aFxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlQWxsUm93c1NlbGVjdGlvbiBtZXRob2QgY2xlYXJzIHNlbGVjdGVkUm93cyB3aGVuIGFsbCByb3dzIGFyZSBzZWxlY3RlZCBlbHNlIHNlbGVjdHMgdGhlIGFsbCByb3dzLlxyXG4gICAqIEByZXR1cm4geyp9ICB7dm9pZH1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdG9nZ2xlQWxsUm93c1NlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQWxsUm93c1NlbGVjdGVkKCkpIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLmNhbkRpc2FibGVDaGVja2JveClcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0KFxyXG4gICAgICAgIC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0/LmRpc2FibGUpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlIHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3NJbmZvLmVtaXQodGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIEFuZ3VsYXIgdG8gZGV0ZWN0IHRoZSBzcGVjaWZpYyB0YWJsZSByb3cgdGhhdCBuZWVkcyB0byBjaGFuZ2Ugb3IgYmUgYWRkZWQgYnkgdHJhY2tpbmcgcm93IHVuaXF1ZSBJZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge1RhYmxlQ29sdW1uU2NoZW1hfSBjb2x1bW5cclxuICAgKiBAcmV0dXJuIHsqfSAge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW5TY2hlbWEpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGFibGUgcm93IGxlZnQgYm9yZGVyIGFzIHBlciB0aGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRSb3dCb3JkZXJMZWZ0Q29sb3IoY29sb3I6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3JkZXJMZWZ0OiAnNXB4IHNvbGlkICcgKyBjb2xvcixcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyRm9yVGFibGVDZWxsPy51bm9ic2VydmUodGhpcy5oZWFkZXJDZWxsRWxlbWVudCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyRm9yVGFibGVDb250ZW50Py51bm9ic2VydmUoXHJcbiAgICAgIHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZSBkLWZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJkLWZsZXhcIlxyXG4gICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgIGlzTW9iaWxlVmlld1xyXG4gICAgICAgID8gJ2ZsZXgtY29sdW1uIG1zLTQnXHJcbiAgICAgICAgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSdcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPGNhcHRpb25cclxuICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZS0tY2FwdGlvblwiXHJcbiAgICAgICpuZ0lmPVwiY2FwdGlvblwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImlzTW9iaWxlVmlldyA/ICdpZWVlc2EtdGl0bGUtbGctMjQnIDogJ2llZWVzYS10aXRsZS1tZC0xOCdcIlxyXG4gICAgPlxyXG4gICAgICB7e1xyXG4gICAgICAgIGNhcHRpb25cclxuICAgICAgfX1cclxuICAgIDwvY2FwdGlvbj5cclxuICAgIDxwXHJcbiAgICAgICpuZ0lmPVwiaXNTY3JvbGxpbmdFbmFibGVkICYmIGlzU2Nyb2xsU3VwcG9ydE1lc3NhZ2VOZWVkZWRcIlxyXG4gICAgICBjbGFzcz1cIm0tMCBtYi0yXCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAncG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgZW5kLTAnOiAhaXNNb2JpbGVWaWV3IH1cIlxyXG4gICAgPlxyXG4gICAgICB7eyBzY3JvbGxiYXJTdXBwb3J0TWVzc2FnZSB9fVxyXG4gICAgPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwidGFibGVBY3Rpb25zXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMgZC1mbGV4IHJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1sZy1iYXNlbGluZSBwLXNtLTBcIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNNb2JpbGVWaWV3ID8gJ2llZWVzYS1kYXRhLXRhYmxlX19tb2JpbGUtdmlldy1hY3Rpb25zJyA6ICcnXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ0lmPVwiIWlzTW9iaWxlVmlld1wiXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlUmVmXCJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJ2NvbC1tZC03IGNvbC1sZy02JyB9XCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC1sZy00IGdhcC1tZC0zIGdhcC1zbS0zIGdhcC0zIGNvbC1tZC01IGNvbC1sZy02IGp1c3RpZnktY29udGVudC1lbmQgcHMtMFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIiF0YWJsZUFjdGlvbnM/LmlzRmlsdGVyTmVlZGVkID8gJ2NvbC1tZC0xMiBjb2wtbGctMTInIDogJydcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTW9iaWxlVmlld1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FTZWFyY2hcIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/LmlzQWRkTmVlZGVkXCJcclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJhZGRCdXR0b25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib25BZGRDbGljaygpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIGFkZEJ1dHRvbj8uZGlzYWJsZWQgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMtLWRpc2FibGVkJyA6ICcnXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/LmlzRWRpdE5lZWRlZFwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwidGFibGVFZGl0QnV0dG9uXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uVGFibGVFZGl0Q2xpY2soKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBzZWxlY3RlZFJvd3Muc2VsZWN0ZWQubGVuZ3RoICE9PSAxXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19hY3Rpb25zLS1kaXNhYmxlZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0RlbGV0ZU5lZWRlZFwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwidGFibGVEZWxldGVCdXR0b25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib25EZWxldGVUYWJsZUNsaWNrKClcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBzZWxlY3RlZFJvd3Muc2VsZWN0ZWQubGVuZ3RoID09PSAwIHx8IHRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19hY3Rpb25zLS1kaXNhYmxlZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNTZWFyY2hOZWVkZWRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8uc2VhcmNoXCJcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLXNtLWZsZXggZC1tZC1ub25lIGQtbGctbm9uZSBkLXhsLW5vbmUgaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMtLXNlYXJjaC1ncm91cC1pY29uXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib25UYWJsZVNlYXJjaENsaWNrKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0lmPVwiaXNNb2JpbGVWaWV3XCJcclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlUmVmXCJcclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6ICdpZWVlc2EtZGF0YS10YWJsZV9fZmlsdGVyJyB9XCJcclxuICA+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZVJlZiBsZXQtY2xhc3NOYW1lPVwiZGF0YVwiPlxyXG4gICAgPGllZWVzYS1maWx0ZXJcclxuICAgICAgY2xhc3M9XCJ7eyBjbGFzc05hbWUgfX0gcC0wXCJcclxuICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0ZpbHRlck5lZWRlZFwiXHJcbiAgICAgIFtzZWxlY3RlZEZpbHRlck9wdGlvbnNdPVwic2VsZWN0ZWRGaWx0ZXJPcHRpb25zXCJcclxuICAgICAgW2FwcGxpZWRGaWx0ZXJPcHRpb25zXT1cImFwcGxpZWRGaWx0ZXJPcHRpb25zXCJcclxuICAgICAgKHNlbGVjdGVkRmlsdGVyKT1cInNlbGVjdGVkRmlsdGVyVHlwZUluZm8oJGV2ZW50KVwiXHJcbiAgICAgIChyZW1vdmVGaWx0ZXJlZE9wdGlvbik9XCJvblJlbW92YWxPZkZpbHRlcmVkT3B0aW9uKCRldmVudClcIlxyXG4gICAgICAoZmlsdGVyZWRPcHRpb25zKT1cIm9uU2VsZWN0ZWRGaWx0ZXJPcHRpb25zKCRldmVudClcIlxyXG4gICAgPjwvaWVlZXNhLWZpbHRlcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc01vYmlsZVZpZXcgJiYgaXNTZWFyY2hBY3RpdmVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FTZWFyY2hcIj4gPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNpZWVlc2FTZWFyY2g+XHJcbiAgICA8aWVlZXNhLXNlYXJjaFxyXG4gICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJzZWFyY2hQbGFjZUhvbGRlclRleHRcIlxyXG4gICAgICBbc2VhcmNoVHlwZV09XCJzZWFyY2hUeXBlXCJcclxuICAgICAgKHNlYXJjaFZhbHVlKT1cInNlYXJjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNTZWFyY2hOZWVkZWRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19zZWFyY2gtd3JhcHBlciBtdC1zbS0yIG1kLXNtLTIgbXQtMiBtZC0yXCJcclxuICAgICAgW3N1cHBvcnRNZXNzYWdlXT1cInNlYXJjaFN1cHBvcnRNZXNzYWdlXCJcclxuICAgID48L2llZWVzYS1zZWFyY2g+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8cFxyXG4gICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fc2VhcmNoX3Jlc3VsdF9sYWJlbFwiXHJcbiAgICAqbmdJZj1cInNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgW2lubmVySFRNTF09XCJzZWFyY2hSZXN1bHRNZXNzYWdlIHwgc2FmZSA6IHNhZmVUeXBlXCJcclxuICA+PC9wPlxyXG4gIDxwXHJcbiAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19jb2x1bW5zLWhlYWRlci10ZXh0IG1iLTAgaWVlZXNhLXRpdGxlLW1kLTE4IHRleHQtY2VudGVyXCJcclxuICAgICpuZ0lmPVwidGFibGVDb2x1bW5zSGVhZGVyVGV4dFwiXHJcbiAgICBbaW5uZXJIVE1MXT1cInRhYmxlQ29sdW1uc0hlYWRlclRleHQgfCBzYWZlIDogc2FmZVR5cGVcIlxyXG4gID48L3A+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY29udGVudFwiXHJcbiAgICBbbmdDbGFzc109XCJcclxuICAgICAgdGFibGVEYXRhSW5mbyAmJiB0YWJsZURhdGFJbmZvLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19uby10YWJsZS1kYXRhJ1xyXG4gICAgICAgIDogJydcclxuICAgIFwiXHJcbiAgICAjdGFibGVDb250ZW50XHJcbiAgPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgIG1hdC10YWJsZVxyXG4gICAgICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgICAgbWF0U29ydFxyXG4gICAgICBbbWF0U29ydERpc2FibGVDbGVhcl09XCJpc0NsZWFyU29ydE5lZWRlZFwiXHJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblwiXHJcbiAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRUYWJsZURhdGEoJGV2ZW50KVwiXHJcbiAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlJZFwiXHJcbiAgICAgIG11bHRpVGVtcGxhdGVEYXRhUm93c1xyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICBsZXQgY29sdW1uIG9mIGNvbHVtblNjaGVtYUluZm87XHJcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWQ7XHJcbiAgICAgICAgICBsZXQgaWQgPSBpbmRleFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0Q29sdW1uRGVmPVwie3sgY29sdW1uPy5jb2x1bW5EZWYgfX1cIlxyXG4gICAgICAgIFtzdGlja3ldPVwiY29sdW1uPy5pc1N0aWNreUNvbHVtblwiXHJcbiAgICAgICAgW3N0aWNreUVuZF09XCJjb2x1bW4/LmlzU3RpY2t5RW5kQ29sdW1uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uPy5pc1NvcnRhYmxlQ29sdW1uXCJcclxuICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4/LmNvbHVtbkRlZlwiXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlLWhlYWRlciBpZWVlc2EtYm9keS1zbS1ib2xkLTE0XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICBjb2x1bW4/LmNvbHVtbkRlZiA9PT0gY29sdW1uVHlwZT8uU0VMRUNUXHJcbiAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbHVtbj8uaGVhZGluZ1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uU0VMRUNUXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkUm93cz8uaGFzVmFsdWUoKSAmJiBpc0FsbFJvd3NTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RlZFJvd3M/Lmhhc1ZhbHVlKCkgJiYgIWlzQWxsUm93c1NlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNvbnN0YW50cz8uZGF0YVRhYmxlPy5hcmlhTGFiZWw/LnNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnbWUtMic6IGNvbHVtbi5oYXNDb2x1bW5BY3Rpb25zIH1cIj57e1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5oZWFkaW5nXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhhc0NvbHVtbkFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8aWVlZXNhLW1lbnVcclxuICAgICAgICAgICAgICAgIFttZW51SXRlbXNdPVwidGFibGVDb2x1bW5BY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0SWNvblNpemVdPVwidGFibGVDb2x1bW5BY3Rpb25NZW51U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJ0YWJsZUNvbHVtbkFjdGlvbkNsaWNrKGNvbHVtbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobWVudVRvZ2dsZUJ1dHRvbkVsZW1lbnQpPVwidGFibGVDb2x1bW5BY3Rpb25FbGVtZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY29sdW1uLW1lbnVcIlxyXG4gICAgICAgICAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50IGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICA/ICdpZWVlc2EtZGF0YS10YWJsZV9fY29sdW1uLXNlbGVjdCdcclxuICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICB0YWJsZURhdGE7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICByb3c6IHJvdyxcclxuICAgICAgICAgICAgICAgIHRhYmxlUm93QWN0aW9uczogdGFibGVSb3dBY3Rpb25zXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWV4cGFuZGVkLXJvd1wiXHJcbiAgICAgICAgICAgIFtAZGV0YWlsRXhwYW5kXT1cInJvdyA9PT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS1uZXN0ZWQtZGF0YS10YWJsZVwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICAgICAgI25lc3RlZFRhYmxlXHJcbiAgICAgICAgICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlJZFwiXHJcbiAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJuZXN0ZWRUYWJsZURhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdENvbHVtbkRlZj1cInt7IGNvbHVtbj8uY29sdW1uRGVmIH19XCJcclxuICAgICAgICAgICAgICAgICAgW3N0aWNreV09XCJjb2x1bW4/LmlzU3RpY2t5Q29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0aWNreUVuZF09XCJjb2x1bW4/LmlzU3RpY2t5RW5kQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbHVtbj8uY29sdW1uRGVmXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlLWhlYWRlciBpZWVlc2EtYm9keS1zbS1ib2xkLTE0XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmhlYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmhlYWRpbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50IGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVSb3dBY3Rpb25zOiBuZXN0ZWRUYWJsZVJvd0FjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05lc3RlZFRhYmxlSGVhZGVyTmVlZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9faGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbmVzdGVkVGFibGVEaXNwbGF5ZWRDb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3RpY2t5OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS1uZXN0ZWQtZGF0YS10YWJsZV9fY2VsbC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogbmVzdGVkVGFibGVEaXNwbGF5ZWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm93Py5sZWdlbmRDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBnZXRSb3dCb3JkZXJMZWZ0Q29sb3Iocm93Py5sZWdlbmRDb2xvcilcclxuICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93ID09PSBleHBhbmRlZEVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgaWVlZXNhLWV4cGFuZGVkLXJvd19fZm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIG5lc3RlZFBhZ2luYXRvckNvbmZpZy50b3RhbFJlY29yZHMgPlxyXG4gICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhZ2luYXRvckNvbmZpZy5yZWNvcmRzUGVyUGFnZSAmJlxyXG4gICAgICAgICAgICAgICAgICBuZXN0ZWRQYWdpbmF0b3JDb25maWcucmVjb3Jkc1BlclBhZ2UgPiAwXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93KVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJ0bi1sYWJlbC1sZy1ib2xkLTE2IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8ubGlua1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZpZXdBbGwgPz8gXCJcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5lc3RlZC1lbGVtZW50LWRldGFpbF9fZm9vdGVyLS1kZXRhaWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICBzaG93TmVzdGVkVGFibGVQYWdpbmF0aW9uSW5mb1xyXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RhYmxlSGVhZGVyTmVlZGVkXCI+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9faGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiBmYWxzZVwiXHJcbiAgICAgICAgPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1yb3dcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIihpICsgMSkgJSAyID09PSAwID8gJ2V2ZW4nIDogJ29kZCdcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgcm93Py5sZWdlbmRDb2xvciA/IGdldFJvd0JvcmRlckxlZnRDb2xvcihyb3c/LmxlZ2VuZENvbG9yKSA6ICcnXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsgbGV0IGkgPSBkYXRhSW5kZXhcIlxyXG4gICAgICA+PC90cj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc05lc3RlZFRhYmxlXCI+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IGRldGFpbHM7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1yb3ctZXhwYW5kZWQtdGFibGUtZGV0YWlsXCJcclxuICAgICAgICA+PC90cj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPHBcclxuICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19tZXNzYWdlIGllZWVzYS10aXRsZS1sZy1ib2xkLTI0IHRleHQtY2VudGVyIHAtNVwiXHJcbiAgKm5nSWY9XCJ0YWJsZURhdGFJbmZvICYmIHRhYmxlRGF0YUluZm8ubGVuZ3RoID09PSAwXCJcclxuPlxyXG4gIHt7IG5vUmVjb3JkRm91bmQgfX1cclxuPC9wPlxyXG48ZGl2IGNsYXNzPVwicm93IGllZWVzYS1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLWNvbnRhaW5lclwiPlxyXG4gIDxpZWVlc2EtbGVnZW5kXHJcbiAgICBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNSBkLWZsZXggYWxpZ24taXRlbXMtZW5kIHB4LTRcIlxyXG4gICAgKm5nSWY9XCJsZWdlbmRzPy5sZW5ndGhcIlxyXG4gICAgW25nQ2xhc3NdPVwiIXRhYmxlQWN0aW9ucz8uaXNQYWdpbmF0aW9uTmVlZGVkID8gJ2NvbC1tZC0xMicgOiAnJ1wiXHJcbiAgICBbbGVnZW5kc109XCJsZWdlbmRzXCJcclxuICAgIFtpc1NvcnRpbmddPVwidHJ1ZVwiXHJcbiAgPjwvaWVlZXNhLWxlZ2VuZD5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNQYWdpbmF0aW9uTmVlZGVkXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX3BhZ2luYXRpb24gZC1mbGV4IGZsZXgtcm93LXJldmVyc2UgY29sLXNtLTEyIGNvbC1tZC03XCJcclxuICAgIFtuZ0NsYXNzXT1cIiFsZWdlbmRzPy5sZW5ndGggPyAnY29sLW1kLTEyJyA6ICcnXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8ucGFnaW5hdGlvblwiXHJcbiAgPlxyXG4gICAgPG1hdC1wYWdpbmF0b3JcclxuICAgICAgI3BhZ2luYXRvclxyXG4gICAgICBbcGFnZVNpemVdPVwicGFnaW5hdG9yQ29uZmlnPy5yZWNvcmRzUGVyUGFnZVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLnBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2luYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgIFtsZW5ndGhdPVwicGFnaW5hdG9yQ29uZmlnPy50b3RhbFJlY29yZHNcIlxyXG4gICAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZVxyXG4gICN0YWJsZURhdGFcclxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcclxuICBsZXQtcm93PVwicm93XCJcclxuICBsZXQtdGFibGVSb3dBY3Rpb25zPVwidGFibGVSb3dBY3Rpb25zXCJcclxuPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbj8uY29sdW1uVHlwZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nSWY9XCJpc0NlbGxUZXh0T3ZlcmZsb3dFbGxpcHNpczsgdGhlbiBlbGxpcHNpc0NlbGw7IGVsc2UgdGV4dFdyYXBDZWxsXCJcclxuICAgICAgPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0V3JhcENlbGw+XHJcbiAgICAgICAgPHBcclxuICAgICAgICAgIGNsYXNzPVwibS0wIGllZWVzYS1ib2R5LWNvbG9yLXNtLTE0IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtLXRleHRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmlzSFRNTENlbGxEYXRhXCJcclxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29sdW1uPy5jZWxsRGF0YShyb3cpIHwgc2FmZSA6IHNhZmVUeXBlXCJcclxuICAgICAgICA+PC9wPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uPy5pc0hUTUxDZWxsRGF0YVwiPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJtLTAgaWVlZXNhLWJvZHktY29sb3Itc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tdGV4dFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbj8uY2VsbERhdGEocm93KSB9fVxyXG4gICAgICAgICAgPC9wPjwvbmctY29udGFpbmVyXHJcbiAgICAgICAgPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2VsbGlwc2lzQ2VsbD5cclxuICAgICAgICA8cFxyXG4gICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY29sdW1uPy5jZWxsRGF0YShyb3cpXCJcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tZWxsaXBzaXMgaWVlZXNhLWJvZHktY29sb3Itc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tdGV4dFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sdW1uPy5jZWxsRGF0YShyb3cpIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5MSU5LXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaXNFbGxpcHNpc1JlcXVpcmVkRm9yTGluaztcclxuICAgICAgICAgICAgdGhlbiBlbGxpcHNpc0NlbGw7XHJcbiAgICAgICAgICAgIGVsc2UgdGV4dFdyYXBDZWxsXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VsbGlwc2lzQ2VsbD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICBbZWxlbWVudENsYXNzTmFtZVRvQWRkVG9vbHRpcF09XCInLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJ0bi1sYWJlbC1sZy1ib2xkLTE2IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtbGluayBpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50LWxpbmstLWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmNlbGxEYXRhKHJvdylcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJyb3c/LnRvb2xUaXBUZXh0ID8/IGNvbHVtbj8uY2VsbERhdGEocm93KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbj8uY2VsbERhdGEocm93KSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRXcmFwQ2VsbD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtYnRuLWxhYmVsLWxnLWJvbGQtMTYgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC1saW5rXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmNlbGxEYXRhKHJvdylcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJyb3c/LnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgY29sdW1uPy5jZWxsRGF0YShyb3cpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5pc0NvbnRlbnRVbmRlckxpbmtcIj5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC11bmRlci1saW5rXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmlzSFRNTENlbGxEYXRhXCJcclxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3c/LmNvbnRlbnRVbmRlckxpbmsgfCBzYWZlIDogc2FmZVR5cGVcIlxyXG4gICAgICAgICAgPjwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC11bmRlci1saW5rXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uPy5pc0hUTUxDZWxsRGF0YVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHJvdz8uY29udGVudFVuZGVyTGluayB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uTkVTVEVEX1RBQkxFXCI+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJyb3c/Lmhhc0NoaWxkcmVuXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIlxyXG4gICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID0gZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyBudWxsIDogcm93O1xyXG4gICAgICAgICAgb25UYWJsZVJvd0V4cGFuc2lvbkNsaWNrKHJvdylcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIlxyXG4gICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyByb3dFeHBhbmRCdXR0b24gOiByb3dDb2xsYXBzZUJ1dHRvblxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGU/LlNFTEVDVFwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgY2xhc3M9XCJjb2wtMlwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBvblNlbGVjdENsaWNrKHJvdykgOiBudWxsXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFJvd3MuaXNTZWxlY3RlZChyb3cpXCJcclxuICAgICAgICBbYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5zZWxlY3RcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyb3c/LmRpc2FibGUgJiYgY2FuRGlzYWJsZUNoZWNrYm94XCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uRURJVFwiPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwicm93RWRpdEJ1dHRvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvbkVkaXRDbGljayhyb3cpXCJcclxuICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5ERUxFVEVcIj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cInJvd0RlbGV0ZUJ1dHRvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvbkRlbGV0ZUNsaWNrKHJvdylcIlxyXG4gICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGUuU0xJREVfVE9HR0xFXCI+XHJcbiAgICAgIDxpZWVlc2Etc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgW3NsaWRlVG9nZ2xlXT1cImNvbHVtbj8uY2VsbERhdGEocm93KVwiXHJcbiAgICAgICAgKHNsaWRlVG9nZ2xlQ2hhbmdlKT1cInJvd1NsaWRlVG9nZ2xlQ2hhbmdlKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgW2NhblNob3dJY29uXT1cInRydWVcIlxyXG4gICAgICA+PC9pZWVlc2Etc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5BQ1RJT05TXCI+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFtidXR0b25dPVwicm93TWVudUFjdGlvbkljb25cIlxyXG4gICAgICAgIFttZW51SXRlbXNdPVwidGFibGVSb3dBY3Rpb25zID8/IHJvdy5tZW51QWN0aW9uXCJcclxuICAgICAgICAoY2xpY2spPVwibWVudUl0ZW1BY3Rpb24ocm93KVwiXHJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25Sb3dBY3Rpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzZW50YXRpb24vc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxpQkFBaUIsRUFFakIsVUFBVSxFQUVWLFlBQVksR0FFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBRUwsa0JBQWtCLEdBRW5CLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLE9BQU8sRUFDUCxhQUFhLEdBR2QsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFFTCxRQUFRLEVBQ1IsUUFB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QXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDUSxvQkFBb0I7c0JBQXBELFlBQVk7dUJBQUMsaUJBQWlCO2dCQTZEM0IsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVFHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgT25EZXN0cm95LFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgUmVuZGVyZXIyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7XHJcbiAgTWF0UGFnaW5hdG9yLFxyXG4gIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICBQYWdlRXZlbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHtcclxuICBNYXRTb3J0LFxyXG4gIE1hdFNvcnRNb2R1bGUsXHJcbiAgU29ydCxcclxuICBTb3J0RGlyZWN0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIEJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2UsXHJcbiAgU2FmZVBpcGUsXHJcbiAgU2FmZVR5cGUsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5Tb3J0RGlyZWN0aW9uLFxyXG4gIFRhYmxlQ29sdW1uVHlwZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc2NoZW1hLm1vZGVsJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BhZ2luYXRvci1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBDaGVja2JveE9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9jaGVja2JveC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ljb24tYnV0dG9uLm1vZGVsJztcclxuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQWN0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1hY3Rpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hpcE9wdGlvbiwgQ2hpcHNUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoaXAtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IFNlYXJjaFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VhcmNoLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyc0FuZE9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVycy1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGV4dC10cnVuY2F0ZWQvdGV4dC10cnVuY2F0ZWQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IExlZ2VuZENvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC9sZWdlbmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGVnZW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xlZ2VuZC5tb2RlbCc7XHJcbmltcG9ydCB7IFRhYmxlQ29sdW1uTWVudUluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29sdW1uLW1lbnUtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFNsaWRlVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vc2xpZGUtdG9nZ2xlL3NsaWRlLXRvZ2dsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTbGlkZVRvZ2dsZU9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9zbGlkZS10b2dnbGUtb3B0aW9ucy5tb2RlbCc7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgYSBNYXRlcmlhbCBEZXNpZ24gc3R5bGVkIGRhdGEtdGFibGUgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHJvd3Mgb2YgZGF0YSB3aXRoIHNvcnRCeSwgZmlsdGVyQnksIGFkZC9lZGl0L2RlbGV0ZSB0YWJsZSByb3cgZGF0YSwgcGFnaW5hdGlvbiwgc2VhcmNoIHRhYmxlIGRhdGEuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKiBAaW1wbGVtZW50cyB7QWZ0ZXJWaWV3SW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWRhdGEtdGFibGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgZm9yd2FyZFJlZigoKSA9PiBTYWZlUGlwZSksXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U29ydE1vZHVsZSxcclxuICAgIFNsaWRlVG9nZ2xlQ29tcG9uZW50LFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgU2VhcmNoQ29tcG9uZW50LFxyXG4gICAgRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgVGV4dFRydW5jYXRlZERpcmVjdGl2ZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWVudUNvbXBvbmVudCxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgTGVnZW5kQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2NvbGxhcHNlZCcsXHJcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJywgZGlzcGxheTogJ25vbmUnIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcclxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHByaXZhdGUgdGFibGVEYXRhITogYW55W107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBwcml2YXRlIG5lc3RlZFRhYmxlRGF0YSE6IGFueVtdO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZXhwYW5kZWRFbGVtZW50OiBhbnk7XHJcbiAgQElucHV0KClcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHNldCB0YWJsZURhdGFJbmZvKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSB2YWx1ZTtcclxuICAgIHRoaXMudGFibGVEYXRhQ2hhbmdlcygpO1xyXG4gIH1cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldCB0YWJsZURhdGFJbmZvKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXQgbmVzdGVkVGFibGVEYXRhSW5mbyh2YWx1ZTogYW55W10pIHtcclxuICAgIHRoaXMubmVzdGVkVGFibGVEYXRhID0gdmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXQgbmVzdGVkVGFibGVEYXRhSW5mbygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRUYWJsZURhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgY29sdW1uU2NoZW1hITogVGFibGVDb2x1bW5TY2hlbWFbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjb2x1bW5TY2hlbWFJbmZvKHZhbHVlOiBUYWJsZUNvbHVtblNjaGVtYVtdKSB7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuY29sdW1uU2NoZW1hKVxyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtblNjaGVtYT8ubWFwKChjKSA9PiBjPy5jb2x1bW5EZWYpO1xyXG4gIH1cclxuICBnZXQgY29sdW1uU2NoZW1hSW5mbygpOiBUYWJsZUNvbHVtblNjaGVtYVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtblNjaGVtYTtcclxuICB9XHJcbiAgcHJpdmF0ZSBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYSE6IFRhYmxlQ29sdW1uU2NoZW1hW107XHJcbiAgQElucHV0KClcclxuICBzZXQgbmVzdGVkVGFibGVDb2x1bW5TY2hlbWFJbmZvKHZhbHVlOiBUYWJsZUNvbHVtblNjaGVtYVtdKSB7XHJcbiAgICB0aGlzLm5lc3RlZFRhYmxlQ29sdW1uU2NoZW1hID0gdmFsdWU7XHJcbiAgICB0aGlzLm5lc3RlZFRhYmxlRGlzcGxheWVkQ29sdW1ucyA9IHRoaXMubmVzdGVkVGFibGVDb2x1bW5TY2hlbWE/Lm1hcChcclxuICAgICAgKGMpID0+IGM/LmNvbHVtbkRlZlxyXG4gICAgKTtcclxuICAgIHRoaXMubmVzdGVkVGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLm5lc3RlZFRhYmxlRGF0YSk7XHJcbiAgfVxyXG4gIGdldCBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYUluZm8oKTogVGFibGVDb2x1bW5TY2hlbWFbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRUYWJsZUNvbHVtblNjaGVtYTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBASW5wdXQoKSB0YWJsZUFjdGlvbnMhOiBUYWJsZUFjdGlvbnM7XHJcbiAgQElucHV0KCkgaGFzTmVzdGVkVGFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZUNvbHVtbkFjdGlvbnMhOiBNZW51W107XHJcbiAgQElucHV0KCkgdGFibGVDb2x1bW5BY3Rpb25NZW51U2l6ZSA9ICcnO1xyXG4gIEBJbnB1dCgpIHRhYmxlUm93QWN0aW9ucyE6IE1lbnVbXTtcclxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZVJvd0FjdGlvbnMhOiBNZW51W107XHJcbiAgQElucHV0KCkgY2FwdGlvbiE6IHN0cmluZztcclxuICBASW5wdXQoKSB2aWV3QWxsITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFnaW5hdG9yQ29uZmlndXJhdGlvbiE6IFBhZ2luYXRvckNvbmZpZztcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdpbmF0b3JDb25maWcodmFsdWU6IFBhZ2luYXRvckNvbmZpZykge1xyXG4gICAgdGhpcy5wYWdpbmF0b3JDb25maWd1cmF0aW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBwYWdpbmF0b3JDb25maWcoKTogUGFnaW5hdG9yQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvckNvbmZpZ3VyYXRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgbmVzdGVkUGFnaW5hdG9yQ29uZmlndXJhdGlvbiE6IFBhZ2luYXRvckNvbmZpZztcclxuICBASW5wdXQoKVxyXG4gIHNldCBuZXN0ZWRQYWdpbmF0b3JDb25maWcodmFsdWU6IFBhZ2luYXRvckNvbmZpZykge1xyXG4gICAgdGhpcy5uZXN0ZWRQYWdpbmF0b3JDb25maWd1cmF0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLnNob3dOZXN0ZWRUYWJsZVBhZ2luYXRpb25JbmZvID1cclxuICAgICAgJzEgLSAnICtcclxuICAgICAgK2Ake3RoaXMubmVzdGVkUGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlfWAgK1xyXG4gICAgICAnIG9mICcgK1xyXG4gICAgICArYCR7dGhpcy5uZXN0ZWRQYWdpbmF0b3JDb25maWcudG90YWxSZWNvcmRzfWA7XHJcbiAgfVxyXG4gIGdldCBuZXN0ZWRQYWdpbmF0b3JDb25maWcoKTogUGFnaW5hdG9yQ29uZmlnIHtcclxuICAgIHJldHVybiB0aGlzLm5lc3RlZFBhZ2luYXRvckNvbmZpZ3VyYXRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgbGVnZW5kc0luZm8hOiBMZWdlbmRbXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBsZWdlbmRzKHZhbHVlOiBMZWdlbmRbXSkge1xyXG4gICAgdGhpcy5sZWdlbmRzSW5mbyA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgbGVnZW5kcygpOiBMZWdlbmRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZWdlbmRzSW5mbztcclxuICB9XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZUluZGV4ID0gMDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdlSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwYWdlSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlSW5kZXg7XHJcbiAgfVxyXG4gIHByaXZhdGUgY3VycmVudFBhZ2VTaXplID0gMDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VTaXplO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZWFyY2hQbGFjZUhvbGRlclRleHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcm93RWRpdEJ1dHRvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgcm93RGVsZXRlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSB0YWJsZUVkaXRCdXR0b24hOiBJY29uQnV0dG9uO1xyXG4gIEBJbnB1dCgpIHRhYmxlRGVsZXRlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSByb3dFeHBhbmRCdXR0b24hOiBJY29uQnV0dG9uO1xyXG4gIEBJbnB1dCgpIHJvd0NvbGxhcHNlQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSBpc05lc3RlZFRhYmxlSGVhZGVyTmVlZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWRkQnV0dG9uITogSWNvbkJ1dHRvbjtcclxuICBASW5wdXQoKSBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbiA9XHJcbiAgICBUYWJsZUNvbHVtblNvcnREaXJlY3Rpb24uQVNDRU5ESU5HO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0ZWRDb2x1bW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNDbGVhclNvcnROZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZpbHRlcnMhOiBDaGlwT3B0aW9uW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zITogQ2hlY2tib3hPcHRpb25bXTtcclxuICBASW5wdXQoKSBhcHBsaWVkRmlsdGVyT3B0aW9ucyE6IENoaXBPcHRpb25bXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBTZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5PTl9DTElDSztcclxuICBASW5wdXQoKSBjbGFzc05hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VhcmNoU3VwcG9ydE1lc3NhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5idWlsdFNvcnRpbmdOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0NlbGxUZXh0T3ZlcmZsb3dFbGxpcHNpcyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVIZWFkZXJOZWVkZWQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRhYmxlQ29sdW1uc0hlYWRlclRleHQgPSAnJztcclxuICBASW5wdXQoKSB2ZXJ0aWNhbENvbHVtbkhlYWRlck51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgc2Nyb2xsYmFyU3VwcG9ydE1lc3NhZ2UgPSAnJztcclxuICBASW5wdXQoKSBpc1Njcm9sbFN1cHBvcnRNZXNzYWdlTmVlZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNTdGlja3lIZWFkZXJOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21TdGlja3lIZWFkZXJOZWVkZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoZWFkZXJFbGVtZW50Q2xhc3NOYW1lID0gJyc7XHJcbiAgQElucHV0KCkgbWluQ2hhclRvU2VhcmNoID0gdGhpcy5jb25zdGFudHM/LnNlYXJjaD8ubWluQ2hhclRvU2VhcmNoO1xyXG4gIEBPdXRwdXQoKSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dUb0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93VG9EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c1RvRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtblNjaGVtYVtdPigpO1xyXG4gIEBPdXRwdXQoKSByb3dMaW5rID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkRhdGFPblJvd0xpbmtDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbWVudUFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RBY3Rpb25NZW51ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwT3B0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSByZW1vdmVGaWx0ZXJlZE9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyZWRPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJzQW5kT3B0aW9uc1tdPigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hlZFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkUm93c0luZm8gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uU2NoZW1hW10+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0V4cGFuc2lvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0YWJsZUNvbHVtbk1lbnVBY3Rpb25DbGljayA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uTWVudUluZm8+KCk7XHJcbiAgQE91dHB1dCgpIHRhYmxlQ29sdW1uTWVudVRvZ2dsZUJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBAT3V0cHV0KCkgcm93U2xpZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHNsaWRlVG9nZ2xlOiBTbGlkZVRvZ2dsZU9wdGlvbjtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICByb3dEYXRhOiBhbnk7XHJcbiAgfT4oKTtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvcicpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuICBoZWFkZXJDZWxsRWxlbWVudCE6IEhUTUxFbGVtZW50O1xyXG4gIGhlYWRlckhlaWdodCE6IERPTVJlY3Q7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250ZW50JykgdGFibGVDb250ZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2Nyb2xsJykgc2V0U3RpY2t5VGFibGVIZWFkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50ICYmIHRoaXMuY3VzdG9tU3RpY2t5SGVhZGVyTmVlZGVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGFUYWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmllZWVzYS1kYXRhLXRhYmxlX19jb250ZW50JylcclxuICAgICAgICAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGlmICh0aGlzLmhlYWRlckVsZW1lbnRDbGFzc05hbWUpXHJcbiAgICAgICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBkb2N1bWVudFxyXG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKHRoaXMuaGVhZGVyRWxlbWVudENsYXNzTmFtZSlcclxuICAgICAgICAgID8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgYXMgRE9NUmVjdDtcclxuICAgICAgaWYgKGRhdGFUYWJsZUNvbnRlbnQpIHtcclxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcgLm1hdC1tZGMtaGVhZGVyLWNlbGwnKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgZGF0YVRhYmxlQ29udGVudC50b3AgPFxyXG4gICAgICAgICAgICAgICAgKHRoaXMuaGVhZGVySGVpZ2h0ID8gdGhpcy5oZWFkZXJIZWlnaHQuYm90dG9tIDogMCkgJiZcclxuICAgICAgICAgICAgICBkYXRhVGFibGVDb250ZW50LmJvdHRvbSA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlQ29udGVudC50b3AgKiAtMSArXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLmhlYWRlckhlaWdodCA/IHRoaXMuaGVhZGVySGVpZ2h0LmhlaWdodCA6IDApIC1cclxuICAgICAgICAgICAgICAgICAgMSArXHJcbiAgICAgICAgICAgICAgICAgICdweCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtbWRjLXRhYmxlLXN0aWNreScpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbHVtbiwgJ3pJbmRleCcsIDIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbHVtbiwgJ3Bvc2l0aW9uJywgJ3N0aWNreScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb2x1bW4sICd6SW5kZXgnLCAxKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb2x1bW4sICd0b3AnLCAwICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcclxuICBuZXN0ZWRUYWJsZURpc3BsYXllZENvbHVtbnMhOiBzdHJpbmdbXTtcclxuICBpc01vYmlsZVZpZXcgPSBmYWxzZTtcclxuICBpc1Njcm9sbGluZ0VuYWJsZWQgPSBmYWxzZTtcclxuICByZXNpemVPYnNlcnZlckZvclRhYmxlQ29udGVudCE6IFJlc2l6ZU9ic2VydmVyO1xyXG4gIHJlc2l6ZU9ic2VydmVyRm9yVGFibGVDZWxsITogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBuZXN0ZWRUYWJsZURhdGFTb3VyY2UhOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuICBzZWxlY3RlZFJvd3MgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVDb2x1bW5TY2hlbWE+KHRydWUsIFtdKTtcclxuICBwYWdlTGltaXQhOiBudW1iZXI7XHJcbiAgcGFnZU9mZnNldCE6IG51bWJlcjtcclxuICBjb2x1bW5UeXBlID0gVGFibGVDb2x1bW5UeXBlO1xyXG4gIGlzU2VhcmNoQWN0aXZlID0gZmFsc2U7XHJcbiAgY2xlYXJBbGwgPSB0aGlzLmNvbnN0YW50cz8uZGF0YVRhYmxlPy5sYWJlbD8uY2xlYXJBbGw7XHJcbiAgbm9SZWNvcmRGb3VuZCA9IHRoaXMuY29uc3RhbnRzPy5kYXRhVGFibGU/Lm1lc3NhZ2U/Lm5vUmVjb3JkRm91bmQ7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHNob3dOZXN0ZWRUYWJsZVBhZ2luYXRpb25JbmZvITogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3NlYXJjaFJlc3VsdE1lc3NhZ2UhOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBzZXQgc2VhcmNoUmVzdWx0TWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zZWFyY2hSZXN1bHRNZXNzYWdlID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hSZXN1bHRNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0TWVzc2FnZTtcclxuICB9XHJcbiAgc2FmZVR5cGU6IFNhZmVUeXBlID0gU2FmZVR5cGUuSFRNTDtcclxuICBASW5wdXQoKSByb3dNZW51QWN0aW9uSWNvbiE6IEljb25CdXR0b247XHJcbiAgQElucHV0KCkgY2FuRGlzYWJsZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNFbGxpcHNpc1JlcXVpcmVkRm9yTGluayA9IGZhbHNlO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tZW1wdHktZnVuY3Rpb25cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICApIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG4gICAgICAuZ2V0QnJlYWtwb2ludCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSByZXN1bHQubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgZGF0YSB0YWJsZSBjb21wb25lbnQgYW5kIHNldHMgdGhlIHRhYmxlIGFjdGlvbiBidXR0b25zLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1uU2NoZW1hPy5tYXAoKGMpID0+IGM/LmNvbHVtbkRlZik7XHJcbiAgICBjb25zdCB0YWJsZUFjdGlvbkJ1dHRvbnM6IEljb25CdXR0b25bXSA9IHRoaXMuY29uc3RhbnRzPy5kYXRhVGFibGU/LmJ1dHRvbnM7XHJcbiAgICB0aGlzLnJvd0VkaXRCdXR0b24gPSB0aGlzLnJvd0VkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzNdO1xyXG4gICAgdGhpcy5yb3dEZWxldGVCdXR0b24gPSB0aGlzLnJvd0RlbGV0ZUJ1dHRvbiA/PyB0YWJsZUFjdGlvbkJ1dHRvbnNbNF07XHJcbiAgICB0aGlzLmFkZEJ1dHRvbiA9IHRoaXMuYWRkQnV0dG9uID8/IHRhYmxlQWN0aW9uQnV0dG9uc1syXTtcclxuICAgIHRoaXMudGFibGVFZGl0QnV0dG9uID0gdGhpcy50YWJsZUVkaXRCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzBdO1xyXG4gICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbiA9IHRoaXMudGFibGVEZWxldGVCdXR0b24gPz8gdGFibGVBY3Rpb25CdXR0b25zWzFdO1xyXG4gICAgdGhpcy5yb3dFeHBhbmRCdXR0b24gPSB0aGlzLnJvd0V4cGFuZEJ1dHRvbiA/PyB0YWJsZUFjdGlvbkJ1dHRvbnNbNV07XHJcbiAgICB0aGlzLnJvd0NvbGxhcHNlQnV0dG9uID1cclxuICAgICAgdGhpcy5yb3dDb2xsYXBzZUJ1dHRvbiA/PyB0aGlzLnJvd0NvbGxhcHNlQnV0dG9uID8/IHRhYmxlQWN0aW9uQnV0dG9uc1s2XTtcclxuICAgIHRoaXMudGFibGVEZWxldGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuY2hhbmdlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uc291cmNlPy5zZWxlY3RlZD8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRWRpdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgcmVzdWx0Py5zb3VyY2U/LnNlbGVjdGVkPy5sZW5ndGggPT09IDEgJiZcclxuICAgICAgICAgICFyZXN1bHQ/LnNvdXJjZT8uc2VsZWN0ZWQ/LlswXT8uY2FuRGVsZXRlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uc291cmNlPy5zZWxlY3RlZD8ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZURlbGV0ZUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50YWJsZUVkaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMudGFibGVEYXRhKTtcclxuICAgIGlmICh0aGlzLnNjcm9sbGJhclN1cHBvcnRNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNvbnRlbnQgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoXHJcbiAgICAgICAgKGVsZW1lbnQ6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1Njcm9sbGluZ0VuYWJsZWQgPVxyXG4gICAgICAgICAgICBlbGVtZW50WzBdPy50YXJnZXQ/LnNjcm9sbFdpZHRoID4gZWxlbWVudFswXT8udGFyZ2V0Py5jbGllbnRXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJsZUNvbHVtbnNIZWFkZXJUZXh0ICYmIHRoaXMudmVydGljYWxDb2x1bW5IZWFkZXJOdW1iZXIpXHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNlbGwgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0TWFyZ2luTGVmdEZvckhlYWRlclRleHQoKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBzb3J0IGZlYXR1cmUgb2YgZGF0YVNvdXJjZSBhbmQgc2V0IG1hcmdpbiBsZWZ0IGZvciB0YWJsZUNvbHVtbnNIZWFkZXJUZXh0IGlmIGl0IGlzbid0IGVtcHR5LlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbmJ1aWx0U29ydGluZ05lZWRlZCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5zb3J0LmRpc2FibGVDbGVhciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlckNlbGxFbGVtZW50ID0gdGhpcy50YWJsZUNvbnRlbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAnLm1hdC1tZGMtaGVhZGVyLWNlbGwnXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlckZvclRhYmxlQ2VsbD8ub2JzZXJ2ZSh0aGlzLmhlYWRlckNlbGxFbGVtZW50KTtcclxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJGb3JUYWJsZUNvbnRlbnQ/Lm9ic2VydmUoXHJcbiAgICAgIHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCBtYXJnaW4gbGVmdCBmb3IgdGFibGUgY29sdW1uIGhlYWRlciB0ZXh0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbHVtbnMuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldE1hcmdpbkxlZnRGb3JIZWFkZXJUZXh0KCk6IHZvaWQge1xyXG4gICAgbGV0IGNvbHVtbnNXaWR0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLnZlcnRpY2FsQ29sdW1uSGVhZGVyTnVtYmVyOyBjb2x1bW4rKykge1xyXG4gICAgICBjb25zdCB2ZXJ0aWNhbENvbHVtbkhlYWRlckNsYXNzTmFtZSA9XHJcbiAgICAgICAgJy5tYXQtY29sdW1uLScgKyB0aGlzLmNvbHVtblNjaGVtYVtjb2x1bW5dLmNvbHVtbkRlZjtcclxuICAgICAgY29uc3QgY29sdW1uRWxlbWVudCA9IHRoaXMuZWxSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgdmVydGljYWxDb2x1bW5IZWFkZXJDbGFzc05hbWVcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGNvbHVtbkVsZW1lbnQpIGNvbHVtbnNXaWR0aCArPSBjb2x1bW5FbGVtZW50Py5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnNIZWFkZXJFbGVtZW50ID0gdGhpcy5lbFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcclxuICAgICAgJy5pZWVlc2EtZGF0YS10YWJsZV9fY29sdW1ucy1oZWFkZXItdGV4dCdcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoY29sdW1uc0hlYWRlckVsZW1lbnQpXHJcbiAgICAgIGNvbHVtbnNIZWFkZXJFbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBjb2x1bW5zV2lkdGggKyAncHgnO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkYXRhU291cmNlIHdoZW5ldmVyIHRoZSB0YWJsZSBkYXRhIGNoYW5nZXMuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRhYmxlRGF0YUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZURhdGE7XHJcbiAgICAgIGlmICh0aGlzLmluYnVpbHRTb3J0aW5nTmVlZGVkKSB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5lc3RlZFRhYmxlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLm5lc3RlZFRhYmxlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5uZXN0ZWRUYWJsZURhdGE7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgLyoqXHJcbiAgICogU29ydFRhYmxlRGF0YSBtZXRob2QgZW1pdHMgdGhlIGNsaWNrZWQgdGFibGUgY29sdW1uIG5hbWUgYW5kIHNvcnRpbmcgZGlyZWN0aW9uXHJcbiAgICogQHBhcmFtIHtTb3J0fSBzb3J0XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRUYWJsZURhdGEoc29ydDogU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBlZGl0IGFjdGlvbnMgbWV0aG9kIGVtaXRzIHRoZSBjbGlja2VkIHJvdyBkYXRhXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvblJvd0FjdGlvbkNsaWNrKHJvdzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFjdGlvbk1lbnUuZW1pdChyb3cpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgc2xpZGUgdG9nZ2xlIG9wdGlvbiBhbG9uZyB3aXRoIHRoZSBzZWxlY3RlZCByb3cgaW5mby5cclxuICAgKiBAcGFyYW0ge1NsaWRlVG9nZ2xlT3B0aW9ufSBzbGlkZVRvZ2dsZU9wdGlvblxyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcm93U2xpZGVUb2dnbGVDaGFuZ2Uoc2xpZGVUb2dnbGVPcHRpb246IFNsaWRlVG9nZ2xlT3B0aW9uLCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5yb3dTbGlkZVRvZ2dsZS5lbWl0KHsgc2xpZGVUb2dnbGU6IHNsaWRlVG9nZ2xlT3B0aW9uLCByb3dEYXRhOiByb3cgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1lbnUgaXRlbSBhY3Rpb24gbWV0aG9kIGVtaXRzIHRoZSBjbGlja2VkIG1lbnUgb3B0aW9uc1xyXG4gICAqIEBwYXJhbSB7Kn0gcm93XHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgbWVudUl0ZW1BY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudUFjdGlvbkNsaWNrLmVtaXQocm93KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogT25TZWxlY3RDbGljayBtZXRob2QgZW1pdHMgdGhlIHJvd1NlbGVjdGVkIGV2ZW50IHdpdGggc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrZWRcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvblNlbGVjdENsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93cy50b2dnbGUocm93KTtcclxuICAgIHJvdy5jaGVja2VkID0gIXJvdy5jaGVja2VkO1xyXG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHJvdyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93c0luZm8uZW1pdCh0aGlzLnNlbGVjdGVkUm93cy5zZWxlY3RlZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRhYmxlQ29sdW1uQWN0aW9uSW5mbyBldmVudCB3aXRoIHRhYmxlQ29sdW1uSW5mbyBhbmQgbWVudUFjdGlvbkluZm8uXHJcbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtblNjaGVtYX0gY29sdW1uXHJcbiAgICogQHBhcmFtIHtNZW51fSBtZW51QWN0aW9uXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRhYmxlQ29sdW1uQWN0aW9uQ2xpY2soY29sdW1uOiBUYWJsZUNvbHVtblNjaGVtYSwgbWVudUFjdGlvbjogTWVudSk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbk1lbnVBY3Rpb25DbGljay5lbWl0KHtcclxuICAgICAgdGFibGVDb2x1bW5JbmZvOiBjb2x1bW4sXHJcbiAgICAgIG1lbnVBY3Rpb25JbmZvOiBtZW51QWN0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRhYmxlQ29sdW1uQWN0aW9uRWxlbWVudCBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCBIVE1MIEVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICB0YWJsZUNvbHVtbkFjdGlvbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5NZW51VG9nZ2xlQnV0dG9uLmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uRWRpdENsaWNrIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRSb3dUb0VkaXQgZXZlbnQgd2l0aCB0aGUgc2VsZWN0ZWQgcm93IGRhdGEuXHJcbiAgICogQHBhcmFtIHsqfSByb3dcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBvbkVkaXRDbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd1RvRWRpdC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbkRlbGV0ZUNsaWNrIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRSb3dUb0RlbGV0ZSBldmVudCB3aXRoIHRoZSBzZWxlY3RlZCByb3cgZGF0YS5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uRGVsZXRlQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dUb0RlbGV0ZS5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKk9uTGlua0NsaWNrIG1ldGhvZCBlbWl0cyB0aGUgZXZlbnQgd2l0aCByb3cgYW5kIGNvbHVtbi5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBwYXJhbSB7VGFibGVDb2x1bW5TY2hlbWF9IFtjb2x1bW5dXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb25MaW5rQ2xpY2socm93OiBhbnksIGNvbHVtbj86IFRhYmxlQ29sdW1uU2NoZW1hKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvd0xpbmsuZW1pdChyb3cpO1xyXG4gICAgdGhpcy5jb2x1bW5EYXRhT25Sb3dMaW5rQ2xpY2suZW1pdCh7IHJvdywgY29sdW1uIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25UYWJsZUVkaXRDbGljayBtZXRob2QgZW1pdHMgZXZlbnQgd2l0aCBzZWxlY3RlZCByb3dzIGRhdGEgd2hlbiBlZGl0IGJ1dHRvbiBjbGlja2VkLlxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBvblRhYmxlRWRpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd1RvRWRpdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uRGVsZXRlVGFibGVDbGljayBtZXRob2QgZW1pdHMgZXZlbnQgd2l0aCBzZWxlY3RlZCByb3cgZGF0YSB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZC5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25EZWxldGVUYWJsZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3NUb0RlbGV0ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uQWRkQ2xpY2sgbWV0aG9kIGVtaXRzIHRoZSBhZGQgZXZlbnQgd2hlbiBhZGQgYnV0dG9uIGNsaWNrZWQuXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uQWRkQ2xpY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZFJvdy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPblRhYmxlU2VhcmNoQ2xpY2sgbWV0aG9kIHRvZ2dsZXMgdGhlIGlzU2VhcmNoQWN0aXZlIHN0YXRlIHdoZW4gdGhlIHNlYXJjaCBpY29uIGlzIGNsaWNrZWQgZm9yIHRoZSBtb2JpbGUgdmlldy5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25UYWJsZVNlYXJjaENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NlYXJjaEFjdGl2ZSA9ICF0aGlzLmlzU2VhcmNoQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWRGaWx0ZXJJbmZvIG1ldGhvZCBlbWl0cyB0aGUgc2VsZWN0ZWRGaWx0ZXIgZXZlbnQgd2l0aCBzZWxlY3RlZCBmaWx0ZXIgaW5mb3JtYXRpb24uXHJcbiAgICogQHBhcmFtIHtDaGlwT3B0aW9ufSBvcHRpb25cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VsZWN0ZWRGaWx0ZXJUeXBlSW5mbyhvcHRpb246IENoaXBPcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIuZW1pdChvcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIHJvd0V4cGFuc2lvbkNsaWNrIGV2ZW50IHdpdGggdGhlIHNlbGVjdGVkIHJvdyBkYXRhIHdoZW4gdGhlIHJvdyBpcyBleHBhbmRlZC5cclxuICAgKiBAcGFyYW0geyp9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uVGFibGVSb3dFeHBhbnNpb25DbGljayhyb3c6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5uZXN0ZWRUYWJsZURhdGFTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRFbGVtZW50ID09PSByb3cpIHRoaXMucm93RXhwYW5zaW9uQ2xpY2suZW1pdChyb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT25TZWxlY3RlZEZpbHRlck9wdGlvbnMgbWV0aG9kIGVtaXRzIHRoZSBmaWx0ZXJlZE9wdGlvbnMgZXZlbnQgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBhbmQgYWRkcyBcIkNsZWFyIGFsbFwiIG9wdGlvbiB0byBjbGVhciB0aGUgYWxsIHNlbGVjdGlvbnMuXHJcbiAgICogQHBhcmFtIHtDaGVja2JveE9wdGlvbltdfSBvcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2VsZWN0ZWRGaWx0ZXJPcHRpb25zKHNlbGVjdGVkT3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMuZW1pdChzZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucyA9IFtdO1xyXG4gICAgc2VsZWN0ZWRPcHRpb25zPy5mb3JFYWNoKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIG5vLXVudXNlZC12YXJzXHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdmFsdWU/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbi5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbGllZEZpbHRlck9wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5pZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ubmFtZSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogb3B0aW9uLmNoZWNrZWQsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICBjaGlwVHlwZTogQ2hpcHNUeXBlLlRPR0dMRSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVyT3B0aW9ucy5wdXNoKHtcclxuICAgICAgaWQ6IHRoaXMuY2xlYXJBbGwsXHJcbiAgICAgIG5hbWU6IHRoaXMuY2xlYXJBbGwsXHJcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgIGNoaXBUeXBlOiBDaGlwc1R5cGUuU1RBVElDLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24gbWV0aG9kIGVtaXRzIHRoZSByZW1vdmVGaWx0ZXJlZE9wdGlvbiBldmVudCB3aXRoIHJlbW92ZWQgb3B0aW9uLlxyXG4gICAqIEBwYXJhbSB7Q2hpcE9wdGlvbn0gb3B0aW9uXHJcbiAgICogQG1lbWJlcm9mIERhdGFUYWJsZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uUmVtb3ZhbE9mRmlsdGVyZWRPcHRpb24ob3B0aW9uczogRmlsdGVyc0FuZE9wdGlvbnNbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVGaWx0ZXJlZE9wdGlvbi5lbWl0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoVmFsdWUgbWV0aG9kIGVtaXRzIHRoZSBzZWFyY2hlZCB2YWx1ZSBhbmQgcmVzZXRzIHBhZ2UgaW5kZXggdG8gemVyby5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VhcmNoVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hlZFZhbHVlLmVtaXQodmFsdWUpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhZ2luYXRvciAmJlxyXG4gICAgICAodmFsdWU/Lmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS50cmltKCk/Lmxlbmd0aCA+PSB0aGlzLm1pbkNoYXJUb1NlYXJjaClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBwYWdpbmF0aW9uIGZvciBldmVyeSBwYWdlLlxyXG4gICAqIEBwYXJhbSB7UGFnZUV2ZW50fSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVQYWdpbmF0aW9uKGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSXNBbGxSb3dTZWxlY3RlZCBtZXRob2QgcmV0dXJucyB0aGUgYm9vbGVhbiB2YWx1ZSBieSBjaGVja2luZyBzZWxlY3RlZFJvd3MgYW5kIHRvdGFsUm93cyBsZW5ndGguXHJcbiAgICogQHJldHVybiB7Kn0gIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBEYXRhVGFibGVDb21wb25lbnRcclxuICAgKi9cclxuICBpc0FsbFJvd3NTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNhbkRpc2FibGVDaGVja2JveClcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZWxlY3RlZC5sZW5ndGggPT09XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEuZmlsdGVyKChpdGVtKSA9PiAhaXRlbT8uZGlzYWJsZSk/Lmxlbmd0aFxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlQWxsUm93c1NlbGVjdGlvbiBtZXRob2QgY2xlYXJzIHNlbGVjdGVkUm93cyB3aGVuIGFsbCByb3dzIGFyZSBzZWxlY3RlZCBlbHNlIHNlbGVjdHMgdGhlIGFsbCByb3dzLlxyXG4gICAqIEByZXR1cm4geyp9ICB7dm9pZH1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdG9nZ2xlQWxsUm93c1NlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQWxsUm93c1NlbGVjdGVkKCkpIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLmNhbkRpc2FibGVDaGVja2JveClcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0KFxyXG4gICAgICAgIC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0/LmRpc2FibGUpXHJcbiAgICAgICk7XHJcbiAgICBlbHNlIHRoaXMuc2VsZWN0ZWRSb3dzLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3NJbmZvLmVtaXQodGhpcy5zZWxlY3RlZFJvd3Muc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIEFuZ3VsYXIgdG8gZGV0ZWN0IHRoZSBzcGVjaWZpYyB0YWJsZSByb3cgdGhhdCBuZWVkcyB0byBjaGFuZ2Ugb3IgYmUgYWRkZWQgYnkgdHJhY2tpbmcgcm93IHVuaXF1ZSBJZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge1RhYmxlQ29sdW1uU2NoZW1hfSBjb2x1bW5cclxuICAgKiBAcmV0dXJuIHsqfSAge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW5TY2hlbWEpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGFibGUgcm93IGxlZnQgYm9yZGVyIGFzIHBlciB0aGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBnZXRSb3dCb3JkZXJMZWZ0Q29sb3IoY29sb3I6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBib3JkZXJMZWZ0OiAnNXB4IHNvbGlkICcgKyBjb2xvcixcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgRGF0YVRhYmxlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyRm9yVGFibGVDZWxsPy51bm9ic2VydmUodGhpcy5oZWFkZXJDZWxsRWxlbWVudCk7XHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyRm9yVGFibGVDb250ZW50Py51bm9ic2VydmUoXHJcbiAgICAgIHRoaXMudGFibGVDb250ZW50Lm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZSBkLWZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJkLWZsZXhcIlxyXG4gICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgIGlzTW9iaWxlVmlld1xyXG4gICAgICAgID8gJ2ZsZXgtY29sdW1uIG1zLTQnXHJcbiAgICAgICAgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSdcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgPGNhcHRpb25cclxuICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZS0tY2FwdGlvblwiXHJcbiAgICAgICpuZ0lmPVwiY2FwdGlvblwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImlzTW9iaWxlVmlldyA/ICdpZWVlc2EtdGl0bGUtbGctMjQnIDogJ2llZWVzYS10aXRsZS1tZC0xOCdcIlxyXG4gICAgPlxyXG4gICAgICB7e1xyXG4gICAgICAgIGNhcHRpb25cclxuICAgICAgfX1cclxuICAgIDwvY2FwdGlvbj5cclxuICAgIDxwXHJcbiAgICAgICpuZ0lmPVwiaXNTY3JvbGxpbmdFbmFibGVkICYmIGlzU2Nyb2xsU3VwcG9ydE1lc3NhZ2VOZWVkZWRcIlxyXG4gICAgICBjbGFzcz1cIm0tMCBtYi0yXCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAncG9zaXRpb24tYWJzb2x1dGUgYm90dG9tLTAgZW5kLTAnOiAhaXNNb2JpbGVWaWV3IH1cIlxyXG4gICAgPlxyXG4gICAgICB7eyBzY3JvbGxiYXJTdXBwb3J0TWVzc2FnZSB9fVxyXG4gICAgPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwidGFibGVBY3Rpb25zXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMgZC1mbGV4IHJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1sZy1iYXNlbGluZSBwLXNtLTBcIlxyXG4gICAgW25nQ2xhc3NdPVwiaXNNb2JpbGVWaWV3ID8gJ2llZWVzYS1kYXRhLXRhYmxlX19tb2JpbGUtdmlldy1hY3Rpb25zJyA6ICcnXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICpuZ0lmPVwiIWlzTW9iaWxlVmlld1wiXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlUmVmXCJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJ2NvbC1tZC03IGNvbC1sZy02JyB9XCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC1sZy00IGdhcC1tZC0zIGdhcC1zbS0zIGdhcC0zIGNvbC1tZC01IGNvbC1sZy02IGp1c3RpZnktY29udGVudC1lbmQgcHMtMFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIiF0YWJsZUFjdGlvbnM/LmlzRmlsdGVyTmVlZGVkID8gJ2NvbC1tZC0xMiBjb2wtbGctMTInIDogJydcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTW9iaWxlVmlld1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FTZWFyY2hcIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/LmlzQWRkTmVlZGVkXCJcclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJhZGRCdXR0b25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib25BZGRDbGljaygpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIGFkZEJ1dHRvbj8uZGlzYWJsZWQgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMtLWRpc2FibGVkJyA6ICcnXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJ0YWJsZUFjdGlvbnM/LmlzRWRpdE5lZWRlZFwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwidGFibGVFZGl0QnV0dG9uXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIm9uVGFibGVFZGl0Q2xpY2soKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBzZWxlY3RlZFJvd3Muc2VsZWN0ZWQubGVuZ3RoICE9PSAxXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19hY3Rpb25zLS1kaXNhYmxlZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0RlbGV0ZU5lZWRlZFwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwidGFibGVEZWxldGVCdXR0b25cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwib25EZWxldGVUYWJsZUNsaWNrKClcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBzZWxlY3RlZFJvd3Muc2VsZWN0ZWQubGVuZ3RoID09PSAwIHx8IHRhYmxlRGVsZXRlQnV0dG9uLmRpc2FibGVkXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19hY3Rpb25zLS1kaXNhYmxlZCdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNTZWFyY2hOZWVkZWRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8uc2VhcmNoXCJcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLXNtLWZsZXggZC1tZC1ub25lIGQtbGctbm9uZSBkLXhsLW5vbmUgaWVlZXNhLWRhdGEtdGFibGVfX2FjdGlvbnMtLXNlYXJjaC1ncm91cC1pY29uXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib25UYWJsZVNlYXJjaENsaWNrKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0lmPVwiaXNNb2JpbGVWaWV3XCJcclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlUmVmXCJcclxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6ICdpZWVlc2EtZGF0YS10YWJsZV9fZmlsdGVyJyB9XCJcclxuICA+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZVJlZiBsZXQtY2xhc3NOYW1lPVwiZGF0YVwiPlxyXG4gICAgPGllZWVzYS1maWx0ZXJcclxuICAgICAgY2xhc3M9XCJ7eyBjbGFzc05hbWUgfX0gcC0wXCJcclxuICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXHJcbiAgICAgICpuZ0lmPVwidGFibGVBY3Rpb25zPy5pc0ZpbHRlck5lZWRlZFwiXHJcbiAgICAgIFtzZWxlY3RlZEZpbHRlck9wdGlvbnNdPVwic2VsZWN0ZWRGaWx0ZXJPcHRpb25zXCJcclxuICAgICAgW2FwcGxpZWRGaWx0ZXJPcHRpb25zXT1cImFwcGxpZWRGaWx0ZXJPcHRpb25zXCJcclxuICAgICAgKHNlbGVjdGVkRmlsdGVyKT1cInNlbGVjdGVkRmlsdGVyVHlwZUluZm8oJGV2ZW50KVwiXHJcbiAgICAgIChyZW1vdmVGaWx0ZXJlZE9wdGlvbik9XCJvblJlbW92YWxPZkZpbHRlcmVkT3B0aW9uKCRldmVudClcIlxyXG4gICAgICAoZmlsdGVyZWRPcHRpb25zKT1cIm9uU2VsZWN0ZWRGaWx0ZXJPcHRpb25zKCRldmVudClcIlxyXG4gICAgPjwvaWVlZXNhLWZpbHRlcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc01vYmlsZVZpZXcgJiYgaXNTZWFyY2hBY3RpdmVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FTZWFyY2hcIj4gPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLXRlbXBsYXRlICNpZWVlc2FTZWFyY2g+XHJcbiAgICA8aWVlZXNhLXNlYXJjaFxyXG4gICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJzZWFyY2hQbGFjZUhvbGRlclRleHRcIlxyXG4gICAgICBbc2VhcmNoVHlwZV09XCJzZWFyY2hUeXBlXCJcclxuICAgICAgKHNlYXJjaFZhbHVlKT1cInNlYXJjaFZhbHVlKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNTZWFyY2hOZWVkZWRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19zZWFyY2gtd3JhcHBlciBtdC1zbS0yIG1kLXNtLTIgbXQtMiBtZC0yXCJcclxuICAgICAgW3N1cHBvcnRNZXNzYWdlXT1cInNlYXJjaFN1cHBvcnRNZXNzYWdlXCJcclxuICAgID48L2llZWVzYS1zZWFyY2g+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8cFxyXG4gICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fc2VhcmNoX3Jlc3VsdF9sYWJlbFwiXHJcbiAgICAqbmdJZj1cInNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgW2lubmVySFRNTF09XCJzZWFyY2hSZXN1bHRNZXNzYWdlIHwgc2FmZSA6IHNhZmVUeXBlXCJcclxuICA+PC9wPlxyXG4gIDxwXHJcbiAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19jb2x1bW5zLWhlYWRlci10ZXh0IG1iLTAgaWVlZXNhLXRpdGxlLW1kLTE4IHRleHQtY2VudGVyXCJcclxuICAgICpuZ0lmPVwidGFibGVDb2x1bW5zSGVhZGVyVGV4dFwiXHJcbiAgICBbaW5uZXJIVE1MXT1cInRhYmxlQ29sdW1uc0hlYWRlclRleHQgfCBzYWZlIDogc2FmZVR5cGVcIlxyXG4gID48L3A+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY29udGVudFwiXHJcbiAgICBbbmdDbGFzc109XCJcclxuICAgICAgdGFibGVEYXRhSW5mbyAmJiB0YWJsZURhdGFJbmZvLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gJ2llZWVzYS1kYXRhLXRhYmxlX19uby10YWJsZS1kYXRhJ1xyXG4gICAgICAgIDogJydcclxuICAgIFwiXHJcbiAgICAjdGFibGVDb250ZW50XHJcbiAgPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgIG1hdC10YWJsZVxyXG4gICAgICBbbmdDbGFzc109XCJjbGFzc05hbWVcIlxyXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgICAgbWF0U29ydFxyXG4gICAgICBbbWF0U29ydERpc2FibGVDbGVhcl09XCJpc0NsZWFyU29ydE5lZWRlZFwiXHJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblwiXHJcbiAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRUYWJsZURhdGEoJGV2ZW50KVwiXHJcbiAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlJZFwiXHJcbiAgICAgIG11bHRpVGVtcGxhdGVEYXRhUm93c1xyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICBsZXQgY29sdW1uIG9mIGNvbHVtblNjaGVtYUluZm87XHJcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWQ7XHJcbiAgICAgICAgICBsZXQgaWQgPSBpbmRleFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0Q29sdW1uRGVmPVwie3sgY29sdW1uPy5jb2x1bW5EZWYgfX1cIlxyXG4gICAgICAgIFtzdGlja3ldPVwiY29sdW1uPy5pc1N0aWNreUNvbHVtblwiXHJcbiAgICAgICAgW3N0aWNreUVuZF09XCJjb2x1bW4/LmlzU3RpY2t5RW5kQ29sdW1uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uPy5pc1NvcnRhYmxlQ29sdW1uXCJcclxuICAgICAgICAgIFtuZ1N3aXRjaF09XCJjb2x1bW4/LmNvbHVtbkRlZlwiXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlLWhlYWRlciBpZWVlc2EtYm9keS1zbS1ib2xkLTE0XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICBjb2x1bW4/LmNvbHVtbkRlZiA9PT0gY29sdW1uVHlwZT8uU0VMRUNUXHJcbiAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbHVtbj8uaGVhZGluZ1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uU0VMRUNUXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkUm93cz8uaGFzVmFsdWUoKSAmJiBpc0FsbFJvd3NTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RlZFJvd3M/Lmhhc1ZhbHVlKCkgJiYgIWlzQWxsUm93c1NlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNvbnN0YW50cz8uZGF0YVRhYmxlPy5hcmlhTGFiZWw/LnNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyAnbWUtMic6IGNvbHVtbi5oYXNDb2x1bW5BY3Rpb25zIH1cIj57e1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5oZWFkaW5nXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhhc0NvbHVtbkFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8aWVlZXNhLW1lbnVcclxuICAgICAgICAgICAgICAgIFttZW51SXRlbXNdPVwidGFibGVDb2x1bW5BY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0SWNvblNpemVdPVwidGFibGVDb2x1bW5BY3Rpb25NZW51U2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAobWVudUl0ZW1DbGljayk9XCJ0YWJsZUNvbHVtbkFjdGlvbkNsaWNrKGNvbHVtbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobWVudVRvZ2dsZUJ1dHRvbkVsZW1lbnQpPVwidGFibGVDb2x1bW5BY3Rpb25FbGVtZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY29sdW1uLW1lbnVcIlxyXG4gICAgICAgICAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50IGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICA/ICdpZWVlc2EtZGF0YS10YWJsZV9fY29sdW1uLXNlbGVjdCdcclxuICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICB0YWJsZURhdGE7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICByb3c6IHJvdyxcclxuICAgICAgICAgICAgICAgIHRhYmxlUm93QWN0aW9uczogdGFibGVSb3dBY3Rpb25zXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWV4cGFuZGVkLXJvd1wiXHJcbiAgICAgICAgICAgIFtAZGV0YWlsRXhwYW5kXT1cInJvdyA9PT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS1uZXN0ZWQtZGF0YS10YWJsZVwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICAgICAgI25lc3RlZFRhYmxlXHJcbiAgICAgICAgICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlJZFwiXHJcbiAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJuZXN0ZWRUYWJsZURhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiBuZXN0ZWRUYWJsZUNvbHVtblNjaGVtYUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdENvbHVtbkRlZj1cInt7IGNvbHVtbj8uY29sdW1uRGVmIH19XCJcclxuICAgICAgICAgICAgICAgICAgW3N0aWNreV09XCJjb2x1bW4/LmlzU3RpY2t5Q29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0aWNreUVuZF09XCJjb2x1bW4/LmlzU3RpY2t5RW5kQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbHVtbj8uY29sdW1uRGVmXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlLWhlYWRlciBpZWVlc2EtYm9keS1zbS1ib2xkLTE0XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmhlYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmhlYWRpbmcgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50IGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbj8uY29sdW1uRGVmID09PSBjb2x1bW5UeXBlPy5TRUxFQ1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaWVlZXNhLWRhdGEtdGFibGVfX2NvbHVtbi1zZWxlY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVSb3dBY3Rpb25zOiBuZXN0ZWRUYWJsZVJvd0FjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05lc3RlZFRhYmxlSGVhZGVyTmVlZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9faGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbmVzdGVkVGFibGVEaXNwbGF5ZWRDb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3RpY2t5OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImllZWVzYS1uZXN0ZWQtZGF0YS10YWJsZV9fY2VsbC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogbmVzdGVkVGFibGVEaXNwbGF5ZWRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm93Py5sZWdlbmRDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBnZXRSb3dCb3JkZXJMZWZ0Q29sb3Iocm93Py5sZWdlbmRDb2xvcilcclxuICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93ID09PSBleHBhbmRlZEVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgaWVlZXNhLWV4cGFuZGVkLXJvd19fZm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIG5lc3RlZFBhZ2luYXRvckNvbmZpZy50b3RhbFJlY29yZHMgPlxyXG4gICAgICAgICAgICAgICAgICAgIG5lc3RlZFBhZ2luYXRvckNvbmZpZy5yZWNvcmRzUGVyUGFnZSAmJlxyXG4gICAgICAgICAgICAgICAgICBuZXN0ZWRQYWdpbmF0b3JDb25maWcucmVjb3Jkc1BlclBhZ2UgPiAwXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93KVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJ0bi1sYWJlbC1sZy1ib2xkLTE2IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8ubGlua1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZpZXdBbGwgPz8gXCJcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5lc3RlZC1lbGVtZW50LWRldGFpbF9fZm9vdGVyLS1kZXRhaWxcIj57e1xyXG4gICAgICAgICAgICAgICAgICBzaG93TmVzdGVkVGFibGVQYWdpbmF0aW9uSW5mb1xyXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RhYmxlSGVhZGVyTmVlZGVkXCI+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9faGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiBmYWxzZVwiXHJcbiAgICAgICAgPjwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1yb3dcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIihpICsgMSkgJSAyID09PSAwID8gJ2V2ZW4nIDogJ29kZCdcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgcm93Py5sZWdlbmRDb2xvciA/IGdldFJvd0JvcmRlckxlZnRDb2xvcihyb3c/LmxlZ2VuZENvbG9yKSA6ICcnXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsgbGV0IGkgPSBkYXRhSW5kZXhcIlxyXG4gICAgICA+PC90cj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc05lc3RlZFRhYmxlXCI+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IGRldGFpbHM7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1yb3ctZXhwYW5kZWQtdGFibGUtZGV0YWlsXCJcclxuICAgICAgICA+PC90cj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPHBcclxuICBjbGFzcz1cImllZWVzYS1kYXRhLXRhYmxlX19tZXNzYWdlIGllZWVzYS10aXRsZS1sZy1ib2xkLTI0IHRleHQtY2VudGVyIHAtNVwiXHJcbiAgKm5nSWY9XCJ0YWJsZURhdGFJbmZvICYmIHRhYmxlRGF0YUluZm8ubGVuZ3RoID09PSAwXCJcclxuPlxyXG4gIHt7IG5vUmVjb3JkRm91bmQgfX1cclxuPC9wPlxyXG48ZGl2IGNsYXNzPVwicm93IGllZWVzYS1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLWNvbnRhaW5lclwiPlxyXG4gIDxpZWVlc2EtbGVnZW5kXHJcbiAgICBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtNSBkLWZsZXggYWxpZ24taXRlbXMtZW5kIHB4LTRcIlxyXG4gICAgKm5nSWY9XCJsZWdlbmRzPy5sZW5ndGhcIlxyXG4gICAgW25nQ2xhc3NdPVwiIXRhYmxlQWN0aW9ucz8uaXNQYWdpbmF0aW9uTmVlZGVkID8gJ2NvbC1tZC0xMicgOiAnJ1wiXHJcbiAgICBbbGVnZW5kc109XCJsZWdlbmRzXCJcclxuICAgIFtpc1NvcnRpbmddPVwidHJ1ZVwiXHJcbiAgPjwvaWVlZXNhLWxlZ2VuZD5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInRhYmxlQWN0aW9ucz8uaXNQYWdpbmF0aW9uTmVlZGVkXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX3BhZ2luYXRpb24gZC1mbGV4IGZsZXgtcm93LXJldmVyc2UgY29sLXNtLTEyIGNvbC1tZC03XCJcclxuICAgIFtuZ0NsYXNzXT1cIiFsZWdlbmRzPy5sZW5ndGggPyAnY29sLW1kLTEyJyA6ICcnXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uc3RhbnRzPy5kYXRhVGFibGU/LmFyaWFMYWJlbD8ucGFnaW5hdGlvblwiXHJcbiAgPlxyXG4gICAgPG1hdC1wYWdpbmF0b3JcclxuICAgICAgI3BhZ2luYXRvclxyXG4gICAgICBbcGFnZVNpemVdPVwicGFnaW5hdG9yQ29uZmlnPy5yZWNvcmRzUGVyUGFnZVwiXHJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLnBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgIChwYWdlKT1cImhhbmRsZVBhZ2luYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgIFtsZW5ndGhdPVwicGFnaW5hdG9yQ29uZmlnPy50b3RhbFJlY29yZHNcIlxyXG4gICAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZVxyXG4gICN0YWJsZURhdGFcclxuICBsZXQtY29sdW1uPVwiY29sdW1uXCJcclxuICBsZXQtcm93PVwicm93XCJcclxuICBsZXQtdGFibGVSb3dBY3Rpb25zPVwidGFibGVSb3dBY3Rpb25zXCJcclxuPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbj8uY29sdW1uVHlwZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nSWY9XCJpc0NlbGxUZXh0T3ZlcmZsb3dFbGxpcHNpczsgdGhlbiBlbGxpcHNpc0NlbGw7IGVsc2UgdGV4dFdyYXBDZWxsXCJcclxuICAgICAgPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0V3JhcENlbGw+XHJcbiAgICAgICAgPHBcclxuICAgICAgICAgIGNsYXNzPVwibS0wIGllZWVzYS1ib2R5LWNvbG9yLXNtLTE0IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtLXRleHRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmlzSFRNTENlbGxEYXRhXCJcclxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29sdW1uPy5jZWxsRGF0YShyb3cpIHwgc2FmZSA6IHNhZmVUeXBlXCJcclxuICAgICAgICA+PC9wPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uPy5pc0hUTUxDZWxsRGF0YVwiPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJtLTAgaWVlZXNhLWJvZHktY29sb3Itc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tdGV4dFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbj8uY2VsbERhdGEocm93KSB9fVxyXG4gICAgICAgICAgPC9wPjwvbmctY29udGFpbmVyXHJcbiAgICAgICAgPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2VsbGlwc2lzQ2VsbD5cclxuICAgICAgICA8cFxyXG4gICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY29sdW1uPy5jZWxsRGF0YShyb3cpXCJcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tZWxsaXBzaXMgaWVlZXNhLWJvZHktY29sb3Itc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC0tdGV4dFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sdW1uPy5jZWxsRGF0YShyb3cpIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5MSU5LXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgaXNFbGxpcHNpc1JlcXVpcmVkRm9yTGluaztcclxuICAgICAgICAgICAgdGhlbiBlbGxpcHNpc0NlbGw7XHJcbiAgICAgICAgICAgIGVsc2UgdGV4dFdyYXBDZWxsXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2VsbGlwc2lzQ2VsbD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICBbZWxlbWVudENsYXNzTmFtZVRvQWRkVG9vbHRpcF09XCInLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJ0bi1sYWJlbC1sZy1ib2xkLTE2IGllZWVzYS1kYXRhLXRhYmxlX19jZWxsLWNvbnRlbnQtbGluayBpZWVlc2EtZGF0YS10YWJsZV9fY2VsbC1jb250ZW50LWxpbmstLWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmNlbGxEYXRhKHJvdylcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJyb3c/LnRvb2xUaXBUZXh0ID8/IGNvbHVtbj8uY2VsbERhdGEocm93KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbj8uY2VsbERhdGEocm93KSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRXcmFwQ2VsbD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25MaW5rQ2xpY2socm93LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtYnRuLWxhYmVsLWxnLWJvbGQtMTYgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC1saW5rXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2x1bW4/LmNlbGxEYXRhKHJvdylcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJyb3c/LnRvb2xUaXBUZXh0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgY29sdW1uPy5jZWxsRGF0YShyb3cpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5pc0NvbnRlbnRVbmRlckxpbmtcIj5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC11bmRlci1saW5rXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4/LmlzSFRNTENlbGxEYXRhXCJcclxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3c/LmNvbnRlbnRVbmRlckxpbmsgfCBzYWZlIDogc2FmZVR5cGVcIlxyXG4gICAgICAgICAgPjwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktc20tMTQgaWVlZXNhLWRhdGEtdGFibGVfX2NlbGwtY29udGVudC11bmRlci1saW5rXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uPy5pc0hUTUxDZWxsRGF0YVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHJvdz8uY29udGVudFVuZGVyTGluayB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uTkVTVEVEX1RBQkxFXCI+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJyb3c/Lmhhc0NoaWxkcmVuXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIlxyXG4gICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID0gZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyBudWxsIDogcm93O1xyXG4gICAgICAgICAgb25UYWJsZVJvd0V4cGFuc2lvbkNsaWNrKHJvdylcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIlxyXG4gICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyByb3dFeHBhbmRCdXR0b24gOiByb3dDb2xsYXBzZUJ1dHRvblxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGU/LlNFTEVDVFwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgY2xhc3M9XCJjb2wtMlwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBvblNlbGVjdENsaWNrKHJvdykgOiBudWxsXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFJvd3MuaXNTZWxlY3RlZChyb3cpXCJcclxuICAgICAgICBbYXJpYS1sYWJlbF09XCJjb25zdGFudHM/LmRhdGFUYWJsZT8uYXJpYUxhYmVsPy5zZWxlY3RcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJyb3c/LmRpc2FibGUgJiYgY2FuRGlzYWJsZUNoZWNrYm94XCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uVHlwZT8uRURJVFwiPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwicm93RWRpdEJ1dHRvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvbkVkaXRDbGljayhyb3cpXCJcclxuICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5ERUxFVEVcIj5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cInJvd0RlbGV0ZUJ1dHRvblwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJvbkRlbGV0ZUNsaWNrKHJvdylcIlxyXG4gICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbHVtblR5cGUuU0xJREVfVE9HR0xFXCI+XHJcbiAgICAgIDxpZWVlc2Etc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgW3NsaWRlVG9nZ2xlXT1cImNvbHVtbj8uY2VsbERhdGEocm93KVwiXHJcbiAgICAgICAgKHNsaWRlVG9nZ2xlQ2hhbmdlKT1cInJvd1NsaWRlVG9nZ2xlQ2hhbmdlKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgW2NhblNob3dJY29uXT1cInRydWVcIlxyXG4gICAgICA+PC9pZWVlc2Etc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW5UeXBlPy5BQ1RJT05TXCI+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFtidXR0b25dPVwicm93TWVudUFjdGlvbkljb25cIlxyXG4gICAgICAgIFttZW51SXRlbXNdPVwidGFibGVSb3dBY3Rpb25zID8/IHJvdy5tZW51QWN0aW9uXCJcclxuICAgICAgICAoY2xpY2spPVwibWVudUl0ZW1BY3Rpb24ocm93KVwiXHJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25Sb3dBY3Rpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|