verben-workflow-ui 0.5.40 → 0.5.42

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.
@@ -1,4 +1,4 @@
1
- import { Component, viewChildren } from '@angular/core';
1
+ import { Component, input, viewChildren } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { ObjectState, TaskStatus } from 'verben-workflow-ui/src/lib/models';
4
4
  import { BaseDataViewComponent } from 'verben-workflow-ui/src/lib/shared';
@@ -17,6 +17,7 @@ import * as i6 from "./tasks.form.component";
17
17
  export class TasksComponent extends BaseDataViewComponent {
18
18
  cdr;
19
19
  taskFacade;
20
+ user = input();
20
21
  config = {
21
22
  dataSource: [], // Populate from service
22
23
  columns: columns, // Your existing column definitions
@@ -85,7 +86,7 @@ export class TasksComponent extends BaseDataViewComponent {
85
86
  }
86
87
  loadInitialData() {
87
88
  try {
88
- this.taskFacade.loadRequests();
89
+ this.taskFacade.loadRequests(this.user());
89
90
  }
90
91
  catch (error) {
91
92
  // Handle error
@@ -218,7 +219,7 @@ export class TasksComponent extends BaseDataViewComponent {
218
219
  await this.taskFacade.addRequest(payload);
219
220
  }
220
221
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TaskFacade }], target: i0.ɵɵFactoryTarget.Component });
221
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TasksComponent, selector: "lib-tasks", providers: [TasksService, TaskFacade, TaskState], viewQueries: [{ propertyName: "popups", predicate: ["popup"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of tableRowActions; track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(row)\" dropdown-trigger class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <!-- <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down> -->\n @if (\n item.label === 'Pick Task'\n ) {\n <verben-drop-down label=\"Stages\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Stage\"\n [options]=\"currentTask?.FullStages || []\" id=\"stages\" optionLabel=\"Name\"\n [(ngModel)]=\"selectedStageCode\" class=\"form-control\">\n </verben-drop-down>\n } @else {\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Actor\" [(options)]=\"nextActors\"\n id=\"actors\" optionLabel=\"Name\" optionValue=\"Identifier\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n }\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(row, popup)\" class=\"text-xs w-full\" bgColor=\"#FFE681\"\n textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\" pd=\"10px 20px\" width=\"100%\"\n height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'#000'\" [backgroundColor]=\"'#D3D3D3'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger\n class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of tableRowActions; track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(cardItem.data)\" dropdown-trigger\n class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <!-- <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down> -->\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Actor\" [(options)]=\"nextActors\" id=\"actors\"\n optionLabel=\"Name\" optionValue=\"Identifier\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(cardItem.data, popup)\" class=\"text-xs w-full\"\n bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\"\n pd=\"10px 20px\" width=\"100%\" height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i3.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i6.TasksFormComponent, selector: "tasks-form", inputs: ["currentData"], outputs: ["onTaskFormSave", "onSave"] }] });
222
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TasksComponent, selector: "lib-tasks", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, providers: [TasksService, TaskFacade, TaskState], viewQueries: [{ propertyName: "popups", predicate: ["popup"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view #vdv [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle: true,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\" (stateChange)=\"onStateChange($event)\">\n <div table-content>\n <lib-data-table [data]=\"data()\" [columns]=\"config.columns\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/task-history', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view history</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"workflow\">\n <ng-template #cell let-value>\n <a [routerLink]=\"['/workflow/workflows', value]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\">view Workflow</a>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of tableRowActions; track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\" [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(row)\" dropdown-trigger class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <!-- <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down> -->\n @if (\n item.label === 'Pick Task'\n ) {\n <verben-drop-down label=\"Stages\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Stage\"\n [options]=\"currentTask?.FullStages || []\" id=\"stages\" optionLabel=\"Name\"\n [(ngModel)]=\"selectedStageCode\" class=\"form-control\">\n </verben-drop-down>\n } @else {\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\" [multiselect]=\"false\"\n [filter]=\"true\" [showClear]=\"true\" placeholder=\"Select Actor\" [(options)]=\"nextActors\"\n id=\"actors\" optionLabel=\"Name\" optionValue=\"Identifier\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n }\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(row, popup)\" class=\"text-xs w-full\" bgColor=\"#FFE681\"\n textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\" pd=\"10px 20px\" width=\"100%\"\n height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" (loadMoreClick)=\"loadMore()\" #vdcv dataId=\"Id\" border=\"5px\"\n [cardDataList]=\"cardData()\" rbgColor=\"#f5f6f9\" mg=\"20px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"Code\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData()\">\n <ng-template #card let-cardItem>\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\" class=\"flex\">\n <div (click)=\"currentData = vdcv.onItemClick(cardItem)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n cardItem.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"flex flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n cardItem.title\n }}</span>\n <p class=\"flex items-center\">\n <!-- <label for=\"phone\" class=\"text-[10px] font-light\">Current Actors:</label> -->\n @if (cardItem.data.CurrentActors && cardItem.data.CurrentActors.length > 0) {\n @if (cardItem.data.CurrentActors.length === 1) {\n <span id=\"phone\" class=\"text-sm\">{{ cardItem.data.CurrentActors[0].Identifier }}</span>\n } @else {\n <verben-tooltip [top]=\"'0px'\" [textColor]=\"'#000'\" [backgroundColor]=\"'#D3D3D3'\" [left]=\"'0'\"\n [tooltipContent]=\"actorsTooltipTemplate\" #actorsTooltip>\n <span id=\"phone\" class=\"text-sm cursor-pointer\">\n {{ cardItem.data.CurrentActors[0].Identifier }} and {{ cardItem.data.CurrentActors.length\n - 1 }} others\n </span>\n </verben-tooltip>\n\n <ng-template #actorsTooltipTemplate>\n <div class=\"p-2\">\n <p class=\"text-xs font-semibold mb-1\">Current Actors:</p>\n <ul class=\"list-disc list-inside\">\n @for (actor of cardItem.data.CurrentActors; track actor.Identifier) {\n <li class=\"text-xs\">{{ actor.Identifier }}</li>\n }\n </ul>\n </div>\n </ng-template>\n }\n } @else {\n <span id=\"phone\" class=\"text-sm text-gray-400\">No actors assigned</span>\n }\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n cardItem.data.Code\n }}</span>\n\n <div (click)=\"$event.stopPropagation();\" class=\"flex items-end gap-4\">\n <a [routerLink]=\"[\n '/workflow/task-history',\n cardItem.data.Code\n ]\" routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs relative z-10\">view\n history</a>\n\n <verben-pop-Up #popup [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"onPopupToggled($event, popup)\">\n <div dropdown-trigger\n class=\"cursor-pointer p-2 -m-2 inline-flex items-center justify-center\">\n <verben-svg icon=\"dots\" [width]=\"3\" [height]=\"18\" class=\"w-auto\"></verben-svg>\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @for (item of tableRowActions; track item.label) {\n\n <verben-pop-Up #popup2 [customStyles]=\"{ 'z-index': '99' }\" [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\" (dropdownOpenChange)=\"handlePopupClose($event)\">\n <div (click)=\"item.action(cardItem.data)\" dropdown-trigger\n class=\"cursor-pointer py-2 px-3 hover:bg-primary\">\n {{ item.label }}\n </div>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n <div style=\"width: 16rem\">\n <div class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g opacity=\"0.6\">\n <path\n d=\"M6.74649 8.00338C6.91483 8.1347 7.0252 8.20455 7.11531 8.29396C7.98846 9.16222 8.85742 10.0347 9.72917 10.905C9.87167 11.0475 9.99391 11.1921 9.99321 11.4129C9.99251 11.6462 9.89472 11.8152 9.69564 11.9256C9.49307 12.038 9.2926 12.0206 9.10469 11.8899C9.03833 11.8438 8.98175 11.7845 8.92378 11.7272C7.85574 10.6592 6.79678 9.58203 5.71477 8.52867C5.3711 8.19407 5.38437 7.79173 5.70779 7.47599C6.7884 6.42123 7.84875 5.34551 8.91539 4.27607C9.11377 4.07769 9.32054 3.92262 9.623 4.04137C9.97924 4.18107 10.112 4.58901 9.89472 4.90335C9.82976 4.99765 9.74174 5.07728 9.66002 5.1597C8.80642 6.01469 7.95283 6.86968 7.09645 7.72257C7.01472 7.8043 6.91553 7.86856 6.74579 8.00408L6.74649 8.00338Z\"\n fill=\"black\" />\n </g>\n </svg>\n\n <h3 class=\"text-sm font-medium\">Select Assignee</h3>\n </div>\n\n <div class=\"grid gap-2 max-h-96 overflow-y-auto p-2\">\n <!-- <verben-drop-down\n label=\"Action\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Action\"\n [(options)]=\"nextActions\"\n id=\"actions\"\n optionLabel=\"Name\"\n [ngModel]=\"selectedAction | async\"\n (ngModelChange)=\"selectedAction.next($event)\"\n class=\"form-control\"\n >\n </verben-drop-down> -->\n\n <verben-drop-down label=\"Actors\" styleClass=\"w-full\" width=\"100%\"\n [multiselect]=\"false\" [filter]=\"true\" [showClear]=\"true\"\n placeholder=\"Select Actor\" [(options)]=\"nextActors\" id=\"actors\"\n optionLabel=\"Name\" optionValue=\"Identifier\" [(ngModel)]=\"recipientCode\"\n class=\"form-control\">\n </verben-drop-down>\n\n <textarea [(ngModel)]=\"comment\" placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\" style=\"height: 8rem\"\n [cols]=\"8\"></textarea>\n\n <verbena-button [disable]=\"!comment\" [text]=\"activeActionType ?? ''\"\n (click)=\"handleAction(cardItem.data, popup)\" class=\"text-xs w-full\"\n bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\" fontSize=\"14px\"\n pd=\"10px 20px\" width=\"100%\" height=\"32px\">\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n </div>\n </verben-pop-Up>\n\n @if (item.divider) {\n <hr class=\"bg-[#FFE681] h-1 rounded-xl border-0\" />\n } }\n </div>\n </verben-pop-Up>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <!-- <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form> -->\n <tasks-form [currentData]=\"currentData\" (switchView)=\"vdv.toggleView()\"\n (onSave)=\"onSave($event)\"></tasks-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true\n }\">\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <lib-data-columns [columns]=\"config.columns\" (columnsUpdated)=\"onColumnsUpdated($event)\"></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter [border]=\"'1px solid rgba(212, 160, 7, 1)'\" borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort [columns]=\"config.columns\" [data]=\"data()\" (sortApplied)=\"onSortUpdated($event)\"></lib-data-sort>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <!-- <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData().length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links text-[#3479E9] underline\">\n Load more\n </button>\n </div>\n </div>\n</div>\n", styles: [".view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "useVirtualScroll", "virtualScrollItemSize", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "showEditIcon", "onItemClick", "onCardChildClick"], outputs: ["editClicked", "loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data", "dataFetchUrl", "dataQueryParameters"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i3.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i3.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i3.DataColumnsComponent, selector: "lib-data-columns", inputs: ["columns", "enableDragAndDrop", "maxVisibleItems"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.DataSortComponent, selector: "lib-data-sort", inputs: ["columns", "data", "enableDragAndDrop"], outputs: ["sortApplied", "resetFilter"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "component", type: i6.TasksFormComponent, selector: "tasks-form", inputs: ["currentData"], outputs: ["onTaskFormSave", "onSave"] }] });
222
223
  }
223
224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TasksComponent, decorators: [{
224
225
  type: Component,
@@ -235,4 +236,4 @@ var ActionType;
235
236
  ActionType["UnfollowTask"] = "UnfollowTask";
236
237
  ActionType["SkipTo"] = "SkipTo";
237
238
  })(ActionType || (ActionType = {}));
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFhLFlBQVksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQVMsV0FBVyxFQUFRLFVBQVUsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUscUJBQXFCLEVBQWtCLE1BQU0sbUNBQW1DLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyxjQUFlLFNBQVEscUJBQTJCO0lBNER6QztJQUFnQztJQTNEcEQsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtRQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLG1DQUFtQztRQUNyRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekIsUUFBUSxFQUFFLEtBQUs7WUFDZixL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LElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBZTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBbUI7UUFDOUIsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSTtZQUN6QixHQUFHLElBQUk7U0FDQSxDQUFDO1FBQ1YsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO3dHQXZOVSxjQUFjOzRGQUFkLGNBQWMsb0NBRmQsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxxSkNmbEQsODNvQkFtWEE7OzRGRGxXYSxjQUFjO2tCQU4xQixTQUFTOytCQUNFLFdBQVcsYUFHVixDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDOztBQTRObEQsSUFBSyxVQVNKO0FBVEQsV0FBSyxVQUFVO0lBQ2IsbUNBQXFCLENBQUE7SUFDckIsdUNBQXlCLENBQUE7SUFDekIsbUNBQXFCLENBQUE7SUFDckIsK0JBQWlCLENBQUE7SUFDakIsbUNBQXFCLENBQUE7SUFDckIsdUNBQXlCLENBQUE7SUFDekIsMkNBQTZCLENBQUE7SUFDN0IsK0JBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVRJLFVBQVUsS0FBVixVQUFVLFFBU2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBRdWVyeUxpc3QsIHZpZXdDaGlsZHJlbiwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhcmREYXRhLCBWZXJiZW5Qb3BVcENvbXBvbmVudCB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBBY3RvciwgT2JqZWN0U3RhdGUsIFRhc2ssIFRhc2tTdGF0dXMsIFdvcmtmbG93QWN0aW9uIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCwgRGF0YVZpZXdDb25maWcgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zaGFyZWQnO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vdGFza3MuY29sdW1ucyc7XG5pbXBvcnQgeyBUYXNrRmFjYWRlIH0gZnJvbSAnLi90YXNrcy5mYWNhZGUnO1xuaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSAnLi90YXNrcy5tb2RlbHMnO1xuaW1wb3J0IHsgVGFza3NTZXJ2aWNlIH0gZnJvbSAnLi90YXNrcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhc2tTdGF0ZSB9IGZyb20gJy4vdGFza3Muc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFza3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFza3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFza3MuY29tcG9uZW50LmNzcycsXG4gIHByb3ZpZGVyczogW1Rhc2tzU2VydmljZSwgVGFza0ZhY2FkZSwgVGFza1N0YXRlXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFza3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0YVZpZXdDb21wb25lbnQ8VGFzaz4ge1xuICBjb25maWc6IERhdGFWaWV3Q29uZmlnPFRhc2s+ID0ge1xuICAgIGRhdGFTb3VyY2U6IFtdLCAvLyBQb3B1bGF0ZSBmcm9tIHNlcnZpY2VcbiAgICBjb2x1bW5zOiBjb2x1bW5zLCAvLyBZb3VyIGV4aXN0aW5nIGNvbHVtbiBkZWZpbml0aW9uc1xuICAgIGNhcmREYXRhTWFwcGVyOiAodGFzaykgPT4gKHtcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiB0YXNrLk5hbWUsXG4gICAgICBkYXRhOiB0YXNrLFxuICAgICAgYm9keTogW1xuICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiB0YXNrLk5hbWUgfSxcbiAgICAgICAgeyB0aXRsZTogJ1N0YXR1cycsIHZhbHVlOiB0YXNrLlN0YXR1cyB9LFxuICAgICAgXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9KSxcbiAgICBvbkRldGFpbFZpZXc6ICh0YXNrKSA9PiB7XG4gICAgICAvLyBDdXN0b20gZGV0YWlsIHZpZXcgbG9naWNcbiAgICB9LFxuICB9O1xuICBwb3B1cHMgPSB2aWV3Q2hpbGRyZW48VmVyYmVuUG9wVXBDb21wb25lbnQ+KCdwb3B1cCcpO1xuXG4gIHNlbGVjdGVkVGFza0NvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBhY3RpdmVBY3Rpb25UeXBlOiBBY3Rpb25UeXBlIHwgbnVsbCA9IG51bGw7XG4gIGNvbW1lbnQ6IHN0cmluZyA9ICcnO1xuICBpc01vZGFsVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRhYmxlUm93QWN0aW9ucyA9IFtcbiAgICAvLyB7IGxhYmVsOiAnUGljayBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgLy8geyBsYWJlbDogJ1JlbGVhc2UgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdGb2xsb3cgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogdHJ1ZSB9LFxuICAgIC8vIHsgbGFiZWw6ICdQYXNzIE9uJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgLy8geyBsYWJlbDogJ1Bhc3MgQmFjaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUmUtQXNzaWduJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5SZUFzc2lnbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFza0NvZGUsIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSk7XG4gICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICB0aGlzLm5leHRBY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy50YXNrRmFjYWRlLmxvYWROZXh0QWN0b3JzKGRhdGEuQ29kZSwgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBpZiAodGhpcy5wb3B1cCgpICYmICF0aGlzLnBvcHVwKCk/LmRyb3Bkb3duT3Blbikge1xuICAgICAgICAgIC8vICAgdGhpcy5wb3B1cCgpPy50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogdHJ1ZSxcbiAgICB9LFxuICAgIHsgbGFiZWw6ICdWaWV3IE9wZXJhdGlvbicsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHsgfSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgXTtcblxuICBuZXh0QWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXSA9IFtdO1xuICBuZXh0QWN0b3JzOiBBY3RvcltdID0gW107XG5cbiAgcmVjaXBpZW50Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkQWN0aW9uOiBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50VGFzazogVGFzayB8IG51bGwgPSBudWxsO1xuXG4gIHNlbGVjdGVkU3RhZ2VDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdGFza0ZhY2FkZTogVGFza0ZhY2FkZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnRhc2tGYWNhZGUuZ2V0UmVxdWVzdHMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgIH0pO1xuXG4gICAgLy8gdGhpcy50YXNrRmFjYWRlLmdldE5leHRBY3Rpb25zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgIC8vICAgdGhpcy5uZXh0QWN0aW9ucyA9IGRhdGE7XG4gICAgLy8gfSk7XG5cbiAgICB0aGlzLnRhc2tGYWNhZGUuZ2V0TmV4dEFjdG9ycyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMubmV4dEFjdG9ycyA9IGRhdGE7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkSW5pdGlhbERhdGEoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza0ZhY2FkZS5sb2FkUmVxdWVzdHMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9wdXBDbG9zZShldmVudDogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKCdDbG9zaW5nLi4uJywgZXZlbnQpO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBvblBvcHVwVG9nZ2xlZChpc09wZW46IGJvb2xlYW4sIGN1cnJlbnRQb3B1cDogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLnBvcHVwcygpLmZvckVhY2goKHBvcHVwKSA9PiB7XG4gICAgICAgIGlmIChwb3B1cCAhPT0gY3VycmVudFBvcHVwICYmIHBvcHVwLmRyb3Bkb3duT3Blbikge1xuICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZVBvcHVwQ2xvc2UoIWlzT3Blbik7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24odGFzazogVGFzaywgcG9wdXA6IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3RpdmVBY3Rpb25UeXBlO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5SZUFzc2lnbjpcbiAgICAgICAgdGhpcy50YXNrRmFjYWRlXG4gICAgICAgICAgLnJlQXNzaWduKHRhc2ssIHRoaXMuY29tbWVudCwgdGhpcy5yZWNpcGllbnRDb2RlID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubmV4dEFjdG9ycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBpY2tUYXNrOlxuICAgICAgICB0aGlzLnRhc2tGYWNhZGVcbiAgICAgICAgICAucGlja1Rhc2sodGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnJlY2lwaWVudENvZGUgPz8gdW5kZWZpbmVkLCB0aGlzLnNlbGVjdGVkU3RhZ2VDb2RlID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubmV4dEFjdG9ycyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGFnZUNvZGUgPSBudWxsO1xuICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuU2tpcFRvOlxuICAgICAgICAvLyBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbiBmb3IgU2tpcDonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUYXNrIGZvciBTa2lwOicsIHRhc2spO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ29tbWVudCBmb3IgU2tpcDonLCB0aGlzLmNvbW1lbnQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUmVjaXBpZW50IENvZGUgZm9yIFNraXA6JywgdGhpcy5yZWNpcGllbnRDb2RlKTtcbiAgICAgICAgLy8gaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgIC8vICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLy8gICAgIC5za2lwVG8oXG4gICAgICAgIC8vICAgICAgIHRhc2suQ3VycmVudFN0YWdlc1swXSxcbiAgICAgICAgLy8gICAgICAgc2VsZWN0ZWRBY3Rpb24uVG9TdGFnZSxcbiAgICAgICAgLy8gICAgICAgdGFzayxcbiAgICAgICAgLy8gICAgICAgdGhpcy5jb21tZW50LFxuICAgICAgICAvLyAgICAgICB0aGlzLnJlY2lwaWVudENvZGVcbiAgICAgICAgLy8gICAgIClcbiAgICAgICAgLy8gICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgIC8vICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgLy8gICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgLy8gICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAvLyAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgIHZhciBuZXdJdGVtOiBUYXNrID0gbmV3IFRhc2tNb2RlbCh7XG4gICAgICAgICAgV29ya2Zsb3dDb2RlOiAnJyxcbiAgICAgICAgICBTdGF0dXM6IFRhc2tTdGF0dXMuQWN0aXZlLFxuICAgICAgICAgIEZsb3dhYmxlOiAnJyxcbiAgICAgICAgICBGbG93YWJsZURhdGE6IG51bGwsXG4gICAgICAgICAgRmxvd2FibGVQYXRoOiAnJyxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiBbXSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBUYXNrO1xuICAgICAgICB0aGlzLnRhc2tGYWNhZGUuYWRkTmV3UmVxdWVzdChuZXdJdGVtKTtcbiAgICAgICAgLy8gY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAvLyAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgLy8gICB0aXRsZTogLFxuICAgICAgICAvLyAgIGRhdGE6IG5ld0dyb3VwLFxuICAgICAgICAvLyAgIGJvZHk6IFtdLFxuICAgICAgICAvLyAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3R3JvdXBdKTtcbiAgICAgICAgLy8gdGhpcy5jYXJkRGF0YS5wdXNoKGNhcmREYXRhKTtcbiAgICAgICAgLy8gdGhpcy51c2VyQ2FyZENsaWNrZWQoY2FyZERhdGEpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnZmlsdGVyJzpcbiAgICAgIC8vICAgdGhpcy5zaG93RmlsdGVyID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnc29ydCc6XG4gICAgICAvLyAgIHRoaXMuc2hvd1NvcnQgPSBldmVudC52YWx1ZTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyBjYXNlICdjb2x1bW4nOlxuICAgICAgLy8gICB0aGlzLnNob3dDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FyZERhdGFCeUlkZW50aWZpZXIoY29kZTogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhKCk/LmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhLmRhdGEuQ29kZSA9PT0gY29kZSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50YXNrRmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2F2ZShkYXRhOiBQYXJ0aWFsPFRhc2s+KSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIC4uLnRoaXMuY3VycmVudERhdGE/LmRhdGEsXG4gICAgICAuLi5kYXRhLFxuICAgIH0gYXMgVGFzaztcbiAgICBhd2FpdCB0aGlzLnRhc2tGYWNhZGUuYWRkUmVxdWVzdChwYXlsb2FkKTtcbiAgfVxufVxuXG5lbnVtIEFjdGlvblR5cGUge1xuICBQaWNrVGFzayA9ICdQaWNrVGFzaycsXG4gIFVuUGlja1Rhc2sgPSAnVW5QaWNrVGFzaycsXG4gIFJlQXNzaWduID0gJ1JlQXNzaWduJyxcbiAgUGFzc09uID0gJ1Bhc3NPbicsXG4gIFBhc3NCYWNrID0gJ1Bhc3NCYWNrJyxcbiAgRm9sbG93VGFzayA9ICdGb2xsb3dUYXNrJyxcbiAgVW5mb2xsb3dUYXNrID0gJ1VuZm9sbG93VGFzaycsXG4gIFNraXBUbyA9ICdTa2lwVG8nLFxufVxuIiwiPGRpdiBjbGFzcz1cInNwYWNlLXktOFwiPlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiB0cnVlLFxuICAgICAgaXNUb2dnbGU6IHRydWUsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8ZGl2IHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGUgW2RhdGFdPVwiZGF0YSgpXCIgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiaGlzdG9yeVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy90YXNrLWhpc3RvcnknLCB2YWx1ZV1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl1cIj52aWV3IGhpc3Rvcnk8L2E+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJ3b3JrZmxvd1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy93b3JrZmxvd3MnLCB2YWx1ZV1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl1cIj52aWV3IFdvcmtmbG93PC9hPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIiBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCIgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJvblBvcHVwVG9nZ2xlZCgkZXZlbnQsIHBvcHVwKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwLTIgLW0tMiBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZG90c1wiIFt3aWR0aF09XCIzXCIgW2hlaWdodF09XCIxOFwiIGNsYXNzPVwidy1hdXRvXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQtc21cIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgdGFibGVSb3dBY3Rpb25zOyB0cmFjayBpdGVtLmxhYmVsKSB7XG5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAyIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCIgW2N1c3RvbVN0eWxlc109XCJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGExMDc4MCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNXB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgfVwiIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwiaGFuZGxlUG9wdXBDbG9zZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJpdGVtLmFjdGlvbihyb3cpXCIgZHJvcGRvd24tdHJpZ2dlciBjbGFzcz1cImN1cnNvci1wb2ludGVyIHB5LTIgcHgtMyBob3ZlcjpiZy1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHJvdW5kZWQtc21cIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDE2cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlbiBoLTEyIHB4LTIgcHQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxnIG9wYWNpdHk9XCIwLjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02Ljc0NjQ5IDguMDAzMzhDNi45MTQ4MyA4LjEzNDcgNy4wMjUyIDguMjA0NTUgNy4xMTUzMSA4LjI5Mzk2QzcuOTg4NDYgOS4xNjIyMiA4Ljg1NzQyIDEwLjAzNDcgOS43MjkxNyAxMC45MDVDOS44NzE2NyAxMS4wNDc1IDkuOTkzOTEgMTEuMTkyMSA5Ljk5MzIxIDExLjQxMjlDOS45OTI1MSAxMS42NDYyIDkuODk0NzIgMTEuODE1MiA5LjY5NTY0IDExLjkyNTZDOS40OTMwNyAxMi4wMzggOS4yOTI2IDEyLjAyMDYgOS4xMDQ2OSAxMS44ODk5QzkuMDM4MzMgMTEuODQzOCA4Ljk4MTc1IDExLjc4NDUgOC45MjM3OCAxMS43MjcyQzcuODU1NzQgMTAuNjU5MiA2Ljc5Njc4IDkuNTgyMDMgNS43MTQ3NyA4LjUyODY3QzUuMzcxMSA4LjE5NDA3IDUuMzg0MzcgNy43OTE3MyA1LjcwNzc5IDcuNDc1OTlDNi43ODg0IDYuNDIxMjMgNy44NDg3NSA1LjM0NTUxIDguOTE1MzkgNC4yNzYwN0M5LjExMzc3IDQuMDc3NjkgOS4zMjA1NCAzLjkyMjYyIDkuNjIzIDQuMDQxMzdDOS45NzkyNCA0LjE4MTA3IDEwLjExMiA0LjU4OTAxIDkuODk0NzIgNC45MDMzNUM5LjgyOTc2IDQuOTk3NjUgOS43NDE3NCA1LjA3NzI4IDkuNjYwMDIgNS4xNTk3QzguODA2NDIgNi4wMTQ2OSA3Ljk1MjgzIDYuODY5NjggNy4wOTY0NSA3LjcyMjU3QzcuMDE0NzIgNy44MDQzIDYuOTE1NTMgNy44Njg1NiA2Ljc0NTc5IDguMDA0MDhMNi43NDY0OSA4LjAwMzM4WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPlNlbGVjdCBBc3NpZ25lZTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtMiBtYXgtaC05NiBvdmVyZmxvdy15LWF1dG8gcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cIm5leHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBY3Rpb24gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhYmVsID09PSAnUGljayBUYXNrJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93biBsYWJlbD1cIlN0YWdlc1wiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIiBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTdGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImN1cnJlbnRUYXNrPy5GdWxsU3RhZ2VzIHx8IFtdXCIgaWQ9XCJzdGFnZXNcIiBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU3RhZ2VDb2RlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJBY3RvcnNcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgd2lkdGg9XCIxMDAlXCIgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIiBbKG9wdGlvbnMpXT1cIm5leHRBY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdG9yc1wiIG9wdGlvbkxhYmVsPVwiTmFtZVwiIG9wdGlvblZhbHVlPVwiSWRlbnRpZmllclwiIFsobmdNb2RlbCldPVwicmVjaXBpZW50Q29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cImNvbW1lbnRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBwLTEgdGV4dC14cyBib3JkZXIgYm9yZGVyLXByaW1hcnkgcm91bmRlZC1tZFwiIHN0eWxlPVwiaGVpZ2h0OiA4cmVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZGlzYWJsZV09XCIhY29tbWVudFwiIFt0ZXh0XT1cImFjdGl2ZUFjdGlvblR5cGUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHJvdywgcG9wdXApXCIgY2xhc3M9XCJ0ZXh0LXhzIHctZnVsbFwiIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBmb250U2l6ZT1cIjE0cHhcIiBwZD1cIjEwcHggMjBweFwiIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjMycHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlQWN0aW9uVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICA8c3Ryb25nPkFjdGlvbnM8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXcgYm9yZGVyUmFkaXVzPVwiMTJweFwiIChsb2FkTW9yZUNsaWNrKT1cImxvYWRNb3JlKClcIiAjdmRjdiBkYXRhSWQ9XCJJZFwiIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiIG1nPVwiMjBweFwiPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhICN2bGNkIFtwYXJlbnRdPVwidmRjdlwiIGRhdGFJZD1cIkNvZGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YSgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWNhcmRJdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soY2FyZEl0ZW0pXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGNhcmRJdGVtKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHktMiBweC00IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZEl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGZvcj1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0XCI+Q3VycmVudCBBY3RvcnM6PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzICYmIGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzWzBdLklkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXAgW3RvcF09XCInMHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCIgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIiBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJhY3RvcnNUb29sdGlwVGVtcGxhdGVcIiAjYWN0b3JzVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LXNtIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnNbMF0uSWRlbnRpZmllciB9fSBhbmQge3sgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIH19IG90aGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjdG9yc1Rvb2x0aXBUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCBtYi0xXCI+Q3VycmVudCBBY3RvcnM6PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1kaXNjIGxpc3QtaW5zaWRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdG9yIG9mIGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9yczsgdHJhY2sgYWN0b3IuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LXhzXCI+e3sgYWN0b3IuSWRlbnRpZmllciB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTQwMFwiPk5vIGFjdG9ycyBhc3NpZ25lZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZm9yPVwicm9sZVwiIGNsYXNzPVwiZm9udC1saWdodFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93b3JrZmxvdy90YXNrLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZEl0ZW0uZGF0YS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdIHRleHQteHMgcmVsYXRpdmUgei0xMFwiPnZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cCBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIiBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVN0eWxlc109XCJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGExMDc4MCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNXB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgfVwiIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwib25Qb3B1cFRvZ2dsZWQoJGV2ZW50LCBwb3B1cClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcC0yIC1tLTIgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiZG90c1wiIFt3aWR0aF09XCIzXCIgW2hlaWdodF09XCIxOFwiIGNsYXNzPVwidy1hdXRvXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSByb3VuZGVkLXNtXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgdGFibGVSb3dBY3Rpb25zOyB0cmFjayBpdGVtLmxhYmVsKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cDIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCIgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJoYW5kbGVQb3B1cENsb3NlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaXRlbS5hY3Rpb24oY2FyZEl0ZW0uZGF0YSlcIiBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBweS0yIHB4LTMgaG92ZXI6YmctcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSByb3VuZGVkLXNtXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDE2cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuIGgtMTIgcHgtMiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgb3BhY2l0eT1cIjAuNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02Ljc0NjQ5IDguMDAzMzhDNi45MTQ4MyA4LjEzNDcgNy4wMjUyIDguMjA0NTUgNy4xMTUzMSA4LjI5Mzk2QzcuOTg4NDYgOS4xNjIyMiA4Ljg1NzQyIDEwLjAzNDcgOS43MjkxNyAxMC45MDVDOS44NzE2NyAxMS4wNDc1IDkuOTkzOTEgMTEuMTkyMSA5Ljk5MzIxIDExLjQxMjlDOS45OTI1MSAxMS42NDYyIDkuODk0NzIgMTEuODE1MiA5LjY5NTY0IDExLjkyNTZDOS40OTMwNyAxMi4wMzggOS4yOTI2IDEyLjAyMDYgOS4xMDQ2OSAxMS44ODk5QzkuMDM4MzMgMTEuODQzOCA4Ljk4MTc1IDExLjc4NDUgOC45MjM3OCAxMS43MjcyQzcuODU1NzQgMTAuNjU5MiA2Ljc5Njc4IDkuNTgyMDMgNS43MTQ3NyA4LjUyODY3QzUuMzcxMSA4LjE5NDA3IDUuMzg0MzcgNy43OTE3MyA1LjcwNzc5IDcuNDc1OTlDNi43ODg0IDYuNDIxMjMgNy44NDg3NSA1LjM0NTUxIDguOTE1MzkgNC4yNzYwN0M5LjExMzc3IDQuMDc3NjkgOS4zMjA1NCAzLjkyMjYyIDkuNjIzIDQuMDQxMzdDOS45NzkyNCA0LjE4MTA3IDEwLjExMiA0LjU4OTAxIDkuODk0NzIgNC45MDMzNUM5LjgyOTc2IDQuOTk3NjUgOS43NDE3NCA1LjA3NzI4IDkuNjYwMDIgNS4xNTk3QzguODA2NDIgNi4wMTQ2OSA3Ljk1MjgzIDYuODY5NjggNy4wOTY0NSA3LjcyMjU3QzcuMDE0NzIgNy44MDQzIDYuOTE1NTMgNy44Njg1NiA2Ljc0NTc5IDguMDA0MDhMNi43NDY0OSA4LjAwMzM4WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJibGFja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEFzc2lnbmVlPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtMiBtYXgtaC05NiBvdmVyZmxvdy15LWF1dG8gcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwibmV4dEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZEFjdGlvbi5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+IC0tPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duIGxhYmVsPVwiQWN0b3JzXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCIgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBBY3RvclwiIFsob3B0aW9ucyldPVwibmV4dEFjdG9yc1wiIGlkPVwiYWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIiBvcHRpb25WYWx1ZT1cIklkZW50aWZpZXJcIiBbKG5nTW9kZWwpXT1cInJlY2lwaWVudENvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJjb21tZW50XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBDb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBwLTEgdGV4dC14cyBib3JkZXIgYm9yZGVyLXByaW1hcnkgcm91bmRlZC1tZFwiIHN0eWxlPVwiaGVpZ2h0OiA4cmVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sc109XCI4XCI+PC90ZXh0YXJlYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gW2Rpc2FibGVdPVwiIWNvbW1lbnRcIiBbdGV4dF09XCJhY3RpdmVBY3Rpb25UeXBlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKGNhcmRJdGVtLmRhdGEsIHBvcHVwKVwiIGNsYXNzPVwidGV4dC14cyB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCIgdGV4dENvbG9yPVwiIzQwNDA0MFwiIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBmb250U2l6ZT1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMzJweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmRpdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtc21cIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2lJdGVtIG9mIGl0ZW0uYm9keTsgdHJhY2sgY2lJdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZm9udC1saWdodCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBjaUl0ZW0udGl0bGUgfX06PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiPnt7IGNpSXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8IS0tIDxsaWItdXNlci1yZXF1ZXN0LWZvcm1cbiAgICAgICAgICAgICAgW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgKHN3aXRjaFZpZXcpPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgIChvbkFwcHJvdmFsKT1cIm9uQXBwcm92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2xpYi11c2VyLXJlcXVlc3QtZm9ybT4gLS0+XG4gICAgICAgICAgICA8dGFza3MtZm9ybSBbY3VycmVudERhdGFdPVwiY3VycmVudERhdGFcIiAoc3dpdGNoVmlldyk9XCJ2ZHYudG9nZ2xlVmlldygpXCJcbiAgICAgICAgICAgICAgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiPjwvdGFza3MtZm9ybT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZmxleCBnYXAtMiBpdGVtcy1jZW50ZXInOiB0cnVlLFxuICAgICAgICAgICAgICAnanVzdGlmeS1lbmQnOiB0cnVlXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICBbcGRdPVwiJzkuNzlweCAzNy4yOHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgge3tcbiAgICAgICAgICAgICAgICB2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgPyAnZmxleC0xJyA6ICcnXG4gICAgICAgICAgICAgIH19IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWNvbHVtbnMgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCI+PC9saWItZGF0YS1jb2x1bW5zPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCIgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQyMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1zb3J0IFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW2RhdGFdPVwiZGF0YSgpXCIgKHNvcnRBcHBsaWVkKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiPjwvbGliLWRhdGEtc29ydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhKClcIiAoZXhwb3J0RGF0YUV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1kYXRhLWV4cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuXG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIj5cbiAgICAgICAgTG9hZCBtb3JlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2tzL3Rhc2tzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQVMsV0FBVyxFQUFRLFVBQVUsRUFBa0IsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUscUJBQXFCLEVBQWtCLE1BQU0sbUNBQW1DLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyxjQUFlLFNBQVEscUJBQTJCO0lBNkR6QztJQUFnQztJQTVEcEQsSUFBSSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3ZCLE1BQU0sR0FBeUI7UUFDN0IsVUFBVSxFQUFFLEVBQUUsRUFBRSx3QkFBd0I7UUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxtQ0FBbUM7UUFDckQsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLEVB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LEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFlO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFtQjtRQUM5QixNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJO1lBQ3pCLEdBQUcsSUFBSTtTQUNBLENBQUM7UUFDVixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7d0dBeE5VLGNBQWM7NEZBQWQsY0FBYyxxS0FGZCxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLHFKQ2ZsRCw4M29CQW1YQTs7NEZEbFdhLGNBQWM7a0JBTjFCLFNBQVM7K0JBQ0UsV0FBVyxhQUdWLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7O0FBNk5sRCxJQUFLLFVBU0o7QUFURCxXQUFLLFVBQVU7SUFDYixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QixtQ0FBcUIsQ0FBQTtJQUNyQiwrQkFBaUIsQ0FBQTtJQUNqQixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QiwyQ0FBNkIsQ0FBQTtJQUM3QiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVEksVUFBVSxLQUFWLFVBQVUsUUFTZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGlucHV0LCB2aWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FyZERhdGEsIFZlcmJlblBvcFVwQ29tcG9uZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IEFjdG9yLCBPYmplY3RTdGF0ZSwgVGFzaywgVGFza1N0YXR1cywgV29ya2Zsb3dBY3Rpb24gfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZURhdGFWaWV3Q29tcG9uZW50LCBEYXRhVmlld0NvbmZpZyB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NoYXJlZCc7XG5pbXBvcnQgeyBjb2x1bW5zIH0gZnJvbSAnLi90YXNrcy5jb2x1bW5zJztcbmltcG9ydCB7IFRhc2tGYWNhZGUgfSBmcm9tICcuL3Rhc2tzLmZhY2FkZSc7XG5pbXBvcnQgeyBUYXNrTW9kZWwgfSBmcm9tICcuL3Rhc2tzLm1vZGVscyc7XG5pbXBvcnQgeyBUYXNrc1NlcnZpY2UgfSBmcm9tICcuL3Rhc2tzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFza1N0YXRlIH0gZnJvbSAnLi90YXNrcy5zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YXNrcycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90YXNrcy5jb21wb25lbnQuY3NzJyxcbiAgcHJvdmlkZXJzOiBbVGFza3NTZXJ2aWNlLCBUYXNrRmFjYWRlLCBUYXNrU3RhdGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrc0NvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRhVmlld0NvbXBvbmVudDxUYXNrPiB7XG4gIHVzZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8VGFzaz4gPSB7XG4gICAgZGF0YVNvdXJjZTogW10sIC8vIFBvcHVsYXRlIGZyb20gc2VydmljZVxuICAgIGNvbHVtbnM6IGNvbHVtbnMsIC8vIFlvdXIgZXhpc3RpbmcgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY2FyZERhdGFNYXBwZXI6ICh0YXNrKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHRhc2suTmFtZSxcbiAgICAgIGRhdGE6IHRhc2ssXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHRhc2suTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IHRhc2suU3RhdHVzIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHRhc2spID0+IHtcbiAgICAgIC8vIEN1c3RvbSBkZXRhaWwgdmlldyBsb2dpY1xuICAgIH0sXG4gIH07XG4gIHBvcHVwcyA9IHZpZXdDaGlsZHJlbjxWZXJiZW5Qb3BVcENvbXBvbmVudD4oJ3BvcHVwJyk7XG5cbiAgc2VsZWN0ZWRUYXNrQ29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUFjdGlvblR5cGU6IEFjdGlvblR5cGUgfCBudWxsID0gbnVsbDtcbiAgY29tbWVudDogc3RyaW5nID0gJyc7XG4gIGlzTW9kYWxWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgdGFibGVSb3dBY3Rpb25zID0gW1xuICAgIC8vIHsgbGFiZWw6ICdQaWNrIFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICAvLyB7IGxhYmVsOiAnUmVsZWFzZSBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ0ZvbGxvdyBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4geyB9LCBkaXZpZGVyOiB0cnVlIH0sXG4gICAgLy8geyBsYWJlbDogJ1Bhc3MgT24nLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICAvLyB7IGxhYmVsOiAnUGFzcyBCYWNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdSZS1Bc3NpZ24nLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlJlQXNzaWduO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSwgdGhpcy5hY3RpdmVBY3Rpb25UeXBlKTtcbiAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgIHRoaXMubmV4dEFjdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLnRhc2tGYWNhZGUubG9hZE5leHRBY3RvcnMoZGF0YS5Db2RlLCB1bmRlZmluZWQsIHRydWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmICh0aGlzLnBvcHVwKCkgJiYgIXRoaXMucG9wdXAoKT8uZHJvcGRvd25PcGVuKSB7XG4gICAgICAgICAgLy8gICB0aGlzLnBvcHVwKCk/LnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiB0cnVlLFxuICAgIH0sXG4gICAgeyBsYWJlbDogJ1ZpZXcgT3BlcmF0aW9uJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4geyB9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICBdO1xuXG4gIG5leHRBY3Rpb25zOiBXb3JrZmxvd0FjdGlvbltdID0gW107XG4gIG5leHRBY3RvcnM6IEFjdG9yW10gPSBbXTtcblxuICByZWNpcGllbnRDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRBY3Rpb246IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFdvcmtmbG93QWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gIGN1cnJlbnRUYXNrOiBUYXNrIHwgbnVsbCA9IG51bGw7XG5cbiAgc2VsZWN0ZWRTdGFnZUNvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0YXNrRmFjYWRlOiBUYXNrRmFjYWRlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudGFza0ZhY2FkZS5nZXRSZXF1ZXN0cyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YSk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzLnRhc2tGYWNhZGUuZ2V0TmV4dEFjdGlvbnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgLy8gICB0aGlzLm5leHRBY3Rpb25zID0gZGF0YTtcbiAgICAvLyB9KTtcblxuICAgIHRoaXMudGFza0ZhY2FkZS5nZXROZXh0QWN0b3JzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5uZXh0QWN0b3JzID0gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGxvYWRJbml0aWFsRGF0YSgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrRmFjYWRlLmxvYWRSZXF1ZXN0cyh0aGlzLnVzZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwQ2xvc2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmxvZygnQ2xvc2luZy4uLicsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgb25Qb3B1cFRvZ2dsZWQoaXNPcGVuOiBib29sZWFuLCBjdXJyZW50UG9wdXA6IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5wb3B1cHMoKS5mb3JFYWNoKChwb3B1cCkgPT4ge1xuICAgICAgICBpZiAocG9wdXAgIT09IGN1cnJlbnRQb3B1cCAmJiBwb3B1cC5kcm9wZG93bk9wZW4pIHtcbiAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVQb3B1cENsb3NlKCFpc09wZW4pO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKHRhc2s6IFRhc2ssIHBvcHVwOiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aXZlQWN0aW9uVHlwZTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUmVBc3NpZ246XG4gICAgICAgIHRoaXMudGFza0ZhY2FkZVxuICAgICAgICAgIC5yZUFzc2lnbih0YXNrLCB0aGlzLmNvbW1lbnQsIHRoaXMucmVjaXBpZW50Q29kZSA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICB0aGlzLm5leHRBY3RvcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QaWNrVGFzazpcbiAgICAgICAgdGhpcy50YXNrRmFjYWRlXG4gICAgICAgICAgLnBpY2tUYXNrKHRhc2ssIHRoaXMuY29tbWVudCwgdGhpcy5yZWNpcGllbnRDb2RlID8/IHVuZGVmaW5lZCwgdGhpcy5zZWxlY3RlZFN0YWdlQ29kZSA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICB0aGlzLm5leHRBY3RvcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RhZ2VDb2RlID0gbnVsbDtcbiAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBUbzpcbiAgICAgICAgLy8gY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb24gZm9yIFNraXA6Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnVGFzayBmb3IgU2tpcDonLCB0YXNrKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0NvbW1lbnQgZm9yIFNraXA6JywgdGhpcy5jb21tZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1JlY2lwaWVudCBDb2RlIGZvciBTa2lwOicsIHRoaXMucmVjaXBpZW50Q29kZSk7XG4gICAgICAgIC8vIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAvLyAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC8vICAgICAuc2tpcFRvKFxuICAgICAgICAvLyAgICAgICB0YXNrLkN1cnJlbnRTdGFnZXNbMF0sXG4gICAgICAgIC8vICAgICAgIHNlbGVjdGVkQWN0aW9uLlRvU3RhZ2UsXG4gICAgICAgIC8vICAgICAgIHRhc2ssXG4gICAgICAgIC8vICAgICAgIHRoaXMuY29tbWVudCxcbiAgICAgICAgLy8gICAgICAgdGhpcy5yZWNpcGllbnRDb2RlXG4gICAgICAgIC8vICAgICApXG4gICAgICAgIC8vICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAvLyAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgIC8vICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgLy8gICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3SXRlbTogVGFzayA9IG5ldyBUYXNrTW9kZWwoe1xuICAgICAgICAgIFdvcmtmbG93Q29kZTogJycsXG4gICAgICAgICAgU3RhdHVzOiBUYXNrU3RhdHVzLkFjdGl2ZSxcbiAgICAgICAgICBGbG93YWJsZTogJycsXG4gICAgICAgICAgRmxvd2FibGVEYXRhOiBudWxsLFxuICAgICAgICAgIEZsb3dhYmxlUGF0aDogJycsXG4gICAgICAgICAgQ3VycmVudEFjdG9yczogW10sXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgVGFzaztcbiAgICAgICAgdGhpcy50YXNrRmFjYWRlLmFkZE5ld1JlcXVlc3QobmV3SXRlbSk7XG4gICAgICAgIC8vIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgLy8gICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIC8vICAgdGl0bGU6ICxcbiAgICAgICAgLy8gICBkYXRhOiBuZXdHcm91cCxcbiAgICAgICAgLy8gICBib2R5OiBbXSxcbiAgICAgICAgLy8gICBjaGlsZHJlbjogW10sXG4gICAgICAgIC8vIH07XG4gICAgICAgIC8vIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoW25ld0dyb3VwXSk7XG4gICAgICAgIC8vIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIC8vIHRoaXMudXNlckNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAvLyAgIHRoaXMuc2hvd0ZpbHRlciA9IGV2ZW50LnZhbHVlO1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ3NvcnQnOlxuICAgICAgLy8gICB0aGlzLnNob3dTb3J0ID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnY29sdW1uJzpcbiAgICAgIC8vICAgdGhpcy5zaG93Q29sdW1uID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENhcmREYXRhQnlJZGVudGlmaWVyKGNvZGU6IHN0cmluZyk6IENhcmREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYXJkRGF0YSgpPy5maW5kKCh7IGRhdGEgfSkgPT4gZGF0YS5kYXRhLkNvZGUgPT09IGNvZGUpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGFza0ZhY2FkZS5sb2FkTW9yZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNhdmUoZGF0YTogUGFydGlhbDxUYXNrPikge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAuLi50aGlzLmN1cnJlbnREYXRhPy5kYXRhLFxuICAgICAgLi4uZGF0YSxcbiAgICB9IGFzIFRhc2s7XG4gICAgYXdhaXQgdGhpcy50YXNrRmFjYWRlLmFkZFJlcXVlc3QocGF5bG9hZCk7XG4gIH1cbn1cblxuZW51bSBBY3Rpb25UeXBlIHtcbiAgUGlja1Rhc2sgPSAnUGlja1Rhc2snLFxuICBVblBpY2tUYXNrID0gJ1VuUGlja1Rhc2snLFxuICBSZUFzc2lnbiA9ICdSZUFzc2lnbicsXG4gIFBhc3NPbiA9ICdQYXNzT24nLFxuICBQYXNzQmFjayA9ICdQYXNzQmFjaycsXG4gIEZvbGxvd1Rhc2sgPSAnRm9sbG93VGFzaycsXG4gIFVuZm9sbG93VGFzayA9ICdVbmZvbGxvd1Rhc2snLFxuICBTa2lwVG8gPSAnU2tpcFRvJyxcbn1cbiIsIjxkaXYgY2xhc3M9XCJzcGFjZS15LThcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXcgI3ZkdiBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0cnVlLFxuICAgICAgaXNDb2x1bW46IHRydWUsXG4gICAgICBpc0ZpbHRlcjogdHJ1ZSxcbiAgICAgIGlzU29ydDogdHJ1ZSxcbiAgICAgIGlzRXhwb3J0OiB0cnVlLFxuICAgICAgaXNTZWxlY3Q6IHRydWUsXG4gICAgICBpc0NyZWF0ZTogdHJ1ZSxcbiAgICAgIGlzVG9nZ2xlOiB0cnVlLFxuICAgIH1cIiBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCIgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIiBbc2VsZWN0ZWRTb3J0Q291bnRdPVwiMFwiXG4gICAgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCIwXCIgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIiAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPGRpdiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlIFtkYXRhXT1cImRhdGEoKVwiIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImhpc3RvcnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvd29ya2Zsb3cvdGFzay1oaXN0b3J5JywgdmFsdWVdXCIgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdXCI+dmlldyBoaXN0b3J5PC9hPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwid29ya2Zsb3dcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvd29ya2Zsb3cvd29ya2Zsb3dzJywgdmFsdWVdXCIgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdXCI+dmlldyBXb3JrZmxvdzwvYT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPHZlcmJlbi1wb3AtVXAgI3BvcHVwIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCIgW2N1c3RvbVN0eWxlc109XCJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGExMDc4MCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNXB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgfVwiIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwib25Qb3B1cFRvZ2dsZWQoJGV2ZW50LCBwb3B1cClcIj5cbiAgICAgICAgICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcC0yIC1tLTIgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImRvdHNcIiBbd2lkdGhdPVwiM1wiIFtoZWlnaHRdPVwiMThcIiBjbGFzcz1cInctYXV0b1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSByb3VuZGVkLXNtXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHRhYmxlUm93QWN0aW9uczsgdHJhY2sgaXRlbS5sYWJlbCkge1xuXG4gICAgICAgICAgICAgICAgPHZlcmJlbi1wb3AtVXAgI3BvcHVwMiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIiBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiIFtjdXN0b21TdHlsZXNdPVwie1xuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDRhMTA3ODAnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzVweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnXG4gICAgICAgICAgICAgIH1cIiAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cImhhbmRsZVBvcHVwQ2xvc2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaXRlbS5hY3Rpb24ocm93KVwiIGRyb3Bkb3duLXRyaWdnZXIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBweS0yIHB4LTMgaG92ZXI6YmctcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSByb3VuZGVkLXNtXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxNnJlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW4gaC0xMiBweC0yIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBvcGFjaXR5PVwiMC42XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi43NDY0OSA4LjAwMzM4QzYuOTE0ODMgOC4xMzQ3IDcuMDI1MiA4LjIwNDU1IDcuMTE1MzEgOC4yOTM5NkM3Ljk4ODQ2IDkuMTYyMjIgOC44NTc0MiAxMC4wMzQ3IDkuNzI5MTcgMTAuOTA1QzkuODcxNjcgMTEuMDQ3NSA5Ljk5MzkxIDExLjE5MjEgOS45OTMyMSAxMS40MTI5QzkuOTkyNTEgMTEuNjQ2MiA5Ljg5NDcyIDExLjgxNTIgOS42OTU2NCAxMS45MjU2QzkuNDkzMDcgMTIuMDM4IDkuMjkyNiAxMi4wMjA2IDkuMTA0NjkgMTEuODg5OUM5LjAzODMzIDExLjg0MzggOC45ODE3NSAxMS43ODQ1IDguOTIzNzggMTEuNzI3MkM3Ljg1NTc0IDEwLjY1OTIgNi43OTY3OCA5LjU4MjAzIDUuNzE0NzcgOC41Mjg2N0M1LjM3MTEgOC4xOTQwNyA1LjM4NDM3IDcuNzkxNzMgNS43MDc3OSA3LjQ3NTk5QzYuNzg4NCA2LjQyMTIzIDcuODQ4NzUgNS4zNDU1MSA4LjkxNTM5IDQuMjc2MDdDOS4xMTM3NyA0LjA3NzY5IDkuMzIwNTQgMy45MjI2MiA5LjYyMyA0LjA0MTM3QzkuOTc5MjQgNC4xODEwNyAxMC4xMTIgNC41ODkwMSA5Ljg5NDcyIDQuOTAzMzVDOS44Mjk3NiA0Ljk5NzY1IDkuNzQxNzQgNS4wNzcyOCA5LjY2MDAyIDUuMTU5N0M4LjgwNjQyIDYuMDE0NjkgNy45NTI4MyA2Ljg2OTY4IDcuMDk2NDUgNy43MjI1N0M3LjAxNDcyIDcuODA0MyA2LjkxNTUzIDcuODY4NTYgNi43NDU3OSA4LjAwNDA4TDYuNzQ2NDkgOC4wMDMzOFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIj5TZWxlY3QgQXNzaWduZWU8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLTIgbWF4LWgtOTYgb3ZlcmZsb3cteS1hdXRvIHAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJuZXh0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQWN0aW9uIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkQWN0aW9uLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9PT0gJ1BpY2sgVGFzaydcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd24gbGFiZWw9XCJTdGFnZXNcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgd2lkdGg9XCIxMDAlXCIgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU3RhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjdXJyZW50VGFzaz8uRnVsbFN0YWdlcyB8fCBbXVwiIGlkPVwic3RhZ2VzXCIgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFN0YWdlQ29kZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duIGxhYmVsPVwiQWN0b3JzXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIHdpZHRoPVwiMTAwJVwiIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEFjdG9yXCIgWyhvcHRpb25zKV09XCJuZXh0QWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3RvcnNcIiBvcHRpb25MYWJlbD1cIk5hbWVcIiBvcHRpb25WYWx1ZT1cIklkZW50aWZpZXJcIiBbKG5nTW9kZWwpXT1cInJlY2lwaWVudENvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJjb21tZW50XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBDb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0xIHRleHQteHMgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbWRcIiBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xzXT1cIjhcIj48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gW2Rpc2FibGVdPVwiIWNvbW1lbnRcIiBbdGV4dF09XCJhY3RpdmVBY3Rpb25UeXBlID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbihyb3csIHBvcHVwKVwiIGNsYXNzPVwidGV4dC14cyB3LWZ1bGxcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb2xvcj1cIiM0MDQwNDBcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCIgZm9udFNpemU9XCIxNHB4XCIgcGQ9XCIxMHB4IDIwcHhcIiB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzMnB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmRpdmlkZXIpIHtcbiAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJiZy1bI0ZGRTY4MV0gaC0xIHJvdW5kZWQteGwgYm9yZGVyLTBcIiAvPlxuICAgICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxuICAgICAgICAgICAgPHN0cm9uZz5BY3Rpb25zPC9zdHJvbmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3IGJvcmRlclJhZGl1cz1cIjEycHhcIiAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIiByYmdDb2xvcj1cIiNmNWY2ZjlcIiBtZz1cIjIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJDb2RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1jYXJkSXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGNhcmRJdGVtKVwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImN1cnJlbnREYXRhID0gdmRjdi5vbkl0ZW1DbGljayhjYXJkSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB5LTIgcHgtNCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBmb3I9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1saWdodFwiPkN1cnJlbnQgQWN0b3JzOjwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycyAmJiBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbVwiPnt7IGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9yc1swXS5JZGVudGlmaWVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwIFt0b3BdPVwiJzBweCdcIiBbdGV4dENvbG9yXT1cIicjMDAwJ1wiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCIgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiYWN0b3JzVG9vbHRpcFRlbXBsYXRlXCIgI2FjdG9yc1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbSBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FyZEl0ZW0uZGF0YS5DdXJyZW50QWN0b3JzWzBdLklkZW50aWZpZXIgfX0gYW5kIHt7IGNhcmRJdGVtLmRhdGEuQ3VycmVudEFjdG9ycy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSB9fSBvdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhY3RvcnNUb29sdGlwVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgbWItMVwiPkN1cnJlbnQgQWN0b3JzOjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZGlzYyBsaXN0LWluc2lkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3RvciBvZiBjYXJkSXRlbS5kYXRhLkN1cnJlbnRBY3RvcnM7IHRyYWNrIGFjdG9yLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC14c1wiPnt7IGFjdG9yLklkZW50aWZpZXIgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS00MDBcIj5ObyBhY3RvcnMgYXNzaWduZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZvcj1cInJvbGVcIiBjbGFzcz1cImZvbnQtbGlnaHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkSXRlbS5kYXRhLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd29ya2Zsb3cvdGFzay1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRJdGVtLmRhdGEuQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXSB0ZXh0LXhzIHJlbGF0aXZlIHotMTBcIj52aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeTwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwie1xuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDRhMTA3ODAnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzVweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnXG4gICAgICAgICAgICAgIH1cIiAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cIm9uUG9wdXBUb2dnbGVkKCRldmVudCwgcG9wdXApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHAtMiAtbS0yIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cImRvdHNcIiBbd2lkdGhdPVwiM1wiIFtoZWlnaHRdPVwiMThcIiBjbGFzcz1cInctYXV0b1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHRhYmxlUm93QWN0aW9uczsgdHJhY2sgaXRlbS5sYWJlbCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAyIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVN0eWxlc109XCJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGExMDc4MCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNXB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgfVwiIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwiaGFuZGxlUG9wdXBDbG9zZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIml0ZW0uYWN0aW9uKGNhcmRJdGVtLmRhdGEpXCIgZHJvcGRvd24tdHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHktMiBweC0zIGhvdmVyOmJnLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxNnJlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlbiBoLTEyIHB4LTIgcHQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIG9wYWNpdHk9XCIwLjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi43NDY0OSA4LjAwMzM4QzYuOTE0ODMgOC4xMzQ3IDcuMDI1MiA4LjIwNDU1IDcuMTE1MzEgOC4yOTM5NkM3Ljk4ODQ2IDkuMTYyMjIgOC44NTc0MiAxMC4wMzQ3IDkuNzI5MTcgMTAuOTA1QzkuODcxNjcgMTEuMDQ3NSA5Ljk5MzkxIDExLjE5MjEgOS45OTMyMSAxMS40MTI5QzkuOTkyNTEgMTEuNjQ2MiA5Ljg5NDcyIDExLjgxNTIgOS42OTU2NCAxMS45MjU2QzkuNDkzMDcgMTIuMDM4IDkuMjkyNiAxMi4wMjA2IDkuMTA0NjkgMTEuODg5OUM5LjAzODMzIDExLjg0MzggOC45ODE3NSAxMS43ODQ1IDguOTIzNzggMTEuNzI3MkM3Ljg1NTc0IDEwLjY1OTIgNi43OTY3OCA5LjU4MjAzIDUuNzE0NzcgOC41Mjg2N0M1LjM3MTEgOC4xOTQwNyA1LjM4NDM3IDcuNzkxNzMgNS43MDc3OSA3LjQ3NTk5QzYuNzg4NCA2LjQyMTIzIDcuODQ4NzUgNS4zNDU1MSA4LjkxNTM5IDQuMjc2MDdDOS4xMTM3NyA0LjA3NzY5IDkuMzIwNTQgMy45MjI2MiA5LjYyMyA0LjA0MTM3QzkuOTc5MjQgNC4xODEwNyAxMC4xMTIgNC41ODkwMSA5Ljg5NDcyIDQuOTAzMzVDOS44Mjk3NiA0Ljk5NzY1IDkuNzQxNzQgNS4wNzcyOCA5LjY2MDAyIDUuMTU5N0M4LjgwNjQyIDYuMDE0NjkgNy45NTI4MyA2Ljg2OTY4IDcuMDk2NDUgNy43MjI1N0M3LjAxNDcyIDcuODA0MyA2LjkxNTUzIDcuODY4NTYgNi43NDU3OSA4LjAwNDA4TDYuNzQ2NDkgOC4wMDMzOFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPlNlbGVjdCBBc3NpZ25lZTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLTIgbWF4LWgtOTYgb3ZlcmZsb3cteS1hdXRvIHAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cIm5leHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBY3Rpb24gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPiAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93biBsYWJlbD1cIkFjdG9yc1wiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJmYWxzZVwiIFtmaWx0ZXJdPVwidHJ1ZVwiIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIiBbKG9wdGlvbnMpXT1cIm5leHRBY3RvcnNcIiBpZD1cImFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCIgb3B0aW9uVmFsdWU9XCJJZGVudGlmaWVyXCIgWyhuZ01vZGVsKV09XCJyZWNpcGllbnRDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiY29tbWVudFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ29tbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0xIHRleHQteHMgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbWRcIiBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtkaXNhYmxlXT1cIiFjb21tZW50XCIgW3RleHRdPVwiYWN0aXZlQWN0aW9uVHlwZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbihjYXJkSXRlbS5kYXRhLCBwb3B1cClcIiBjbGFzcz1cInRleHQteHMgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yPVwiI0ZGRTY4MVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCIgZm9udFNpemU9XCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZD1cIjEwcHggMjBweFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjMycHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3RpdmVBY3Rpb25UeXBlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJiZy1bI0ZGRTY4MV0gaC0xIHJvdW5kZWQteGwgYm9yZGVyLTBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW5vcm1hbCB0ZXh0LXNtXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNpSXRlbSBvZiBpdGVtLmJvZHk7IHRyYWNrIGNpSXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGZvbnQtbGlnaHQgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgY2lJdGVtLnRpdGxlIH19Ojwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj57eyBjaUl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPCEtLSA8bGliLXVzZXItcmVxdWVzdC1mb3JtXG4gICAgICAgICAgICAgIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAob25BcHByb3ZhbCk9XCJvbkFwcHJvdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9saWItdXNlci1yZXF1ZXN0LWZvcm0+IC0tPlxuICAgICAgICAgICAgPHRhc2tzLWZvcm0gW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCIgKHN3aXRjaFZpZXcpPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgIChvblNhdmUpPVwib25TYXZlKCRldmVudClcIj48L3Rhc2tzLWZvcm0+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ZsZXggZ2FwLTIgaXRlbXMtY2VudGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktZW5kJzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhdmRjdi5oYXNDdXJyZW50SXRlbSgpXCJcbiAgICAgICAgICAgICAgW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCJcbiAgICAgICAgICAgICAgW2JnQ29sb3JdPVwiJyM4RThEODcnXCJcbiAgICAgICAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgICAgICAgW3BkXT1cIic5Ljc5cHggMzcuMjhweCdcIlxuICAgICAgICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHt7XG4gICAgICAgICAgICAgICAgdmRjdi5oYXNDdXJyZW50SXRlbSgpID8gJ2ZsZXgtMScgOiAnJ1xuICAgICAgICAgICAgICB9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhKCkubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICBMb2FkIG1vcmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1jb2x1bW5zIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCIgKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiPjwvbGliLWRhdGEtY29sdW1ucz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MjBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIj48L3ZlcmJlbi10YWJsZS1maWx0ZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtc29ydCBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFtkYXRhXT1cImRhdGEoKVwiIChzb3J0QXBwbGllZCk9XCJvblNvcnRVcGRhdGVkKCRldmVudClcIj48L2xpYi1kYXRhLXNvcnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YSgpXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLWRhdGEtdmlldz5cblxuICA8ZGl2ICpuZ0lmPVwidmR2LmlzVGFibGVWaWV3XCIgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICBbcGRdPVwiJzkuNzlweCAzNy4yOHB4J1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgID5cbiAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhKCkubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCI+XG4gICAgICAgIExvYWQgbW9yZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -37,11 +37,11 @@ export class TaskFacade {
37
37
  addNewRequest(task) {
38
38
  this.taskState.addRequest(task);
39
39
  }
40
- async loadRequests() {
40
+ async loadRequests(user) {
41
41
  try {
42
42
  this.taskState.setUpdating(true);
43
43
  const params = this.taskState.getQueryParamsValue();
44
- const requests = await this.taskService.getTasks(params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder);
44
+ const requests = user ? await this.taskService.getPossibleTasksForUser(user, params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder) : await this.taskService.getTasks(params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder);
45
45
  if (requests?.Result) {
46
46
  this.taskState.setRequests(requests.Result);
47
47
  this.taskState.updateQueryParams({ skip: requests.Skip });
@@ -269,4 +269,4 @@ export class TaskFacade {
269
269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TaskFacade, decorators: [{
270
270
  type: Injectable
271
271
  }], ctorParameters: () => [{ type: i1.TasksService }, { type: i2.TaskState }, { type: i3.UtilService }] });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuZmFjYWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQU9qRCxNQUFNLE9BQU8sVUFBVTtJQUVYO0lBQ0E7SUFDQTtJQUhWLFlBQ1UsV0FBeUIsRUFDekIsU0FBb0IsRUFDcEIsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQs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UyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBdFRVLFVBQVU7NEdBQVYsVUFBVTs7NEZBQVYsVUFBVTtrQkFEdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdG9yLCBGb3JtLCBRdWVyeVBhcmFtcywgVGFzaywgV29ya2Zsb3cgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXNrc1NlcnZpY2UgfSBmcm9tICcuL3Rhc2tzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFza1N0YXRlIH0gZnJvbSAnLi90YXNrcy5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYXNrRmFjYWRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0YXNrU2VydmljZTogVGFza3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFza1N0YXRlOiBUYXNrU3RhdGUsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pc1VwZGF0aW5nJCgpLnN1YnNjcmliZSgobG9hZGluZykgPT4ge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkobG9hZGluZyk7XG4gICAgfSk7XG4gIH1cblxuICBpc1VwZGF0aW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuaXNVcGRhdGluZyQoKTtcbiAgfVxuXG4gIGdldFJlcXVlc3RzJCgpOiBPYnNlcnZhYmxlPFRhc2tbXT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5nZXRSZXF1ZXN0cyQoKTtcbiAgfVxuXG4gIGdldFdvcmtmbG93JCgpOiBPYnNlcnZhYmxlPFdvcmtmbG93W10+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuZ2V0V29ya2Zsb3dzJCgpO1xuICB9XG5cbiAgZ2V0Rm9ybXMkKCk6IE9ic2VydmFibGU8Rm9ybVtdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldEZvcm1zJCgpO1xuICB9XG5cbiAgZ2V0TmV4dEFjdG9ycyQoKTogT2JzZXJ2YWJsZTxBY3RvcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldE5leHRBY3RvcnMkKCk7XG4gIH1cblxuICBnZXRRdWVyeVBhcmFtcyQoKTogT2JzZXJ2YWJsZTxRdWVyeVBhcmFtczxUYXNrPj4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtcyQoKTtcbiAgfVxuXG4gIGFkZE5ld1JlcXVlc3QodGFzazogVGFzaykge1xuICAgIHRoaXMudGFza1N0YXRlLmFkZFJlcXVlc3QodGFzayk7XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy50YXNrU3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0VGFza3MoXG4gICAgICAgIHBhcmFtcy5za2lwLFxuICAgICAgICBwYXJhbXMubGltaXQsXG4gICAgICAgIHBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgcGFyYW1zLnNvcnRPcmRlclxuICAgICAgKTtcblxuICAgICAgaWYgKHJlcXVlc3RzPy5SZXN1bHQpIHtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUuc2V0UmVxdWVzdHMocmVxdWVzdHMuUmVzdWx0KTtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUXVlcnlQYXJhbXMoeyBza2lwOiByZXF1ZXN0cy5Ta2lwIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByZXF1ZXN0czonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRSZXF1ZXN0c1dpdGhQYXJhbShwYXJhbTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy50YXNrU3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0VGFza1dpdGhQYXJhbShcbiAgICAgICAgcGFyYW0sXG4gICAgICAgIHBhcmFtcy5za2lwLFxuICAgICAgICBwYXJhbXMubGltaXQsXG4gICAgICAgIHBhcmFtcy5zb3J0UGFyYW0gfHwgJ0NyZWF0ZWREYXRlJyxcbiAgICAgICAgcGFyYW1zLnNvcnRPcmRlclxuICAgICAgKTtcblxuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0UmVxdWVzdHMocmVxdWVzdHMuUmVzdWx0KTtcbiAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHsgc2tpcDogcmVxdWVzdHMuU2tpcCB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVF1ZXJ5UGFyYW1zKHBhcmFtczogUGFydGlhbDxRdWVyeVBhcmFtczxUYXNrPj4pOiB2b2lkIHtcbiAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVRdWVyeVBhcmFtcyhwYXJhbXMpO1xuICAgIC8vIHRoaXMubG9hZFJlcXVlc3RzKCk7XG4gIH1cblxuICBhc3luYyBhZGRSZXF1ZXN0KHJlcXVlc3Q6IFBhcnRpYWw8VGFzaz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdSZXF1ZXN0ID0geyAuLi5yZXF1ZXN0LCBUYXNrRm9ybXM6IFtdIH0gYXMgVGFzaztcbiAgICAgIC8vIHRoaXMudGFza1N0YXRlLmFkZFJlcXVlc3QobmV3UmVxdWVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMudGFza1NlcnZpY2Uuc2F2ZVRhc2tzKFtuZXdSZXF1ZXN0XSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIGFkZGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy50YXNrU3RhdGUucmVzZXRQYWdpbmF0aW9uKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRSZXF1ZXN0cygpOyAvLyBSZWxvYWQgdG8gZ2V0IHNlcnZlci1zaWRlIGNoYW5nZXNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFkZCByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRoaXMudGFza1N0YXRlLnJlbW92ZVJlcXVlc3QocmVxdWVzdC5Db2RlISk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJlcXVlc3QocmVxdWVzdDogVGFzayk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMudGFza1NlcnZpY2Uuc2F2ZVRhc2tzKFtyZXF1ZXN0XSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVSZXF1ZXN0KHJlcXVlc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLnRhc2tTZXJ2aWNlLmRlbGV0ZVRhc2tzKFtyZXF1ZXN0SWRdKSk7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5yZW1vdmVSZXF1ZXN0KHJlcXVlc3RJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcHJvdmVSZXF1ZXN0KHJlcXVlc3Q6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UucHJvY2Vzc1Rhc2tzKFtyZXF1ZXN0XSwgdHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2UgYXMgVGFza1tdKT8uWzBdO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChkYXRhKTtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayBhcHByb3ZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZFdvcmtmbG93cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldFdvcmtmbG93cygpO1xuXG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRXb3JrZmxvd3MocmVxdWVzdHMuUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHM6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkRm9ybXNXaXRoUGFyYW0ocGFyYW06IHN0cmluZyk6IFByb21pc2U8Rm9ybSB8IHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRGb3JtV2l0aFBhcmFtKHBhcmFtKTtcblxuICAgICAgY29uc3QgZm9ybSA9IHJlcXVlc3RzLlJlc3VsdFswXTtcbiAgICAgIGlmIChmb3JtKSByZXR1cm4gZm9ybTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlQXNzaWduKFxuICAgIHJlcXVlc3Q6IFRhc2ssXG4gICAgY29tbWVudDogc3RyaW5nLFxuICAgIHRvVXNlcj86IHN0cmluZyxcbiAgICBmcm9tVXNlcj86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UucmVBc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAgIEZ1bGxTdGFnZXM6IFtdLFxuICAgICAgICAgIEN1cnJlbnRBY3RvcnM6IHJlcXVlc3QuQ3VycmVudEFjdG9ycy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgQWN0b3JUYWdzOiBbXSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICAgIGNvbW1lbnQsXG4gICAgICAgIHRvVXNlcixcbiAgICAgICAgZnJvbVVzZXJcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIHJlLWFzc2lnbmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlIGFzIFRhc2s7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVSZXF1ZXN0KGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTmV4dEFjdG9ycyhcbiAgICB0YXNrQ29kZTogc3RyaW5nLFxuICAgIHN0YWdlQ29kZT86IHN0cmluZyxcbiAgICBmb3JDdXJyZW50U3RhZ2U/OiBib29sZWFuXG4gICk6IFByb21pc2U8QWN0b3JbXT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMudGFza1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldE5leHRBY3RvcnMoXG4gICAgICAgIHRhc2tDb2RlLFxuICAgICAgICBzdGFnZUNvZGUsXG4gICAgICAgIGZvckN1cnJlbnRTdGFnZVxuICAgICAgKTtcblxuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0TmV4dEFjdG9ycyhyZXF1ZXN0cyk7XG5cbiAgICAgIHJldHVybiByZXF1ZXN0cztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHMgd2l0aCBwYXJhbTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2FkIG1vcmUgaGFuZGxpbmdcbiAgYXN5bmMgbG9hZE1vcmUocXVldWU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG4gICAgICAvLyBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy50YXNrU3RhdGUuZ2V0U2VhcmNoVGVybVZhbHVlKCk7XG4gICAgICBjb25zdCBzZWFyY2hUZXJtID0gZmFsc2U7XG5cbiAgICAgIC8vIFVwZGF0ZSBza2lwIHZhbHVlXG4gICAgICBjb25zdCBuZXdTa2lwID0gY3VycmVudFBhcmFtcy5za2lwICsgY3VycmVudFBhcmFtcy5saW1pdDtcblxuICAgICAgLy8gTG9hZCBhbmQgYXBwZW5kIGRhdGFcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRUYXNrcyhcbiAgICAgICAgY3VycmVudFBhcmFtcy5za2lwLFxuICAgICAgICBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgICBjdXJyZW50UGFyYW1zLnNvcnRQYXJhbSB8fCAnY3JlYXRlZERhdGUnLFxuICAgICAgICBjdXJyZW50UGFyYW1zLnNvcnRPcmRlclxuICAgICAgKTtcblxuICAgICAgdGhpcy50YXNrU3RhdGUuYXBwZW5kUmVxdWVzdHMocmVzcG9uc2UuUmVzdWx0KTtcbiAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgc2tpcDogbmV3U2tpcCxcbiAgICAgICAgbGltaXQ6IGN1cnJlbnRQYXJhbXMubGltaXQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTG9hZCBtb3JlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBpY2tUYXNrKFxuICAgIHJlcXVlc3Q6IFRhc2ssXG4gICAgY29tbWVudDogc3RyaW5nLFxuICAgIHRvVXNlcj86IHN0cmluZyxcbiAgICB0YXJnZXRTdGFnZUNvZGU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnBpY2tUYXNrKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICBGdWxsU3RhZ2VzOiBbXSxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiByZXF1ZXN0LkN1cnJlbnRBY3RvcnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIEFjdG9yVGFnczogW10sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBjb21tZW50LFxuICAgICAgICB0b1VzZXIsXG4gICAgICAgIHRhcmdldFN0YWdlQ29kZSxcbiAgICAgICk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUYXNrIHBpY2tlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZSBhcyBUYXNrO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChkYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHBpY2sgdGFzaycsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuZmFjYWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy90YXNrcy90YXNrcy5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQU9qRCxNQUFNLE9BQU8sVUFBVTtJQUVYO0lBQ0E7SUFDQTtJQUhWLFlBQ1UsV0FBeUIsRUFDekIsU0FBb0IsRUFDcEIsV0FBd0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWM7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQs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SixFQUNELE9BQU8sRUFDUCxNQUFNLEVBQ04sZUFBZSxDQUNoQixDQUFDO1lBQ0YseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDekQsTUFBTSxJQUFJLEdBQUcsUUFBZ0IsQ0FBQztZQUM5QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzt3R0E1VFUsVUFBVTs0R0FBVixVQUFVOzs0RkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0b3IsIEZvcm0sIFF1ZXJ5UGFyYW1zLCBUYXNrLCBXb3JrZmxvdyB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IFRhc2tzU2VydmljZSB9IGZyb20gJy4vdGFza3Muc2VydmljZSc7XG5pbXBvcnQgeyBUYXNrU3RhdGUgfSBmcm9tICcuL3Rhc2tzLnN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhc2tGYWNhZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRhc2tTZXJ2aWNlOiBUYXNrc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YXNrU3RhdGU6IFRhc2tTdGF0ZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzVXBkYXRpbmckKCkuc3Vic2NyaWJlKChsb2FkaW5nKSA9PiB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShsb2FkaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzVXBkYXRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5pc1VwZGF0aW5nJCgpO1xuICB9XG5cbiAgZ2V0UmVxdWVzdHMkKCk6IE9ic2VydmFibGU8VGFza1tdPiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldFJlcXVlc3RzJCgpO1xuICB9XG5cbiAgZ2V0V29ya2Zsb3ckKCk6IE9ic2VydmFibGU8V29ya2Zsb3dbXT4ge1xuICAgIHJldHVybiB0aGlzLnRhc2tTdGF0ZS5nZXRXb3JrZmxvd3MkKCk7XG4gIH1cblxuICBnZXRGb3JtcyQoKTogT2JzZXJ2YWJsZTxGb3JtW10+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuZ2V0Rm9ybXMkKCk7XG4gIH1cblxuICBnZXROZXh0QWN0b3JzJCgpOiBPYnNlcnZhYmxlPEFjdG9yW10+IHtcbiAgICByZXR1cm4gdGhpcy50YXNrU3RhdGUuZ2V0TmV4dEFjdG9ycyQoKTtcbiAgfVxuXG4gIGdldFF1ZXJ5UGFyYW1zJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5UGFyYW1zPFRhc2s+PiB7XG4gICAgcmV0dXJuIHRoaXMudGFza1N0YXRlLmdldFF1ZXJ5UGFyYW1zJCgpO1xuICB9XG5cbiAgYWRkTmV3UmVxdWVzdCh0YXNrOiBUYXNrKSB7XG4gICAgdGhpcy50YXNrU3RhdGUuYWRkUmVxdWVzdCh0YXNrKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRSZXF1ZXN0cyh1c2VyPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy50YXNrU3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHVzZXIgPyBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldFBvc3NpYmxlVGFza3NGb3JVc2VyKFxuICAgICAgICB1c2VyLFxuICAgICAgICBwYXJhbXMuc2tpcCxcbiAgICAgICAgcGFyYW1zLmxpbWl0LFxuICAgICAgICBwYXJhbXMuc29ydFBhcmFtIHx8ICdjcmVhdGVkRGF0ZScsXG4gICAgICAgIHBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICkgOiBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldFRhc2tzKFxuICAgICAgICBwYXJhbXMuc2tpcCxcbiAgICAgICAgcGFyYW1zLmxpbWl0LFxuICAgICAgICBwYXJhbXMuc29ydFBhcmFtIHx8ICdjcmVhdGVkRGF0ZScsXG4gICAgICAgIHBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXF1ZXN0cz8uUmVzdWx0KSB7XG4gICAgICAgIHRoaXMudGFza1N0YXRlLnNldFJlcXVlc3RzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHsgc2tpcDogcmVxdWVzdHMuU2tpcCB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgcmVxdWVzdHM6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUmVxdWVzdHNXaXRoUGFyYW0ocGFyYW06IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMudGFza1N0YXRlLmdldFF1ZXJ5UGFyYW1zVmFsdWUoKTtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLmdldFRhc2tXaXRoUGFyYW0oXG4gICAgICAgIHBhcmFtLFxuICAgICAgICBwYXJhbXMuc2tpcCxcbiAgICAgICAgcGFyYW1zLmxpbWl0LFxuICAgICAgICBwYXJhbXMuc29ydFBhcmFtIHx8ICdDcmVhdGVkRGF0ZScsXG4gICAgICAgIHBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFJlcXVlc3RzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVRdWVyeVBhcmFtcyh7IHNraXA6IHJlcXVlc3RzLlNraXAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVRdWVyeVBhcmFtcyhwYXJhbXM6IFBhcnRpYWw8UXVlcnlQYXJhbXM8VGFzaz4+KTogdm9pZCB7XG4gICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUXVlcnlQYXJhbXMocGFyYW1zKTtcbiAgICAvLyB0aGlzLmxvYWRSZXF1ZXN0cygpO1xuICB9XG5cbiAgYXN5bmMgYWRkUmVxdWVzdChyZXF1ZXN0OiBQYXJ0aWFsPFRhc2s+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgbmV3UmVxdWVzdCA9IHsgLi4ucmVxdWVzdCwgVGFza0Zvcm1zOiBbXSB9IGFzIFRhc2s7XG4gICAgICAvLyB0aGlzLnRhc2tTdGF0ZS5hZGRSZXF1ZXN0KG5ld1JlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnNhdmVUYXNrcyhbbmV3UmVxdWVzdF0pO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayBhZGRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIHRoaXMudGFza1N0YXRlLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUmVxdWVzdHMoKTsgLy8gUmVsb2FkIHRvIGdldCBzZXJ2ZXItc2lkZSBjaGFuZ2VzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5yZW1vdmVSZXF1ZXN0KHJlcXVlc3QuQ29kZSEpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVSZXF1ZXN0KHJlcXVlc3Q6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnNhdmVUYXNrcyhbcmVxdWVzdF0pO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChyZXF1ZXN0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlUmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGhpcy50YXNrU2VydmljZS5kZWxldGVUYXNrcyhbcmVxdWVzdElkXSkpO1xuICAgICAgdGhpcy50YXNrU3RhdGUucmVtb3ZlUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHJlcXVlc3Q6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhcHByb3ZlUmVxdWVzdChyZXF1ZXN0OiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnByb2Nlc3NUYXNrcyhbcmVxdWVzdF0sIHRydWUpO1xuXG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICBjb25zdCBkYXRhID0gKHJlc3BvbnNlIGFzIFRhc2tbXSk/LlswXTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVJlcXVlc3QoZGF0YSk7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Rhc2sgYXBwcm92ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgcmVxdWVzdDonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRXb3JrZmxvd3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXRXb3JrZmxvd3MoKTtcblxuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0V29ya2Zsb3dzKHJlcXVlc3RzLlJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEZvcm1zV2l0aFBhcmFtKHBhcmFtOiBzdHJpbmcpOiBQcm9taXNlPEZvcm0gfCB2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0Rm9ybVdpdGhQYXJhbShwYXJhbSk7XG5cbiAgICAgIGNvbnN0IGZvcm0gPSByZXF1ZXN0cy5SZXN1bHRbMF07XG4gICAgICBpZiAoZm9ybSkgcmV0dXJuIGZvcm07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZUFzc2lnbihcbiAgICByZXF1ZXN0OiBUYXNrLFxuICAgIGNvbW1lbnQ6IHN0cmluZyxcbiAgICB0b1VzZXI/OiBzdHJpbmcsXG4gICAgZnJvbVVzZXI/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKHRydWUpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRhc2tTZXJ2aWNlLnJlQXNzaWduKFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICBGdWxsU3RhZ2VzOiBbXSxcbiAgICAgICAgICBDdXJyZW50QWN0b3JzOiByZXF1ZXN0LkN1cnJlbnRBY3RvcnMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgLi4uYyxcbiAgICAgICAgICAgIEFjdG9yVGFnczogW10sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBjb21tZW50LFxuICAgICAgICB0b1VzZXIsXG4gICAgICAgIGZyb21Vc2VyXG4gICAgICApO1xuICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayByZS1hc3NpZ25lZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZSBhcyBUYXNrO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy50YXNrU3RhdGUudXBkYXRlUmVxdWVzdChkYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE5leHRBY3RvcnMoXG4gICAgdGFza0NvZGU6IHN0cmluZyxcbiAgICBzdGFnZUNvZGU/OiBzdHJpbmcsXG4gICAgZm9yQ3VycmVudFN0YWdlPzogYm9vbGVhblxuICApOiBQcm9taXNlPEFjdG9yW10+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnRhc2tTdGF0ZS5nZXRRdWVyeVBhcmFtc1ZhbHVlKCk7XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5nZXROZXh0QWN0b3JzKFxuICAgICAgICB0YXNrQ29kZSxcbiAgICAgICAgc3RhZ2VDb2RlLFxuICAgICAgICBmb3JDdXJyZW50U3RhZ2VcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudGFza1N0YXRlLnNldE5leHRBY3RvcnMocmVxdWVzdHMpO1xuXG4gICAgICByZXR1cm4gcmVxdWVzdHM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlcXVlc3RzIHdpdGggcGFyYW06JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTG9hZCBtb3JlIGhhbmRsaW5nXG4gIGFzeW5jIGxvYWRNb3JlKHF1ZXVlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gdGhpcy50YXNrU3RhdGUuZ2V0UXVlcnlQYXJhbXNWYWx1ZSgpO1xuICAgICAgLy8gY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMudGFza1N0YXRlLmdldFNlYXJjaFRlcm1WYWx1ZSgpO1xuICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IGZhbHNlO1xuXG4gICAgICAvLyBVcGRhdGUgc2tpcCB2YWx1ZVxuICAgICAgY29uc3QgbmV3U2tpcCA9IGN1cnJlbnRQYXJhbXMuc2tpcCArIGN1cnJlbnRQYXJhbXMubGltaXQ7XG5cbiAgICAgIC8vIExvYWQgYW5kIGFwcGVuZCBkYXRhXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudGFza1NlcnZpY2UuZ2V0VGFza3MoXG4gICAgICAgIGN1cnJlbnRQYXJhbXMuc2tpcCxcbiAgICAgICAgY3VycmVudFBhcmFtcy5saW1pdCxcbiAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0UGFyYW0gfHwgJ2NyZWF0ZWREYXRlJyxcbiAgICAgICAgY3VycmVudFBhcmFtcy5zb3J0T3JkZXJcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudGFza1N0YXRlLmFwcGVuZFJlcXVlc3RzKHJlc3BvbnNlLlJlc3VsdCk7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS51cGRhdGVRdWVyeVBhcmFtcyh7XG4gICAgICAgIHNraXA6IG5ld1NraXAsXG4gICAgICAgIGxpbWl0OiBjdXJyZW50UGFyYW1zLmxpbWl0LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0xvYWQgbW9yZSBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudGFza1N0YXRlLnNldFVwZGF0aW5nKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwaWNrVGFzayhcbiAgICByZXF1ZXN0OiBUYXNrLFxuICAgIGNvbW1lbnQ6IHN0cmluZyxcbiAgICB0b1VzZXI/OiBzdHJpbmcsXG4gICAgdGFyZ2V0U3RhZ2VDb2RlPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRhc2tTdGF0ZS5zZXRVcGRhdGluZyh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50YXNrU2VydmljZS5waWNrVGFzayhcbiAgICAgICAge1xuICAgICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgICAgRnVsbFN0YWdlczogW10sXG4gICAgICAgICAgQ3VycmVudEFjdG9yczogcmVxdWVzdC5DdXJyZW50QWN0b3JzLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICBBY3RvclRhZ3M6IFtdLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tbWVudCxcbiAgICAgICAgdG9Vc2VyLFxuICAgICAgICB0YXJnZXRTdGFnZUNvZGUsXG4gICAgICApO1xuICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGFzayBwaWNrZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UgYXMgVGFzaztcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMudGFza1N0YXRlLnVwZGF0ZVJlcXVlc3QoZGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBwaWNrIHRhc2snLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50YXNrU3RhdGUuc2V0VXBkYXRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19