@smartbit4all/ng-client 4.0.20 → 4.0.22

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.
@@ -196,6 +196,7 @@ export class SmartGridComponent {
196
196
  async renderTable() {
197
197
  this.clearTree();
198
198
  if (this.compLib === this.componentLibrary.PRIMENG) {
199
+ this.pageIndex = this.smartGrid?.gridModel.pageSize * this.smartGrid?.gridModel.pageIndex;
199
200
  this.columns = [];
200
201
  this.smartGrid?.gridModel.view?.orderedColumnNames.map((orderedCol) => {
201
202
  this.smartGrid?.gridModel.view?.descriptor?.columns.map((colum) => {
@@ -784,11 +785,11 @@ export class SmartGridComponent {
784
785
  this.menu.toggle(event);
785
786
  }
786
787
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, deps: [{ token: i1.SmartGridService }, { token: i2.ComponentFactoryService }, { token: i3.MatDialog }, { token: i4.UiActionDescriptorService }, { token: COMPONENT_LIBRARY }, { token: 'gridMenuIcon' }], target: i0.ɵɵFactoryTarget.Component }); }
787
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table #pTable [value]=\"smartGrid.gridModel.page.rows!\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"more_vert\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex! + 1\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i18.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i19.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }] }); }
788
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table #pTable [value]=\"smartGrid.gridModel.page.rows!\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"more_vert\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i18.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i19.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }] }); }
788
789
  }
789
790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, decorators: [{
790
791
  type: Component,
791
- args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table #pTable [value]=\"smartGrid.gridModel.page.rows!\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"more_vert\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex! + 1\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"] }]
792
+ args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table #pTable [value]=\"smartGrid.gridModel.page.rows!\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"more_vert\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"] }]
792
793
  }], ctorParameters: () => [{ type: i1.SmartGridService }, { type: i2.ComponentFactoryService }, { type: i3.MatDialog }, { type: i4.UiActionDescriptorService }, { type: i4.ComponentLibrary, decorators: [{
793
794
  type: Inject,
794
795
  args: [COMPONENT_LIBRARY]
@@ -811,4 +812,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
811
812
  type: ViewChild,
812
813
  args: ['menu']
813
814
  }] } });
814
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBWSxrQkFBa0IsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUdqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwy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QkE4M0JELElBQUk7c0JBQXRCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RGlhbG9nRGF0YSB9IGZyb20gJy4uL3NtYXJ0LWRpYWxvZy9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEV4cGFuZGFibGVTZWN0aW9uIH0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkgfSBmcm9tICcuLi9zbWFydC1maWx0ZXItZWRpdG9yL2FwaS9tb2RlbC9maWx0ZXJFeHByZXNzaW9uT3JkZXJCeSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUYWJsZSxcclxuICBTbWFydFRhYmxlQnV0dG9uVHlwZSxcclxuICBTbWFydFRhYmxlSGVhZGVyLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0sXHJcbiAgU21hcnRUYWJsZU9yZGVyLFxyXG4gIFNtYXJ0VGFibGVUeXBlLFxyXG4gIFNtYXJ0dGFibGVDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiwgVWlBY3Rpb25CdXR0b25UeXBlLCBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvYXBpJztcclxuaW1wb3J0IHtcclxuICBDT01QT05FTlRfTElCUkFSWSxcclxuICBDb21wb25lbnRMaWJyYXJ5LFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZENvbHVtbk1ldGEsXHJcbiAgR3JpZFJvdyxcclxuICBHcmlkU2VsZWN0aW9uTW9kZSxcclxuICBHcmlkU2VsZWN0aW9uVHlwZSxcclxuICBHcmlkVXBkYXRlRGF0YSxcclxuICBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bSxcclxufSBmcm9tICcuL2FwaS9ncmlkLWFwaSc7XHJcbmltcG9ydCB7IFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1sYXlvdXQtZGVmaW5lci90YWJsZS1sYXlvdXQtZGVmaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBHcmlkVWlBY3Rpb25UeXBlLCBTbWFydEdyaWQsIFNtYXJ0TGF5b3V0RGVmIH0gZnJvbSAnLi9tb2RlbHMvbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtTbWFydEdyaWRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwXTtcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQElucHV0KCkgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG4gIEBJbnB1dCgpIHV1aWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGV2OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHRhYmxlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdmNSZWZUYWJsZT86IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29tcG9uZW50UmVmVGFibGU/OiBDb21wb25lbnRSZWY8U21hcnR0YWJsZUNvbXBvbmVudD47XHJcbiAgc21hcnRUYWJsZSE6IFNtYXJ0VGFibGU8R3JpZFJvdz47XHJcblxyXG4gIC8vIHRvb2xiYXJcclxuICBAVmlld0NoaWxkKCd0b29sYmFyJykgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuXHJcbiAgLy8gZXhwYW5kYWJsZVxyXG4gIC8vIGdyaWREYXRhXHJcbiAgZXhwYW5kYWJsZVNlY3Rpb25zPzogRXhwYW5kYWJsZVNlY3Rpb248YW55PltdO1xyXG5cclxuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XHJcbiAgZGF0YXNvdXJjZT86IG51bGw7XHJcbiAgcGFnZVNpemU/OiBudW1iZXI7XHJcbiAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleD86IG51bWJlcjtcclxuICB2YWx1ZXM6IGFueTtcclxuICBncmlkVGFibGUhOiBTbWFydFRhYmxlPGFueT47XHJcblxyXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcblxyXG4gIHNlbGVjdGlvbkNoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVpQWN0aW9uRGVzY3JpcHRvcnM6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGFmdGVyVmlld0luaXRFeGVjdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQmxvY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIHRyZWVcclxuICB0cmVlQ29udHJvbD86IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93PjtcclxuICB0cmVlRmxhdHRlbmVyPzogTWF0VHJlZUZsYXR0ZW5lcjxHcmlkUm93LCBHcmlkUm93PjtcclxuICB0cmVlRGF0YVNvdXJjZT86IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxHcmlkUm93LCBHcmlkUm93PjtcclxuICB0cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPzogU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBTbWFydEdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTogVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIHB1YmxpYyBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5LFxyXG4gICAgQEluamVjdCgnZ3JpZE1lbnVJY29uJykgcHJpdmF0ZSBncmlkTWVudUljb24/OiBzdHJpbmdcclxuICApIHtcclxuICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIGNhbGxlZCBhZnRlciBldmVyeSBzZXJ2aWNlIGNhbGwgKGxvYWQsIHNhdmUsIHJlZnJlc2gsIGV0Yy4pXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsO1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snc21hcnRHcmlkJ10pIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBjaGFuZ2VzWydzbWFydEdyaWQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZD8ucGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3V1aWQnXSkge1xyXG4gICAgICB0aGlzLnV1aWQgPSBjaGFuZ2VzWyd1dWlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkICYmIHRoaXMudXVpZCAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyBmb3IgZGV2IHB1cnBvc2VzXHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWw7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQgJiYgIXRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZnRlclZpZXdJbml0RXhlY3V0ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgcm93cyBvZiB0aGUgdGFibGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzKCk6IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+IHtcclxuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbikgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlIS5zZWxlY3Rpb24hO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBHRVQgcmVxdWVzdCB0byB0aGUgZ2VuZXJpYyBHcmlkQVBJIGFuZCByZWZyZXNoZXMgdGhlIHByZXNlbnRlZFxyXG4gICAqIGdyaWQgd2l0aCB0aGUgbmV3ZXN0IG9uZS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2V0dXBUb29sYmFyKCk7XHJcbiAgICAvLyB3aWxsIGNhdXNlIHRoaXMuc2VydmljZS5ncmlkTW9kZWxDaGFuZ2VkIHRvIGZpcmVcclxuICAgIGlmICh0aGlzLnV1aWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmxvYWQodGhpcy51dWlkLCB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHVwVG9vbGJhcigpIHtcclxuICAgIC8vIGNoZWNrIGlmIHRvb2xiYXIgaXMgYXZhaWxhYmxlIF9hbmRfIG5lZWQgc2V0IHVwXHJcbiAgICBpZiAodGhpcy50b29sYmFyICYmIHRoaXMuc21hcnRHcmlkKSB7XHJcbiAgICAgIGxldCB0b29sYmFySWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgKyAnX3Rvb2xiYXInO1xyXG4gICAgICBpZiAodG9vbGJhcklkICE9PSB0aGlzLnRvb2xiYXIuaWQpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXIuaWQgPSB0b29sYmFySWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsO1xyXG4gICAgaWYgKGdyaWRNb2RlbCkge1xyXG4gICAgICB0aGlzLmxlbmd0aCA9IGdyaWRNb2RlbC50b3RhbFJvd0NvdW50O1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gZ3JpZE1vZGVsLnBhZ2VTaXplO1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IGdyaWRNb2RlbC5wYWdlSW5kZXggPz8gMDtcclxuICAgICAgaWYgKGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMgJiYgZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zaG93RWRpdENvbHVtbnMgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNob3dFZGl0Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBsZXQga2luZCA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8ua2luZDtcclxuICAgICAgaWYgKGtpbmQpIHtcclxuICAgICAgICBsZXQgbGF5b3V0RGVmO1xyXG4gICAgICAgIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5UQUJMRSkge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVEFCTEU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5UUkVFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UUkVFO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uQ0FSRFMpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLkNBUkQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsYXlvdXREZWYpIHtcclxuICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPSBsYXlvdXREZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChncmlkTW9kZWw/LnBhZ2luYXRvciA9PT0gdHJ1ZSB8fCBncmlkTW9kZWw/LnBhZ2luYXRvciA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yID0gZ3JpZE1vZGVsLnBhZ2luYXRvcjtcclxuICAgICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQhLnBhZ2luYXRvcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignR3JpZE1vZGVsIGlzIHVuZGVmaW5lZCBpbiBjb21wb25lbnQhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYpIHtcclxuICAgICAgLy8gZmFsbGJhY2ssIGRlZmF1bHQgVEFCTEVcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRBQkxFO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVGFibGUoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuRVhQQU5EQUJMRSkge1xyXG4gICAgICB0aGlzLnJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5DQVJEKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQ2FyZHMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVFJFRSkge1xyXG4gICAgICB0aGlzLnJlbmRlclRyZWUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNCbG9ja2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyVGFibGUoKSB7XHJcbiAgICB0aGlzLnZjUmVmVGFibGU/LmNsZWFyKCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXJUYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2xlYXJUcmVlKCk7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKChvcmRlcmVkQ29sOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChjb2x1bTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICAgIGlmIChvcmRlcmVkQ29sID09PSBjb2x1bS5wcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW0ubGFiZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGFibGVSb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsIS5wYWdlLnJvd3MhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0YWJsZVJvdy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBsYWNlSG9sZGVyUm93OiBhbnkgPSB7fTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5jb2x1bW5zLm1hcCgobWV0YTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICBwbGFjZUhvbGRlclJvd1ttZXRhLnByb3BlcnR5TmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyA9IFtwbGFjZUhvbGRlclJvd107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhYmxlVHlwZTtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LnRhYmxlVHlwZSkge1xyXG4gICAgICB0YWJsZVR5cGUgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcudGFibGVUeXBlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25UeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3Iuc2VsZWN0aW9uVHlwZSA9PT0gR3JpZFNlbGVjdGlvblR5cGUuQ0hFQ0tCT1hcclxuICAgICAgICAgID8gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YXHJcbiAgICAgICAgICA6IFNtYXJ0VGFibGVUeXBlLlJPV19TRUxFQ1Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YWJsZVR5cGUgPSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbmZpZzogU21hcnRUYWJsZUludGVyZmFjZTxHcmlkUm93PiA9IHtcclxuICAgICAgICAuLi50aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcsXHJcbiAgICAgICAgdGFibGVSb3dzOiB0YWJsZVJvdyxcclxuICAgICAgICB0YWJsZVR5cGUsXHJcbiAgICAgICAgY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM6IGF3YWl0IHRoaXMuY29uc3RydWN0SGVhZGVyKCkhLFxyXG4gICAgICAgIGV4cGFuZGFibGU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlLFxyXG4gICAgICAgIGV4cGFuZGVkQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kZWRDb21wb25lbnQsXHJcbiAgICAgICAgdHlwZTogU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLk5PUk1BTCxcclxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uQ29kZXM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMhLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25zOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zPy5tYXAoKGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTpcclxuICAgICAgICAgICAgICBjb2RlID09PSAnX2FjdGlvblNlcGFyYXRvcl8nXHJcbiAgICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVCdXR0b25UeXBlLlNFUEFSQVRPUlxyXG4gICAgICAgICAgICAgICAgOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IGNvZGUgfSksXHJcbiAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAvLyBhcmdzOiBbXHJcbiAgICAgICAgICAgIC8vICAge1xyXG4gICAgICAgICAgICAvLyAgICAgY29kZTogY29kZSxcclxuICAgICAgICAgICAgLy8gICB9LFxyXG4gICAgICAgICAgICAvLyBdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodFByb3BlcnR5ICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRDbGFzc1xyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRDbGFzcyA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0Q2xhc3M7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0UHJvcGVydHkgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodFByb3BlcnR5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25TZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGFibGVDb25maWcub25BbGxTZWxlY3Rpb24gPSB0aGlzLm9uU2VsZWN0QWxsLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBhcmVkIGZvciBzaW1wbGUgY2xpY2tzXHJcbiAgICAgIC8vIGlmICghdGFibGVDb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAvLyAgIHRhYmxlQ29uZmlnLm9uUm93Q2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljayA9IHRoaXMub25Eb3VibGVDbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLmlzUm93RGlzYWJsZWRQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3RhYmxlUHJvcGVydHlOYW1lID0gJ3NlbGVjdGFibGUnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGFibGVDb25maWcuYXN5bmNPbkV4cGFuZCkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnJvd0V4cGFuZGVyID0gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvbiAmJlxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSAmJlxyXG4gICAgICAgIHNlbGVjdGlvbk1vZGUgIT09IEdyaWRTZWxlY3Rpb25Nb2RlLk5PTkVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSA9ICdpZCc7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlXHJcbiAgICAgICAgICAucm93cyEuZmlsdGVyKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LnNlbGVjdGVkKVxyXG4gICAgICAgICAgLm1hcCgoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5pZCEpO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPihpc011bHRpcGxlLCBzZWxlY3RlZElkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZSA9IG5ldyBTbWFydFRhYmxlPGFueT4odGFibGVDb25maWcpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmVGFibGUpIHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnVwZGF0ZVNtYXJ0VGFibGUodGhpcy5zbWFydFRhYmxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZjUmVmVGFibGU/LmNsZWFyKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52Y1JlZlRhYmxlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgICB0aGlzLnZjUmVmVGFibGUhLFxyXG4gICAgICAgICAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxuICAgICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KFtbJ3NtYXJ0VGFibGUnLCB0aGlzLnNtYXJ0VGFibGVdXSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5zb3J0RXZlbnRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLnByb3BlcnR5TmFtZSA9IGhlYWRlci5wcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDUpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5BU0M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFNtYXJ0VGFibGVPcmRlci5BU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSBTbWFydFRhYmxlT3JkZXIuREVTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkRFU0M6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGZpbHRlciA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZChcclxuICAgICAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyICYmICFoZWFkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LmluZGV4T2YoZmlsdGVyKTtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0LnNwbGljZShpbmRleCEsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xyXG4gICAgICAgICAgICAgIGZpbHRlci5vcmRlciA9IGhlYWRlci5vcmRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgb3JkZXI6IGhlYWRlci5vcmRlcixcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZTogaGVhZGVyLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGdyaWRVcGRhdGVEYXRhOiBHcmlkVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgICAgICBvcmRlckJ5TGlzdDogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdCxcclxuICAgICAgICAgICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJlZENvbHVtbk5hbWVzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uuc29ydCh0aGlzLnNtYXJ0R3JpZCEsIGdyaWRVcGRhdGVEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy5jaGFuZ2VkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VzLm5leHQocm93KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kKHJvd0lkOiBudW1iZXIpOiBhbnkge31cclxuXHJcbiAgcHVibGljIGFzeW5jIGV4cGFuZEFzeW5jKHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzKSB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93c1tyb3dJbmRleF07XHJcbiAgICAgIGlmIChyb3cgJiYgcm93LmlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmQodGhpcy5zbWFydEdyaWQhLCByb3cuaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvd0luZGV4LnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9ucyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgaGVhZGVyQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIGhlYWRlcklucHV0TmFtZTogdGhpcy5zbWFydEdyaWQhLmhlYWRlckNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBoZWFkZXJEYXRhOiBpdGVtLFxyXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgaW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudElucHV0TmFtZSxcclxuICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckNhcmRzKCk6IHZvaWQge1xyXG4gICAgLy8gVE9ET1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VydmljZSEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvbk1vZGU7XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyVHJlZSgpIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUcmVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhclRhYmxlKCk7XHJcbiAgICBpZiAoIXRoaXMudHJlZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lcixcclxuICAgICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlLFxyXG4gICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW5cclxuICAgICAgKTtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgICB0aGlzLnRyZWVEYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz4odGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzO1xyXG4gICAgbGV0IGV4cGFuZGVkTm9kZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XHJcbiAgICBpZiAobm9kZXMpIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IG5vZGVzXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRhYmxlKG5vZGUpKVxyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQobm9kZSkpXHJcbiAgICAgICAgLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZm9yRWFjaCgocm93OiBhbnkpID0+IChyb3cubGV2ZWwgPSB1bmRlZmluZWQpKTtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5maWx0ZXIoKHJvdykgPT4gIXJvdy5wYXJlbnQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5jbGVhcigpO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LnNlbGVjdChub2RlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5jb2xsYXBzZUFsbCgpO1xyXG4gICAgZXhwYW5kZWROb2Rlcy5mb3JFYWNoKChyb3dJZCkgPT4ge1xyXG4gICAgICBsZXQgcm93ID0gdGhpcy50cmVlQ29udHJvbD8uZGF0YU5vZGVzLmZpbmQoKHJvdykgPT4gcm93SWQgPT09IHJvdy5pZCk7XHJcbiAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sPy5leHBhbmQocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZXZlbCA9IChub2RlOiBhbnkpID0+IG5vZGUubGV2ZWwgPz8gMDtcclxuXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyaWRSb3cpID0+IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSk7XHJcblxyXG4gIGdldENoaWxkcmVuID0gKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93W10gPT4ge1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgbGV0IHJvd3MgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2Uucm93cz8uZmlsdGVyKChyb3cpID0+XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uc29tZSgoY2hpbGQpID0+IGNoaWxkID09PSByb3cuaWQhKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAocm93cykge1xyXG4gICAgICAgIHJldHVybiByb3dzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfTtcclxuXHJcbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZURhdGE6IEdyaWRSb3cpID0+IHRoaXMuaXNFeHBhbmRhYmxlKF9ub2RlRGF0YSk7XHJcblxyXG4gIHRyYW5zZm9ybWVyID0gKHJvdzogR3JpZFJvdywgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgKHJvdyBhcyBhbnkpLmxldmVsID0gbGV2ZWw7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH07XHJcblxyXG4gIGdldFRyZWVJdGVtKHJvdzogR3JpZFJvdyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29sdW1uczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcztcclxuICAgIGxldCBkYXRhOiBhbnkgPSByb3cuZGF0YSE7XHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IGRhdGFbY29sXSkuam9pbignICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdy5pZCE7XHJcbiAgfVxyXG5cclxuICAvKiogVG9nZ2xlIHRoZSB0cmVlTm9kZSBzZWxlY3Rpb24uIFNlbGVjdC9kZXNlbGVjdCBhbGwgdGhlIGRlc2NlbmRhbnRzIG5vZGUgKi9cclxuICB0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQmVmb3JlID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG4gICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2whLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxyXG4gICAgICAgID8gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcclxuICAgICAgICA6IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNjZW5kYW50cyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkFmdGVyID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdGVkLm1hcCgocm93KSA9PiByb3cuaWQpO1xyXG5cclxuICAgIGxldCBzZWxlY3RlZElkcyA9IHNlbGVjdGlvbkFmdGVyLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkJlZm9yZS5pbmNsdWRlcyhzKSk7XHJcbiAgICBsZXQgdW5zZWxlY3RlZElkcyA9IHNlbGVjdGlvbkJlZm9yZS5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25BZnRlci5pbmNsdWRlcyhzKSk7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gd2hlbiBzZXJ2aWNlIGNhbGwgaXMgYWN0aXZlICghZGV2KSwgb25TZWxlY3Qgd2lsbCB0b2dnbGUgcm93LnNlbGVjdGVkXHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHVuc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93LmlkKSlcclxuICAgICAgICAuZm9yRWFjaCgocm93KSA9PiAocm93LnNlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgIH1cclxuICAgIHRoaXMub25TZWxlY3RSb3dzKHNlbGVjdGVkSWRzLCB1bnNlbGVjdGVkSWRzKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgcGFyZW50OiBHcmlkUm93IHwgbnVsbCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgdGhpcy5jaGVja1BhcmVudE5vZGVTZWxlY3Rpb24ocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1BhcmVudE5vZGVTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9kZVNlbGVjdGVkID0gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBpZiAobm9kZVNlbGVjdGVkICYmICFkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xyXG4gICAgfSBlbHNlIGlmICghbm9kZVNlbGVjdGVkICYmIGRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogR2V0IHRoZSBwYXJlbnQgbm9kZSBvZiBhIG5vZGUgKi9cclxuICBnZXRQYXJlbnROb2RlKG5vZGU6IEdyaWRSb3cpOiBHcmlkUm93IHwgbnVsbCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG5cclxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIG5vZGUgYXJlIHNlbGVjdGVkLiAqL1xyXG4gIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID1cclxuICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxyXG4gICAgICBkZXNjZW5kYW50cy5ldmVyeSgoY2hpbGQpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgcGFydCBvZiB0aGUgZGVzY2VuZGFudHMgYXJlIHNlbGVjdGVkICovXHJcbiAgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gZGVzY2VuZGFudHMuc29tZSgoY2hpbGQpID0+IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCkpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY29uc3RydWN0SGVhZGVyKCk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcltdPiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MgJiYgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLm1hcChhc3luYyAoZ3JpZFJvdzogR3JpZFJvdykgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld1VpQWN0aW9ucyA9IGdyaWRSb3cuYWN0aW9ucz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAodWlBY3Rpb246IGFueSkgPT4gIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGlmIChuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgbmV3VWlBY3Rpb25zLm1hcChhc3luYyAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVzY3JpcHRvcjogVWlBY3Rpb25EZXNjcmlwdG9yID1cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U/LmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpQWN0aW9uLmNvZGUgPz8gJ0NPREUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQodWlBY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3JlZGVyZWREZXNjQ29sdW1ucyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJlZENvbHVtbk5hbWVzLm1hcChcclxuICAgICAgKHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEuZGVzY3JpcHRvciEuY29sdW1ucyEuZmluZChcclxuICAgICAgICAgIChjb2xEZXNjcmlwdG9yOiBHcmlkQ29sdW1uTWV0YSkgPT4gY29sRGVzY3JpcHRvci5wcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZVxyXG4gICAgICAgIClcclxuICAgICkuZmxhdE1hcCgoZikgPT4gZiA/PyBbXSk7XHJcblxyXG4gICAgbGV0IGhlYWRlciA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBvcmVkZXJlZERlc2NDb2x1bW5zLm1hcChhc3luYyAoZGVzY0NvbHVtbjogR3JpZENvbHVtbk1ldGEpOiBQcm9taXNlPFNtYXJ0VGFibGVIZWFkZXI+ID0+IHtcclxuICAgICAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAgICAgKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0gPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyQnlMaXN0Py5maW5kKFxyXG4gICAgICAgICAgKGZpbHRlckV4cHJlc3Npb246IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PlxyXG4gICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uLnByb3BlcnR5TmFtZSA9PT0gZGVzY0NvbHVtbiEucHJvcGVydHlOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgb3JkZXI7XHJcbiAgICAgICAgbGV0IG9yZGVyTnVtYmVyO1xyXG4gICAgICAgIGlmIChmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0pIHtcclxuICAgICAgICAgIG9yZGVyID1cclxuICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtLm9yZGVyID09PSBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeS5PcmRlckVudW0uQXNjXHJcbiAgICAgICAgICAgICAgPyBTbWFydFRhYmxlT3JkZXIuQVNDXHJcbiAgICAgICAgICAgICAgOiBTbWFydFRhYmxlT3JkZXIuREVTQztcclxuICAgICAgICAgIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAoZmlsdGVyOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT4gZmlsdGVyLnByb3BlcnR5TmFtZSA9PT0gZGVzY0NvbHVtbiEucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIG9yZGVyTnVtYmVyKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWduYWxMYWJlbCA9IGN1c3RvbVRhYmxlSGVhZGVyPy5sYWJlbCA/PyBkZXNjQ29sdW1uLmxhYmVsO1xyXG4gICAgICAgIGxldCBsYWJlbCA9ICcnO1xyXG4gICAgICAgIGlmICghZGVzY0NvbHVtbi5oaWRlTGFiZWwpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICAgICAgICBsYWJlbCA9IGF3YWl0IHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlPy5nZXQob3JpZ25hbExhYmVsKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gb3JpZ25hbExhYmVsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBjdXN0b21UYWJsZUhlYWRlcj8ucHJvcGVydGllcztcclxuICAgICAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWUnIHx8XHJcbiAgICAgICAgICAgIGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsRGF0ZVRpbWUnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ3l5eXkuTU0uZGQgSDptbSc7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFVElNRSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbERhdGUnKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICd5eXl5Lk1NLmRkJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxUaW1lJykge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAnSDptbSc7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5USU1FLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS5sYW5nLkJvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5DSEVDS0JPWCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jdXN0b21UYWJsZUhlYWRlcixcclxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ2RhdGEuJyArIGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgICBvcmRlck51bWJlcixcclxuICAgICAgICAgIHByb3BlcnRpZXMsXHJcbiAgICAgICAgICBzdHlsZTogZGVzY0NvbHVtbi5zdHlsZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgY29tcGxlbWVudCA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbHRlcihcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PlxyXG4gICAgICAgICFoZWFkZXIuc29tZSgodEg6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRILnByb3BlcnR5TmFtZS5pbmNsdWRlcyh0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUpKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY29tcGxlbWVudCkge1xyXG4gICAgICBoZWFkZXIucHVzaCguLi5jb21wbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnNpbXBsZUJ1dHRvbnMpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMuc2ltcGxlQnV0dG9ucy5mb3JFYWNoKCh1aUFjdGlvbkNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ3NpbXBsZV9idXR0b25zJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLlJBSVNFRCxcclxuICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgLy8gbGFiZWw6IHRoaXMuYnV0dG9uVHJhbnNsYXRvcih7IGNvZGU6IHVpQWN0aW9uQ29kZSB9KSxcclxuICAgICAgICAgICAgICBhcmdzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGNvZGU6IHVpQWN0aW9uQ29kZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgIHNob3dCdXR0b25JZjogKHJvdzogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgcm93LmFjdGlvbnMuc29tZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmNvZGUgPT09IHVpQWN0aW9uQ29kZTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFoZWFkZXIuc29tZSgoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSAnbXlfbWVudScpKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8ucm93VWlBY3Rpb25UeXBlID09PSBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUpIHtcclxuICAgICAgICBsZXQgaWNvbiA9IHRoaXMuZ3JpZE1lbnVJY29uID8/ICdtb3JlX3ZlcnQnO1xyXG4gICAgICAgIGhlYWRlci5wdXNoKHtcclxuICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgIHByb3BlcnR5TmFtZTogJ215X21lbnUnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVSxcclxuICAgICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgaWNvbjogaWNvbixcclxuICAgICAgICAgICAgICBtZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWU6ICdhY3Rpb25zJyxcclxuICAgICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBhcmdzOiBbXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBpc1NvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoZWFkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb25DaGFuZ2VQYWdlKGV2ZW50OiBQYWdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBvZmZzZXQgPSBldmVudC5wYWdlU2l6ZSAqIGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGxldCBsaW1pdCA9IGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2V0UGFnZShcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3VXVpZCEsXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgb2Zmc2V0LnRvU3RyaW5nKCksXHJcbiAgICAgIGxpbWl0LnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb25QcmltZUNoYW5nZVBhZ2UoZXZlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucm93cztcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2V0UGFnZShcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3VXVpZCEsXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgb2Zmc2V0LnRvU3RyaW5nKCksXHJcbiAgICAgIGxpbWl0LnRvU3RyaW5nKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGUoYXJnczogYW55W10sIHJvdzogYW55LCB1aUFjdGlvbjogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgX3VpQWN0aW9uOiBVaUFjdGlvbjtcclxuXHJcbiAgICBpZiAoIXVpQWN0aW9uKSB7XHJcbiAgICAgIHVpQWN0aW9uID0gcm93LmFjdGlvbnMuZmlsdGVyKChhY3Rpb246IFVpQWN0aW9uKSA9PiBhY3Rpb24uY29kZSA9PT0gYXJnc1swXS5jb2RlKVswXTtcclxuICAgIH1cclxuXHJcbiAgICBfdWlBY3Rpb24gPSB7IC4uLnVpQWN0aW9uIH07XHJcbiAgICBpZiAoX3VpQWN0aW9uLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIF91aUFjdGlvbi5wYXJhbXMgPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uLnBhcmFtcyxcclxuICAgICAgbW9kZWw6IHJvdyxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHVpQWN0aW9uTW9kZWw6IGFueSA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlLFxyXG4gICAgICB1aUFjdGlvbjogX3VpQWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnVpQWN0aW9uTW9kZWxDYWxsYmFjaykge1xyXG4gICAgICB1aUFjdGlvbk1vZGVsID0gdGhpcy5zbWFydEdyaWQhLm9wdGlvbnMhLnVpQWN0aW9uTW9kZWxDYWxsYmFjayh1aUFjdGlvbk1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB1aUFjdGlvbk1vZGVsO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKF91aUFjdGlvbiwge1xyXG4gICAgICB3aWRnZXRJZDogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBub2RlSWQ6IHJvdy5pZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidXR0b25UcmFuc2xhdG9yKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uRGVzY3JpcHRvciB7XHJcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpO1xyXG4gICAgaWYgKCFkZXNjKSB7XHJcbiAgICAgIGRlc2MgPSB7XHJcbiAgICAgICAgdGl0bGU6IHVpQWN0aW9uLmNvZGUhLFxyXG4gICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5GTEFULFxyXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodWlBY3Rpb24uZGVzY3JpcHRvcikge1xyXG4gICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UubWVyZ2VBY3Rpb25EZXNjcmlwdG9ySW50b0NsaWVudCh1aUFjdGlvbi5kZXNjcmlwdG9yISwgZGVzYyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVzYztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsYXlvdXREZWYoKTogdHlwZW9mIFNtYXJ0TGF5b3V0RGVmIHtcclxuICAgIHJldHVybiBTbWFydExheW91dERlZjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcbiAgcHVibGljIG9uRG91YmxlQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVPbkNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBkZWZhdWx0Um93QWN0aW9uOiBVaUFjdGlvbiB8IHVuZGVmaW5lZDtcclxuICAgIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy5kZWZhdWx0Um93QWN0aW9ucykge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0Um93QWN0aW9uQ29kZSA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnNbaW5kZXhdO1xyXG5cclxuICAgICAgICBkZWZhdWx0Um93QWN0aW9uID0gZ3JpZFJvdy5hY3Rpb25zLmZpbmQoXHJcbiAgICAgICAgICAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB1aUFjdGlvbi5jb2RlID09PSBkZWZhdWx0Um93QWN0aW9uQ29kZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRSb3dBY3Rpb24pIHtcclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZShbXSwgZ3JpZFJvdywgZGVmYXVsdFJvd0FjdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb25TZWxlY3Qocm93SWQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCByb3cgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93cz8uZmluZChcclxuICAgICAgICAoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5pZCA9PT0gcm93SWRcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgdmlld0NvbnRleHRDaGFuZ2UgPSBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0KHRoaXMuc21hcnRHcmlkISwgcm93ISk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0QWxsKHNlbGVjdGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3Qgdmlld0NvbnRleHRDaGFuZ2UgPSBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0QWxsKHRoaXMuc21hcnRHcmlkISwgc2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdFJvd3MoXHJcbiAgICBzZWxlY3RlZElkczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSxcclxuICAgIHVuc2VsZWN0ZWRJZHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW11cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHNlbGVjdGVkOiBzdHJpbmdbXSA9IHNlbGVjdGVkSWRzLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgIGxldCB1bnNlbGVjdGVkOiBzdHJpbmdbXSA9IHVuc2VsZWN0ZWRJZHMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgY29uc3Qgdmlld0NvbnRleHRDaGFuZ2UgPSBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0Um93cyhcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEsXHJcbiAgICAgICAgc2VsZWN0ZWQsXHJcbiAgICAgICAgdW5zZWxlY3RlZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdENvbHVtbnMoKTogdm9pZCB7XHJcbiAgICBsZXQgZGlhbG9nRGF0YTogU21hcnREaWFsb2dEYXRhID0ge1xyXG4gICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgdGl0bGU6ICdPc3psb3BvayB0ZXN0cmVzemFiw6FzYScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHNpemU6IHt9LFxyXG4gICAgICBjdXN0b21Db21wb25lbnQ6IFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50SW5wdXRzOiB7XHJcbiAgICAgICAgY29uZmlnOiB7XHJcbiAgICAgICAgICB1dWlkOiB0aGlzLnV1aWQsXHJcbiAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgICAgICB2aWV3OiB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcsXHJcbiAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFRhYmxlTGF5b3V0RGVmaW5lckNvbXBvbmVudCwgeyBkYXRhOiBkaWFsb2dEYXRhIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9QUklNRU5HXHJcbiAgY29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICBtZW51QnV0dG9ucyE6IE1lbnVJdGVtW107XHJcbiAgQFZpZXdDaGlsZCgnbWVudScpIG1lbnUhOiBNZW51O1xyXG4gIG9uT3B0aW9uc0NsaWNrKGV2ZW50OiBFdmVudCwgcm93OiBHcmlkUm93KSB7XHJcbiAgICB0aGlzLm1lbnVCdXR0b25zID0gW107XHJcbiAgICByb3cuYWN0aW9ucz8ubWFwKGFzeW5jICh1aUFjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBkZXNjID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG5cclxuICAgICAgdGhpcy5tZW51QnV0dG9ucy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogZGVzYz8udGl0bGUgPz8gdWlBY3Rpb24uY29kZSxcclxuICAgICAgICBpY29uOiAnJyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIHJvdywgdWlBY3Rpb24pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1lbnUudG9nZ2xlKGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiQGlmKGNvbXBMaWIgPT09IGNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG48ZGl2ICpuZ0lmPVwic21hcnRHcmlkXCIgY2xhc3M9XCJwcmltZVNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8cC10YWJsZSAjcFRhYmxlIFt2YWx1ZV09XCJzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93cyFcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cclxuICAgICAgICAgIHt7IGNvbCB9fVxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwhLS0gIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBzbWFydEdyaWQ/LmdyaWRNb2RlbD8udmlldz8ub3JkZXJlZENvbHVtbk5hbWVzXCI+XHJcbiAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBbZmllbGRdPVwiJ2RhdGEuJyArIGNvbFwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VhcmNoIGJ5ICcgKyBjb2xcIlxyXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidGaWx0ZXIgJyArIGNvbFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgIDwvdHI+IC0tPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHNtYXJ0R3JpZD8uZ3JpZE1vZGVsPy52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXNcIj5cclxuICAgICAgICAgIHt7IHJvdy5kYXRhW2NvbF0gfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicm93LmFjdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uT3B0aW9uc0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uIGljb249XCJtb3JlX3ZlcnRcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8L3AtYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10YWJsZT5cclxuICA8cC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvclwiXHJcbiAgICBbZmlyc3RdPVwicGFnZUluZGV4ISArIDFcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJsZW5ndGghXCJcclxuICAgIFtyb3dzXT1cInBhZ2VTaXplXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QcmltZUNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIC8+XHJcbiAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwibWVudUJ1dHRvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiPiA8L3AtbWVudT5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbn1cclxuIl19
815
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBWSxrQkFBa0IsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUdqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwy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QUs7Z0JBRzBDLFVBQVU7c0JBQXpELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUt4QixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBKzNCRCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydERpYWxvZ0RhdGEgfSBmcm9tICcuLi9zbWFydC1kaWFsb2cvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBFeHBhbmRhYmxlU2VjdGlvbiB9IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5IH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci9hcGkvbW9kZWwvZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnknO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0VGFibGUsXHJcbiAgU21hcnRUYWJsZUJ1dHRvblR5cGUsXHJcbiAgU21hcnRUYWJsZUhlYWRlcixcclxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2UsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLFxyXG4gIFNtYXJ0VGFibGVPcmRlcixcclxuICBTbWFydFRhYmxlVHlwZSxcclxuICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgVWlBY3Rpb24sIFVpQWN0aW9uQnV0dG9uVHlwZSwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgQ09NUE9ORU5UX0xJQlJBUlksXHJcbiAgQ29tcG9uZW50TGlicmFyeSxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCxcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbiAgR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0sXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JpZFVpQWN0aW9uVHlwZSwgU21hcnRHcmlkLCBTbWFydExheW91dERlZiB9IGZyb20gJy4vbW9kZWxzL21vZGVsJztcclxuaW1wb3J0IHsgU21hcnRHcmlkU2VydmljZSB9IGZyb20gJy4vc21hcnQtZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU21hcnRHcmlkU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MF07XHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuICBASW5wdXQoKSB1dWlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyB0YWJsZVxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHZjUmVmVGFibGU/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGNvbXBvbmVudFJlZlRhYmxlPzogQ29tcG9uZW50UmVmPFNtYXJ0dGFibGVDb21wb25lbnQ+O1xyXG4gIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPEdyaWRSb3c+O1xyXG5cclxuICAvLyB0b29sYmFyXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuXHJcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xyXG4gIGRhdGFzb3VyY2U/OiBudWxsO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICBwYWdlSW5kZXg/OiBudW1iZXI7XHJcbiAgdmFsdWVzOiBhbnk7XHJcbiAgZ3JpZFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1aUFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhZnRlclZpZXdJbml0RXhlY3V0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0Jsb2NrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyB0cmVlXHJcbiAgdHJlZUNvbnRyb2w/OiBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz47XHJcbiAgdHJlZUZsYXR0ZW5lcj86IE1hdFRyZWVGbGF0dGVuZXI8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZURhdGFTb3VyY2U/OiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZUNoZWNrbGlzdFNlbGVjdGlvbj86IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogU21hcnRHcmlkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBwdWJsaWMgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIEBJbmplY3QoJ2dyaWRNZW51SWNvbicpIHByaXZhdGUgZ3JpZE1lbnVJY29uPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgLy8gd2lsbCBjYXVzZSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZCB0byBmaXJlXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR1cFRvb2xiYXIoKSB7XHJcbiAgICAvLyBjaGVjayBpZiB0b29sYmFyIGlzIGF2YWlsYWJsZSBfYW5kXyBuZWVkIHNldCB1cFxyXG4gICAgaWYgKHRoaXMudG9vbGJhciAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICBsZXQgdG9vbGJhcklkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyICsgJ190b29sYmFyJztcclxuICAgICAgaWYgKHRvb2xiYXJJZCAhPT0gdGhpcy50b29sYmFyLmlkKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyLmlkID0gdG9vbGJhcklkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbDtcclxuICAgIGlmIChncmlkTW9kZWwpIHtcclxuICAgICAgdGhpcy5sZW5ndGggPSBncmlkTW9kZWwudG90YWxSb3dDb3VudDtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGdyaWRNb2RlbC5wYWdlU2l6ZTtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBncmlkTW9kZWwucGFnZUluZGV4ID8/IDA7XHJcbiAgICAgIGlmIChncmlkTW9kZWwucGFnZVNpemVPcHRpb25zICYmIGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2hvd0VkaXRDb2x1bW5zID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnM7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGtpbmQgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LmtpbmQ7XHJcbiAgICAgIGlmIChraW5kKSB7XHJcbiAgICAgICAgbGV0IGxheW91dERlZjtcclxuICAgICAgICBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVEFCTEUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRBQkxFO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVFJFRSkge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVFJFRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLkNBUkRTKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5DQVJEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5b3V0RGVmKSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gbGF5b3V0RGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy5wYWdpbmF0b3IgPT09IHRydWUgfHwgZ3JpZE1vZGVsPy5wYWdpbmF0b3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnBhZ2luYXRvciA9IGdyaWRNb2RlbC5wYWdpbmF0b3I7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnBhZ2luYXRvciA9IHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3I7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0dyaWRNb2RlbCBpcyB1bmRlZmluZWQgaW4gY29tcG9uZW50IScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmKSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrLCBkZWZhdWx0IFRBQkxFXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UQUJMRSkge1xyXG4gICAgICB0aGlzLnJlbmRlclRhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkVYUEFOREFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuQ0FSRCkge1xyXG4gICAgICB0aGlzLnJlbmRlckNhcmRzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRSRUUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRhYmxlKCkge1xyXG4gICAgdGhpcy52Y1JlZlRhYmxlPy5jbGVhcigpO1xyXG4gICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNsZWFyVHJlZSgpO1xyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gdGhpcy5jb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2VTaXplISAqIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZUluZGV4ITtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzLm1hcCgob3JkZXJlZENvbDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5jb2x1bW5zLm1hcCgoY29sdW06IEdyaWRDb2x1bW5NZXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3JkZXJlZENvbCA9PT0gY29sdW0ucHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtLmxhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhYmxlUm93ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGFibGVSb3cubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBwbGFjZUhvbGRlclJvdzogYW55ID0ge307XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1ucy5tYXAoKG1ldGE6IEdyaWRDb2x1bW5NZXRhKSA9PiB7XHJcbiAgICAgICAgcGxhY2VIb2xkZXJSb3dbbWV0YS5wcm9wZXJ0eU5hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MgPSBbcGxhY2VIb2xkZXJSb3ddO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YWJsZVR5cGU7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy50YWJsZVR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnLnRhYmxlVHlwZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uVHlwZSkge1xyXG4gICAgICB0YWJsZVR5cGUgPVxyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLnNlbGVjdGlvblR5cGUgPT09IEdyaWRTZWxlY3Rpb25UeXBlLkNIRUNLQk9YXHJcbiAgICAgICAgICA/IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWFxyXG4gICAgICAgICAgOiBTbWFydFRhYmxlVHlwZS5ST1dfU0VMRUNUO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UQUJMRSkge1xyXG4gICAgICBsZXQgdGFibGVDb25maWc6IFNtYXJ0VGFibGVJbnRlcmZhY2U8R3JpZFJvdz4gPSB7XHJcbiAgICAgICAgLi4udGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnLFxyXG4gICAgICAgIHRhYmxlUm93czogdGFibGVSb3csXHJcbiAgICAgICAgdGFibGVUeXBlLFxyXG4gICAgICAgIGN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOiBhd2FpdCB0aGlzLmNvbnN0cnVjdEhlYWRlcigpISxcclxuICAgICAgICBleHBhbmRhYmxlOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZSxcclxuICAgICAgICBleHBhbmRlZENvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGVkQ29tcG9uZW50LFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bS5OT1JNQUwsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbkNvZGVzOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zISxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucz8ubWFwKChjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6XHJcbiAgICAgICAgICAgICAgY29kZSA9PT0gJ19hY3Rpb25TZXBhcmF0b3JfJ1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICAgICAgICAgICAgIDogU21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiBjb2RlIH0pLFxyXG4gICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgLy8gYXJnczogW1xyXG4gICAgICAgICAgICAvLyAgIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgICAgLy8gXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRQcm9wZXJ0eSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0Q2xhc3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0Q2xhc3MgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodENsYXNzO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodFByb3BlcnR5ID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRQcm9wZXJ0eTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uQWxsU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmVwYXJlZCBmb3Igc2ltcGxlIGNsaWNrc1xyXG4gICAgICAvLyBpZiAoIXRhYmxlQ29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgLy8gICB0YWJsZUNvbmZpZy5vblJvd0NsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2sgPSB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0YWJsZVByb3BlcnR5TmFtZSA9ICdzZWxlY3RhYmxlJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRhYmxlQ29uZmlnLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5yb3dFeHBhbmRlciA9IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb24gJiZcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgJiZcclxuICAgICAgICBzZWxlY3Rpb25Nb2RlICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5OT05FXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuXHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgPSAnaWQnO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZVxyXG4gICAgICAgICAgLnJvd3MhLmZpbHRlcigoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5zZWxlY3RlZClcclxuICAgICAgICAgIC5tYXAoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQhKTtcclxuXHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4oaXNNdWx0aXBsZSwgc2VsZWN0ZWRJZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUgPSBuZXcgU21hcnRUYWJsZTxhbnk+KHRhYmxlQ29uZmlnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZlRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS51cGRhdGVTbWFydFRhYmxlKHRoaXMuc21hcnRUYWJsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52Y1JlZlRhYmxlPy5jbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMudmNSZWZUYWJsZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgICAgdGhpcy52Y1JlZlRhYmxlISxcclxuICAgICAgICAgIFNtYXJ0dGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PihbWydzbWFydFRhYmxlJywgdGhpcy5zbWFydFRhYmxlXV0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc29ydEV2ZW50XHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgPSBoZWFkZXIucHJvcGVydHlOYW1lLnN1YnN0cmluZyg1KTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoaGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSBTbWFydFRhYmxlT3JkZXIuQVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuQVNDOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkRFU0M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFNtYXJ0VGFibGVPcmRlci5ERVNDOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LmZpbmQoXHJcbiAgICAgICAgICAgICAgKGZpbHRlckV4cHJlc3Npb246IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PlxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbi5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlci5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlciAmJiAhaGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5pbmRleE9mKGZpbHRlcik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5zcGxpY2UoaW5kZXghLCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXIub3JkZXIgPSBoZWFkZXIub3JkZXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG9yZGVyOiBoZWFkZXIub3JkZXIsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGhlYWRlci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgb3JkZXJCeUxpc3Q6IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QsXHJcbiAgICAgICAgICAgICAgb3JkZXJlZENvbHVtbk5hbWVzOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyZWRDb2x1bW5OYW1lcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnNvcnQodGhpcy5zbWFydEdyaWQhLCBncmlkVXBkYXRlRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5zbWFydFRhYmxlLnNlbGVjdGlvbj8uY2hhbmdlZFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlcy5uZXh0KHJvdyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZChyb3dJZDogbnVtYmVyKTogYW55IHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBleHBhbmRBc3luYyhyb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cykge1xyXG4gICAgICBsZXQgcm93ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3Nbcm93SW5kZXhdO1xyXG4gICAgICBpZiAocm93ICYmIHJvdy5pZCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93LmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmQodGhpcy5zbWFydEdyaWQhLCByb3dJbmRleC50b1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRhYmxlU2VjdGlvbnMgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsIS5wYWdlLnJvd3MhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIGhlYWRlckNvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmhlYWRlckNvbXBvbmVudCxcclxuICAgICAgICBoZWFkZXJJbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnRJbnB1dE5hbWUsXHJcbiAgICAgICAgaGVhZGVyRGF0YTogaXRlbSxcclxuICAgICAgICBjdXN0b21Db21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgIGlucHV0TmFtZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGVDb21wb25lbnRJbnB1dE5hbWUsXHJcbiAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJDYXJkcygpOiB2b2lkIHtcclxuICAgIC8vIFRPRE9cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNNdWx0aXBsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRyZWUoKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVHJlZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJUYWJsZSgpO1xyXG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXIsXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSxcclxuICAgICAgICB0aGlzLmdldENoaWxkcmVuXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcclxuICAgICAgdGhpcy50cmVlRGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+KHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2RlcztcclxuICAgIGxldCBleHBhbmRlZE5vZGVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgaWYgKG5vZGVzKSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBub2Rlc1xyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kYWJsZShub2RlKSlcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKVxyXG4gICAgICAgIC5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZvckVhY2goKHJvdzogYW55KSA9PiAocm93LmxldmVsID0gdW5kZWZpbmVkKSk7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlLmRhdGEgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZmlsdGVyKChyb3cpID0+ICFyb3cucGFyZW50KTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uY2xlYXIoKTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5zZWxlY3Qobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uY29sbGFwc2VBbGwoKTtcclxuICAgIGV4cGFuZGVkTm9kZXMuZm9yRWFjaCgocm93SWQpID0+IHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5maW5kKChyb3cpID0+IHJvd0lkID09PSByb3cuaWQpO1xyXG4gICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5kKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogYW55KSA9PiBub2RlLmxldmVsID8/IDA7XHJcblxyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcmlkUm93KSA9PiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UpO1xyXG5cclxuICBnZXRDaGlsZHJlbiA9IChub2RlOiBHcmlkUm93KTogR3JpZFJvd1tdID0+IHtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCByb3dzID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbHRlcigocm93KSA9PlxyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LnNvbWUoKGNoaWxkKSA9PiBjaGlsZCA9PT0gcm93LmlkISlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJvd3MpIHtcclxuICAgICAgICByZXR1cm4gcm93cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH07XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBHcmlkUm93KSA9PiB0aGlzLmlzRXhwYW5kYWJsZShfbm9kZURhdGEpO1xyXG5cclxuICB0cmFuc2Zvcm1lciA9IChyb3c6IEdyaWRSb3csIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIChyb3cgYXMgYW55KS5sZXZlbCA9IGxldmVsO1xyXG4gICAgcmV0dXJuIHJvdztcclxuICB9O1xyXG5cclxuICBnZXRUcmVlSXRlbShyb3c6IEdyaWRSb3cpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbHVtbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXM7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gcm93LmRhdGEhO1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBkYXRhW2NvbF0pLmpvaW4oJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByb3cuaWQhO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgdHJlZU5vZGUgc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXHJcbiAgdHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkJlZm9yZSA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sIS5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcclxuICAgICAgICA/IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXHJcbiAgICAgICAgOiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlKTtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25BZnRlciA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25BZnRlci5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25CZWZvcmUuaW5jbHVkZXMocykpO1xyXG4gICAgbGV0IHVuc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25CZWZvcmUuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQWZ0ZXIuaW5jbHVkZXMocykpO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIC8vIHdoZW4gc2VydmljZSBjYWxsIGlzIGFjdGl2ZSAoIWRldiksIG9uU2VsZWN0IHdpbGwgdG9nZ2xlIHJvdy5zZWxlY3RlZFxyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiB1bnNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU2VsZWN0Um93cyhzZWxlY3RlZElkcywgdW5zZWxlY3RlZElkcyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IHBhcmVudDogR3JpZFJvdyB8IG51bGwgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID0gdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgaWYgKG5vZGVTZWxlY3RlZCAmJiAhZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcclxuICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIEdldCB0aGUgcGFyZW50IG5vZGUgb2YgYSBub2RlICovXHJcbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBHcmlkUm93KTogR3JpZFJvdyB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcclxuXHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBub2RlIGFyZSBzZWxlY3RlZC4gKi9cclxuICBkZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9XHJcbiAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgZGVzY2VuZGFudHMuZXZlcnkoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlc2NBbGxTZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIHBhcnQgb2YgdGhlIGRlc2NlbmRhbnRzIGFyZSBzZWxlY3RlZCAqL1xyXG4gIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgbGV0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbnN0cnVjdEhlYWRlcigpOiBQcm9taXNlPFNtYXJ0VGFibGVIZWFkZXJbXT4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzICYmIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5tYXAoYXN5bmMgKGdyaWRSb3c6IEdyaWRSb3cpID0+IHtcclxuICAgICAgICAgIGxldCBuZXdVaUFjdGlvbnMgPSBncmlkUm93LmFjdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKHVpQWN0aW9uOiBhbnkpID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAobmV3VWlBY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgIG5ld1VpQWN0aW9ucy5tYXAoYXN5bmMgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3I6IFVpQWN0aW9uRGVzY3JpcHRvciA9XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlPy5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlID8/ICdDT0RFJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuc2V0KHVpQWN0aW9uLmNvZGUhLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9yZWRlcmVkRGVzY0NvbHVtbnMgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoXHJcbiAgICAgIChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT5cclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLmRlc2NyaXB0b3IhLmNvbHVtbnMhLmZpbmQoXHJcbiAgICAgICAgICAoY29sRGVzY3JpcHRvcjogR3JpZENvbHVtbk1ldGEpID0+IGNvbERlc2NyaXB0b3IucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApXHJcbiAgICApLmZsYXRNYXAoKGYpID0+IGYgPz8gW10pO1xyXG5cclxuICAgIGxldCBoZWFkZXIgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgb3JlZGVyZWREZXNjQ29sdW1ucy5tYXAoYXN5bmMgKGRlc2NDb2x1bW46IEdyaWRDb2x1bW5NZXRhKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyPiA9PiB7XHJcbiAgICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVyID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgICAgIChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdD8uZmluZChcclxuICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbi5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4hLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IG9yZGVyO1xyXG4gICAgICAgIGxldCBvcmRlck51bWJlcjtcclxuICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtKSB7XHJcbiAgICAgICAgICBvcmRlciA9XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbS5vcmRlciA9PT0gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkuT3JkZXJFbnVtLkFzY1xyXG4gICAgICAgICAgICAgID8gU21hcnRUYWJsZU9yZGVyLkFTQ1xyXG4gICAgICAgICAgICAgIDogU21hcnRUYWJsZU9yZGVyLkRFU0M7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIG9yZGVyTnVtYmVyID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKGZpbHRlcjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+IGZpbHRlci5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4hLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBvcmRlck51bWJlcisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnbmFsTGFiZWwgPSBjdXN0b21UYWJsZUhlYWRlcj8ubGFiZWwgPz8gZGVzY0NvbHVtbi5sYWJlbDtcclxuICAgICAgICBsZXQgbGFiZWwgPSAnJztcclxuICAgICAgICBpZiAoIWRlc2NDb2x1bW4uaGlkZUxhYmVsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZT8uZ2V0KG9yaWduYWxMYWJlbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsYWJlbCA9IG9yaWduYWxMYWJlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzID0gY3VzdG9tVGFibGVIZWFkZXI/LnByb3BlcnRpZXM7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLk9mZnNldERhdGVUaW1lJyB8fFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbERhdGVUaW1lJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICd5eXl5Lk1NLmRkIEg6bW0nO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURVRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlJykge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCc7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsVGltZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ0g6bW0nO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuVElNRSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEubGFuZy5Cb29sZWFuJykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uY3VzdG9tVGFibGVIZWFkZXIsXHJcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdkYXRhLicgKyBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgICAgb3JkZXJOdW1iZXIsXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgc3R5bGU6IGRlc2NDb2x1bW4uc3R5bGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGNvbXBsZW1lbnQgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maWx0ZXIoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT5cclxuICAgICAgICAhaGVhZGVyLnNvbWUoKHRIOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0SC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXModGFibGVIZWFkZXIucHJvcGVydHlOYW1lKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbXBsZW1lbnQpIHtcclxuICAgICAgaGVhZGVyLnB1c2goLi4uY29tcGxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5zaW1wbGVCdXR0b25zKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5vcHRpb25zLnNpbXBsZUJ1dHRvbnMuZm9yRWFjaCgodWlBY3Rpb25Db2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdzaW1wbGVfYnV0dG9ucycsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiB1aUFjdGlvbkNvZGUgfSksXHJcbiAgICAgICAgICAgICAgYXJnczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjb2RlOiB1aUFjdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICBzaG93QnV0dG9uSWY6IChyb3c6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIHJvdy5hY3Rpb25zLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5jb2RlID09PSB1aUFjdGlvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGVhZGVyLnNvbWUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gJ215X21lbnUnKSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnJvd1VpQWN0aW9uVHlwZSA9PT0gR3JpZFVpQWN0aW9uVHlwZS5QT1BVUF9NRU5VKSB7XHJcbiAgICAgICAgbGV0IGljb24gPSB0aGlzLmdyaWRNZW51SWNvbiA/PyAnbW9yZV92ZXJ0JztcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdteV9tZW51JyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGljb246IGljb24sXHJcbiAgICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgYXJnczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uQ2hhbmdlUGFnZShldmVudDogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQucGFnZVNpemUgKiBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNldFBhZ2UoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlld1V1aWQhLFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG9mZnNldC50b1N0cmluZygpLFxyXG4gICAgICBsaW1pdC50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uUHJpbWVDaGFuZ2VQYWdlKGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBvZmZzZXQgPSBldmVudC5maXJzdDtcclxuICAgIGxldCBsaW1pdCA9IGV2ZW50LnJvd3M7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNldFBhZ2UoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlld1V1aWQhLFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG9mZnNldC50b1N0cmluZygpLFxyXG4gICAgICBsaW1pdC50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKGFyZ3M6IGFueVtdLCByb3c6IGFueSwgdWlBY3Rpb246IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IF91aUFjdGlvbjogVWlBY3Rpb247XHJcblxyXG4gICAgaWYgKCF1aUFjdGlvbikge1xyXG4gICAgICB1aUFjdGlvbiA9IHJvdy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUgPT09IGFyZ3NbMF0uY29kZSlbMF07XHJcbiAgICB9XHJcblxyXG4gICAgX3VpQWN0aW9uID0geyAuLi51aUFjdGlvbiB9O1xyXG4gICAgaWYgKF91aUFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBfdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAuLi51aUFjdGlvbi5wYXJhbXMsXHJcbiAgICAgIG1vZGVsOiByb3csXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCB1aUFjdGlvbk1vZGVsOiBhbnkgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSxcclxuICAgICAgdWlBY3Rpb246IF91aUFjdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy51aUFjdGlvbk1vZGVsQ2FsbGJhY2spIHtcclxuICAgICAgdWlBY3Rpb25Nb2RlbCA9IHRoaXMuc21hcnRHcmlkIS5vcHRpb25zIS51aUFjdGlvbk1vZGVsQ2FsbGJhY2sodWlBY3Rpb25Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0gdWlBY3Rpb25Nb2RlbDtcclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZShfdWlBY3Rpb24sIHtcclxuICAgICAgd2lkZ2V0SWQ6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgbm9kZUlkOiByb3cuaWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnV0dG9uVHJhbnNsYXRvcih1aUFjdGlvbjogVWlBY3Rpb24pOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgbGV0IGRlc2MgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKTtcclxuICAgIGlmICghZGVzYykge1xyXG4gICAgICBkZXNjID0ge1xyXG4gICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlISxcclxuICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVCxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHVpQWN0aW9uLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLm1lcmdlQWN0aW9uRGVzY3JpcHRvckludG9DbGllbnQodWlBY3Rpb24uZGVzY3JpcHRvciEsIGRlc2MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc2M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGF5b3V0RGVmKCk6IHR5cGVvZiBTbWFydExheW91dERlZiB7XHJcbiAgICByZXR1cm4gU21hcnRMYXlvdXREZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgZGVmYXVsdFJvd0FjdGlvbjogVWlBY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8uZGVmYXVsdFJvd0FjdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvd0FjdGlvbkNvZGUgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zW2luZGV4XTtcclxuXHJcbiAgICAgICAgZGVmYXVsdFJvd0FjdGlvbiA9IGdyaWRSb3cuYWN0aW9ucy5maW5kKFxyXG4gICAgICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gdWlBY3Rpb24uY29kZSA9PT0gZGVmYXVsdFJvd0FjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Um93QWN0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIGdyaWRSb3csIGRlZmF1bHRSb3dBY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uU2VsZWN0KHJvd0lkOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbmQoXHJcbiAgICAgICAgKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQgPT09IHJvd0lkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdCh0aGlzLnNtYXJ0R3JpZCEsIHJvdyEpO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdEFsbChzZWxlY3RlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdEFsbCh0aGlzLnNtYXJ0R3JpZCEsIHNlbGVjdGVkKTtcclxuICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RSb3dzKFxyXG4gICAgc2VsZWN0ZWRJZHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10sXHJcbiAgICB1bnNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZDogc3RyaW5nW10gPSBzZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBsZXQgdW5zZWxlY3RlZDogc3RyaW5nW10gPSB1bnNlbGVjdGVkSWRzLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdFJvd3MoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLFxyXG4gICAgICAgIHNlbGVjdGVkLFxyXG4gICAgICAgIHVuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgbGV0IGRpYWxvZ0RhdGE6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIHRpdGxlOiAnT3N6bG9wb2sgdGVzdHJlc3phYsOhc2EnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7fSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0czoge1xyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgdXVpZDogdGhpcy51dWlkLFxyXG4gICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICAgICAgdmlldzogdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LFxyXG4gICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsIHsgZGF0YTogZGlhbG9nRGF0YSB9KTtcclxuICB9XHJcblxyXG4gIC8vUFJJTUVOR1xyXG4gIGNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgbWVudUJ1dHRvbnMhOiBNZW51SXRlbVtdO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51ITogTWVudTtcclxuICBvbk9wdGlvbnNDbGljayhldmVudDogRXZlbnQsIHJvdzogR3JpZFJvdykge1xyXG4gICAgdGhpcy5tZW51QnV0dG9ucyA9IFtdO1xyXG4gICAgcm93LmFjdGlvbnM/Lm1hcChhc3luYyAodWlBY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgZGVzYyA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMubWVudUJ1dHRvbnMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGRlc2M/LnRpdGxlID8/IHVpQWN0aW9uLmNvZGUsXHJcbiAgICAgICAgaWNvbjogJycsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCByb3csIHVpQWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tZW51LnRvZ2dsZShldmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwicHJpbWVTbWFydEdyaWQtY29udGFpbmVyXCI+XHJcbiAgPHAtdGFibGUgI3BUYWJsZSBbdmFsdWVdPVwic21hcnRHcmlkLmdyaWRNb2RlbC5wYWdlLnJvd3MhXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICB7eyBjb2wgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aD48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8IS0tICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2Ygc21hcnRHcmlkPy5ncmlkTW9kZWw/LnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lc1wiPlxyXG4gICAgICAgICAgPHAtY29sdW1uRmlsdGVyXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgW2ZpZWxkXT1cIidkYXRhLicgKyBjb2xcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBieSAnICsgY29sXCJcclxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInRmlsdGVyICcgKyBjb2xcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3c+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBzbWFydEdyaWQ/LmdyaWRNb2RlbD8udmlldz8ub3JkZXJlZENvbHVtbk5hbWVzXCI+XHJcbiAgICAgICAgICB7eyByb3cuZGF0YVtjb2xdIH19XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInJvdy5hY3Rpb25zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAob25DbGljayk9XCJvbk9wdGlvbnNDbGljaygkZXZlbnQsIHJvdylcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c21hcnQtaWNvbiBpY29uPVwibW9yZV92ZXJ0XCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3JcIlxyXG4gICAgW2ZpcnN0XT1cInBhZ2VJbmRleCFcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJsZW5ndGghXCJcclxuICAgIFtyb3dzXT1cInBhZ2VTaXplXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QcmltZUNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIC8+XHJcbiAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwibWVudUJ1dHRvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiPiA8L3AtbWVudT5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbn1cclxuIl19