cps-ui-kit 17.26.0 → 17.28.0

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.
Files changed (45) hide show
  1. package/assets/icons.svg +5 -6
  2. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +40 -16
  3. package/esm2022/lib/components/cps-button/cps-button.component.mjs +15 -8
  4. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +11 -7
  5. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +10 -6
  6. package/esm2022/lib/components/cps-divider/cps-divider.component.mjs +29 -15
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +12 -8
  8. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +13 -9
  9. package/esm2022/lib/components/cps-input/cps-input.component.mjs +3 -3
  10. package/esm2022/lib/components/cps-loader/cps-loader.component.mjs +12 -7
  11. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +39 -19
  12. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +12 -7
  13. package/esm2022/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +12 -7
  14. package/esm2022/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +13 -8
  15. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +12 -8
  16. package/esm2022/lib/components/cps-table/cps-table.component.mjs +11 -7
  17. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +10 -6
  18. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +31 -9
  19. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +17 -12
  20. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +11 -6
  21. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +28 -23
  22. package/esm2022/lib/utils/colors-utils.mjs +10 -8
  23. package/fesm2022/cps-ui-kit.mjs +295 -146
  24. package/fesm2022/cps-ui-kit.mjs.map +1 -1
  25. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +9 -5
  26. package/lib/components/cps-button/cps-button.component.d.ts +2 -0
  27. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +3 -2
  28. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +3 -2
  29. package/lib/components/cps-divider/cps-divider.component.d.ts +16 -3
  30. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +2 -1
  31. package/lib/components/cps-icon/cps-icon.component.d.ts +2 -0
  32. package/lib/components/cps-loader/cps-loader.component.d.ts +2 -0
  33. package/lib/components/cps-menu/cps-menu.component.d.ts +21 -3
  34. package/lib/components/cps-paginator/cps-paginator.component.d.ts +2 -0
  35. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +2 -0
  36. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +2 -0
  37. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +2 -1
  38. package/lib/components/cps-table/cps-table.component.d.ts +2 -1
  39. package/lib/components/cps-tag/cps-tag.component.d.ts +3 -2
  40. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +9 -4
  41. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -2
  42. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +2 -1
  43. package/lib/directives/cps-tooltip/cps-tooltip.directive.d.ts +3 -1
  44. package/lib/utils/colors-utils.d.ts +2 -2
  45. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, RendererStyleFlags2, ViewChild } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Inject, Input, Output, RendererStyleFlags2, ViewChild } from '@angular/core';
2
+ import { CommonModule, DOCUMENT } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { TreeTable, TreeTableService, TreeTableModule } from 'primeng/treetable';
5
5
  import { DomHandler } from 'primeng/dom';
@@ -54,8 +54,9 @@ export class CpsTreeTableComponent {
54
54
  return this._data;
55
55
  }
56
56
  // eslint-disable-next-line no-useless-constructor
57
- constructor(cdRef, renderer, ngZone) {
57
+ constructor(cdRef, document, renderer, ngZone) {
58
58
  this.cdRef = cdRef;
59
+ this.document = document;
59
60
  this.renderer = renderer;
60
61
  this.ngZone = ngZone;
61
62
  /**
@@ -472,6 +473,7 @@ export class CpsTreeTableComponent {
472
473
  this._scrollbarVisible = true;
473
474
  this._needRecalcAutoLayout = true;
474
475
  this._data = [];
476
+ this.window = this.document.defaultView;
475
477
  this._resizeObserver = new ResizeObserver((entries) => {
476
478
  entries.forEach((entry) => {
477
479
  const body = entry.target;
@@ -496,7 +498,7 @@ export class CpsTreeTableComponent {
496
498
  this.showRemoveBtnOnSelect = false;
497
499
  this.defScrollHeight = this.scrollHeight;
498
500
  if (this.virtualScroll) {
499
- window.addEventListener('resize', this._onWindowResize.bind(this));
501
+ this.window.addEventListener('resize', this._onWindowResize.bind(this));
500
502
  if (this.defScrollHeight && this.defScrollHeight !== 'flex') {
501
503
  this._defScrollHeightPx = parseInt(this.scrollHeight, 10);
502
504
  }
@@ -611,7 +613,7 @@ export class CpsTreeTableComponent {
611
613
  if (this.virtualScroll) {
612
614
  if (this.autoLayout)
613
615
  this._scrollSubscription?.unsubscribe();
614
- window.removeEventListener('resize', this._onWindowResize.bind(this));
616
+ this.window.removeEventListener('resize', this._onWindowResize.bind(this));
615
617
  }
616
618
  }
617
619
  _calcAutoLayoutHeaderWidths(forced = false) {
@@ -655,12 +657,12 @@ export class CpsTreeTableComponent {
655
657
  if (!bodyRows?.length)
656
658
  return;
657
659
  const tdWidths = [];
658
- const fragment = document.createDocumentFragment();
659
- const hiddenDiv = document.createElement('div');
660
+ const fragment = this.document.createDocumentFragment();
661
+ const hiddenDiv = this.document.createElement('div');
660
662
  hiddenDiv.style.visibility = 'hidden';
661
663
  hiddenDiv.style.position = 'absolute';
662
664
  hiddenDiv.style.whiteSpace = 'nowrap';
663
- document.body.appendChild(hiddenDiv);
665
+ this.document.body.appendChild(hiddenDiv);
664
666
  bodyRows.forEach((tr) => {
665
667
  const tds = tr?.querySelectorAll('td');
666
668
  tds?.forEach((td, idx) => {
@@ -682,7 +684,7 @@ export class CpsTreeTableComponent {
682
684
  tdWidths[idx] = Math.max(tdWidths[idx], tdWidth);
683
685
  });
684
686
  });
685
- document.body.removeChild(hiddenDiv);
687
+ this.document.body.removeChild(hiddenDiv);
686
688
  if (thWidths.length !== tdWidths.length)
687
689
  return;
688
690
  const maxWidths = thWidths.map((v, idx) => Math.max(v, tdWidths[idx]));
@@ -986,7 +988,7 @@ export class CpsTreeTableComponent {
986
988
  selection = [selection];
987
989
  this.rowsSelected.emit(selection);
988
990
  }
989
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
991
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
990
992
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", minWidth: "minWidth", minWidthForBodyOnly: "minWidthForBodyOnly", autoLayout: "autoLayout", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", showRowRemoveButton: "showRowRemoveButton", showRowEditButton: "showRowEditButton", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollItemHeight: "virtualScrollItemHeight", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectIcon: "additionalBtnOnSelectIcon", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnIcon: "actionBtnIcon", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled", initialColumns: "initialColumns", data: "data" }, outputs: { rowsSelected: "rowsSelected", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsToRemove: "rowsToRemove", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
991
993
  TreeTableService,
992
994
  {
@@ -1028,7 +1030,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
1028
1030
  deps: [CpsTreeTableComponent]
1029
1031
  }
1030
1032
  ], template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll,\n 'cps-treetable-autolayout-calced': autoLayout && scrollable\n }\"\n [value]=\"data\"\n [autoLayout]=\"autoLayout && !scrollable\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"deepEquals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [icon]=\"additionalBtnOnSelectIcon\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [icon]=\"actionBtnIcon\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th *ngIf=\"selectable\" cpsTTHdrSelectable></th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th\n class=\"cps-treetable-row-menu-cell\"\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td [cpsTTRowSelectable]=\"rowNode\" *ngIf=\"selectable\"></td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <td *ngIf=\"i === 0\" [cpsTTRowToggler]=\"rowNode\">\n {{ rowData[col[colFieldName]] }}\n </td>\n <td *ngIf=\"i > 0\">{{ rowData[col[colFieldName]] }}</td>\n </ng-container>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"\n class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\"\n [showRowRemoveButton]=\"showRowRemoveButton\"\n [showRowEditButton]=\"showRowEditButton\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative;background:#fff}:host ::ng-deep .p-treetable-wrapper{background:#fff}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-normal .p-treetable-scrollable-wrapper{height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-small .p-treetable-scrollable-wrapper{height:calc(100% - 43px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper .p-treetable-scrollable-view .p-treetable-scrollable-header{display:contents}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:#fff}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:#fff;transition:box-shadow .2s;overflow:hidden}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody{background:#fff}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#fff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem}:host ::ng-deep p-treetable:not(.cps-treetable-autolayout-calced) .p-treetable .p-treetable-tbody>tr>td{overflow:hidden}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){opacity:0;border-left-color:#fff}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable.p-treetable-striped .p-treetable-scrollable-body .p-treetable-tbody>tr:nth-child(odd)>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-bg-light)}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr:hover>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable-auto-layout table{table-layout:auto}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:#fff;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:#fff}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:#fff;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:#fff}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-treetable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(2n){background:#fff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep .cps-treetable-selectable-cell{width:55px;text-align:center!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#fff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:#fff}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"] }]
1031
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }], propDecorators: { columns: [{
1033
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
1034
+ type: Inject,
1035
+ args: [DOCUMENT]
1036
+ }] }, { type: i0.Renderer2 }, { type: i0.NgZone }], propDecorators: { columns: [{
1032
1037
  type: Input
1033
1038
  }], colHeaderName: [{
1034
1039
  type: Input
@@ -1206,4 +1211,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
1206
1211
  type: ViewChild,
1207
1212
  args: ['colToggleMenu']
1208
1213
  }] } });
1209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUVOLG1CQUFtQixFQUduQixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixlQUFlLEVBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzVHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBRS9DLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxjQUFxQztJQUNwRSxPQUFPLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6QyxDQUFDO0FBb0JEOzs7R0FHRztBQXNDSCxNQUFNLE9BQU8scUJBQXFCO0lBbVhoQzs7OztPQUlHO0lBQ0gsSUFBYSxJQUFJLENBQUMsS0FBWTtRQUM1QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3ZCLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFnS0Qsa0RBQWtEO0lBQ2xELFlBQ1UsS0FBd0IsRUFDeEIsUUFBbUIsRUFDbkIsTUFBYztRQUZkLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRpQnhCOzs7V0FHRztRQUNNLFlBQU8sR0FBNkIsRUFBRSxDQUFDO1FBRWhEOzs7V0FHRztRQUNNLGtCQUFhLEdBQUcsUUFBUSxDQUFDO1FBRWxDOzs7V0FHRztRQUNNLGlCQUFZLEdBQUcsT0FBTyxDQUFDO1FBRWhDOzs7V0FHRztRQUNNLGFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBRXhDOzs7V0FHRztRQUNNLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRTNCOzs7V0FHRztRQUNNLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFeEI7OztXQUdHO1FBQ00sYUFBUSxHQUFHLElBQUksQ0FBQztRQUV6Qjs7O1dBR0c7UUFDTSxTQUFJLEdBQXFCLFFBQVEsQ0FBQztRQUUzQzs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTVCOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFFekI7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0I7Ozs7V0FJRztRQUNNLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7OztXQUlHO1FBQ00sc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWxDOzs7V0FHRztRQUNNLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFekI7OztXQUdHO1FBQ00sZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUVoQzs7O1dBR0c7UUFDTSxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUU5Qjs7O1dBR0c7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOzs7V0FHRztRQUNNLGFBQVEsR0FBeUIsUUFBUSxDQUFDO1FBRW5EOzs7V0FHRztRQUNNLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFNUI7OztXQUdHO1FBQ00sZUFBVSxHQUFHLElBQUksQ0FBQztRQUUzQjs7O1dBR0c7UUFDTSxnQkFBVyxHQUE0QixRQUFRLENBQUM7UUFFekQ7OztXQUdHO1FBQ00saUJBQVksR0FBRyxFQUFFLENBQUM7UUFFM0I7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFMUI7OztXQUdHO1FBQ00scUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRS9COzs7V0FHRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFM0I7OztXQUdHO1FBQ00saUJBQVksR0FBRyxFQUFFLENBQUM7UUFFM0I7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFL0I7OztXQUdHO1FBQ00sNEJBQXVCLEdBQUcsQ0FBQyxDQUFDO1FBRXJDOzs7V0FHRztRQUNNLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUVoQzs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCOzs7V0FHRztRQUNNLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7O1dBR0c7UUFDTSx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFM0M7OztXQUdHO1FBQ00sVUFBSyxHQUFHLENBQUMsQ0FBQztRQUVuQjs7O1dBR0c7UUFDTSxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRWxCOzs7V0FHRztRQUNNLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUV2Qzs7O1dBR0c7UUFDTSxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUVoQzs7O1dBR0c7UUFDTSxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUUxQjs7O1dBR0c7UUFDTSxpQkFBWSxHQUFHLFNBQVMsQ0FBQztRQUVsQzs7O1dBR0c7UUFDTSxvQkFBZSxHQUFvQixFQUFFLENBQUM7UUFFL0M7OztXQUdHO1FBQ00sU0FBSSxHQUFHLEtBQUssQ0FBQztRQUV0Qjs7O1dBR0c7UUFDTSxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUUvQjs7O1dBR0c7UUFDTSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFbEM7OztXQUdHO1FBQ00sNEJBQXVCLEdBQUcsUUFBUSxDQUFDO1FBRTVDOzs7V0FHRztRQUNNLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUUzQzs7O1dBR0c7UUFDTSwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFFNUM7OztXQUdHO1FBQ00sMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUUzQzs7O1dBR0c7UUFDTSw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFFM0M7OztXQUdHO1FBQ00sK0JBQTBCLEdBQUcsZUFBZSxDQUFDO1FBRXREOzs7V0FHRztRQUNNLDhCQUF5QixHQUFHLEVBQUUsQ0FBQztRQUV4Qzs7O1dBR0c7UUFDTSxrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFFL0M7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFL0I7OztXQUdHO1FBQ00sbUJBQWMsR0FBRyxRQUFRLENBQUM7UUFFbkM7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFFNUI7OztXQUdHO1FBQ00sc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DOzs7V0FHRztRQUNNLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUVuQzs7O1dBR0c7UUFDTSwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFdkM7OztXQUdHO1FBQ00seUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUUxQzs7O1dBR0c7UUFDTSxtQkFBYyxHQUE2QixFQUFFLENBQUM7UUFzQnZEOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFbkQ7Ozs7V0FJRztRQUNPLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEQ7Ozs7V0FJRztRQUNPLGlDQUE0QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFbkU7Ozs7V0FJRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdEQ7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUVuRDs7OztXQUlHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhEOzs7O1dBSUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUzQzs7OztXQUlHO1FBQ08sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFN0M7Ozs7V0FJRztRQUNPLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFFekU7Ozs7V0FJRztRQUNPLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRS9DOzs7O1dBSUc7UUFDTyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpEOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQ7Ozs7V0FJRztRQUNPLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVsRDs7OztXQUlHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWpEOzs7O1dBSUc7UUFDTyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFbkQ7Ozs7V0FJRztRQUNPLHVCQUFrQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBdUIxRSxvQkFBZSxHQUE2QixFQUFFLENBQUM7UUFFL0MsZUFBVSxHQUF1QyxFQUFFLENBQUM7UUFFcEQsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFFdkIsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRWIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQVE5QixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFekIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBRXJDLFVBQUssR0FBVSxFQUFFLENBQUM7UUFRaEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFFL0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWE7b0JBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsZUFBZSxFQUNwQixVQUFVLEVBQ1YsTUFBTSxFQUNOLG1CQUFtQixDQUFDLFNBQVMsQ0FDOUIsQ0FBQztnQkFFSixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQyxDQUFDO2dCQUU5QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFVBQVUsRUFDZixlQUFlLEVBQ2YsR0FBRyxPQUFPLElBQUksQ0FDZixDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsVUFBVSxFQUNmLGNBQWMsRUFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUM1QyxDQUFDO2dCQUVGLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMseUJBQXlCO1lBQUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUV2RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRW5FLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRCxDQUFDO2dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxJQUNFLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFDckIsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4RSxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUN6RSw4QkFBOEIsQ0FDL0IsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFELElBQUksS0FBSztvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RSxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO29CQUM1RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUMzRCxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUNsQyxJQUFJLENBQUMsZUFBZSxFQUNwQixRQUFRLENBQ1QsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO3dCQUNmLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDcEUsb0NBQW9DLENBQ3JDLENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckQsSUFBSSxLQUFLO3dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDO2dCQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQ3BELHNCQUFzQixDQUN2QixDQUFDO1lBQ0osSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxLQUFLO29CQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUM1RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLDBCQUEwQjtnQkFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFFNUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQztRQUVsQyxJQUFJLFdBQVcsRUFBRSxhQUFhLEtBQUssV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzdELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTztZQUVqRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRW5ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO2dCQUFFLE9BQU87WUFFaEMsTUFBTSxXQUFXLEdBQ2YsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNO2dCQUFFLE9BQU87WUFFakMsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBRTNCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztnQkFBRSxPQUFPO1lBRXpELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQzVDLCtCQUErQixDQUNoQyxDQUFDO2dCQUVGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBRXZFLElBQUksZ0JBQWdCO29CQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDL0MsSUFBSSxTQUFTO29CQUFFLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBRXJDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ2xELE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO29CQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFDRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNO2dCQUFFLE9BQU87WUFFOUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUN0QyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFFdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQWUsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7b0JBQzVDLE1BQU0seUJBQXlCLEdBQzdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDO3dCQUN0RCxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUV2RCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO3dCQUMvQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBZ0IsQ0FBQzt3QkFDbkQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDckQsU0FBUyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO3dCQUN6QyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7d0JBQy9CLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO3dCQUNoQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqQyxDQUFDO29CQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXJDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRWhELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDVixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUUxRCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEdBQVcsRUFBRSxFQUFFO2dCQUMzQyxJQUNFLENBQUMsaUJBQWlCLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztvQkFDaEMsQ0FBQyxjQUFjLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2xELENBQUM7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUMsQ0FBQzs7b0JBQ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLEVBQUUsRUFDRixPQUFPLEVBQ1AsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQ3JELENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBZSxFQUFFLEdBQVcsRUFBRSxFQUFFO29CQUM1QyxJQUNFLENBQUMsaUJBQWlCLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQyxjQUFjLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQzFDLENBQUM7d0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDOUMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixFQUFFLEVBQ0YsT0FBTyxFQUNQLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUNyRCxDQUFDO29CQUNKLENBQUM7b0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDakQsSUFBSSxJQUFJLENBQUMsUUFBUTt3QkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsRUFBRSxFQUNGLG1CQUFtQixFQUNuQiwyQkFBMkIsQ0FDNUIsQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLHVCQUF1QjtZQUFFLE9BQU87UUFFaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxhQUFhO1lBQ2xELEVBQUUsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ3JDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVk7WUFBRSxPQUFPO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFlLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxFQUFFLENBQUMsWUFBWTtvQkFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNQLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RFLE9BQU87UUFFVCxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksV0FBVztnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRSxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUNoRCw4QkFBOEIsQ0FDL0IsQ0FBQztZQUNGLElBQUksY0FBYztnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FDcEQsaUNBQWlDLENBQ2xDLENBQUM7UUFDSixJQUFJLGlCQUFpQjtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FDcEQsc0JBQXNCLENBQ3ZCLENBQUM7WUFDSixJQUFJLFlBQVk7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQ3BELHFCQUFxQixDQUN0QixDQUFDO1FBQ0osSUFBSSxlQUFlO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxlQUFlO1FBQ3JCLHVDQUF1QztRQUN2QywrREFBK0Q7UUFFL0QsWUFBWSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ25DLE1BQU07UUFDVixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssT0FBTztvQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDcEMsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsV0FBVyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGFBQWE7WUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQ3BCLFVBQVUsRUFDVixRQUFRLEVBQ1IsbUJBQW1CLENBQUMsU0FBUyxDQUM5QixDQUFDO1FBRUosVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlO3dCQUN0QyxDQUFDLENBQUUsUUFBUSxJQUFJLENBQUMsZUFBZSxTQUFvQjt3QkFDbkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQzVELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7NEJBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDOzRCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDMUIsT0FBTzt3QkFDVCxDQUFDO29CQUNILENBQUM7b0JBQ0QsSUFBSSxDQUFDLFlBQVk7d0JBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN4RCxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLHFCQUFxQjtZQUFFLE9BQU87UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLElBQUksQ0FBQyx3QkFBd0I7WUFBRSxPQUFPO1FBQzFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxlQUFlO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUc7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzFDLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFVO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLElBQUksR0FBRyxHQUFHLEVBQVMsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN6QixJQUNFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUNmLENBQUM7b0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBYztRQUMvQixJQUFJLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQUUsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0EvcUNVLHFCQUFxQjtrR0FBckIscUJBQXFCLG90RkFWckI7WUFDVCxnQkFBZ0I7WUFDaEI7Z0JBQ0UsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFVBQVUsRUFBRSxnQkFBZ0I7Z0JBQzVCLGdEQUFnRDtnQkFDaEQsSUFBSSxFQUFFLENBQUMscUJBQXFCLENBQUM7YUFDOUI7U0FDRiw0dkJDOUdILDI1VkE2U0EsaWlvQkQ3TkksV0FBVyw4VkFDWCxZQUFZLHlsQkFDWixlQUFlLHlvREFDZixpQkFBaUIscWdCQUNqQixrQkFBa0IsMk5BQ2xCLGdCQUFnQiwwUkFDaEIsZ0JBQWdCLHdGQUNoQixrQkFBa0Isb21CQUNsQixrQkFBa0IscUhBQ2xCLG1CQUFtQixnRUFDbkIsYUFBYSwwREFDYixjQUFjLDJEQUNkLG9CQUFvQixpRUFDcEIsbUNBQW1DLDZGQUNuQyxxQ0FBcUMsaUVBQ3JDLGtDQUFrQyxpR0FDbEMsK0JBQStCLDJGQUMvQix3QkFBd0IsMkRBQ3hCLHFCQUFxQjs7MkZBY1oscUJBQXFCO2tCQXJDakMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQixtQ0FBbUM7d0JBQ25DLHFDQUFxQzt3QkFDckMsa0NBQWtDO3dCQUNsQywrQkFBK0I7d0JBQy9CLHdCQUF3Qjt3QkFDeEIscUJBQXFCO3FCQUN0QixhQUdVO3dCQUNULGdCQUFnQjt3QkFDaEI7NEJBQ0UsT0FBTyxFQUFFLFNBQVM7NEJBQ2xCLFVBQVUsRUFBRSxnQkFBZ0I7NEJBQzVCLGdEQUFnRDs0QkFDaEQsSUFBSSxFQUFFLHVCQUF1Qjt5QkFDOUI7cUJBQ0Y7bUlBU1EsT0FBTztzQkFBZixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFPRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQU1HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBTUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLHlCQUF5QjtzQkFBakMsS0FBSztnQkFNRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBTUcsMEJBQTBCO3NCQUFsQyxLQUFLO2dCQU1HLHlCQUF5QjtzQkFBakMsS0FBSztnQkFNRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBTUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQU1HLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFNRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9PLElBQUk7c0JBQWhCLEtBQUs7Z0JBb0JJLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU9HLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLE1BQU07c0JBQWYsTUFBTTtnQkFPRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUluQyxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSWxDLG9CQUFvQjtzQkFEMUIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl4QyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXZDLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUk3QixhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZSxcbiAgVHJlZVRhYmxlU29ydEV2ZW50XG59IGZyb20gJ3ByaW1lbmcvdHJlZXRhYmxlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZXJpZ2h0JztcbmltcG9ydCB7IEFuZ2xlRG91YmxlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZXJpZ2h0JztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbnB1dC9jcHMtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWxvYWRlci9jcHMtbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jcHMtdHJlZS10YWJsZS1jb2x1bW4tc29ydGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVSb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXRhYmxlL2NvbXBvbmVudHMvaW50ZXJuYWwvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVIZWFkZXJTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWhlYWRlci1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVSb3dTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy10b2dnbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVHJlZVRhYmxlQ29tcG9uZW50KSB7XG4gIHJldHVybiB0YWJsZUNvbXBvbmVudC5wcmltZW5nVHJlZVRhYmxlO1xufVxuXG4vKipcbiAqIENwc1RyZWVUYWJsZVNpemUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgdGhlIHRyZWUgdGFibGUuXG4gKiBAZ3JvdXAgVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG5cbi8qKlxuICogQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgdGhlIHRyZWUgdGFibGUgdG9vbGJhci5cbiAqIEBncm91cCBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJztcblxuLyoqXG4gKiBDcHNUcmVlVGFibGVTb3J0TW9kZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgc29ydGluZyBtb2RlIG9mIHRoZSB0cmVlIHRhYmxlLlxuICogQGdyb3VwIFR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuXG4vKipcbiAqIENwc1RyZWVUYWJsZUNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGRhdGEgaW4gdGFidWxhciBmb3JtYXQuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtdHJlZS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVUYWJsZU1vZHVsZSxcbiAgICBDcHNJbnB1dENvbXBvbmVudCxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzTWVudUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1NlbGVjdENvbXBvbmVudCxcbiAgICBDcHNMb2FkZXJDb21wb25lbnQsXG4gICAgQW5nbGVEb3VibGVMZWZ0SWNvbixcbiAgICBBbmdsZUxlZnRJY29uLFxuICAgIEFuZ2xlUmlnaHRJY29uLFxuICAgIEFuZ2xlRG91YmxlUmlnaHRJY29uLFxuICAgIENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlLFxuICAgIENwc1RyZWVUYWJsZUhlYWRlclNlbGVjdGFibGVEaXJlY3RpdmUsXG4gICAgQ3BzVHJlZVRhYmxlUm93U2VsZWN0YWJsZURpcmVjdGl2ZSxcbiAgICBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlLFxuICAgIFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd01lbnVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJlZVRhYmxlU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUcmVlVGFibGUsXG4gICAgICB1c2VGYWN0b3J5OiB0cmVlVGFibGVGYWN0b3J5LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBkZXBzOiBbQ3BzVHJlZVRhYmxlQ29tcG9uZW50XVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNUcmVlVGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzXG57XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHRvIHJlcHJlc2VudCBkeW5hbWljIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEEga2V5IHVzZWQgdG8gcmV0cmlldmUgdGhlIGhlYWRlciBmcm9tIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sSGVhZGVyTmFtZSA9ICdoZWFkZXInO1xuXG4gIC8qKlxuICAgKiBBIGtleSB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWVsZCBmcm9tIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcblxuICAvKipcbiAgICogVHJlZXRhYmxlIG1pbiB3aWR0aCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG1pbldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG1pbldpZHRoIHByb3AgaXMgdXNlZCBmb3IgdHJlZXRhYmxlIGJvZHkgb25seSwgZXhjbHVkaW5nIHRvb2xiYXIgYW5kIHBhZ2luYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtaW5XaWR0aEZvckJvZHlPbmx5ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjZWxsIHdpZHRocyBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlaXIgY29udGVudCBvciBub3QuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYXV0b0xheW91dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIGFsdGVybmF0aW5nIHN0cmlwZXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc3RyaXBlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIGJvcmRlcnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYm9yZGVyZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHRyZWV0YWJsZSBjZWxscywgaXQgY2FuIGJlIFwic21hbGxcIiwgXCJub3JtYWxcIiBvciBcImxhcmdlXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogQ3BzVHJlZVRhYmxlU2l6ZSA9ICdub3JtYWwnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgaGF2ZSByb3cgc2VsZWN0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgc2hvdWxkIGhhdmUgcm93cyBoaWdobGlnaHRpbmcgb24gaG92ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcm93SG92ZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgc2hvdyByb3cgbWVudXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1Jvd01lbnUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSAnUmVtb3ZlJyBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgcm93IG1lbnUuXG4gICAqIE5vdGU6IFRoaXMgc2V0dGluZyBvbmx5IHRha2VzIGVmZmVjdCBpZiAnc2hvd1Jvd01lbnUnIGlzIHRydWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1Jvd1JlbW92ZUJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgJ0VkaXQnIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSByb3cgbWVudS5cbiAgICogTm90ZTogVGhpcyBzZXR0aW5nIG9ubHkgdGFrZXMgZWZmZWN0IGlmICdzaG93Um93TWVudScgaXMgdHJ1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Um93RWRpdEJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBsb2FkZXIgY29tcG9uZW50IGlzIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElubGluZSBzdHlsZSBvZiB0aGUgdHJlZXRhYmxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFN0eWxlIGNsYXNzIG9mIHRoZSB0cmVldGFibGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdGFibGVTdHlsZUNsYXNzID0gJyc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFsbCBjb2x1bW5zIHNvcnRhYmxlIGlmIGNvbHVtbnMgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgc29ydGluZyB3b3JrcyBvbiBzaW5nbGUgY29sdW1uIG9yIG9uIG11bHRpcGxlIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc29ydE1vZGU6IENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZSc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlZmF1bHQgc29ydGluZyBvciBhIGN1c3RvbSBvbmUgdXNpbmcgc29ydEZ1bmN0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbVNvcnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgaGFzIGEgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoYXNUb29sYmFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG9vbGJhciBzaXplLCBpdCBjYW4gYmUgXCJzbWFsbFwiIG9yIFwibm9ybWFsXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhclNpemU6IENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ25vcm1hbCc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgdGl0bGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhclRpdGxlID0gJyc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgaWNvbiBuYW1lLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uID0gJyc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgaWNvbiBjb2xvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b29sYmFySWNvbkNvbG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRyZWV0YWJsZSBzY3JvbGxhYmxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHNjcm9sbCB2aWV3cG9ydCBpbiBmaXhlZCBwaXhlbHMgb3IgdGhlIFwiZmxleFwiIGtleXdvcmQgZm9yIGEgZHluYW1pYyBzaXplLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25seSB0aGUgZWxlbWVudHMgd2l0aGluIHNjcm9sbGFibGUgYXJlYSBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgRE9NLiBXb3JrcyBvbmx5IGlmIHNjcm9sbGFibGUgcHJvcCBpcyB0cnVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIGEgdmlydHVhbCBzY3JvbGwgaXRlbSBpbiBmaXhlZCBwaXhlbHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQgPSAwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBtYW55IGFkZGl0aW9uYWwgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBET00gb3V0c2lkZSBvZiB0aGUgdmlldy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBudW1Ub2xlcmF0ZWRJdGVtcyA9IDEwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgaGF2ZSBwYWdpbmF0b3IuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGFnaW5hdG9yID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHBhZ2luYXRvciBldmVuIHRoZXJlIGlzIG9ubHkgb25lIHBhZ2UuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWx3YXlzU2hvd1BhZ2luYXRvciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGludGVnZXIgdmFsdWVzIHRvIGRpc3BsYXkgaW5zaWRlIHJvd3MgcGVyIHBhZ2UgZHJvcGRvd24gb2YgcGFnaW5hdG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbXTtcblxuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGZpcnN0IHJvdyB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHBlciBwYWdlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJvd3MgPSAwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVzZXQgcGFnZSBvbiByb3dzIGNoYW5nZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByZXNldFBhZ2VPblJvd3NDaGFuZ2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlc2V0IHBhZ2Ugb24gdHJlZXRhYmxlIGRhdGEgc29ydGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByZXNldFBhZ2VPblNvcnQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdG90YWwgcmVjb3Jkcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBkYXRhJztcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRyZWV0YWJsZSdzIGJvZHkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5Qm9keUhlaWdodDogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaWYgZGF0YSBpcyBsb2FkZWQgYW5kIGludGVyYWN0ZWQgd2l0aCBpbiBsYXp5IG1hbm5lci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYXp5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBjYWxsIGxhenkgbG9hZGluZyBvbiBpbml0aWFsaXphdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYXp5TG9hZE9uSW5pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGdsb2JhbCBmaWx0ZXIgaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgZmlsdGVyIHBsYWNlaG9sZGVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlclBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGZpZWxkcyB0byB1c2UgaW4gZ2xvYmFsIGZpbHRlcmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBjbGVhciBnbG9iYWwgZmlsdGVyIG9uIGRhdGEgbG9hZGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyByZW1vdmUgYnV0dG9uIGluIHRoZSB0b29sYmFyIHdoZW4gcm93cyBhcmUgc2VsZWN0ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHJlbW92ZUJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgYWRkaXRpb25hbCBidXR0b24gaW4gdGhlIHRvb2xiYXIgd2hlbiByb3dzIGFyZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWxCdG5PblNlbGVjdCB0aXRsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZSA9ICdTZWxlY3QgYWN0aW9uJztcblxuICAvKipcbiAgICogQWRkaXRpb25hbEJ0bk9uU2VsZWN0IGljb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0SWNvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYWRkaXRpb25hbEJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGFjdGlvbiBidXR0b24gaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gYnV0dG9uIHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbkJ0blRpdGxlID0gJ0FjdGlvbic7XG5cbiAgLyoqXG4gICAqIEFjdGlvbiBidXR0b24gaWNvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25CdG5JY29uID0gJyc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhY3Rpb25CdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZGF0YSByZWxvYWQgYnV0dG9uIGluIHRoZSB0b29sYmFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dEYXRhUmVsb2FkQnRuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBkYXRhUmVsb2FkQnRuIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGRhdGFSZWxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgc2hvdyBjb2x1bW5zVG9nZ2xlIG1lbnUsIHdoZXJlIHlvdSBjYW4gY2hvb3NlIHdoaWNoIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkLiBJZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0NvbHVtbnNUb2dnbGVCdG4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbHVtbnNUb2dnbGUgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBpbml0aWFsIGNvbHVtbnMgdG8gc2hvdyBpbiB0aGUgdHJlZXRhYmxlLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBjb2x1bW5zIGFyZSBpbml0aWFsbHkgdmlzaWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheS5cbiAgICogQGRlZmF1bHQgW11cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0YSh2YWx1ZTogYW55W10pIHtcbiAgICBjb25zdCBjbG9uZSA9IGNsb25lRGVlcCh2YWx1ZSk7XG4gICAgaWYgKGNsb25lICYmIGNsb25lLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGNsb25lLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICB2Ll9kZWZhdWx0U29ydE9yZGVyID0gaSsrO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEgPSBjbG9uZTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gc2VsZWN0ZWQgcm93cyBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7YW55W119IGFueVtdIC0gc2VsZWN0ZWQgcm93cy5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgcm93c1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge3ZvaWR9IHZvaWQgLSBhY3Rpb24gYnV0dG9uIGNsaWNrZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFjdGlvbkJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFkZGl0aW9uYWwgYnV0dG9uIG9uIHNlbGVjdCBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIHNlbGVjdGVkIGRhdGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBlZGl0LXJvdyBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIGJ1dHRvbiBjbGlja2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiByb3dzIGFyZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIGFycmF5IG9mIHJvd3MgdG8gcmVtb3ZlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dzVG9SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBwYWdlIGlzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBwYWdlIGNoYW5nZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgc29ydGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gU29ydCBkYXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBmaWx0ZXIgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBzZWxlY3RlZCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge2FueVtdfSBvYmplY3RbXSAtIHNlbGVjdGlvbiBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjb2x1bW5zU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYW55IH1bXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gcGFnaW5nLCBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXBwZW5zIGluIGxhenkgbW9kZS5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBsYXp5IGxvYWQgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSByZWxvYWQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBkYXRhIHJlbG9hZCBidXR0b24gY2xpY2tlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgZGF0YVJlbG9hZEJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gTm9kZSBpbnN0YW5jZS5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgbm9kZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBOb2RlIGNvbGxhcHNlIGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIE5vZGUgaW5zdGFuY2UuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBub2RlIHVuc2VsZWN0IGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgQFZpZXdDaGlsZCgnZ2xvYmFsRmlsdGVyQ29tcCcpXG4gIGdsb2JhbEZpbHRlckNvbXAhOiBDcHNJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdjb2xUb2dnbGVNZW51JylcbiAgY29sVG9nZ2xlTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSAwO1xuICBkZWZTY3JvbGxIZWlnaHQgPSAnJztcblxuICBwcml2YXRlIF9kZWZTY3JvbGxIZWlnaHRQeCA9IDA7XG4gIHByaXZhdGUgX2RlZlNjcm9sbEhlaWdodFB4SW5pdGlhbCA9IDA7XG5cbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIF93aW5kb3dSZXNpemVEZWJvdW5jZXI6IGFueTtcbiAgcHJpdmF0ZSBfc2Nyb2xsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2hlYWRlckJveDogYW55O1xuICBwcml2YXRlIF9zY3JvbGxhYmxlQm9keTogYW55O1xuICBwcml2YXRlIF9zY3JvbGxiYXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgX3Njcm9sbGJhclZpc2libGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgX25lZWRSZWNhbGNBdXRvTGF5b3V0ID0gdHJ1ZTtcblxuICBfZGF0YTogYW55W10gPSBbXTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJWaXNpYmxlID0gYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVCb2R5LFxuICAgICAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgICAgICdhdXRvJyxcbiAgICAgICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICAgICAgKTtcblxuICAgICAgICBsZXQgd1Njcm9sbCA9IHRoaXMuX3Njcm9sbGJhclZpc2libGUgPyB0aGlzLl9zY3JvbGxiYXJXaWR0aCA6IDA7XG4gICAgICAgIGlmICh3U2Nyb2xsID4gMCkgd1Njcm9sbCAtPSAxO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5faGVhZGVyQm94LFxuICAgICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBgJHt3U2Nyb2xsfXB4YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIHRoaXMuX2hlYWRlckJveCxcbiAgICAgICAgICAnYm9yZGVyLXJpZ2h0JyxcbiAgICAgICAgICB3U2Nyb2xsID4gMCA/ICcxcHggc29saWQgI2Q3ZDVkNScgOiAndW5zZXQnXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHRoaXMudmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIHRoaXMubWluV2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLm1pbldpZHRoKTtcblxuICAgIGlmICh0aGlzLnNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QpIHRoaXMuc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICB0aGlzLmRlZlNjcm9sbEhlaWdodCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcblxuICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcpIHtcbiAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSBwYXJzZUludCh0aGlzLnNjcm9sbEhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA8IDEpXG4gICAgICAgIHRoaXMucm93c1BlclBhZ2VPcHRpb25zID0gWzUsIDEwLCAyNSwgNTBdO1xuXG4gICAgICBpZiAoIXRoaXMucm93cykgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzUGVyUGFnZU9wdGlvbnMgbXVzdCBpbmNsdWRlIHJvd3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd09wdGlvbnMgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIGxhYmVsOiAnJyArIHYsXG4gICAgICAgIHZhbHVlOiB2XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93R2xvYmFsRmlsdGVyICYmXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcz8ubGVuZ3RoIDwgMSAmJlxuICAgICAgdGhpcy5kYXRhPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXS5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9XG4gICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLmxlbmd0aCA+IDAgPyB0aGlzLmluaXRpYWxDb2x1bW5zIDogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldE1pbldpZHRoT3ZlcmFsbCgpO1xuXG4gICAgdGhpcy5fc2Nyb2xsYWJsZUJvZHkgPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWJvZHknXG4gICAgKTtcbiAgICBpZiAodGhpcy5fc2Nyb2xsYWJsZUJvZHkpIHtcbiAgICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgJiYgdGhpcy5taW5XaWR0aCkge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3Njcm9sbGFibGVCb2R5LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGlmICh0YWJsZSkgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YWJsZSwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKSB7XG4gICAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLl9zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXV0b0xheW91dCkge1xuICAgICAgICAgIHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVCb2R5LFxuICAgICAgICAgICAgJ3Njcm9sbCdcbiAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9oZWFkZXJCb3ggPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtaGVhZGVyLWJveCdcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLl9oZWFkZXJCb3gpIHtcbiAgICAgICAgaWYgKHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLl9oZWFkZXJCb3gucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgICBpZiAodGFibGUpIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gRG9tSGFuZGxlci5jYWxjdWxhdGVTY3JvbGxiYXJXaWR0aCgpO1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX3Njcm9sbGFibGVCb2R5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0KSB7XG4gICAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICBjb25zdCB0YWJsZVdyYXBwZXIgPVxuICAgICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJy5wLXRyZWV0YWJsZS13cmFwcGVyJ1xuICAgICAgICApO1xuICAgICAgaWYgKHRhYmxlV3JhcHBlciAmJiB0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgJiYgdGhpcy5taW5XaWR0aCkge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRhYmxlV3JhcHBlci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBpZiAodGFibGUpIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0KSB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocygpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuX2RlZlNjcm9sbEhlaWdodFB4ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgIHRoaXMuX2RlZlNjcm9sbEhlaWdodFB4ID0gdGhpcy5fc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHg7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICBpZiAodGhpcy5jbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZykgdGhpcy5jbGVhckdsb2JhbEZpbHRlcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KVxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0O1xuXG4gICAgdGhpcy5fc2V0TWluV2lkdGhPdmVyYWxsKCk7XG5cbiAgICBjb25zdCBkYXRhQ2hhbmdlcyA9IGNoYW5nZXM/LmRhdGE7XG5cbiAgICBpZiAoZGF0YUNoYW5nZXM/LnByZXZpb3VzVmFsdWUgIT09IGRhdGFDaGFuZ2VzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgaWYgKHRoaXMuYXV0b0xheW91dCkgdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKGZvcmNlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmF1dG9MYXlvdXQgfHwgIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0ICYmICFmb3JjZWQpIHJldHVybjtcblxuICAgICAgY29uc3QgaGVhZGVyUm93cyA9IHRoaXMuX2hlYWRlckJveD8ucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgIGlmICghaGVhZGVyUm93cz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID1cbiAgICAgICAgaGVhZGVyUm93c1toZWFkZXJSb3dzLmxlbmd0aCAtIDFdPy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpO1xuICAgICAgaWYgKCFoZWFkZXJDZWxscz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGxldCBoYXNTZWxlY3RhYmxlQ2VsbCA9IGZhbHNlO1xuICAgICAgbGV0IGhhc1Jvd01lbnVDZWxsID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRocyA9IEFycmF5LmZyb20oaGVhZGVyQ2VsbHMpO1xuICAgICAgaWYgKHRocy5ldmVyeSgodGg6IGFueSkgPT4gdGgub2Zmc2V0V2lkdGggPT09IDApKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHRoV2lkdGhzID0gdGhzLm1hcCgodGg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRoLnN0eWxlLndpZHRoO1xuXG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZUNlbGwgPSB0aC5jbGFzc0xpc3QuY29udGFpbnMoXG4gICAgICAgICAgJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlzUm93Q2VsbCA9IHRoLmNsYXNzTGlzdC5jb250YWlucygnY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsJyk7XG5cbiAgICAgICAgaWYgKGlzU2VsZWN0YWJsZUNlbGwpIGhhc1NlbGVjdGFibGVDZWxsID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzUm93Q2VsbCkgaGFzUm93TWVudUNlbGwgPSB0cnVlO1xuXG4gICAgICAgIGxldCB0aFdpZHRoID0gNTU7XG4gICAgICAgIGlmICghaXNTZWxlY3RhYmxlQ2VsbCAmJiAhaXNSb3dDZWxsKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ3dpZHRoJywgJ21pbi1jb250ZW50Jyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoLCAndGV4dC13cmFwJywgJ25vd3JhcCcpO1xuICAgICAgICAgIHRoV2lkdGggPSB0aC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoLCAnd2lkdGgnLCB3cHJldik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoLCAndGV4dC13cmFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoV2lkdGg7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYm9keVJvd3MgPSB0aGlzLl9zY3JvbGxhYmxlQm9keT8ucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgIGlmICghYm9keVJvd3M/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB0ZFdpZHRoczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgY29uc3QgaGlkZGVuRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBoaWRkZW5EaXYuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgaGlkZGVuRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIGhpZGRlbkRpdi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuRGl2KTtcbiAgICAgIGJvZHlSb3dzLmZvckVhY2goKHRyOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB0ZHMgPSB0cj8ucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcbiAgICAgICAgdGRzPy5mb3JFYWNoKCh0ZDogSFRNTEVsZW1lbnQsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlT3JSb3dNZW51Q2VsbCA9XG4gICAgICAgICAgICB0ZC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJykgfHxcbiAgICAgICAgICAgIHRkLmNsYXNzTGlzdC5jb250YWlucygnY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsJyk7XG5cbiAgICAgICAgICBsZXQgdGRXaWR0aCA9IDU1O1xuICAgICAgICAgIGlmICghaXNTZWxlY3RhYmxlT3JSb3dNZW51Q2VsbCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkVGQgPSB0ZC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjbG9uZWRUZCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZFRkLCAnd2lkdGgnLCAnbWluLWNvbnRlbnQnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkVGQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICBoaWRkZW5EaXYuaW5uZXJIVE1MID0gY2xvbmVkVGQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgaGlkZGVuRGl2LnN0eWxlLndpZHRoID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGRXaWR0aCA9IGhpZGRlbkRpdi5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKGNsb25lZFRkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0ZFdpZHRoc1tpZHhdKSB0ZFdpZHRoc1tpZHhdID0gMDtcbiAgICAgICAgICB0ZFdpZHRoc1tpZHhdID0gTWF0aC5tYXgodGRXaWR0aHNbaWR4XSwgdGRXaWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlbkRpdik7XG5cbiAgICAgIGlmICh0aFdpZHRocy5sZW5ndGggIT09IHRkV2lkdGhzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtYXhXaWR0aHMgPSB0aFdpZHRocy5tYXAoKHYsIGlkeCkgPT4gTWF0aC5tYXgodiwgdGRXaWR0aHNbaWR4XSkpO1xuICAgICAgbGV0IHN1bSA9IG1heFdpZHRocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgIGlmIChoYXNTZWxlY3RhYmxlQ2VsbCkge1xuICAgICAgICBzdW0gLT0gNTU7XG4gICAgICAgIG1heFdpZHRocy5zaGlmdCgpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1Jvd01lbnVDZWxsKSB7XG4gICAgICAgIHN1bSAtPSA1NTtcbiAgICAgICAgbWF4V2lkdGhzLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJjZW50YWdlcyA9IG1heFdpZHRocy5tYXAoKHYpID0+ICh2IC8gc3VtKSAqIDEwMCk7XG5cbiAgICAgIGhlYWRlckNlbGxzLmZvckVhY2goKHRoOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaGFzU2VsZWN0YWJsZUNlbGwgJiYgaWR4ID09PSAwKSB8fFxuICAgICAgICAgIChoYXNSb3dNZW51Q2VsbCAmJiBpZHggPT09IGhlYWRlckNlbGxzLmxlbmd0aCAtIDEpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGgsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aCxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBib2R5Um93cy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIHRkcz8uZm9yRWFjaCgodGQ6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChoYXNTZWxlY3RhYmxlQ2VsbCAmJiBpZHggPT09IDApIHx8XG4gICAgICAgICAgICAoaGFzUm93TWVudUNlbGwgJiYgaWR4ID09PSB0ZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGQsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgIHRkLFxuICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnb3BhY2l0eScsICcxJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgICAgICAgIGlmICh0aGlzLmJvcmRlcmVkKVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICAgICdib3JkZXItbGVmdC1jb2xvcicsXG4gICAgICAgICAgICAgICd2YXIoLS1jcHMtY29sb3ItbGluZS1taWQpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCB8fCB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KSByZXR1cm47XG5cbiAgICBjb25zdCB0cnMgPSB0aGlzLnByaW1lbmdUcmVlVGFibGU/LmVsPy5uYXRpdmVFbGVtZW50XG4gICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZS10Ym9keScpXG4gICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG5cbiAgICBpZiAoIXRycz8ubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKCF0cnNbMF0/Lm9mZnNldEhlaWdodCkgcmV0dXJuO1xuXG4gICAgbGV0IGggPSAwO1xuICAgIHRycy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgcmggPSAwO1xuICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICB0ZHM/LmZvckVhY2goKHRkOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRkLnN0eWxlLndpZHRoO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRkLCAnd2lkdGgnKTtcbiAgICAgICAgaWYgKHRkLm9mZnNldEhlaWdodCkgcmggPSBNYXRoLm1heChyaCwgdGQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0ZCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ3dpZHRoJywgd3ByZXYpO1xuICAgICAgfSk7XG4gICAgICBpZiAocmgpIHtcbiAgICAgICAgaCA9IGlkeCA9PT0gMCA/IHJoIDogTWF0aC5taW4oaCwgcmgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBoO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWluV2lkdGhPdmVyYWxsKCkge1xuICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgfHwgIXRoaXMubWluV2lkdGggfHwgIXRoaXMucHJpbWVuZ1RyZWVUYWJsZSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHRyZWVUYWJsZU1haW4gPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUnKTtcbiAgICBpZiAodHJlZVRhYmxlTWFpbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVNYWluLCAnb3ZlcmZsb3cnLCAnYXV0bycpO1xuICAgICAgY29uc3QgcGFnaW5hdG9yRWwgPSB0cmVlVGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoJy5wLXBhZ2luYXRvcicpO1xuICAgICAgaWYgKHBhZ2luYXRvckVsKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBhZ2luYXRvckVsLCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgICBjb25zdCBsb2FkaW5nT3ZlcmxheSA9IHRyZWVUYWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5wLXRyZWV0YWJsZS1sb2FkaW5nLW92ZXJsYXknXG4gICAgICApO1xuICAgICAgaWYgKGxvYWRpbmdPdmVybGF5KVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxvYWRpbmdPdmVybGF5LCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVdyYXBwZXIgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtd3JhcHBlcidcbiAgICAgICk7XG4gICAgaWYgKHNjcm9sbGFibGVXcmFwcGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuXG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXdyYXBwZXInXG4gICAgICAgICk7XG4gICAgICBpZiAodGFibGVXcmFwcGVyKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUYWJsZUhlYWRlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtaGVhZGVyJ1xuICAgICAgKTtcbiAgICBpZiAodHJlZVRhYmxlSGVhZGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVIZWFkZXIsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uV2luZG93UmVzaXplKCkge1xuICAgIC8vIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgIC8vICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3dpbmRvd1Jlc2l6ZURlYm91bmNlcik7XG4gICAgdGhpcy5fd2luZG93UmVzaXplRGVib3VuY2VyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBzdHlsZUNsYXNzKCkge1xuICAgIGNvbnN0IGNsYXNzZXNMaXN0ID0gW107XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc20nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWxnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUb29sYmFyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudG9vbGJhclNpemUpIHtcbiAgICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLXNtYWxsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItbm9ybWFsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmlwZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXN0cmlwZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9yZGVyZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzTGlzdC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLl9zY3JvbGxhYmxlQm9keSxcbiAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgICAgICBjb25zdCBpdGVtc0xlbiA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5zZXJpYWxpemVkVmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgICAgICBpZiAoaXRlbXNMZW4gPCAxKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICsgMSArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuX3Njcm9sbGFibGVCb2R5LCAnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9XG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCwgY3VySGVpZ2h0KSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBUcmVlVGFibGVTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBvbkVkaXRSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuZWRpdFJvd0J0bkNsaWNrZWQuZW1pdChub2RlKTtcbiAgfVxuXG4gIG9uUmVtb3ZlUm93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KFtub2RlXSk7XG4gIH1cblxuICB0b2dnbGVBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID1cbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA8IHRoaXMuY29sdW1ucy5sZW5ndGggPyB0aGlzLmNvbHVtbnMgOiBbXTtcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTGF6eUxvYWRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXp5TG9hZGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgb25Ob2RlQ29sbGFwc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVDb2xsYXBzZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvblNlbGVjdENvbHVtbihjb2w6IGFueSkge1xuICAgIGxldCByZXMgPSBbXSBhcyBhbnk7XG4gICAgaWYgKHRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2wpKSB7XG4gICAgICByZXMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoKHY6IGFueSkgPT4gIWlzRXF1YWwodiwgY29sKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKCh2OiBhbnkpID0+IGlzRXF1YWwodiwgbykpIHx8XG4gICAgICAgICAgaXNFcXVhbChjb2wsIG8pXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcy5wdXNoKG8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZXM7XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueSkge1xuICAgIGlmIChzZWxlY3Rpb24gJiYgIUFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSkgc2VsZWN0aW9uID0gW3NlbGVjdGlvbl07XG4gICAgdGhpcy5yb3dzU2VsZWN0ZWQuZW1pdChzZWxlY3Rpb24pO1xuICB9XG59XG4iLCI8cC10cmVlVGFibGVcbiAgI3ByaW1lbmdUcmVlVGFibGVcbiAgdHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnY3BzLXRyZWV0YWJsZS1sb2FkaW5nJzogbG9hZGluZyxcbiAgICAnY3BzLXRyZWV0YWJsZS1mbGV4JzogZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcsXG4gICAgJ2Nwcy10cmVldGFibGUtbm9udmlydHVhbCc6ICF2aXJ0dWFsU2Nyb2xsLFxuICAgICdjcHMtdHJlZXRhYmxlLWF1dG9sYXlvdXQtY2FsY2VkJzogYXV0b0xheW91dCAmJiBzY3JvbGxhYmxlXG4gIH1cIlxuICBbdmFsdWVdPVwiZGF0YVwiXG4gIFthdXRvTGF5b3V0XT1cImF1dG9MYXlvdXQgJiYgIXNjcm9sbGFibGVcIlxuICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgW3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIlxuICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwie1xuICAgIG51bVRvbGVyYXRlZEl0ZW1zOiBudW1Ub2xlcmF0ZWRJdGVtcyxcbiAgICBhdXRvU2l6ZTogZmFsc2VcbiAgfVwiXG4gIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbbGF6eV09XCJsYXp5XCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJkZWVwRXF1YWxzXCJcbiAgW2xhenlMb2FkT25Jbml0XT1cImxhenlMb2FkT25Jbml0XCJcbiAgW3N0eWxlQ2xhc3NdPVwic3R5bGVDbGFzc1wiXG4gIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICBbdGFibGVTdHlsZUNsYXNzXT1cInRhYmxlU3R5bGVDbGFzc1wiXG4gIFtjdXN0b21Tb3J0XT1cImN1c3RvbVNvcnRcIlxuICBbc29ydE1vZGVdPVwic29ydE1vZGVcIlxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcbiAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgW2Fsd2F5c1Nob3dQYWdpbmF0b3JdPVwiYWx3YXlzU2hvd1BhZ2luYXRvclwiXG4gIFtyb3dzXT1cInJvd3NcIlxuICBbZmlyc3RdPVwiZmlyc3RcIlxuICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gIFtyZXNldFBhZ2VPblNvcnRdPVwicmVzZXRQYWdlT25Tb3J0XCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gIChvbkZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZGVkKCRldmVudClcIlxuICAoc29ydEZ1bmN0aW9uKT1cIm9uU29ydEZ1bmN0aW9uKCRldmVudClcIlxuICAob25Ob2RlRXhwYW5kKT1cIm9uTm9kZUV4cGFuZGVkKCRldmVudClcIlxuICAob25Ob2RlQ29sbGFwc2UpPVwib25Ob2RlQ29sbGFwc2VkKCRldmVudClcIlxuICAob25Ob2RlU2VsZWN0KT1cIm9uTm9kZVNlbGVjdGVkKCRldmVudClcIlxuICAob25Ob2RlVW5zZWxlY3QpPVwib25Ob2RlVW5zZWxlY3RlZCgkZXZlbnQpXCI+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCIgKm5nSWY9XCJoYXNUb29sYmFyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdG9vbGJhclRlbXBsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWxlZnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRvb2xiYXJJY29uXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItaWNvblwiPlxuICAgICAgICAgIDxjcHMtaWNvbiBbaWNvbl09XCJ0b29sYmFySWNvblwiIFtjb2xvcl09XCJ0b29sYmFySWNvbkNvbG9yXCI+PC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItdGl0bGVcIj57eyB0b29sYmFyVGl0bGUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHbG9iYWxGaWx0ZXJcIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1nbG9iYWwtZmlsdGVyXCI+XG4gICAgICAgICAgPGNwcy1pbnB1dFxuICAgICAgICAgICAgI2dsb2JhbEZpbHRlckNvbXBcbiAgICAgICAgICAgIHByZWZpeEljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25GaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwidG9vbGJhclNpemUgPT09ICdzbWFsbCcgPyAndW5kZXJsaW5lZCcgOiAnb3V0bGluZWQnXCJcbiAgICAgICAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCI+XG4gICAgICAgICAgPC9jcHMtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmVCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYnRuLW9uLXNlbGVjdFwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJlbW92ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIGljb249XCJyZW1vdmVcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIFtpY29uXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdEljb25cIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FkZGl0aW9uYWxCdG5PblNlbGVjdCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBY3Rpb25CdG5cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb25CdG5UaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uQnRuSWNvblwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWN0aW9uQnRuKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29sdW1uc1RvZ2dsZUJ0biAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbSBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tY2hlY2tcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+U2hvdyBhbGwgY29sdW1uczwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJlbG9hZC1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGRhdGFSZWxvYWRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBzaXplPVwiMThcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGFSZWxvYWRCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIG5lc3RlZEhlYWRlclRlbXBsYXRlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAqbmdJZj1cIiFuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgIDwhLS0gPHRoIHN0eWxlPVwid2lkdGg6IDNyZW1cIiAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiPjwvdGg+IC0tPlxuICAgICAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNwc1RUSGRyU2VsZWN0YWJsZT48L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlclRlbXBsYXRlICYmIGNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGFibGVcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgICBbY3BzVFRDb2xTb3J0YWJsZV09XCJjb2xbY29sRmllbGROYW1lXVwiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc29ydGFibGVcIj5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICB7eyBjb2xbY29sSGVhZGVyTmFtZV0gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRoXG4gICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsXCJcbiAgICAgICAgKm5nSWY9XCJzaG93Um93TWVudSAmJiAoc2hvd1Jvd1JlbW92ZUJ1dHRvbiB8fCBzaG93Um93RWRpdEJ1dHRvbilcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBbY3BzVFRSb3dTZWxlY3RhYmxlXT1cInJvd05vZGVcIiAqbmdJZj1cInNlbGVjdGFibGVcIj48L3RkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3dOb2RlLFxuICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaSA9PT0gMFwiIFtjcHNUVFJvd1RvZ2dsZXJdPVwicm93Tm9kZVwiPlxuICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbFtjb2xGaWVsZE5hbWVdXSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImkgPiAwXCI+e3sgcm93RGF0YVtjb2xbY29sRmllbGROYW1lXV0gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwic2hvd1Jvd01lbnUgJiYgKHNob3dSb3dSZW1vdmVCdXR0b24gfHwgc2hvd1Jvd0VkaXRCdXR0b24pXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIlxuICAgICAgICAgIFtzaG93Um93UmVtb3ZlQnV0dG9uXT1cInNob3dSb3dSZW1vdmVCdXR0b25cIlxuICAgICAgICAgIFtzaG93Um93RWRpdEJ1dHRvbl09XCJzaG93Um93RWRpdEJ1dHRvblwiPlxuICAgICAgICA8L3RhYmxlLXJvdy1tZW51PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgPHRyPlxuICAgICAgPHRkXG4gICAgICAgIGNvbHNwYW49XCIxMDBcIlxuICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlRG91YmxlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtdHJlZVRhYmxlPlxuIl19
1214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUtMLE1BQU0sRUFFTixtQkFBbUIsRUFHbkIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFFaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NB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QUFNO2dCQU9HLE1BQU07c0JBQWYsTUFBTTtnQkFPRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUluQyxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSWxDLG9CQUFvQjtzQkFEMUIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl4QyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXZDLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUk3QixhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZSxcbiAgVHJlZVRhYmxlU29ydEV2ZW50XG59IGZyb20gJ3ByaW1lbmcvdHJlZXRhYmxlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZXJpZ2h0JztcbmltcG9ydCB7IEFuZ2xlRG91YmxlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZXJpZ2h0JztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbnB1dC9jcHMtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWxvYWRlci9jcHMtbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jcHMtdHJlZS10YWJsZS1jb2x1bW4tc29ydGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVSb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXRhYmxlL2NvbXBvbmVudHMvaW50ZXJuYWwvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVIZWFkZXJTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWhlYWRlci1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVSb3dTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy10b2dnbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVHJlZVRhYmxlQ29tcG9uZW50KSB7XG4gIHJldHVybiB0YWJsZUNvbXBvbmVudC5wcmltZW5nVHJlZVRhYmxlO1xufVxuXG4vKipcbiAqIENwc1RyZWVUYWJsZVNpemUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgdGhlIHRyZWUgdGFibGUuXG4gKiBAZ3JvdXAgVHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG5cbi8qKlxuICogQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHNpemUgb2YgdGhlIHRyZWUgdGFibGUgdG9vbGJhci5cbiAqIEBncm91cCBUeXBlc1xuICovXG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJztcblxuLyoqXG4gKiBDcHNUcmVlVGFibGVTb3J0TW9kZSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgc29ydGluZyBtb2RlIG9mIHRoZSB0cmVlIHRhYmxlLlxuICogQGdyb3VwIFR5cGVzXG4gKi9cbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuXG4vKipcbiAqIENwc1RyZWVUYWJsZUNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGRhdGEgaW4gdGFidWxhciBmb3JtYXQuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtdHJlZS10YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVUYWJsZU1vZHVsZSxcbiAgICBDcHNJbnB1dENvbXBvbmVudCxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzTWVudUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc1NlbGVjdENvbXBvbmVudCxcbiAgICBDcHNMb2FkZXJDb21wb25lbnQsXG4gICAgQW5nbGVEb3VibGVMZWZ0SWNvbixcbiAgICBBbmdsZUxlZnRJY29uLFxuICAgIEFuZ2xlUmlnaHRJY29uLFxuICAgIEFuZ2xlRG91YmxlUmlnaHRJY29uLFxuICAgIENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlLFxuICAgIENwc1RyZWVUYWJsZUhlYWRlclNlbGVjdGFibGVEaXJlY3RpdmUsXG4gICAgQ3BzVHJlZVRhYmxlUm93U2VsZWN0YWJsZURpcmVjdGl2ZSxcbiAgICBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlLFxuICAgIFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd01lbnVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJlZVRhYmxlU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUcmVlVGFibGUsXG4gICAgICB1c2VGYWN0b3J5OiB0cmVlVGFibGVGYWN0b3J5LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBkZXBzOiBbQ3BzVHJlZVRhYmxlQ29tcG9uZW50XVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDcHNUcmVlVGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzXG57XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHRvIHJlcHJlc2VudCBkeW5hbWljIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEEga2V5IHVzZWQgdG8gcmV0cmlldmUgdGhlIGhlYWRlciBmcm9tIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sSGVhZGVyTmFtZSA9ICdoZWFkZXInO1xuXG4gIC8qKlxuICAgKiBBIGtleSB1c2VkIHRvIHJldHJpZXZlIHRoZSBmaWVsZCBmcm9tIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcblxuICAvKipcbiAgICogVHJlZXRhYmxlIG1pbiB3aWR0aCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG1pbldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG1pbldpZHRoIHByb3AgaXMgdXNlZCBmb3IgdHJlZXRhYmxlIGJvZHkgb25seSwgZXhjbHVkaW5nIHRvb2xiYXIgYW5kIHBhZ2luYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBtaW5XaWR0aEZvckJvZHlPbmx5ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjZWxsIHdpZHRocyBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlaXIgY29udGVudCBvciBub3QuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYXV0b0xheW91dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIGFsdGVybmF0aW5nIHN0cmlwZXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc3RyaXBlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIGJvcmRlcnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYm9yZGVyZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHRyZWV0YWJsZSBjZWxscywgaXQgY2FuIGJlIFwic21hbGxcIiwgXCJub3JtYWxcIiBvciBcImxhcmdlXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogQ3BzVHJlZVRhYmxlU2l6ZSA9ICdub3JtYWwnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgaGF2ZSByb3cgc2VsZWN0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgc2hvdWxkIGhhdmUgcm93cyBoaWdobGlnaHRpbmcgb24gaG92ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcm93SG92ZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgc2hvdyByb3cgbWVudXMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1Jvd01lbnUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSAnUmVtb3ZlJyBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgcm93IG1lbnUuXG4gICAqIE5vdGU6IFRoaXMgc2V0dGluZyBvbmx5IHRha2VzIGVmZmVjdCBpZiAnc2hvd1Jvd01lbnUnIGlzIHRydWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1Jvd1JlbW92ZUJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgJ0VkaXQnIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSByb3cgbWVudS5cbiAgICogTm90ZTogVGhpcyBzZXR0aW5nIG9ubHkgdGFrZXMgZWZmZWN0IGlmICdzaG93Um93TWVudScgaXMgdHJ1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Um93RWRpdEJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgYSBsb2FkZXIgY29tcG9uZW50IGlzIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElubGluZSBzdHlsZSBvZiB0aGUgdHJlZXRhYmxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFN0eWxlIGNsYXNzIG9mIHRoZSB0cmVldGFibGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdGFibGVTdHlsZUNsYXNzID0gJyc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFsbCBjb2x1bW5zIHNvcnRhYmxlIGlmIGNvbHVtbnMgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgc29ydGluZyB3b3JrcyBvbiBzaW5nbGUgY29sdW1uIG9yIG9uIG11bHRpcGxlIGNvbHVtbnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc29ydE1vZGU6IENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZSc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIGRlZmF1bHQgc29ydGluZyBvciBhIGN1c3RvbSBvbmUgdXNpbmcgc29ydEZ1bmN0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbVNvcnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgaGFzIGEgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoYXNUb29sYmFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG9vbGJhciBzaXplLCBpdCBjYW4gYmUgXCJzbWFsbFwiIG9yIFwibm9ybWFsXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhclNpemU6IENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ25vcm1hbCc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgdGl0bGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhclRpdGxlID0gJyc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgaWNvbiBuYW1lLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uID0gJyc7XG5cbiAgLyoqXG4gICAqIFRvb2xiYXIgaWNvbiBjb2xvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b29sYmFySWNvbkNvbG9yID0gJyc7XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRyZWV0YWJsZSBzY3JvbGxhYmxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdGhlIHNjcm9sbCB2aWV3cG9ydCBpbiBmaXhlZCBwaXhlbHMgb3IgdGhlIFwiZmxleFwiIGtleXdvcmQgZm9yIGEgZHluYW1pYyBzaXplLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25seSB0aGUgZWxlbWVudHMgd2l0aGluIHNjcm9sbGFibGUgYXJlYSBzaG91bGQgYmUgYWRkZWQgaW50byB0aGUgRE9NLiBXb3JrcyBvbmx5IGlmIHNjcm9sbGFibGUgcHJvcCBpcyB0cnVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIGEgdmlydHVhbCBzY3JvbGwgaXRlbSBpbiBmaXhlZCBwaXhlbHMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQgPSAwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBtYW55IGFkZGl0aW9uYWwgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBET00gb3V0c2lkZSBvZiB0aGUgdmlldy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBudW1Ub2xlcmF0ZWRJdGVtcyA9IDEwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgaGF2ZSBwYWdpbmF0b3IuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGFnaW5hdG9yID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHBhZ2luYXRvciBldmVuIHRoZXJlIGlzIG9ubHkgb25lIHBhZ2UuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWx3YXlzU2hvd1BhZ2luYXRvciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGludGVnZXIgdmFsdWVzIHRvIGRpc3BsYXkgaW5zaWRlIHJvd3MgcGVyIHBhZ2UgZHJvcGRvd24gb2YgcGFnaW5hdG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbXTtcblxuICAvKipcbiAgICogSW5kZXggb2YgdGhlIGZpcnN0IHJvdyB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHBlciBwYWdlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJvd3MgPSAwO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVzZXQgcGFnZSBvbiByb3dzIGNoYW5nZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByZXNldFBhZ2VPblJvd3NDaGFuZ2UgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlc2V0IHBhZ2Ugb24gdHJlZXRhYmxlIGRhdGEgc29ydGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByZXNldFBhZ2VPblNvcnQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdG90YWwgcmVjb3Jkcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBkYXRhJztcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRyZWV0YWJsZSdzIGJvZHkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLCBvZiB0eXBlIG51bWJlciBkZW5vdGluZyBwaXhlbHMgb3Igc3RyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5Qm9keUhlaWdodDogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaWYgZGF0YSBpcyBsb2FkZWQgYW5kIGludGVyYWN0ZWQgd2l0aCBpbiBsYXp5IG1hbm5lci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYXp5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBjYWxsIGxhenkgbG9hZGluZyBvbiBpbml0aWFsaXphdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBsYXp5TG9hZE9uSW5pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGdsb2JhbCBmaWx0ZXIgaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgZmlsdGVyIHBsYWNlaG9sZGVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlclBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGZpZWxkcyB0byB1c2UgaW4gZ2xvYmFsIGZpbHRlcmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBjbGVhciBnbG9iYWwgZmlsdGVyIG9uIGRhdGEgbG9hZGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyByZW1vdmUgYnV0dG9uIGluIHRoZSB0b29sYmFyIHdoZW4gcm93cyBhcmUgc2VsZWN0ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHJlbW92ZUJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgYWRkaXRpb25hbCBidXR0b24gaW4gdGhlIHRvb2xiYXIgd2hlbiByb3dzIGFyZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWxCdG5PblNlbGVjdCB0aXRsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZSA9ICdTZWxlY3QgYWN0aW9uJztcblxuICAvKipcbiAgICogQWRkaXRpb25hbEJ0bk9uU2VsZWN0IGljb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0SWNvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYWRkaXRpb25hbEJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGFjdGlvbiBidXR0b24gaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gYnV0dG9uIHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbkJ0blRpdGxlID0gJ0FjdGlvbic7XG5cbiAgLyoqXG4gICAqIEFjdGlvbiBidXR0b24gaWNvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25CdG5JY29uID0gJyc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhY3Rpb25CdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZGF0YSByZWxvYWQgYnV0dG9uIGluIHRoZSB0b29sYmFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dEYXRhUmVsb2FkQnRuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBkYXRhUmVsb2FkQnRuIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGRhdGFSZWxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgc2hvdyBjb2x1bW5zVG9nZ2xlIG1lbnUsIHdoZXJlIHlvdSBjYW4gY2hvb3NlIHdoaWNoIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkLiBJZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0NvbHVtbnNUb2dnbGVCdG4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbHVtbnNUb2dnbGUgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBpbml0aWFsIGNvbHVtbnMgdG8gc2hvdyBpbiB0aGUgdHJlZXRhYmxlLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBjb2x1bW5zIGFyZSBpbml0aWFsbHkgdmlzaWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheS5cbiAgICogQGRlZmF1bHQgW11cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0YSh2YWx1ZTogYW55W10pIHtcbiAgICBjb25zdCBjbG9uZSA9IGNsb25lRGVlcCh2YWx1ZSk7XG4gICAgaWYgKGNsb25lICYmIGNsb25lLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGNsb25lLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICB2Ll9kZWZhdWx0U29ydE9yZGVyID0gaSsrO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEgPSBjbG9uZTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gc2VsZWN0ZWQgcm93cyBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7YW55W119IGFueVtdIC0gc2VsZWN0ZWQgcm93cy5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgcm93c1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge3ZvaWR9IHZvaWQgLSBhY3Rpb24gYnV0dG9uIGNsaWNrZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFjdGlvbkJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFkZGl0aW9uYWwgYnV0dG9uIG9uIHNlbGVjdCBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIHNlbGVjdGVkIGRhdGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBlZGl0LXJvdyBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIGJ1dHRvbiBjbGlja2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiByb3dzIGFyZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIGFycmF5IG9mIHJvd3MgdG8gcmVtb3ZlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dzVG9SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBwYWdlIGlzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBwYWdlIGNoYW5nZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgc29ydGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gU29ydCBkYXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBmaWx0ZXIgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBzZWxlY3RlZCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge2FueVtdfSBvYmplY3RbXSAtIHNlbGVjdGlvbiBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjb2x1bW5zU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYW55IH1bXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gcGFnaW5nLCBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXBwZW5zIGluIGxhenkgbW9kZS5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBsYXp5IGxvYWQgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSByZWxvYWQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBkYXRhIHJlbG9hZCBidXR0b24gY2xpY2tlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgZGF0YVJlbG9hZEJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gTm9kZSBpbnN0YW5jZS5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgbm9kZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBOb2RlIGNvbGxhcHNlIGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIE5vZGUgaW5zdGFuY2UuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBub2RlIHVuc2VsZWN0IGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgQFZpZXdDaGlsZCgnZ2xvYmFsRmlsdGVyQ29tcCcpXG4gIGdsb2JhbEZpbHRlckNvbXAhOiBDcHNJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdjb2xUb2dnbGVNZW51JylcbiAgY29sVG9nZ2xlTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSAwO1xuICBkZWZTY3JvbGxIZWlnaHQgPSAnJztcblxuICBwcml2YXRlIF9kZWZTY3JvbGxIZWlnaHRQeCA9IDA7XG4gIHByaXZhdGUgX2RlZlNjcm9sbEhlaWdodFB4SW5pdGlhbCA9IDA7XG5cbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIF93aW5kb3dSZXNpemVEZWJvdW5jZXI6IGFueTtcbiAgcHJpdmF0ZSBfc2Nyb2xsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2hlYWRlckJveDogYW55O1xuICBwcml2YXRlIF9zY3JvbGxhYmxlQm9keTogYW55O1xuICBwcml2YXRlIF9zY3JvbGxiYXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgX3Njcm9sbGJhclZpc2libGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgX25lZWRSZWNhbGNBdXRvTGF5b3V0ID0gdHJ1ZTtcblxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgd2luZG93OiBXaW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy53aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIFdpbmRvdztcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJWaXNpYmxlID0gYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVCb2R5LFxuICAgICAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgICAgICdhdXRvJyxcbiAgICAgICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICAgICAgKTtcblxuICAgICAgICBsZXQgd1Njcm9sbCA9IHRoaXMuX3Njcm9sbGJhclZpc2libGUgPyB0aGlzLl9zY3JvbGxiYXJXaWR0aCA6IDA7XG4gICAgICAgIGlmICh3U2Nyb2xsID4gMCkgd1Njcm9sbCAtPSAxO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5faGVhZGVyQm94LFxuICAgICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBgJHt3U2Nyb2xsfXB4YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIHRoaXMuX2hlYWRlckJveCxcbiAgICAgICAgICAnYm9yZGVyLXJpZ2h0JyxcbiAgICAgICAgICB3U2Nyb2xsID4gMCA/ICcxcHggc29saWQgI2Q3ZDVkNScgOiAndW5zZXQnXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHRoaXMudmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIHRoaXMubWluV2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLm1pbldpZHRoKTtcblxuICAgIGlmICh0aGlzLnNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QpIHRoaXMuc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICB0aGlzLmRlZlNjcm9sbEhlaWdodCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuXG4gICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQgIT09ICdmbGV4Jykge1xuICAgICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCA9IHBhcnNlSW50KHRoaXMuc2Nyb2xsSGVpZ2h0LCAxMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICBpZiAodGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubGVuZ3RoIDwgMSlcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMgPSBbNSwgMTAsIDI1LCA1MF07XG5cbiAgICAgIGlmICghdGhpcy5yb3dzKSB0aGlzLnJvd3MgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMucm93c1BlclBhZ2VPcHRpb25zLmluY2x1ZGVzKHRoaXMucm93cykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvd3NQZXJQYWdlT3B0aW9ucyBtdXN0IGluY2x1ZGUgcm93cycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm93T3B0aW9ucyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodikgPT4gKHtcbiAgICAgICAgbGFiZWw6ICcnICsgdixcbiAgICAgICAgdmFsdWU6IHZcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNob3dHbG9iYWxGaWx0ZXIgJiZcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzPy5sZW5ndGggPCAxICYmXG4gICAgICB0aGlzLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzID0gT2JqZWN0LmtleXModGhpcy5kYXRhWzBdLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID1cbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMubGVuZ3RoID4gMCA/IHRoaXMuaW5pdGlhbENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0TWluV2lkdGhPdmVyYWxsKCk7XG5cbiAgICB0aGlzLl9zY3JvbGxhYmxlQm9keSA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtYm9keSdcbiAgICApO1xuICAgIGlmICh0aGlzLl9zY3JvbGxhYmxlQm9keSkge1xuICAgICAgaWYgKHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fc2Nyb2xsYWJsZUJvZHkucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgaWYgKHRhYmxlKSB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhYmxlLCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuX3Njcm9sbGFibGVCb2R5LmNsaWVudEhlaWdodDtcbiAgICAgICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hdXRvTGF5b3V0KSB7XG4gICAgICAgICAgdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KFxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZUJvZHksXG4gICAgICAgICAgICAnc2Nyb2xsJ1xuICAgICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2hlYWRlckJveCA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1oZWFkZXItYm94J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuX2hlYWRlckJveCkge1xuICAgICAgICBpZiAodGhpcy5taW5XaWR0aEZvckJvZHlPbmx5ICYmIHRoaXMubWluV2lkdGgpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX2hlYWRlckJveC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICAgIGlmICh0YWJsZSkgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YWJsZSwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyV2lkdGggPSBEb21IYW5kbGVyLmNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fc2Nyb2xsYWJsZUJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQpIHtcbiAgICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXdyYXBwZXInXG4gICAgICAgICk7XG4gICAgICBpZiAodGFibGVXcmFwcGVyICYmIHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGlmICh0YWJsZSkgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YWJsZSwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQpIHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4Jykge1xuICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLl9zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG4gICAgICB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeEluaXRpYWwgPSB0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeDtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLmNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nKSB0aGlzLmNsZWFyR2xvYmFsRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQpXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQ7XG5cbiAgICB0aGlzLl9zZXRNaW5XaWR0aE92ZXJhbGwoKTtcblxuICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlcz8uZGF0YTtcblxuICAgIGlmIChkYXRhQ2hhbmdlcz8ucHJldmlvdXNWYWx1ZSAhPT0gZGF0YUNoYW5nZXM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBpZiAodGhpcy5hdXRvTGF5b3V0KSB0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAncmVzaXplJyxcbiAgICAgICAgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyhmb3JjZWQgPSBmYWxzZSkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5hdXRvTGF5b3V0IHx8ICF0aGlzLnNjcm9sbGFibGUpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLl9uZWVkUmVjYWxjQXV0b0xheW91dCAmJiAhZm9yY2VkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGhlYWRlclJvd3MgPSB0aGlzLl9oZWFkZXJCb3g/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG4gICAgICBpZiAoIWhlYWRlclJvd3M/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9XG4gICAgICAgIGhlYWRlclJvd3NbaGVhZGVyUm93cy5sZW5ndGggLSAxXT8ucXVlcnlTZWxlY3RvckFsbCgndGgnKTtcbiAgICAgIGlmICghaGVhZGVyQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBsZXQgaGFzU2VsZWN0YWJsZUNlbGwgPSBmYWxzZTtcbiAgICAgIGxldCBoYXNSb3dNZW51Q2VsbCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCB0aHMgPSBBcnJheS5mcm9tKGhlYWRlckNlbGxzKTtcbiAgICAgIGlmICh0aHMuZXZlcnkoKHRoOiBhbnkpID0+IHRoLm9mZnNldFdpZHRoID09PSAwKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB0aFdpZHRocyA9IHRocy5tYXAoKHRoOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgd3ByZXYgPSB0aC5zdHlsZS53aWR0aDtcblxuICAgICAgICBjb25zdCBpc1NlbGVjdGFibGVDZWxsID0gdGguY2xhc3NMaXN0LmNvbnRhaW5zKFxuICAgICAgICAgICdjcHMtdHJlZXRhYmxlLXNlbGVjdGFibGUtY2VsbCdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBpc1Jvd0NlbGwgPSB0aC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbCcpO1xuXG4gICAgICAgIGlmIChpc1NlbGVjdGFibGVDZWxsKSBoYXNTZWxlY3RhYmxlQ2VsbCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Jvd0NlbGwpIGhhc1Jvd01lbnVDZWxsID0gdHJ1ZTtcblxuICAgICAgICBsZXQgdGhXaWR0aCA9IDU1O1xuICAgICAgICBpZiAoIWlzU2VsZWN0YWJsZUNlbGwgJiYgIWlzUm93Q2VsbCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGgsICd3aWR0aCcsICdtaW4tY29udGVudCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGgsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ3RleHQtd3JhcCcsICdub3dyYXAnKTtcbiAgICAgICAgICB0aFdpZHRoID0gdGgub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ3dpZHRoJywgd3ByZXYpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGgsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aCwgJ3RleHQtd3JhcCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aFdpZHRoO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJvZHlSb3dzID0gdGhpcy5fc2Nyb2xsYWJsZUJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG4gICAgICBpZiAoIWJvZHlSb3dzPy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgY29uc3QgdGRXaWR0aHM6IG51bWJlcltdID0gW107XG4gICAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgY29uc3QgaGlkZGVuRGl2ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGhpZGRlbkRpdi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBoaWRkZW5EaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgaGlkZGVuRGl2LnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcblxuICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbkRpdik7XG4gICAgICBib2R5Um93cy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIHRkcz8uZm9yRWFjaCgodGQ6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZU9yUm93TWVudUNlbGwgPVxuICAgICAgICAgICAgdGQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtdHJlZXRhYmxlLXNlbGVjdGFibGUtY2VsbCcpIHx8XG4gICAgICAgICAgICB0ZC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbCcpO1xuXG4gICAgICAgICAgbGV0IHRkV2lkdGggPSA1NTtcbiAgICAgICAgICBpZiAoIWlzU2VsZWN0YWJsZU9yUm93TWVudUNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZFRkID0gdGQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2xvbmVkVGQpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjbG9uZWRUZCwgJ3dpZHRoJywgJ21pbi1jb250ZW50Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZFRkLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICAgICAgaGlkZGVuRGl2LmlubmVySFRNTCA9IGNsb25lZFRkLmlubmVySFRNTDtcbiAgICAgICAgICAgIGhpZGRlbkRpdi5zdHlsZS53aWR0aCA9ICdhdXRvJztcbiAgICAgICAgICAgIHRkV2lkdGggPSBoaWRkZW5EaXYub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBmcmFnbWVudC5yZW1vdmVDaGlsZChjbG9uZWRUZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGRXaWR0aHNbaWR4XSkgdGRXaWR0aHNbaWR4XSA9IDA7XG4gICAgICAgICAgdGRXaWR0aHNbaWR4XSA9IE1hdGgubWF4KHRkV2lkdGhzW2lkeF0sIHRkV2lkdGgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlbkRpdik7XG5cbiAgICAgIGlmICh0aFdpZHRocy5sZW5ndGggIT09IHRkV2lkdGhzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtYXhXaWR0aHMgPSB0aFdpZHRocy5tYXAoKHYsIGlkeCkgPT4gTWF0aC5tYXgodiwgdGRXaWR0aHNbaWR4XSkpO1xuICAgICAgbGV0IHN1bSA9IG1heFdpZHRocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgIGlmIChoYXNTZWxlY3RhYmxlQ2VsbCkge1xuICAgICAgICBzdW0gLT0gNTU7XG4gICAgICAgIG1heFdpZHRocy5zaGlmdCgpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1Jvd01lbnVDZWxsKSB7XG4gICAgICAgIHN1bSAtPSA1NTtcbiAgICAgICAgbWF4V2lkdGhzLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJjZW50YWdlcyA9IG1heFdpZHRocy5tYXAoKHYpID0+ICh2IC8gc3VtKSAqIDEwMCk7XG5cbiAgICAgIGhlYWRlckNlbGxzLmZvckVhY2goKHRoOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaGFzU2VsZWN0YWJsZUNlbGwgJiYgaWR4ID09PSAwKSB8fFxuICAgICAgICAgIChoYXNSb3dNZW51Q2VsbCAmJiBpZHggPT09IGhlYWRlckNlbGxzLmxlbmd0aCAtIDEpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGgsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aCxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBib2R5Um93cy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIHRkcz8uZm9yRWFjaCgodGQ6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChoYXNTZWxlY3RhYmxlQ2VsbCAmJiBpZHggPT09IDApIHx8XG4gICAgICAgICAgICAoaGFzUm93TWVudUNlbGwgJiYgaWR4ID09PSB0ZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGQsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgIHRkLFxuICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnb3BhY2l0eScsICcxJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgICAgICAgIGlmICh0aGlzLmJvcmRlcmVkKVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICAgICdib3JkZXItbGVmdC1jb2xvcicsXG4gICAgICAgICAgICAgICd2YXIoLS1jcHMtY29sb3ItbGluZS1taWQpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCB8fCB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KSByZXR1cm47XG5cbiAgICBjb25zdCB0cnMgPSB0aGlzLnByaW1lbmdUcmVlVGFibGU/LmVsPy5uYXRpdmVFbGVtZW50XG4gICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZS10Ym9keScpXG4gICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG5cbiAgICBpZiAoIXRycz8ubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKCF0cnNbMF0/Lm9mZnNldEhlaWdodCkgcmV0dXJuO1xuXG4gICAgbGV0IGggPSAwO1xuICAgIHRycy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgcmggPSAwO1xuICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICB0ZHM/LmZvckVhY2goKHRkOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRkLnN0eWxlLndpZHRoO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRkLCAnd2lkdGgnKTtcbiAgICAgICAgaWYgKHRkLm9mZnNldEhlaWdodCkgcmggPSBNYXRoLm1heChyaCwgdGQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0ZCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ3dpZHRoJywgd3ByZXYpO1xuICAgICAgfSk7XG4gICAgICBpZiAocmgpIHtcbiAgICAgICAgaCA9IGlkeCA9PT0gMCA/IHJoIDogTWF0aC5taW4oaCwgcmgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBoO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWluV2lkdGhPdmVyYWxsKCkge1xuICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgfHwgIXRoaXMubWluV2lkdGggfHwgIXRoaXMucHJpbWVuZ1RyZWVUYWJsZSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHRyZWVUYWJsZU1haW4gPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUnKTtcbiAgICBpZiAodHJlZVRhYmxlTWFpbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVNYWluLCAnb3ZlcmZsb3cnLCAnYXV0bycpO1xuICAgICAgY29uc3QgcGFnaW5hdG9yRWwgPSB0cmVlVGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoJy5wLXBhZ2luYXRvcicpO1xuICAgICAgaWYgKHBhZ2luYXRvckVsKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBhZ2luYXRvckVsLCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgICBjb25zdCBsb2FkaW5nT3ZlcmxheSA9IHRyZWVUYWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5wLXRyZWV0YWJsZS1sb2FkaW5nLW92ZXJsYXknXG4gICAgICApO1xuICAgICAgaWYgKGxvYWRpbmdPdmVybGF5KVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxvYWRpbmdPdmVybGF5LCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVdyYXBwZXIgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtd3JhcHBlcidcbiAgICAgICk7XG4gICAgaWYgKHNjcm9sbGFibGVXcmFwcGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuXG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXdyYXBwZXInXG4gICAgICAgICk7XG4gICAgICBpZiAodGFibGVXcmFwcGVyKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUYWJsZUhlYWRlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtaGVhZGVyJ1xuICAgICAgKTtcbiAgICBpZiAodHJlZVRhYmxlSGVhZGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVIZWFkZXIsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uV2luZG93UmVzaXplKCkge1xuICAgIC8vIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgIC8vICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3dpbmRvd1Jlc2l6ZURlYm91bmNlcik7XG4gICAgdGhpcy5fd2luZG93UmVzaXplRGVib3VuY2VyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBzdHlsZUNsYXNzKCkge1xuICAgIGNvbnN0IGNsYXNzZXNMaXN0ID0gW107XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc20nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWxnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUb29sYmFyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudG9vbGJhclNpemUpIHtcbiAgICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLXNtYWxsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItbm9ybWFsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmlwZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXN0cmlwZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9yZGVyZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzTGlzdC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLl9zY3JvbGxhYmxlQm9keSxcbiAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgICAgICBjb25zdCBpdGVtc0xlbiA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5zZXJpYWxpemVkVmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgICAgICBpZiAoaXRlbXNMZW4gPCAxKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICsgMSArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuX3Njcm9sbGFibGVCb2R5LCAnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9XG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCwgY3VySGVpZ2h0KSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBUcmVlVGFibGVTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBvbkVkaXRSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuZWRpdFJvd0J0bkNsaWNrZWQuZW1pdChub2RlKTtcbiAgfVxuXG4gIG9uUmVtb3ZlUm93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KFtub2RlXSk7XG4gIH1cblxuICB0b2dnbGVBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID1cbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA8IHRoaXMuY29sdW1ucy5sZW5ndGggPyB0aGlzLmNvbHVtbnMgOiBbXTtcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTGF6eUxvYWRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXp5TG9hZGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgb25Ob2RlQ29sbGFwc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVDb2xsYXBzZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvblNlbGVjdENvbHVtbihjb2w6IGFueSkge1xuICAgIGxldCByZXMgPSBbXSBhcyBhbnk7XG4gICAgaWYgKHRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2wpKSB7XG4gICAgICByZXMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoKHY6IGFueSkgPT4gIWlzRXF1YWwodiwgY29sKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKCh2OiBhbnkpID0+IGlzRXF1YWwodiwgbykpIHx8XG4gICAgICAgICAgaXNFcXVhbChjb2wsIG8pXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcy5wdXNoKG8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZXM7XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueSkge1xuICAgIGlmIChzZWxlY3Rpb24gJiYgIUFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSkgc2VsZWN0aW9uID0gW3NlbGVjdGlvbl07XG4gICAgdGhpcy5yb3dzU2VsZWN0ZWQuZW1pdChzZWxlY3Rpb24pO1xuICB9XG59XG4iLCI8cC10cmVlVGFibGVcbiAgI3ByaW1lbmdUcmVlVGFibGVcbiAgdHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnY3BzLXRyZWV0YWJsZS1sb2FkaW5nJzogbG9hZGluZyxcbiAgICAnY3BzLXRyZWV0YWJsZS1mbGV4JzogZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcsXG4gICAgJ2Nwcy10cmVldGFibGUtbm9udmlydHVhbCc6ICF2aXJ0dWFsU2Nyb2xsLFxuICAgICdjcHMtdHJlZXRhYmxlLWF1dG9sYXlvdXQtY2FsY2VkJzogYXV0b0xheW91dCAmJiBzY3JvbGxhYmxlXG4gIH1cIlxuICBbdmFsdWVdPVwiZGF0YVwiXG4gIFthdXRvTGF5b3V0XT1cImF1dG9MYXlvdXQgJiYgIXNjcm9sbGFibGVcIlxuICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgW3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemVcIlxuICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwie1xuICAgIG51bVRvbGVyYXRlZEl0ZW1zOiBudW1Ub2xlcmF0ZWRJdGVtcyxcbiAgICBhdXRvU2l6ZTogZmFsc2VcbiAgfVwiXG4gIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbbGF6eV09XCJsYXp5XCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICBjb21wYXJlU2VsZWN0aW9uQnk9XCJkZWVwRXF1YWxzXCJcbiAgW2xhenlMb2FkT25Jbml0XT1cImxhenlMb2FkT25Jbml0XCJcbiAgW3N0eWxlQ2xhc3NdPVwic3R5bGVDbGFzc1wiXG4gIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICBbdGFibGVTdHlsZUNsYXNzXT1cInRhYmxlU3R5bGVDbGFzc1wiXG4gIFtjdXN0b21Tb3J0XT1cImN1c3RvbVNvcnRcIlxuICBbc29ydE1vZGVdPVwic29ydE1vZGVcIlxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcbiAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgW2Fsd2F5c1Nob3dQYWdpbmF0b3JdPVwiYWx3YXlzU2hvd1BhZ2luYXRvclwiXG4gIFtyb3dzXT1cInJvd3NcIlxuICBbZmlyc3RdPVwiZmlyc3RcIlxuICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gIFtyZXNldFBhZ2VPblNvcnRdPVwicmVzZXRQYWdlT25Tb3J0XCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gb2Yge3RvdGFsUmVjb3Jkc31cIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gIChvbkZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZGVkKCRldmVudClcIlxuICAoc29ydEZ1bmN0aW9uKT1cIm9uU29ydEZ1bmN0aW9uKCRldmVudClcIlxuICAob25Ob2RlRXhwYW5kKT1cIm9uTm9kZUV4cGFuZGVkKCRldmVudClcIlxuICAob25Ob2RlQ29sbGFwc2UpPVwib25Ob2RlQ29sbGFwc2VkKCRldmVudClcIlxuICAob25Ob2RlU2VsZWN0KT1cIm9uTm9kZVNlbGVjdGVkKCRldmVudClcIlxuICAob25Ob2RlVW5zZWxlY3QpPVwib25Ob2RlVW5zZWxlY3RlZCgkZXZlbnQpXCI+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCIgKm5nSWY9XCJoYXNUb29sYmFyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvb2xiYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdG9vbGJhclRlbXBsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWxlZnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRvb2xiYXJJY29uXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItaWNvblwiPlxuICAgICAgICAgIDxjcHMtaWNvbiBbaWNvbl09XCJ0b29sYmFySWNvblwiIFtjb2xvcl09XCJ0b29sYmFySWNvbkNvbG9yXCI+PC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItdGl0bGVcIj57eyB0b29sYmFyVGl0bGUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHbG9iYWxGaWx0ZXJcIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1nbG9iYWwtZmlsdGVyXCI+XG4gICAgICAgICAgPGNwcy1pbnB1dFxuICAgICAgICAgICAgI2dsb2JhbEZpbHRlckNvbXBcbiAgICAgICAgICAgIHByZWZpeEljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25GaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwidG9vbGJhclNpemUgPT09ICdzbWFsbCcgPyAndW5kZXJsaW5lZCcgOiAnb3V0bGluZWQnXCJcbiAgICAgICAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCI+XG4gICAgICAgICAgPC9jcHMtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dSZW1vdmVCdG5PblNlbGVjdCAmJiBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItYnRuLW9uLXNlbGVjdFwiPlxuICAgICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJlbW92ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIGljb249XCJyZW1vdmVcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIFtpY29uXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdEljb25cIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FkZGl0aW9uYWxCdG5PblNlbGVjdCgpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBY3Rpb25CdG5cIiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb25CdG5UaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uQnRuSWNvblwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWN0aW9uQnRuKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29sdW1uc1RvZ2dsZUJ0biAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbSBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tY2hlY2tcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+U2hvdyBhbGwgY29sdW1uczwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJlbG9hZC1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGRhdGFSZWxvYWRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBzaXplPVwiMThcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGFSZWxvYWRCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIG5lc3RlZEhlYWRlclRlbXBsYXRlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAqbmdJZj1cIiFuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgIDwhLS0gPHRoIHN0eWxlPVwid2lkdGg6IDNyZW1cIiAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiPjwvdGg+IC0tPlxuICAgICAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNwc1RUSGRyU2VsZWN0YWJsZT48L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlclRlbXBsYXRlICYmIGNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGFibGVcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgICBbY3BzVFRDb2xTb3J0YWJsZV09XCJjb2xbY29sRmllbGROYW1lXVwiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc29ydGFibGVcIj5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICB7eyBjb2xbY29sSGVhZGVyTmFtZV0gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRoXG4gICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsXCJcbiAgICAgICAgKm5nSWY9XCJzaG93Um93TWVudSAmJiAoc2hvd1Jvd1JlbW92ZUJ1dHRvbiB8fCBzaG93Um93RWRpdEJ1dHRvbilcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBbY3BzVFRSb3dTZWxlY3RhYmxlXT1cInJvd05vZGVcIiAqbmdJZj1cInNlbGVjdGFibGVcIj48L3RkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3dOb2RlLFxuICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaSA9PT0gMFwiIFtjcHNUVFJvd1RvZ2dsZXJdPVwicm93Tm9kZVwiPlxuICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbFtjb2xGaWVsZE5hbWVdXSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImkgPiAwXCI+e3sgcm93RGF0YVtjb2xbY29sRmllbGROYW1lXV0gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwic2hvd1Jvd01lbnUgJiYgKHNob3dSb3dSZW1vdmVCdXR0b24gfHwgc2hvd1Jvd0VkaXRCdXR0b24pXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIlxuICAgICAgICAgIFtzaG93Um93UmVtb3ZlQnV0dG9uXT1cInNob3dSb3dSZW1vdmVCdXR0b25cIlxuICAgICAgICAgIFtzaG93Um93RWRpdEJ1dHRvbl09XCJzaG93Um93RWRpdEJ1dHRvblwiPlxuICAgICAgICA8L3RhYmxlLXJvdy1tZW51PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgPHRyPlxuICAgICAgPHRkXG4gICAgICAgIGNvbHNwYW49XCIxMDBcIlxuICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlRG91YmxlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtdHJlZVRhYmxlPlxuIl19