verben-workflow-ui 0.3.5 → 0.3.7

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.
@@ -37,9 +37,10 @@ export class MyQueueComponent extends BaseDataViewComponent {
37
37
  comment = '';
38
38
  isModalVisible = false;
39
39
  tableRowActions = [
40
- // { label: 'Pick Task', action: (data: Task) => {}, divider: false },
41
- // { label: 'Release Task', action: (data: Task) => {}, divider: false },
42
- // { label: 'Follow Task', action: (data: Task) => {}, divider: true },
40
+ { label: 'Pick Task', action: (data) => { }, divider: false },
41
+ { label: 'Release Task', action: (data) => { }, divider: false },
42
+ { label: 'Follow Task', action: (data) => { }, divider: true },
43
+ { label: 'Unfollow Task', action: (data) => { }, divider: true },
43
44
  {
44
45
  label: 'Pass On',
45
46
  action: (data) => {
@@ -122,9 +123,9 @@ export class MyQueueComponent extends BaseDataViewComponent {
122
123
  // Handle error
123
124
  }
124
125
  }
125
- getCardDataByIdentifier(mailAddress) {
126
- return this.cardData().find(({ data }) => data.MailAddress === mailAddress);
127
- }
126
+ // protected getCardDataByIdentifier(mailAddress: string): CardData | undefined {
127
+ // return this.cardData().find(({ data }) => data.MailAddress === mailAddress);
128
+ // }
128
129
  async loadMore() {
129
130
  try {
130
131
  await this.facade.loadMore();
@@ -134,12 +135,26 @@ export class MyQueueComponent extends BaseDataViewComponent {
134
135
  }
135
136
  }
136
137
  getTableActions(task) {
137
- if (task.FullStages?.[0]?.IsEntryPoint) {
138
- return this.tableRowActions.filter(({ label }) => label !== 'Pass Back' && label !== 'Skip To');
138
+ const actions = [];
139
+ if (this.isGeneral()) {
140
+ const actionNames = [
141
+ 'Pick Task',
142
+ 'Release Task',
143
+ 'Follow Task',
144
+ 'Unfollow Task',
145
+ ];
146
+ actions.push(...this.tableRowActions.filter(({ label }) => actionNames.includes(label)));
139
147
  }
140
148
  else {
141
- return this.tableRowActions;
149
+ const actionNames = ['Pass On', 'Pass Back', 'Skip To', 'Re-Assign'];
150
+ if (task.FullStages?.[0]?.IsEntryPoint) {
151
+ actions.push(...this.tableRowActions.filter(({ label }) => actionNames.includes(label) && label !== 'Pass Back'));
152
+ }
153
+ else {
154
+ actions.push(...this.tableRowActions.filter(({ label }) => actionNames.includes(label)));
155
+ }
142
156
  }
157
+ return actions;
143
158
  }
144
159
  groupByWorkflowCode(task) {
145
160
  return `Workflow: ${task.WorkflowCode}`;
@@ -149,21 +164,21 @@ export class MyQueueComponent extends BaseDataViewComponent {
149
164
  this.selectedTaskCode = null;
150
165
  }
151
166
  }
152
- checkForFormThenPassOn(task) {
167
+ checkForFormThenPassOn(task, popup) {
153
168
  this.currentTask = task;
154
169
  // if (this.stageForm) {
155
170
  // this.isModalVisible = true;
156
171
  // } else {
157
172
  // this.passOn();
158
173
  // }
159
- this.passOn();
174
+ this.passOn(popup);
160
175
  }
161
- handleAction(task) {
176
+ handleAction(task, popup) {
162
177
  const action = this.activeActionType;
163
178
  switch (action) {
164
179
  case ActionType.PassOn:
165
180
  console.log('Pass On Action', task);
166
- this.checkForFormThenPassOn(task);
181
+ this.checkForFormThenPassOn(task, popup);
167
182
  break;
168
183
  case ActionType.ReAssign:
169
184
  this.facade.reAssign(task, this.comment).then(() => {
@@ -171,6 +186,7 @@ export class MyQueueComponent extends BaseDataViewComponent {
171
186
  this.nextActions = [];
172
187
  this.recipientCode = null;
173
188
  this.selectedAction.next(null);
189
+ popup.toggleDropdown();
174
190
  });
175
191
  break;
176
192
  case ActionType.PassBack:
@@ -184,6 +200,7 @@ export class MyQueueComponent extends BaseDataViewComponent {
184
200
  this.nextActions = [];
185
201
  this.recipientCode = null;
186
202
  this.selectedAction.next(null);
203
+ popup.toggleDropdown();
187
204
  });
188
205
  }
189
206
  }
@@ -198,6 +215,7 @@ export class MyQueueComponent extends BaseDataViewComponent {
198
215
  this.nextActions = [];
199
216
  this.recipientCode = null;
200
217
  this.selectedAction.next(null);
218
+ popup.toggleDropdown();
201
219
  });
202
220
  }
203
221
  break;
@@ -221,7 +239,7 @@ export class MyQueueComponent extends BaseDataViewComponent {
221
239
  });
222
240
  }
223
241
  }
224
- passOn() {
242
+ passOn(popup) {
225
243
  const nextAction = this.nextActions[0];
226
244
  // console.log(JSON.stringify(this.currentTask, null, 2));
227
245
  const selectedAction = this.selectedAction.getValue();
@@ -237,6 +255,9 @@ export class MyQueueComponent extends BaseDataViewComponent {
237
255
  this.nextActions = [];
238
256
  this.recipientCode = null;
239
257
  this.selectedAction.next(null);
258
+ if (popup) {
259
+ popup.toggleDropdown();
260
+ }
240
261
  });
241
262
  }
242
263
  }
@@ -265,11 +286,11 @@ export class MyQueueComponent extends BaseDataViewComponent {
265
286
  }
266
287
  }
267
288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyQueueComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MyQueueFacade }], target: i0.ɵɵFactoryTarget.Component });
268
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MyQueueComponent, selector: "lib-my-queue", inputs: { isGeneral: { classPropertyName: "isGeneral", publicName: "isGeneral", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: false, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: false,\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\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 />\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\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\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 class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\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 item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\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 </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-between': true,\n 'justify-end': vdcv.hasCurrentItem()\n }\"\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\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\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\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></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\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [""], 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", "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", "onItemClick", "onCardChildClick"], outputs: ["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"], 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.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { 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: i6.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
289
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MyQueueComponent, selector: "lib-my-queue", inputs: { isGeneral: { classPropertyName: "isGeneral", publicName: "isGeneral", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: false, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: false,\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer w-auto\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\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 />\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\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row, popup)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\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 class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\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 item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\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 </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-between': true,\n 'justify-end': vdcv.hasCurrentItem()\n }\"\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\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\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\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></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\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n", styles: [""], 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", "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", "onItemClick", "onCardChildClick"], outputs: ["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"], 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.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { 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: i6.FormControlComponent, selector: "form-control", inputs: ["dataType", "value", "boolInputType", "formProperties"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
269
290
  }
270
291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyQueueComponent, decorators: [{
271
292
  type: Component,
272
- args: [{ selector: 'lib-my-queue', template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: false,\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\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 />\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\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\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 class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\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 item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\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 </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-between': true,\n 'justify-end': vdcv.hasCurrentItem()\n }\"\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\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\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\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></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\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n" }]
293
+ args: [{ selector: 'lib-my-queue', template: "<div class=\"space-y-8\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: false,\n isToggle: true,\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"config.columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n [groupBy]=\"groupByWorkflowCode\"\n >\n <ng-container libColumn=\"history\">\n <ng-template #cell let-value let-deleteRow>\n <a\n [routerLink]=\"['/workflow/task-history', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view history</a\n >\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\">\n <verben-pop-Up\n #popup\n [customStyles]=\"{ 'z-index': '99' }\"\n [enableMouseLeave]=\"false\"\n [customStyles]=\"{\n border: '1px solid #d4a10780',\n borderRadius: '5px',\n backgroundColor: 'white'\n }\"\n (dropdownOpenChange)=\"handlePopupClose($event)\"\n >\n <verben-svg\n dropdown-trigger\n icon=\"dots\"\n [width]=\"4\"\n [height]=\"24\"\n class=\"cursor-pointer w-auto\"\n ></verben-svg>\n <div class=\"bg-white rounded-sm\" dropdown-content>\n @if (selectedTaskCode && activeActionType) {\n <div style=\"width: 16rem\">\n <div\n class=\"flex items-center gap-4 justify-between h-12 px-2 pt-4\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\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 />\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\n label=\"Actors\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"Select Actor\"\n [(options)]=\"nextActors\"\n id=\"actors\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n [(ngModel)]=\"recipientCode\"\n class=\"form-control\"\n >\n </verben-drop-down>\n\n <textarea\n [(ngModel)]=\"comment\"\n placeholder=\"Enter Comment\"\n class=\"w-full p-1 text-xs border border-primary rounded-md\"\n style=\"height: 8rem\"\n [cols]=\"8\"\n ></textarea>\n\n <verbena-button\n [disable]=\"!comment\"\n [text]=\"activeActionType\"\n (click)=\"handleAction(row, popup)\"\n class=\"text-xs w-full\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n fontSize=\"14px\"\n pd=\"10px 20px\"\n width=\"100%\"\n height=\"32px\"\n >\n {{ activeActionType }}\n </verbena-button>\n </div>\n </div>\n } @else { @for (item of getTableActions(row); track item.label)\n {\n <div\n (click)=\"item.action(row)\"\n class=\"cursor-pointer py-2 px-3 text-sm hover:bg-primary\"\n >\n {{ item.label }}\n </div>\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 class=\"text-center\">Actions</strong>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Id\"\n border=\"5px\"\n [cardDataList]=\"cardData()\"\n rbgColor=\"#f5f6f9\"\n mg=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Id\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData()\"\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\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 item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Status:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.Status\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <span for=\"role\" class=\"font-light\">{{\n item.data.WorkflowCode\n }}</span>\n <a\n [routerLink]=\"[\n '/workflow/task-history',\n item.data.Code\n ]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF] text-xs\"\n >view history</a\n >\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 </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-between': true,\n 'justify-end': vdcv.hasCurrentItem()\n }\"\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\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData().length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\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\n [columns]=\"config.columns\"\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n ></lib-data-columns>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <lib-data-sort\n [columns]=\"config.columns\"\n [data]=\"data()\"\n (sortApplied)=\"onSortUpdated($event)\"\n ></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\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [mode]=\"'drawer'\"\n [padding]=\"'0px'\"\n [drawerWidth]=\"'400px'\"\n [disableFooter]=\"false\"\n [isVisible]=\"isModalVisible\"\n [modalData]=\"stageForm\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [showCloseIcon]=\"false\"\n>\n</verben-dialogue>\n<ng-template #headerTemplate>\n <div class=\"bg-[#FFE681] px-6 py-4 flex justify-between items-center\">\n <h1>Form</h1>\n <verben-svg\n class=\"cursor-pointer\"\n [icon]=\"'close-circle'\"\n (click)=\"isModalVisible = false\"\n [width]=\"15\"\n [height]=\"15\"\n [stroke]=\"'#fff'\"\n ></verben-svg>\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div>\n <div *ngIf=\"stageForm?.Entities?.[active]; else emptyState\" class=\"mt-4\">\n <form-control\n [dataType]=\"dataType\"\n [formProperties]=\"stageForm?.Entities?.[active]?.Properties ?? []\"\n ></form-control>\n\n <div class=\"flex gap-3 justify-end\">\n <verbena-button\n class=\"verben-primary-button\"\n (click)=\"submitForm()\"\n [disable]=\"!areRequiredPropertiesFilled()\"\n text=\"Save\"\n ></verbena-button>\n </div>\n </div>\n\n <!-- Empty state template -->\n <ng-template #emptyState>\n <p class=\"mt-4 p-4 text-gray-600 text-center\">\n No entries available for the selected form group.\n </p>\n </ng-template>\n </div>\n</ng-template>\n" }]
273
294
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.MyQueueFacade }], propDecorators: { user: [{
274
295
  type: Input
275
296
  }] } });
@@ -284,4 +305,4 @@ var ActionType;
284
305
  ActionType["UnfollowTask"] = "UnfollowTask";
285
306
  ActionType["SkipTo"] = "SkipTo";
286
307
  })(ActionType || (ActionType = {}));
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBTXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU92QyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQTJCO0lBeUYzQztJQUFnQztJQXhGcEQsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQVU7SUFDdkIsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtRQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLG1DQUFtQztRQUNyRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUU7Z0JBQ0osRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJ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VSxRQVNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5wdXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhVmlld0NvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvRGF0YVZpZXdDb25maWcnO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uL21vZGVscy9UYXNrJztcbmltcG9ydCB7IGNvbHVtbnMgfSBmcm9tICcuL215LXF1ZXVlLmNvbHVtbnMnO1xuaW1wb3J0IHsgTXlRdWV1ZUZhY2FkZSB9IGZyb20gJy4vbXktcXVldWUuZmFjYWRlJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UtZGF0YS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVRhc2tzIH0gZnJvbSAnLi9teS1xdWV1ZS5oZWxwZXInO1xuaW1wb3J0IHsgQ2FyZERhdGEgfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgV29ya2Zsb3dBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvV29ya2Zsb3dBY3Rpb24nO1xuaW1wb3J0IHsgQWN0b3IgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWN0b3InO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uL21vZGVscy9Gb3JtJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0RhdGFUeXBlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbXktcXVldWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE15UXVldWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0YVZpZXdDb21wb25lbnQ8VGFzaz4ge1xuICBpc0dlbmVyYWwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpIHVzZXIhOiBzdHJpbmc7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8VGFzaz4gPSB7XG4gICAgZGF0YVNvdXJjZTogW10sIC8vIFBvcHVsYXRlIGZyb20gc2VydmljZVxuICAgIGNvbHVtbnM6IGNvbHVtbnMsIC8vIFlvdXIgZXhpc3RpbmcgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY2FyZERhdGFNYXBwZXI6ICh0YXNrKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHRhc2suTmFtZSxcbiAgICAgIGRhdGE6IHRhc2ssXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHRhc2suTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IHRhc2suU3RhdHVzIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHRhc2spID0+IHtcbiAgICAgIC8vIEN1c3RvbSBkZXRhaWwgdmlldyBsb2dpY1xuICAgIH0sXG4gIH07XG4gIHNlbGVjdGVkVGFza0NvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBhY3RpdmVBY3Rpb25UeXBlOiBBY3Rpb25UeXBlIHwgbnVsbCA9IG51bGw7XG4gIGNvbW1lbnQ6IHN0cmluZyA9ICcnO1xuICBpc01vZGFsVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRhYmxlUm93QWN0aW9ucyA9IFtcbiAgICAvLyB7IGxhYmVsOiAnUGljayBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgLy8geyBsYWJlbDogJ1JlbGVhc2UgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIC8vIHsgbGFiZWw6ICdGb2xsb3cgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiB0cnVlIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIE9uJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUGFzc09uO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWROZXh0QWN0aW9ucyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyAudGhlbigoYWN0aW9ucykgPT4ge1xuICAgICAgICAvLyAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IGFjdGlvbnNbMF07XG4gICAgICAgIC8vICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAvLyAgICAgICAubG9hZE5leHRBY3RvcnMoZGF0YS5Db2RlLCB0aGlzLnNlbGVjdGVkQWN0aW9uPy5Db2RlKVxuICAgICAgICAvLyAgICAgICAudGhlbigoYWN0b3JzKSA9PiB7fSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZFRhc2tGb3JtcyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFza0NvZGUpO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIEJhY2snLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlBhc3NCYWNrO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnU2tpcCBUbycsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuU2tpcFRvO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRBbGxQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUmUtQXNzaWduJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5SZUFzc2lnbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IHRydWUsXG4gICAgfSxcbiAgICAvLyB7IGxhYmVsOiAnVmlldyBPcGVyYXRpb24nLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgXTtcblxuICBuZXh0QWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXSA9IFtdO1xuICBuZXh0QWN0b3JzOiBBY3RvcltdID0gW107XG4gIHN0YWdlRm9ybTogRm9ybSB8IG51bGwgPSBudWxsO1xuICBhY3RpdmU6IG51bWJlciA9IDA7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZSA9IERhdGFUeXBlLlRleHQ7XG5cbiAgcmVjaXBpZW50Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkQWN0aW9uOiBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50VGFzazogVGFzayB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmYWNhZGU6IE15UXVldWVGYWNhZGUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0UmVxdWVzdHMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0TmV4dEFjdGlvbnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3Rpb25zID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldE5leHRBY3RvcnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3RvcnMgPSBkYXRhO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0VGFza0Zvcm1zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zdGFnZUZvcm0gPSBkYXRhPy5bMF0gfHwgbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGxvYWRJbml0aWFsRGF0YSgpIHtcbiAgICB0aGlzLmZhY2FkZS51cGRhdGVRdWVyeVBhcmFtcyh7IHVzZXI6IHRoaXMudXNlciB9KTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mYWNhZGUubG9hZFJlcXVlc3RzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDYXJkRGF0YUJ5SWRlbnRpZmllcihtYWlsQWRkcmVzczogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhKCkuZmluZCgoeyBkYXRhIH0pID0+IGRhdGEuTWFpbEFkZHJlc3MgPT09IG1haWxBZGRyZXNzKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZhY2FkZS5sb2FkTW9yZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBnZXRUYWJsZUFjdGlvbnModGFzazogVGFzaykge1xuICAgIGlmICh0YXNrLkZ1bGxTdGFnZXM/LlswXT8uSXNFbnRyeVBvaW50KSB7XG4gICAgICByZXR1cm4gdGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKFxuICAgICAgICAoeyBsYWJlbCB9KSA9PiBsYWJlbCAhPT0gJ1Bhc3MgQmFjaycgJiYgbGFiZWwgIT09ICdTa2lwIFRvJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVSb3dBY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIGdyb3VwQnlXb3JrZmxvd0NvZGUodGFzazogVGFzaykge1xuICAgIHJldHVybiBgV29ya2Zsb3c6ICR7dGFzay5Xb3JrZmxvd0NvZGV9YDtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwQ2xvc2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGb3JtVGhlblBhc3NPbih0YXNrOiBUYXNrKSB7XG4gICAgdGhpcy5jdXJyZW50VGFzayA9IHRhc2s7XG5cbiAgICAvLyBpZiAodGhpcy5zdGFnZUZvcm0pIHtcbiAgICAvLyAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSB0cnVlO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLnBhc3NPbigpO1xuICAgIC8vIH1cblxuICAgIHRoaXMucGFzc09uKCk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24odGFzazogVGFzaykge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aXZlQWN0aW9uVHlwZTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc09uOlxuICAgICAgICBjb25zb2xlLmxvZygnUGFzcyBPbiBBY3Rpb24nLCB0YXNrKTtcbiAgICAgICAgdGhpcy5jaGVja0ZvckZvcm1UaGVuUGFzc09uKHRhc2spO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5SZUFzc2lnbjpcbiAgICAgICAgdGhpcy5mYWNhZGUucmVBc3NpZ24odGFzaywgdGhpcy5jb21tZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QYXNzQmFjazpcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAgIC5wYXNzQmFjayhzZWxlY3RlZEFjdGlvbiwgdGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnJlY2lwaWVudENvZGUpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5Ta2lwVG86XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAuc2tpcFRvKHNlbGVjdGVkQWN0aW9uLCB0YXNrLCB0aGlzLmNvbW1lbnQsIHRoaXMucmVjaXBpZW50Q29kZSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzdWJtaXRGb3JtKCkge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLnN0YWdlRm9ybTtcbiAgICBpZiAoZm9ybSAmJiB0aGlzLmN1cnJlbnRUYXNrKSB7XG4gICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAuZmlsbEZvcm0oZm9ybSwgdGhpcy5jdXJyZW50VGFzay5Db2RlKVxuICAgICAgICAudGhlbigoZmlsbGVkRm9ybSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhZ2VGb3JtID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYXNzT24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZpbGxpbmcgZm9ybTonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIChlLmcuLCBzaG93IGEgbm90aWZpY2F0aW9uKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwYXNzT24oKSB7XG4gICAgY29uc3QgbmV4dEFjdGlvbiA9IHRoaXMubmV4dEFjdGlvbnNbMF07XG4gICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50VGFzaywgbnVsbCwgMikpO1xuICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb246Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IFRhc2s6JywgdGhpcy5jdXJyZW50VGFzayk7XG4gICAgY29uc29sZS5sb2coJ0NvbW1lbnQ6JywgdGhpcy5jb21tZW50KTtcbiAgICBjb25zb2xlLmxvZygnUmVjaXBpZW50IENvZGU6JywgdGhpcy5yZWNpcGllbnRDb2RlKTtcbiAgICBpZiAoc2VsZWN0ZWRBY3Rpb24gJiYgdGhpcy5jdXJyZW50VGFzayAmJiB0aGlzLmNvbW1lbnQpIHtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5wYXNzT24oXG4gICAgICAgICAgc2VsZWN0ZWRBY3Rpb24sXG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFzayxcbiAgICAgICAgICB0aGlzLmNvbW1lbnQsXG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXJlUmVxdWlyZWRQcm9wZXJ0aWVzRmlsbGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnN0YWdlRm9ybT8uRW50aXRpZXNbdGhpcy5hY3RpdmVdLlByb3BlcnRpZXMgfHwgW107XG5cbiAgICAvLyBDaGVjayBpZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllcyBoYXZlIHZhbGlkIHZhbHVlc1xuICAgIC8vIHJldHVybiBwcm9wZXJ0aWVzLmV2ZXJ5KChwcm9wZXJ0eTogYW55KSA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhwcm9wZXJ0eSk7XG4gICAgLy8gICByZXR1cm4gKFxuICAgIC8vICAgICAhcHJvcGVydHkuaXNSZXF1aXJlZCB8fFxuICAgIC8vICAgICAocHJvcGVydHkuVmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vICAgICAgIHByb3BlcnR5LlZhbHVlICE9PSBudWxsICYmXG4gICAgLy8gICAgICAgcHJvcGVydHkuVmFsdWUgIT09ICcnKVxuICAgIC8vICAgKTtcbiAgICAvLyB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9uQWN0aW9uRHJvcERvd25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gZXZlbnQgYXMgV29ya2Zsb3dBY3Rpb247XG4gICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgQWN0aW9uOicsIHNlbGVjdGVkQWN0aW9uKTtcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBzZWxlY3RlZEFjdGlvbjtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5sb2FkTmV4dEFjdG9ycyh0aGlzLnNlbGVjdGVkVGFza0NvZGUhLCBzZWxlY3RlZEFjdGlvbi5Db2RlKVxuICAgICAgICAudGhlbigoYWN0b3JzKSA9PiB7fSk7XG4gICAgfVxuICB9XG59XG5cbmVudW0gQWN0aW9uVHlwZSB7XG4gIFBpY2tUYXNrID0gJ1BpY2tUYXNrJyxcbiAgVW5QaWNrVGFzayA9ICdVblBpY2tUYXNrJyxcbiAgUmVBc3NpZ24gPSAnUmVBc3NpZ24nLFxuICBQYXNzT24gPSAnUGFzc09uJyxcbiAgUGFzc0JhY2sgPSAnUGFzc0JhY2snLFxuICBGb2xsb3dUYXNrID0gJ0ZvbGxvd1Rhc2snLFxuICBVbmZvbGxvd1Rhc2sgPSAnVW5mb2xsb3dUYXNrJyxcbiAgU2tpcFRvID0gJ1NraXBUbycsXG59XG4iLCI8ZGl2IGNsYXNzPVwic3BhY2UteS04XCI+XG4gIDx2ZXJiZW4tZGF0YS12aWV3XG4gICAgI3ZkdlxuICAgIFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiBmYWxzZSxcbiAgICAgIGlzVG9nZ2xlOiB0cnVlLFxuICAgIH1cIlxuICAgIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIlxuICAgIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIlxuICAgICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZVxuICAgICAgICBbZGF0YV09XCJkYXRhKClcIlxuICAgICAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgICAgIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZ3JvdXBCeV09XCJncm91cEJ5V29ya2Zsb3dDb2RlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJoaXN0b3J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZSBsZXQtZGVsZXRlUm93PlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvd29ya2Zsb3cvdGFzay1oaXN0b3J5JywgdmFsdWVdXCJcbiAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdXCJcbiAgICAgICAgICAgICAgPnZpZXcgaGlzdG9yeTwvYVxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcFxuICAgICAgICAgICAgICAjcG9wdXBcbiAgICAgICAgICAgICAgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCJcbiAgICAgICAgICAgICAgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cIntcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2Q0YTEwNzgwJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJ1xuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCJoYW5kbGVQb3B1cENsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwiZG90c1wiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjRcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhc2tDb2RlICYmIGFjdGl2ZUFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDE2cmVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuIGgtMTIgcHgtMiBwdC00XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBvcGFjaXR5PVwiMC42XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNzQ2NDkgOC4wMDMzOEM2LjkxNDgzIDguMTM0NyA3LjAyNTIgOC4yMDQ1NSA3LjExNTMxIDguMjkzOTZDNy45ODg0NiA5LjE2MjIyIDguODU3NDIgMTAuMDM0NyA5LjcyOTE3IDEwLjkwNUM5Ljg3MTY3IDExLjA0NzUgOS45OTM5MSAxMS4xOTIxIDkuOTkzMjEgMTEuNDEyOUM5Ljk5MjUxIDExLjY0NjIgOS44OTQ3MiAxMS44MTUyIDkuNjk1NjQgMTEuOTI1NkM5LjQ5MzA3IDEyLjAzOCA5LjI5MjYgMTIuMDIwNiA5LjEwNDY5IDExLjg4OTlDOS4wMzgzMyAxMS44NDM4IDguOTgxNzUgMTEuNzg0NSA4LjkyMzc4IDExLjcyNzJDNy44NTU3NCAxMC42NTkyIDYuNzk2NzggOS41ODIwMyA1LjcxNDc3IDguNTI4NjdDNS4zNzExIDguMTk0MDcgNS4zODQzNyA3Ljc5MTczIDUuNzA3NzkgNy40NzU5OUM2Ljc4ODQgNi40MjEyMyA3Ljg0ODc1IDUuMzQ1NTEgOC45MTUzOSA0LjI3NjA3QzkuMTEzNzcgNC4wNzc2OSA5LjMyMDU0IDMuOTIyNjIgOS42MjMgNC4wNDEzN0M5Ljk3OTI0IDQuMTgxMDcgMTAuMTEyIDQuNTg5MDEgOS44OTQ3MiA0LjkwMzM1QzkuODI5NzYgNC45OTc2NSA5Ljc0MTc0IDUuMDc3MjggOS42NjAwMiA1LjE1OTdDOC44MDY0MiA2LjAxNDY5IDcuOTUyODMgNi44Njk2OCA3LjA5NjQ1IDcuNzIyNTdDNy4wMTQ3MiA3LjgwNDMgNi45MTU1MyA3Ljg2ODU2IDYuNzQ1NzkgOC4wMDQwOEw2Ljc0NjQ5IDguMDAzMzhaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEFzc2lnbmVlPC9oMz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtMiBtYXgtaC05NiBvdmVyZmxvdy15LWF1dG8gcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cIm5leHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBY3Rpb24gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwibmV4dEFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY2lwaWVudENvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHAtMSB0ZXh0LXhzIGJvcmRlciBib3JkZXItcHJpbWFyeSByb3VuZGVkLW1kXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIiFjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVBY3Rpb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZT1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjMycHhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlQWN0aW9uVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7IEBmb3IgKGl0ZW0gb2YgZ2V0VGFibGVBY3Rpb25zKHJvdyk7IHRyYWNrIGl0ZW0ubGFiZWwpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmFjdGlvbihyb3cpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHktMiBweC0zIHRleHQtc20gaG92ZXI6YmctcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiYmctWyNGRkU2ODFdIGgtMSByb3VuZGVkLXhsIGJvcmRlci0wXCIgLz5cbiAgICAgICAgICAgICAgICB9IH0gfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInRleHQtY2VudGVyXCI+QWN0aW9uczwvc3Ryb25nPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9saWItZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXdcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTJweFwiXG4gICAgICAgIChsb2FkTW9yZUNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICAjdmRjdlxuICAgICAgICBkYXRhSWQ9XCJJZFwiXG4gICAgICAgIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiXG4gICAgICAgIG1nPVwiMjBweFwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiSWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soaXRlbSlcIiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHktMiBweC00IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlN0YXR1czo8L2xhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJwaG9uZVwiIGNsYXNzPVwidGV4dC1zbVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLlN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZvcj1cInJvbGVcIiBjbGFzcz1cImZvbnQtbGlnaHRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuV29ya2Zsb3dDb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dvcmtmbG93L3Rhc2staGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVuZGVybGluZSB0ZXh0LVsjMDAwMEZGXSB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnZpZXcgaGlzdG9yeTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW5vcm1hbCB0ZXh0LXNtXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNpSXRlbSBvZiBpdGVtLmJvZHk7IHRyYWNrIGNpSXRlbS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGZvbnQtbGlnaHQgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgY2lJdGVtLnRpdGxlIH19Ojwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmxhY2tcIj57eyBjaUl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPCEtLSA8bGliLXVzZXItcmVxdWVzdC1mb3JtXG4gICAgICAgICAgICAgIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAob25BcHByb3ZhbCk9XCJvbkFwcHJvdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9saWItdXNlci1yZXF1ZXN0LWZvcm0+IC0tPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnZmxleCBnYXAtMiBpdGVtcy1jZW50ZXInOiB0cnVlLFxuICAgICAgICAgICAgICAnanVzdGlmeS1iZXR3ZWVuJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktZW5kJzogdmRjdi5oYXNDdXJyZW50SXRlbSgpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKClcIlxuICAgICAgICAgICAgICBbZm9udFdlaWdodF09XCInYm9sZCdcIlxuICAgICAgICAgICAgICBbYmdDb2xvcl09XCInIzhFOEQ4NydcIlxuICAgICAgICAgICAgICBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgICAgICAgICBbcGRdPVwiJzkuNzlweCAzNy4yOHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3tcbiAgICAgICAgICAgICAgICB2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgPyAnZmxleC0xJyA6ICcnXG4gICAgICAgICAgICAgIH19IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIlxuICAgICAgICAgICAgICAgID57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtY29sdW1uc1xuICAgICAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgICAgIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLWRhdGEtY29sdW1ucz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIlxuICAgICAgPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1zb3J0XG4gICAgICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCJcbiAgICAgICAgKHNvcnRBcHBsaWVkKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICA+PC9saWItZGF0YS1zb3J0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGEoKVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCJcbiAgICAgICAgW2JnQ29sb3JdPVwiJyM4RThEODcnXCJcbiAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgW3BkXT1cIic5Ljc5cHggMzcuMjhweCdcIlxuICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIj57eyBjYXJkRGF0YSgpLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiXG4gICAgICA+XG4gICAgICAgIExvYWQgbW9yZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW21vZGVdPVwiJ2RyYXdlcidcIlxuICBbcGFkZGluZ109XCInMHB4J1wiXG4gIFtkcmF3ZXJXaWR0aF09XCInNDAwcHgnXCJcbiAgW2Rpc2FibGVGb290ZXJdPVwiZmFsc2VcIlxuICBbaXNWaXNpYmxlXT1cImlzTW9kYWxWaXNpYmxlXCJcbiAgW21vZGFsRGF0YV09XCJzdGFnZUZvcm1cIlxuICBbaGVhZGVyVGVtcGxhdGVdPVwiaGVhZGVyVGVtcGxhdGVcIlxuICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gIFtzaG93Q2xvc2VJY29uXT1cImZhbHNlXCJcbj5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImJnLVsjRkZFNjgxXSBweC02IHB5LTQgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XG4gICAgPGgxPkZvcm08L2gxPlxuICAgIDx2ZXJiZW4tc3ZnXG4gICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgIFtpY29uXT1cIidjbG9zZS1jaXJjbGUnXCJcbiAgICAgIChjbGljayk9XCJpc01vZGFsVmlzaWJsZSA9IGZhbHNlXCJcbiAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgIFtzdHJva2VdPVwiJyNmZmYnXCJcbiAgICA+PC92ZXJiZW4tc3ZnPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGFnZUZvcm0/LkVudGl0aWVzPy5bYWN0aXZlXTsgZWxzZSBlbXB0eVN0YXRlXCIgY2xhc3M9XCJtdC00XCI+XG4gICAgICA8Zm9ybS1jb250cm9sXG4gICAgICAgIFtkYXRhVHlwZV09XCJkYXRhVHlwZVwiXG4gICAgICAgIFtmb3JtUHJvcGVydGllc109XCJzdGFnZUZvcm0/LkVudGl0aWVzPy5bYWN0aXZlXT8uUHJvcGVydGllcyA/PyBbXVwiXG4gICAgICA+PC9mb3JtLWNvbnRyb2w+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zIGp1c3RpZnktZW5kXCI+XG4gICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCIhYXJlUmVxdWlyZWRQcm9wZXJ0aWVzRmlsbGVkKClcIlxuICAgICAgICAgIHRleHQ9XCJTYXZlXCJcbiAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRW1wdHkgc3RhdGUgdGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eVN0YXRlPlxuICAgICAgPHAgY2xhc3M9XCJtdC00IHAtNCB0ZXh0LWdyYXktNjAwIHRleHQtY2VudGVyXCI+XG4gICAgICAgIE5vIGVudHJpZXMgYXZhaWxhYmxlIGZvciB0aGUgc2VsZWN0ZWQgZm9ybSBncm91cC5cbiAgICAgIDwvcD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBTXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU92QyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQTJCO0lBMkYzQztJQUFnQztJQTFGcEQsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQVU7SUFDdkIsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtRQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLG1DQUFtQztRQUNyRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUU7Z0JBQ0osRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJ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Q3JCLCtCQUFpQixDQUFBO0lBQ2pCLG1DQUFxQixDQUFBO0lBQ3JCLHVDQUF5QixDQUFBO0lBQ3pCLDJDQUE2QixDQUFBO0lBQzdCLCtCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFUSSxVQUFVLEtBQVYsVUFBVSxRQVNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5wdXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhVmlld0NvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvRGF0YVZpZXdDb25maWcnO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uL21vZGVscy9UYXNrJztcbmltcG9ydCB7IGNvbHVtbnMgfSBmcm9tICcuL215LXF1ZXVlLmNvbHVtbnMnO1xuaW1wb3J0IHsgTXlRdWV1ZUZhY2FkZSB9IGZyb20gJy4vbXktcXVldWUuZmFjYWRlJztcbmltcG9ydCB7IEJhc2VEYXRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UtZGF0YS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVRhc2tzIH0gZnJvbSAnLi9teS1xdWV1ZS5oZWxwZXInO1xuaW1wb3J0IHsgQ2FyZERhdGEsIFZlcmJlblBvcFVwQ29tcG9uZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IFdvcmtmbG93QWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1dvcmtmbG93QWN0aW9uJztcbmltcG9ydCB7IEFjdG9yIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FjdG9yJztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi8uLi9tb2RlbHMvRm9ybSc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9EYXRhVHlwZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW15LXF1ZXVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL215LXF1ZXVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL215LXF1ZXVlLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBNeVF1ZXVlQ29tcG9uZW50IGV4dGVuZHMgQmFzZURhdGFWaWV3Q29tcG9uZW50PFRhc2s+IHtcbiAgaXNHZW5lcmFsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBASW5wdXQoKSB1c2VyITogc3RyaW5nO1xuICBjb25maWc6IERhdGFWaWV3Q29uZmlnPFRhc2s+ID0ge1xuICAgIGRhdGFTb3VyY2U6IFtdLCAvLyBQb3B1bGF0ZSBmcm9tIHNlcnZpY2VcbiAgICBjb2x1bW5zOiBjb2x1bW5zLCAvLyBZb3VyIGV4aXN0aW5nIGNvbHVtbiBkZWZpbml0aW9uc1xuICAgIGNhcmREYXRhTWFwcGVyOiAodGFzaykgPT4gKHtcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiB0YXNrLk5hbWUsXG4gICAgICBkYXRhOiB0YXNrLFxuICAgICAgYm9keTogW1xuICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiB0YXNrLk5hbWUgfSxcbiAgICAgICAgeyB0aXRsZTogJ1N0YXR1cycsIHZhbHVlOiB0YXNrLlN0YXR1cyB9LFxuICAgICAgXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9KSxcbiAgICBvbkRldGFpbFZpZXc6ICh0YXNrKSA9PiB7XG4gICAgICAvLyBDdXN0b20gZGV0YWlsIHZpZXcgbG9naWNcbiAgICB9LFxuICB9O1xuICBzZWxlY3RlZFRhc2tDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQWN0aW9uVHlwZTogQWN0aW9uVHlwZSB8IG51bGwgPSBudWxsO1xuICBjb21tZW50OiBzdHJpbmcgPSAnJztcbiAgaXNNb2RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICB0YWJsZVJvd0FjdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ1BpY2sgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdSZWxlYXNlIFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnRm9sbG93IFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdVbmZvbGxvdyBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IHRydWUgfSxcblxuICAgIHtcbiAgICAgIGxhYmVsOiAnUGFzcyBPbicsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlBhc3NPbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkTmV4dEFjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgICAgLy8gLnRoZW4oKGFjdGlvbnMpID0+IHtcbiAgICAgICAgLy8gICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBhY3Rpb25zWzBdO1xuICAgICAgICAvLyAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLy8gICAgICAgLmxvYWROZXh0QWN0b3JzKGRhdGEuQ29kZSwgdGhpcy5zZWxlY3RlZEFjdGlvbj8uQ29kZSlcbiAgICAgICAgLy8gICAgICAgLnRoZW4oKGFjdG9ycykgPT4ge30pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRUYXNrRm9ybXMoZGF0YS5Db2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRhc2tDb2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUGFzcyBCYWNrJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5QYXNzQmFjaztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkUHJldmlvdXNBY3Rpb25zKGRhdGEuQ29kZSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1NraXAgVG8nLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlNraXBUbztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkQWxsUHJldmlvdXNBY3Rpb25zKGRhdGEuQ29kZSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1JlLUFzc2lnbicsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUmVBc3NpZ247XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IGRhdGEuQ29kZTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiB0cnVlLFxuICAgIH0sXG4gICAgLy8geyBsYWJlbDogJ1ZpZXcgT3BlcmF0aW9uJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gIF07XG5cbiAgbmV4dEFjdGlvbnM6IFdvcmtmbG93QWN0aW9uW10gPSBbXTtcbiAgbmV4dEFjdG9yczogQWN0b3JbXSA9IFtdO1xuICBzdGFnZUZvcm06IEZvcm0gfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlOiBudW1iZXIgPSAwO1xuICBkYXRhVHlwZTogRGF0YVR5cGUgPSBEYXRhVHlwZS5UZXh0O1xuXG4gIHJlY2lwaWVudENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZEFjdGlvbjogQmVoYXZpb3JTdWJqZWN0PFdvcmtmbG93QWN0aW9uIHwgbnVsbD4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPihudWxsKTtcbiAgY3VycmVudFRhc2s6IFRhc2sgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZmFjYWRlOiBNeVF1ZXVlRmFjYWRlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZmFjYWRlLmdldFJlcXVlc3RzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5kYXRhLnNldChkYXRhKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldE5leHRBY3Rpb25zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IGRhdGE7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZhY2FkZS5nZXROZXh0QWN0b3JzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5uZXh0QWN0b3JzID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldFRhc2tGb3JtcyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc3RhZ2VGb3JtID0gZGF0YT8uWzBdIHx8IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkSW5pdGlhbERhdGEoKSB7XG4gICAgdGhpcy5mYWNhZGUudXBkYXRlUXVlcnlQYXJhbXMoeyB1c2VyOiB0aGlzLnVzZXIgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZmFjYWRlLmxvYWRSZXF1ZXN0cygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgZ2V0Q2FyZERhdGFCeUlkZW50aWZpZXIobWFpbEFkZHJlc3M6IHN0cmluZyk6IENhcmREYXRhIHwgdW5kZWZpbmVkIHtcbiAgLy8gICByZXR1cm4gdGhpcy5jYXJkRGF0YSgpLmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhLk1haWxBZGRyZXNzID09PSBtYWlsQWRkcmVzcyk7XG4gIC8vIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5mYWNhZGUubG9hZE1vcmUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgZ2V0VGFibGVBY3Rpb25zKHRhc2s6IFRhc2spIHtcbiAgICBjb25zdCBhY3Rpb25zID0gW10gYXMgdHlwZW9mIHRoaXMudGFibGVSb3dBY3Rpb25zO1xuICAgIGlmICh0aGlzLmlzR2VuZXJhbCgpKSB7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lcyA9IFtcbiAgICAgICAgJ1BpY2sgVGFzaycsXG4gICAgICAgICdSZWxlYXNlIFRhc2snLFxuICAgICAgICAnRm9sbG93IFRhc2snLFxuICAgICAgICAnVW5mb2xsb3cgVGFzaycsXG4gICAgICBdO1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAuLi50aGlzLnRhYmxlUm93QWN0aW9ucy5maWx0ZXIoKHsgbGFiZWwgfSkgPT5cbiAgICAgICAgICBhY3Rpb25OYW1lcy5pbmNsdWRlcyhsYWJlbClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWN0aW9uTmFtZXMgPSBbJ1Bhc3MgT24nLCAnUGFzcyBCYWNrJywgJ1NraXAgVG8nLCAnUmUtQXNzaWduJ107XG4gICAgICBpZiAodGFzay5GdWxsU3RhZ2VzPy5bMF0/LklzRW50cnlQb2ludCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKHsgbGFiZWwgfSkgPT4gYWN0aW9uTmFtZXMuaW5jbHVkZXMobGFiZWwpICYmIGxhYmVsICE9PSAnUGFzcyBCYWNrJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLnRhYmxlUm93QWN0aW9ucy5maWx0ZXIoKHsgbGFiZWwgfSkgPT5cbiAgICAgICAgICAgIGFjdGlvbk5hbWVzLmluY2x1ZGVzKGxhYmVsKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGdyb3VwQnlXb3JrZmxvd0NvZGUodGFzazogVGFzaykge1xuICAgIHJldHVybiBgV29ya2Zsb3c6ICR7dGFzay5Xb3JrZmxvd0NvZGV9YDtcbiAgfVxuXG4gIGhhbmRsZVBvcHVwQ2xvc2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JGb3JtVGhlblBhc3NPbih0YXNrOiBUYXNrLCBwb3B1cD86IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jdXJyZW50VGFzayA9IHRhc2s7XG5cbiAgICAvLyBpZiAodGhpcy5zdGFnZUZvcm0pIHtcbiAgICAvLyAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSB0cnVlO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLnBhc3NPbigpO1xuICAgIC8vIH1cblxuICAgIHRoaXMucGFzc09uKHBvcHVwKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbih0YXNrOiBUYXNrLCBwb3B1cDogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGl2ZUFjdGlvblR5cGU7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBhc3NPbjpcbiAgICAgICAgY29uc29sZS5sb2coJ1Bhc3MgT24gQWN0aW9uJywgdGFzayk7XG4gICAgICAgIHRoaXMuY2hlY2tGb3JGb3JtVGhlblBhc3NPbih0YXNrLCBwb3B1cCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlJlQXNzaWduOlxuICAgICAgICB0aGlzLmZhY2FkZS5yZUFzc2lnbih0YXNrLCB0aGlzLmNvbW1lbnQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc0JhY2s6XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAgICAgICAucGFzc0JhY2soc2VsZWN0ZWRBY3Rpb24sIHRhc2ssIHRoaXMuY29tbWVudCwgdGhpcy5yZWNpcGllbnRDb2RlKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5Ta2lwVG86XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAuc2tpcFRvKHNlbGVjdGVkQWN0aW9uLCB0YXNrLCB0aGlzLmNvbW1lbnQsIHRoaXMucmVjaXBpZW50Q29kZSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzdWJtaXRGb3JtKCkge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLnN0YWdlRm9ybTtcbiAgICBpZiAoZm9ybSAmJiB0aGlzLmN1cnJlbnRUYXNrKSB7XG4gICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAuZmlsbEZvcm0oZm9ybSwgdGhpcy5jdXJyZW50VGFzay5Db2RlKVxuICAgICAgICAudGhlbigoZmlsbGVkRm9ybSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhZ2VGb3JtID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYXNzT24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZpbGxpbmcgZm9ybTonLCBlcnJvcik7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yIChlLmcuLCBzaG93IGEgbm90aWZpY2F0aW9uKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwYXNzT24ocG9wdXA/OiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIGNvbnN0IG5leHRBY3Rpb24gPSB0aGlzLm5leHRBY3Rpb25zWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudFRhc2ssIG51bGwsIDIpKTtcbiAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgQWN0aW9uOicsIHNlbGVjdGVkQWN0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnQ3VycmVudCBUYXNrOicsIHRoaXMuY3VycmVudFRhc2spO1xuICAgIGNvbnNvbGUubG9nKCdDb21tZW50OicsIHRoaXMuY29tbWVudCk7XG4gICAgY29uc29sZS5sb2coJ1JlY2lwaWVudCBDb2RlOicsIHRoaXMucmVjaXBpZW50Q29kZSk7XG4gICAgaWYgKHNlbGVjdGVkQWN0aW9uICYmIHRoaXMuY3VycmVudFRhc2sgJiYgdGhpcy5jb21tZW50KSB7XG4gICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAucGFzc09uKFxuICAgICAgICAgIHNlbGVjdGVkQWN0aW9uLFxuICAgICAgICAgIHRoaXMuY3VycmVudFRhc2ssXG4gICAgICAgICAgdGhpcy5jb21tZW50LFxuICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZVxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG5cbiAgICAgICAgICBpZiAocG9wdXApIHtcbiAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhcmVSZXF1aXJlZFByb3BlcnRpZXNGaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuc3RhZ2VGb3JtPy5FbnRpdGllc1t0aGlzLmFjdGl2ZV0uUHJvcGVydGllcyB8fCBbXTtcblxuICAgIC8vIENoZWNrIGlmIGFsbCByZXF1aXJlZCBwcm9wZXJ0aWVzIGhhdmUgdmFsaWQgdmFsdWVzXG4gICAgLy8gcmV0dXJuIHByb3BlcnRpZXMuZXZlcnkoKHByb3BlcnR5OiBhbnkpID0+IHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKHByb3BlcnR5KTtcbiAgICAvLyAgIHJldHVybiAoXG4gICAgLy8gICAgICFwcm9wZXJ0eS5pc1JlcXVpcmVkIHx8XG4gICAgLy8gICAgIChwcm9wZXJ0eS5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgLy8gICAgICAgcHJvcGVydHkuVmFsdWUgIT09IG51bGwgJiZcbiAgICAvLyAgICAgICBwcm9wZXJ0eS5WYWx1ZSAhPT0gJycpXG4gICAgLy8gICApO1xuICAgIC8vIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25BY3Rpb25Ecm9wRG93bkNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSBldmVudCBhcyBXb3JrZmxvd0FjdGlvbjtcbiAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb246Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZEFjdGlvbiA9IHNlbGVjdGVkQWN0aW9uO1xuICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLmxvYWROZXh0QWN0b3JzKHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSEsIHNlbGVjdGVkQWN0aW9uLkNvZGUpXG4gICAgICAgIC50aGVuKChhY3RvcnMpID0+IHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZW51bSBBY3Rpb25UeXBlIHtcbiAgUGlja1Rhc2sgPSAnUGlja1Rhc2snLFxuICBVblBpY2tUYXNrID0gJ1VuUGlja1Rhc2snLFxuICBSZUFzc2lnbiA9ICdSZUFzc2lnbicsXG4gIFBhc3NPbiA9ICdQYXNzT24nLFxuICBQYXNzQmFjayA9ICdQYXNzQmFjaycsXG4gIEZvbGxvd1Rhc2sgPSAnRm9sbG93VGFzaycsXG4gIFVuZm9sbG93VGFzayA9ICdVbmZvbGxvd1Rhc2snLFxuICBTa2lwVG8gPSAnU2tpcFRvJyxcbn1cbiIsIjxkaXYgY2xhc3M9XCJzcGFjZS15LThcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXdcbiAgICAjdmR2XG4gICAgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICAgaXNDcmVhdGU6IGZhbHNlLFxuICAgICAgaXNUb2dnbGU6IHRydWUsXG4gICAgfVwiXG4gICAgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiXG4gICAgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiXG4gICAgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiXG4gICAgW3NlbGVjdGVkU29ydENvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwiMFwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPGRpdiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICAgIFtkYXRhXT1cImRhdGEoKVwiXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcbiAgICAgICAgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtncm91cEJ5XT1cImdyb3VwQnlXb3JrZmxvd0NvZGVcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImhpc3RvcnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlIGxldC1kZWxldGVSb3c+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy93b3JrZmxvdy90YXNrLWhpc3RvcnknLCB2YWx1ZV1cIlxuICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl1cIlxuICAgICAgICAgICAgICA+dmlldyBoaXN0b3J5PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwXG4gICAgICAgICAgICAgICNwb3B1cFxuICAgICAgICAgICAgICBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwie1xuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDRhMTA3ODAnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzVweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cImhhbmRsZVBvcHVwQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgZHJvcGRvd24tdHJpZ2dlclxuICAgICAgICAgICAgICAgIGljb249XCJkb3RzXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIyNFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB3LWF1dG9cIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgcm91bmRlZC1zbVwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZFRhc2tDb2RlICYmIGFjdGl2ZUFjdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDE2cmVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1iZXR3ZWVuIGgtMTIgcHgtMiBwdC00XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBvcGFjaXR5PVwiMC42XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNzQ2NDkgOC4wMDMzOEM2LjkxNDgzIDguMTM0NyA3LjAyNTIgOC4yMDQ1NSA3LjExNTMxIDguMjkzOTZDNy45ODg0NiA5LjE2MjIyIDguODU3NDIgMTAuMDM0NyA5LjcyOTE3IDEwLjkwNUM5Ljg3MTY3IDExLjA0NzUgOS45OTM5MSAxMS4xOTIxIDkuOTkzMjEgMTEuNDEyOUM5Ljk5MjUxIDExLjY0NjIgOS44OTQ3MiAxMS44MTUyIDkuNjk1NjQgMTEuOTI1NkM5LjQ5MzA3IDEyLjAzOCA5LjI5MjYgMTIuMDIwNiA5LjEwNDY5IDExLjg4OTlDOS4wMzgzMyAxMS44NDM4IDguOTgxNzUgMTEuNzg0NSA4LjkyMzc4IDExLjcyNzJDNy44NTU3NCAxMC42NTkyIDYuNzk2NzggOS41ODIwMyA1LjcxNDc3IDguNTI4NjdDNS4zNzExIDguMTk0MDcgNS4zODQzNyA3Ljc5MTczIDUuNzA3NzkgNy40NzU5OUM2Ljc4ODQgNi40MjEyMyA3Ljg0ODc1IDUuMzQ1NTEgOC45MTUzOSA0LjI3NjA3QzkuMTEzNzcgNC4wNzc2OSA5LjMyMDU0IDMuOTIyNjIgOS42MjMgNC4wNDEzN0M5Ljk3OTI0IDQuMTgxMDcgMTAuMTEyIDQuNTg5MDEgOS44OTQ3MiA0LjkwMzM1QzkuODI5NzYgNC45OTc2NSA5Ljc0MTc0IDUuMDc3MjggOS42NjAwMiA1LjE1OTdDOC44MDY0MiA2LjAxNDY5IDcuOTUyODMgNi44Njk2OCA3LjA5NjQ1IDcuNzIyNTdDNy4wMTQ3MiA3LjgwNDMgNi45MTU1MyA3Ljg2ODU2IDYuNzQ1NzkgOC4wMDQwOEw2Ljc0NjQ5IDguMDAzMzhaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEFzc2lnbmVlPC9oMz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAtMiBtYXgtaC05NiBvdmVyZmxvdy15LWF1dG8gcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG9wdGlvbnMpXT1cIm5leHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBY3Rpb24gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRBY3Rpb24ubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwibmV4dEFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY2lwaWVudENvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHAtMSB0ZXh0LXhzIGJvcmRlciBib3JkZXItcHJpbWFyeSByb3VuZGVkLW1kXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogOHJlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHNdPVwiOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIiFjb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJhY3RpdmVBY3Rpb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uKHJvdywgcG9wdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU9XCIxNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzMnB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2ZUFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2UgeyBAZm9yIChpdGVtIG9mIGdldFRhYmxlQWN0aW9ucyhyb3cpOyB0cmFjayBpdGVtLmxhYmVsKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5hY3Rpb24ocm93KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHB5LTIgcHgtMyB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cImJnLVsjRkZFNjgxXSBoLTEgcm91bmRlZC14bCBib3JkZXItMFwiIC8+XG4gICAgICAgICAgICAgICAgfSB9IH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cbiAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkFjdGlvbnM8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgI3ZkY3ZcbiAgICAgICAgZGF0YUlkPVwiSWRcIlxuICAgICAgICBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIlxuICAgICAgICBtZz1cIjIwcHhcIlxuICAgICAgPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhXG4gICAgICAgICAgICAjdmxjZFxuICAgICAgICAgICAgW3BhcmVudF09XCJ2ZGN2XCJcbiAgICAgICAgICAgIGRhdGFJZD1cIklkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiXG4gICAgICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnREYXRhID0gdmRjdi5vbkl0ZW1DbGljayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB5LTIgcHgtNCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5TdGF0dXM6PC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc21cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5TdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBnYXAteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmb3I9XCJyb2xlXCIgY2xhc3M9XCJmb250LWxpZ2h0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLldvcmtmbG93Q29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93b3JrZmxvdy90YXNrLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmUgdGV4dC1bIzAwMDBGRl0gdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID52aWV3IGhpc3Rvcnk8L2FcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ub3JtYWwgdGV4dC1zbVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjaUl0ZW0gb2YgaXRlbS5ib2R5OyB0cmFjayBjaUl0ZW0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBmb250LWxpZ2h0IHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNpSXRlbS50aXRsZSB9fTo8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsYWNrXCI+e3sgY2lJdGVtLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDwhLS0gPGxpYi11c2VyLXJlcXVlc3QtZm9ybVxuICAgICAgICAgICAgICBbY3VycmVudERhdGFdPVwiY3VycmVudERhdGFcIlxuICAgICAgICAgICAgICAoc3dpdGNoVmlldyk9XCJ2ZHYudG9nZ2xlVmlldygpXCJcbiAgICAgICAgICAgICAgKG9uQXBwcm92YWwpPVwib25BcHByb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgPjwvbGliLXVzZXItcmVxdWVzdC1mb3JtPiAtLT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ZsZXggZ2FwLTIgaXRlbXMtY2VudGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktYmV0d2Vlbic6IHRydWUsXG4gICAgICAgICAgICAgICdqdXN0aWZ5LWVuZCc6IHZkY3YuaGFzQ3VycmVudEl0ZW0oKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhdmRjdi5oYXNDdXJyZW50SXRlbSgpXCJcbiAgICAgICAgICAgICAgW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCJcbiAgICAgICAgICAgICAgW2JnQ29sb3JdPVwiJyM4RThEODcnXCJcbiAgICAgICAgICAgICAgW2JvcmRlclJhZGl1c109XCInNHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgICAgICAgW3BkXT1cIic5Ljc5cHggMzcuMjhweCdcIlxuICAgICAgICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHt7XG4gICAgICAgICAgICAgICAgdmRjdi5oYXNDdXJyZW50SXRlbSgpID8gJ2ZsZXgtMScgOiAnJ1xuICAgICAgICAgICAgICB9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCJcbiAgICAgICAgICAgICAgICA+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIExvYWQgbW9yZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWNvbHVtbnNcbiAgICAgICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxuICAgICAgICAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgID48L2xpYi1kYXRhLWNvbHVtbnM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDIwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIlxuICAgICAgICB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCJcbiAgICAgID48L3ZlcmJlbi10YWJsZS1maWx0ZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtc29ydFxuICAgICAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgICAgIFtkYXRhXT1cImRhdGEoKVwiXG4gICAgICAgIChzb3J0QXBwbGllZCk9XCJvblNvcnRVcGRhdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLWRhdGEtc29ydD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhKClcIiAoZXhwb3J0RGF0YUV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1kYXRhLWV4cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuXG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEoKS5sZW5ndGggfX0gcmVjb3JkcyBsb2FkZWQ8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIlxuICAgICAgPlxuICAgICAgICBMb2FkIG1vcmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48dmVyYmVuLWRpYWxvZ3VlXG4gIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFttb2RlXT1cIidkcmF3ZXInXCJcbiAgW3BhZGRpbmddPVwiJzBweCdcIlxuICBbZHJhd2VyV2lkdGhdPVwiJzQwMHB4J1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJpc01vZGFsVmlzaWJsZVwiXG4gIFttb2RhbERhdGFdPVwic3RhZ2VGb3JtXCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXG4+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJiZy1bI0ZGRTY4MV0gcHgtNiBweS00IGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgIDxoMT5Gb3JtPC9oMT5cbiAgICA8dmVyYmVuLXN2Z1xuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICBbaWNvbl09XCInY2xvc2UtY2lyY2xlJ1wiXG4gICAgICAoY2xpY2spPVwiaXNNb2RhbFZpc2libGUgPSBmYWxzZVwiXG4gICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICBbc3Ryb2tlXT1cIicjZmZmJ1wiXG4gICAgPjwvdmVyYmVuLXN2Zz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV07IGVsc2UgZW1wdHlTdGF0ZVwiIGNsYXNzPVwibXQtNFwiPlxuICAgICAgPGZvcm0tY29udHJvbFxuICAgICAgICBbZGF0YVR5cGVdPVwiZGF0YVR5cGVcIlxuICAgICAgICBbZm9ybVByb3BlcnRpZXNdPVwic3RhZ2VGb3JtPy5FbnRpdGllcz8uW2FjdGl2ZV0/LlByb3BlcnRpZXMgPz8gW11cIlxuICAgICAgPjwvZm9ybS1jb250cm9sPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMyBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiXG4gICAgICAgICAgW2Rpc2FibGVdPVwiIWFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpXCJcbiAgICAgICAgICB0ZXh0PVwiU2F2ZVwiXG4gICAgICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IHN0YXRlIHRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0ZT5cbiAgICAgIDxwIGNsYXNzPVwibXQtNCBwLTQgdGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICBObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgdGhlIHNlbGVjdGVkIGZvcm0gZ3JvdXAuXG4gICAgICA8L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19