verben-workflow-ui 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/my-queue/my-queue.columns.mjs +6 -1
- package/esm2022/lib/components/my-queue/my-queue.component.mjs +56 -7
- package/esm2022/lib/components/my-queue/my-queue.facade.mjs +8 -5
- package/esm2022/lib/components/my-queue/my-queue.module.mjs +4 -3
- package/esm2022/lib/components/my-queue/my-queue.state.mjs +2 -2
- package/esm2022/lib/components/my-queue/tasks.form.component.mjs +147 -0
- package/esm2022/lib/components/task-history/task-history.component.mjs +3 -3
- package/esm2022/lib/components/tasks/tasks.columns.mjs +1 -6
- package/esm2022/lib/components/tasks/tasks.service.mjs +2 -2
- package/esm2022/lib/components/tasks/tasks.state.mjs +2 -2
- package/esm2022/lib/components/workflows/workflows.component.mjs +3 -3
- package/esm2022/lib/components/workflows/workflows.facade.mjs +2 -2
- package/esm2022/lib/components/workflows/workflows.service.mjs +2 -2
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-workflow-ui.mjs +218 -33
- package/fesm2022/verben-workflow-ui.mjs.map +1 -1
- package/lib/components/my-queue/my-queue.component.d.ts +4 -0
- package/lib/components/my-queue/my-queue.facade.d.ts +1 -0
- package/lib/components/my-queue/my-queue.module.d.ts +7 -6
- package/lib/components/my-queue/tasks.form.component.d.ts +36 -0
- package/package.json +1 -1
|
@@ -19,6 +19,11 @@ export const columns = [
|
|
|
19
19
|
header: 'HISTORY',
|
|
20
20
|
accessorKey: 'Code',
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
id: 'workflow',
|
|
24
|
+
header: 'WORKFLOW',
|
|
25
|
+
accessorKey: 'WorkflowCode',
|
|
26
|
+
},
|
|
22
27
|
{ id: 'actions', header: 'Actions' },
|
|
23
28
|
];
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29sdW1ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvbXktcXVldWUvbXktcXVldWUuY29sdW1ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCO0lBQy9DO1FBQ0UsRUFBRSxFQUFFLE1BQU07UUFDVixNQUFNLEVBQUUsTUFBTTtRQUNkLFdBQVcsRUFBRSxNQUFNO0tBQ3BCO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsT0FBTztRQUNYLE1BQU0sRUFBRSxPQUFPO1FBQ2YsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDbEIsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQzthQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUNuRCxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDVjtJQUNEO1FBQ0UsRUFBRSxFQUFFLFNBQVM7UUFDYixNQUFNLEVBQUUsU0FBUztRQUNqQixXQUFXLEVBQUUsTUFBTTtLQUNwQjtJQUNEO1FBQ0UsRUFBRSxFQUFFLFVBQVU7UUFDZCxNQUFNLEVBQUUsVUFBVTtRQUNsQixXQUFXLEVBQUUsY0FBYztLQUM1QjtJQUNELEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0NBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi9tb2RlbHMvVGFzayc7XG5cbmV4cG9ydCBjb25zdCBjb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFRhc2s+W10gPSBbXG4gIHtcbiAgICBpZDogJ3Rhc2snLFxuICAgIGhlYWRlcjogJ1RBU0snLFxuICAgIGFjY2Vzc29yS2V5OiAnTmFtZScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3N0YWdlJyxcbiAgICBoZWFkZXI6ICdTVEFHRScsXG4gICAgYWNjZXNzb3JGbjogKHJvdykgPT5cbiAgICAgIHJvdy5GdWxsU3RhZ2VzPy5zbGljZSgwLCAzKVxuICAgICAgICA/Lm1hcCgoeyBOYW1lIH0pID0+IE5hbWUpXG4gICAgICAgIC5qb2luKCcsICcpICtcbiAgICAgIChyb3cuRnVsbFN0YWdlcz8ubGVuZ3RoICYmIHJvdy5GdWxsU3RhZ2VzPy5sZW5ndGggPiAzXG4gICAgICAgID8gYCAuLi4gKyAke3Jvdy5GdWxsU3RhZ2VzPy5sZW5ndGggLSAzfWBcbiAgICAgICAgOiAnJyksXG4gIH0sXG4gIHtcbiAgICBpZDogJ2hpc3RvcnknLFxuICAgIGhlYWRlcjogJ0hJU1RPUlknLFxuICAgIGFjY2Vzc29yS2V5OiAnQ29kZScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3dvcmtmbG93JyxcbiAgICBoZWFkZXI6ICdXT1JLRkxPVycsXG4gICAgYWNjZXNzb3JLZXk6ICdXb3JrZmxvd0NvZGUnLFxuICB9LFxuICB7IGlkOiAnYWN0aW9ucycsIGhlYWRlcjogJ0FjdGlvbnMnIH0sXG5dO1xuIl19
|
|
@@ -3,6 +3,9 @@ import { columns } from './my-queue.columns';
|
|
|
3
3
|
import { BaseDataViewComponent } from '../../shared/components/base-data-view.component';
|
|
4
4
|
import { DataType } from '../../models/DataType';
|
|
5
5
|
import { BehaviorSubject } from 'rxjs';
|
|
6
|
+
import { TaskStatus } from '../../models/TaskStatus';
|
|
7
|
+
import { TaskModel } from '../tasks/tasks.models';
|
|
8
|
+
import { ObjectState } from '../../models/object-state';
|
|
6
9
|
import * as i0 from "@angular/core";
|
|
7
10
|
import * as i1 from "./my-queue.facade";
|
|
8
11
|
import * as i2 from "@angular/common";
|
|
@@ -113,6 +116,14 @@ export class MyQueueComponent extends BaseDataViewComponent {
|
|
|
113
116
|
this.facade.getTaskForms$().subscribe((data) => {
|
|
114
117
|
this.stageForm = data?.[0] || null;
|
|
115
118
|
});
|
|
119
|
+
this.selectedAction.subscribe((action) => {
|
|
120
|
+
if (action) {
|
|
121
|
+
this.facade.loadNextActors(this.selectedTaskCode, action.ToStage);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
this.nextActors = [];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
116
127
|
}
|
|
117
128
|
loadInitialData() {
|
|
118
129
|
this.facade.updateQueryParams({ user: this.user });
|
|
@@ -279,18 +290,56 @@ export class MyQueueComponent extends BaseDataViewComponent {
|
|
|
279
290
|
const selectedAction = event;
|
|
280
291
|
if (selectedAction) {
|
|
281
292
|
console.log('Selected Action:', selectedAction);
|
|
282
|
-
// this.selectedAction = selectedAction;
|
|
283
|
-
this.facade
|
|
284
|
-
|
|
285
|
-
|
|
293
|
+
// // this.selectedAction = selectedAction;
|
|
294
|
+
// this.facade
|
|
295
|
+
// .loadNextActors(this.selectedTaskCode!, selectedAction.Code)
|
|
296
|
+
// .then((actors) => {});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
onStateChange(event) {
|
|
300
|
+
switch (event.key) {
|
|
301
|
+
case 'create':
|
|
302
|
+
var newItem = new TaskModel({
|
|
303
|
+
WorkflowCode: '',
|
|
304
|
+
Status: TaskStatus.Active,
|
|
305
|
+
Flowable: '',
|
|
306
|
+
FlowableData: null,
|
|
307
|
+
FlowablePath: '',
|
|
308
|
+
CurrentActors: [],
|
|
309
|
+
DataState: ObjectState.New,
|
|
310
|
+
});
|
|
311
|
+
this.facade.addNewRequest(newItem);
|
|
312
|
+
// const cardData: CardData = {
|
|
313
|
+
// selected: false,
|
|
314
|
+
// title: ,
|
|
315
|
+
// data: newGroup,
|
|
316
|
+
// body: [],
|
|
317
|
+
// children: [],
|
|
318
|
+
// };
|
|
319
|
+
// this.data = this.data.concat([newGroup]);
|
|
320
|
+
// this.cardData.push(cardData);
|
|
321
|
+
// this.userCardClicked(cardData);
|
|
322
|
+
this.dataView.isTableView = false;
|
|
323
|
+
break;
|
|
324
|
+
// case 'filter':
|
|
325
|
+
// this.showFilter = event.value;
|
|
326
|
+
// break;
|
|
327
|
+
// case 'sort':
|
|
328
|
+
// this.showSort = event.value;
|
|
329
|
+
// break;
|
|
330
|
+
// case 'column':
|
|
331
|
+
// this.showColumn = event.value;
|
|
332
|
+
// break;
|
|
333
|
+
default:
|
|
334
|
+
break;
|
|
286
335
|
}
|
|
287
336
|
}
|
|
288
337
|
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 });
|
|
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" }] });
|
|
338
|
+
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: isGeneral(),\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=\"workflow\">\n <ng-template #cell let-value>\n <a\n [routerLink]=\"['/workflows', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view Workflow</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\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex\"\n >\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\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" }] });
|
|
290
339
|
}
|
|
291
340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyQueueComponent, decorators: [{
|
|
292
341
|
type: Component,
|
|
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" }]
|
|
342
|
+
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: isGeneral(),\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=\"workflow\">\n <ng-template #cell let-value>\n <a\n [routerLink]=\"['/workflows', value]\"\n routerLinkActive=\"router-link-active\"\n class=\"underline text-[#0000FF]\"\n >view Workflow</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\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\n class=\"flex\"\n >\n <div\n (click)=\"\n currentData = isGeneral() ? vdcv.onItemClick(item) : null\n \"\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" }]
|
|
294
343
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.MyQueueFacade }], propDecorators: { user: [{
|
|
295
344
|
type: Input
|
|
296
345
|
}] } });
|
|
@@ -305,4 +354,4 @@ var ActionType;
|
|
|
305
354
|
ActionType["UnfollowTask"] = "UnfollowTask";
|
|
306
355
|
ActionType["SkipTo"] = "SkipTo";
|
|
307
356
|
})(ActionType || (ActionType = {}));
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBTXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU92QyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQTJCO0lBMkYzQztJQUFnQztJQTFGcEQsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQVU7SUFDdkIsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtRQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLG1DQUFtQztRQUNyRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUU7Z0JBQ0osRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJ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SUFDekIsbUNBQXFCLENBQUE7SUFDckIsK0JBQWlCLENBQUE7SUFDakIsbUNBQXFCLENBQUE7SUFDckIsdUNBQXlCLENBQUE7SUFDekIsMkNBQTZCLENBQUE7SUFDN0IsK0JBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVRJLFVBQVUsS0FBVixVQUFVLFFBU2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbnB1dCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFWaWV3Q29uZmlnIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9EYXRhVmlld0NvbmZpZyc7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Rhc2snO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vbXktcXVldWUuY29sdW1ucyc7XG5pbXBvcnQgeyBNeVF1ZXVlRmFjYWRlIH0gZnJvbSAnLi9teS1xdWV1ZS5mYWNhZGUnO1xuaW1wb3J0IHsgQmFzZURhdGFWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYmFzZS1kYXRhLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IGdlbmVyYXRlVGFza3MgfSBmcm9tICcuL215LXF1ZXVlLmhlbHBlcic7XG5pbXBvcnQgeyBDYXJkRGF0YSwgVmVyYmVuUG9wVXBDb21wb25lbnQgfSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgV29ya2Zsb3dBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvV29ya2Zsb3dBY3Rpb24nO1xuaW1wb3J0IHsgQWN0b3IgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWN0b3InO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uL21vZGVscy9Gb3JtJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0RhdGFUeXBlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbXktcXVldWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbXktcXVldWUuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIE15UXVldWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0YVZpZXdDb21wb25lbnQ8VGFzaz4ge1xuICBpc0dlbmVyYWwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpIHVzZXIhOiBzdHJpbmc7XG4gIGNvbmZpZzogRGF0YVZpZXdDb25maWc8VGFzaz4gPSB7XG4gICAgZGF0YVNvdXJjZTogW10sIC8vIFBvcHVsYXRlIGZyb20gc2VydmljZVxuICAgIGNvbHVtbnM6IGNvbHVtbnMsIC8vIFlvdXIgZXhpc3RpbmcgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY2FyZERhdGFNYXBwZXI6ICh0YXNrKSA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgdGl0bGU6IHRhc2suTmFtZSxcbiAgICAgIGRhdGE6IHRhc2ssXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IHRhc2suTmFtZSB9LFxuICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IHRhc2suU3RhdHVzIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pLFxuICAgIG9uRGV0YWlsVmlldzogKHRhc2spID0+IHtcbiAgICAgIC8vIEN1c3RvbSBkZXRhaWwgdmlldyBsb2dpY1xuICAgIH0sXG4gIH07XG4gIHNlbGVjdGVkVGFza0NvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBhY3RpdmVBY3Rpb25UeXBlOiBBY3Rpb25UeXBlIHwgbnVsbCA9IG51bGw7XG4gIGNvbW1lbnQ6IHN0cmluZyA9ICcnO1xuICBpc01vZGFsVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRhYmxlUm93QWN0aW9ucyA9IFtcbiAgICB7IGxhYmVsOiAnUGljayBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gICAgeyBsYWJlbDogJ1JlbGVhc2UgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdGb2xsb3cgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiB0cnVlIH0sXG4gICAgeyBsYWJlbDogJ1VuZm9sbG93IFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogdHJ1ZSB9LFxuXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIE9uJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUGFzc09uO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWROZXh0QWN0aW9ucyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyAudGhlbigoYWN0aW9ucykgPT4ge1xuICAgICAgICAvLyAgIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbiA9IGFjdGlvbnNbMF07XG4gICAgICAgIC8vICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAvLyAgICAgICAubG9hZE5leHRBY3RvcnMoZGF0YS5Db2RlLCB0aGlzLnNlbGVjdGVkQWN0aW9uPy5Db2RlKVxuICAgICAgICAvLyAgICAgICAudGhlbigoYWN0b3JzKSA9PiB7fSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgICAgdGhpcy5mYWNhZGUubG9hZFRhc2tGb3JtcyhkYXRhLkNvZGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFza0NvZGUpO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdQYXNzIEJhY2snLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlBhc3NCYWNrO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnU2tpcCBUbycsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuU2tpcFRvO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBkYXRhLkNvZGU7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRBbGxQcmV2aW91c0FjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUmUtQXNzaWduJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5SZUFzc2lnbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgfSxcbiAgICAgIGRpdmlkZXI6IHRydWUsXG4gICAgfSxcbiAgICAvLyB7IGxhYmVsOiAnVmlldyBPcGVyYXRpb24nLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgXTtcblxuICBuZXh0QWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXSA9IFtdO1xuICBuZXh0QWN0b3JzOiBBY3RvcltdID0gW107XG4gIHN0YWdlRm9ybTogRm9ybSB8IG51bGwgPSBudWxsO1xuICBhY3RpdmU6IG51bWJlciA9IDA7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZSA9IERhdGFUeXBlLlRleHQ7XG5cbiAgcmVjaXBpZW50Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkQWN0aW9uOiBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxXb3JrZmxvd0FjdGlvbiB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50VGFzazogVGFzayB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBmYWNhZGU6IE15UXVldWVGYWNhZGUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0UmVxdWVzdHMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0TmV4dEFjdGlvbnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3Rpb25zID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldE5leHRBY3RvcnMkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLm5leHRBY3RvcnMgPSBkYXRhO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mYWNhZGUuZ2V0VGFza0Zvcm1zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zdGFnZUZvcm0gPSBkYXRhPy5bMF0gfHwgbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGxvYWRJbml0aWFsRGF0YSgpIHtcbiAgICB0aGlzLmZhY2FkZS51cGRhdGVRdWVyeVBhcmFtcyh7IHVzZXI6IHRoaXMudXNlciB9KTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5mYWNhZGUubG9hZFJlcXVlc3RzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8vIHByb3RlY3RlZCBnZXRDYXJkRGF0YUJ5SWRlbnRpZmllcihtYWlsQWRkcmVzczogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAvLyAgIHJldHVybiB0aGlzLmNhcmREYXRhKCkuZmluZCgoeyBkYXRhIH0pID0+IGRhdGEuTWFpbEFkZHJlc3MgPT09IG1haWxBZGRyZXNzKTtcbiAgLy8gfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZhY2FkZS5sb2FkTW9yZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICB9XG4gIH1cblxuICBnZXRUYWJsZUFjdGlvbnModGFzazogVGFzaykge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbXSBhcyB0eXBlb2YgdGhpcy50YWJsZVJvd0FjdGlvbnM7XG4gICAgaWYgKHRoaXMuaXNHZW5lcmFsKCkpIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWVzID0gW1xuICAgICAgICAnUGljayBUYXNrJyxcbiAgICAgICAgJ1JlbGVhc2UgVGFzaycsXG4gICAgICAgICdGb2xsb3cgVGFzaycsXG4gICAgICAgICdVbmZvbGxvdyBUYXNrJyxcbiAgICAgIF07XG4gICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgIC4uLnRoaXMudGFibGVSb3dBY3Rpb25zLmZpbHRlcigoeyBsYWJlbCB9KSA9PlxuICAgICAgICAgIGFjdGlvbk5hbWVzLmluY2x1ZGVzKGxhYmVsKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lcyA9IFsnUGFzcyBPbicsICdQYXNzIEJhY2snLCAnU2tpcCBUbycsICdSZS1Bc3NpZ24nXTtcbiAgICAgIGlmICh0YXNrLkZ1bGxTdGFnZXM/LlswXT8uSXNFbnRyeVBvaW50KSB7XG4gICAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLnRhYmxlUm93QWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAoeyBsYWJlbCB9KSA9PiBhY3Rpb25OYW1lcy5pbmNsdWRlcyhsYWJlbCkgJiYgbGFiZWwgIT09ICdQYXNzIEJhY2snXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMudGFibGVSb3dBY3Rpb25zLmZpbHRlcigoeyBsYWJlbCB9KSA9PlxuICAgICAgICAgICAgYWN0aW9uTmFtZXMuaW5jbHVkZXMobGFiZWwpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9XG5cbiAgZ3JvdXBCeVdvcmtmbG93Q29kZSh0YXNrOiBUYXNrKSB7XG4gICAgcmV0dXJuIGBXb3JrZmxvdzogJHt0YXNrLldvcmtmbG93Q29kZX1gO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBDbG9zZShldmVudDogYm9vbGVhbikge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckZvcm1UaGVuUGFzc09uKHRhc2s6IFRhc2ssIHBvcHVwPzogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICB0aGlzLmN1cnJlbnRUYXNrID0gdGFzaztcblxuICAgIC8vIGlmICh0aGlzLnN0YWdlRm9ybSkge1xuICAgIC8vICAgdGhpcy5pc01vZGFsVmlzaWJsZSA9IHRydWU7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHRoaXMucGFzc09uKCk7XG4gICAgLy8gfVxuXG4gICAgdGhpcy5wYXNzT24ocG9wdXApO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uKHRhc2s6IFRhc2ssIHBvcHVwOiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aXZlQWN0aW9uVHlwZTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc09uOlxuICAgICAgICBjb25zb2xlLmxvZygnUGFzcyBPbiBBY3Rpb24nLCB0YXNrKTtcbiAgICAgICAgdGhpcy5jaGVja0ZvckZvcm1UaGVuUGFzc09uKHRhc2ssIHBvcHVwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUmVBc3NpZ246XG4gICAgICAgIHRoaXMuZmFjYWRlLnJlQXNzaWduKHRhc2ssIHRoaXMuY29tbWVudCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb21tZW50ID0gJyc7XG4gICAgICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFjdGlvbi5uZXh0KG51bGwpO1xuICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QYXNzQmFjazpcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgICAgICAgIC5wYXNzQmFjayhzZWxlY3RlZEFjdGlvbiwgdGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnJlY2lwaWVudENvZGUpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBUbzpcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkQWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgICAgIC5za2lwVG8oc2VsZWN0ZWRBY3Rpb24sIHRhc2ssIHRoaXMuY29tbWVudCwgdGhpcy5yZWNpcGllbnRDb2RlKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIHBvcHVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdEZvcm0oKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuc3RhZ2VGb3JtO1xuICAgIGlmIChmb3JtICYmIHRoaXMuY3VycmVudFRhc2spIHtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5maWxsRm9ybShmb3JtLCB0aGlzLmN1cnJlbnRUYXNrLkNvZGUpXG4gICAgICAgIC50aGVuKChmaWxsZWRGb3JtKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFnZUZvcm0gPSBudWxsO1xuICAgICAgICAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnBhc3NPbigpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmlsbGluZyBmb3JtOicsIGVycm9yKTtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgKGUuZy4sIHNob3cgYSBub3RpZmljYXRpb24pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHBhc3NPbihwb3B1cD86IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgY29uc3QgbmV4dEFjdGlvbiA9IHRoaXMubmV4dEFjdGlvbnNbMF07XG4gICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50VGFzaywgbnVsbCwgMikpO1xuICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBBY3Rpb246Jywgc2VsZWN0ZWRBY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IFRhc2s6JywgdGhpcy5jdXJyZW50VGFzayk7XG4gICAgY29uc29sZS5sb2coJ0NvbW1lbnQ6JywgdGhpcy5jb21tZW50KTtcbiAgICBjb25zb2xlLmxvZygnUmVjaXBpZW50IENvZGU6JywgdGhpcy5yZWNpcGllbnRDb2RlKTtcbiAgICBpZiAoc2VsZWN0ZWRBY3Rpb24gJiYgdGhpcy5jdXJyZW50VGFzayAmJiB0aGlzLmNvbW1lbnQpIHtcbiAgICAgIHRoaXMuZmFjYWRlXG4gICAgICAgIC5wYXNzT24oXG4gICAgICAgICAgc2VsZWN0ZWRBY3Rpb24sXG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFzayxcbiAgICAgICAgICB0aGlzLmNvbW1lbnQsXG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlLFxuICAgICAgICAgIHRoaXMudXNlclxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+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
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktcXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy9teS1xdWV1ZS9teS1xdWV1ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL215LXF1ZXVlL215LXF1ZXVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBTXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEscUJBQTJCO0lBNEYzQztJQUFnQztJQTNGcEQsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQVU7SUFDdkIsTUFBTSxHQUF5QjtRQUM3QixVQUFVLEVBQUUsRUFBRSxFQUFFLHdCQUF3QjtRQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLG1DQUFtQztRQUNyRCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFD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QTBXUixJQUFLLFVBU0o7QUFURCxXQUFLLFVBQVU7SUFDYixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QixtQ0FBcUIsQ0FBQTtJQUNyQiwrQkFBaUIsQ0FBQTtJQUNqQixtQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBeUIsQ0FBQTtJQUN6QiwyQ0FBNkIsQ0FBQTtJQUM3QiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVEksVUFBVSxLQUFWLFVBQVUsUUFTZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGlucHV0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVZpZXdDb25maWcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0RhdGFWaWV3Q29uZmlnJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi9tb2RlbHMvVGFzayc7XG5pbXBvcnQgeyBjb2x1bW5zIH0gZnJvbSAnLi9teS1xdWV1ZS5jb2x1bW5zJztcbmltcG9ydCB7IE15UXVldWVGYWNhZGUgfSBmcm9tICcuL215LXF1ZXVlLmZhY2FkZSc7XG5pbXBvcnQgeyBCYXNlRGF0YVZpZXdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29tcG9uZW50cy9iYXNlLWRhdGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUYXNrcyB9IGZyb20gJy4vbXktcXVldWUuaGVscGVyJztcbmltcG9ydCB7IENhcmREYXRhLCBWZXJiZW5Qb3BVcENvbXBvbmVudCB9IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9Xb3JrZmxvd0FjdGlvbic7XG5pbXBvcnQgeyBBY3RvciB9IGZyb20gJy4uLy4uL21vZGVscy9BY3Rvcic7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Zvcm0nO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvRGF0YVR5cGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYXNrU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Rhc2tTdGF0dXMnO1xuaW1wb3J0IHsgVGFza01vZGVsIH0gZnJvbSAnLi4vdGFza3MvdGFza3MubW9kZWxzJztcbmltcG9ydCB7IE9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL29iamVjdC1zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1teS1xdWV1ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9teS1xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9teS1xdWV1ZS5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgTXlRdWV1ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRhVmlld0NvbXBvbmVudDxUYXNrPiB7XG4gIGlzR2VuZXJhbCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KCkgdXNlciE6IHN0cmluZztcbiAgY29uZmlnOiBEYXRhVmlld0NvbmZpZzxUYXNrPiA9IHtcbiAgICBkYXRhU291cmNlOiBbXSwgLy8gUG9wdWxhdGUgZnJvbSBzZXJ2aWNlXG4gICAgY29sdW1uczogY29sdW1ucywgLy8gWW91ciBleGlzdGluZyBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjYXJkRGF0YU1hcHBlcjogKHRhc2spID0+ICh7XG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICB0aXRsZTogdGFzay5OYW1lLFxuICAgICAgZGF0YTogdGFzayxcbiAgICAgIGJvZHk6IFtcbiAgICAgICAgeyB0aXRsZTogJ05hbWUnLCB2YWx1ZTogdGFzay5OYW1lIH0sXG4gICAgICAgIHsgdGl0bGU6ICdTdGF0dXMnLCB2YWx1ZTogdGFzay5TdGF0dXMgfSxcbiAgICAgIF0sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfSksXG4gICAgb25EZXRhaWxWaWV3OiAodGFzaykgPT4ge1xuICAgICAgLy8gQ3VzdG9tIGRldGFpbCB2aWV3IGxvZ2ljXG4gICAgfSxcbiAgfTtcblxuICBzZWxlY3RlZFRhc2tDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQWN0aW9uVHlwZTogQWN0aW9uVHlwZSB8IG51bGwgPSBudWxsO1xuICBjb21tZW50OiBzdHJpbmcgPSAnJztcbiAgaXNNb2RhbFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICB0YWJsZVJvd0FjdGlvbnMgPSBbXG4gICAgeyBsYWJlbDogJ1BpY2sgVGFzaycsIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHt9LCBkaXZpZGVyOiBmYWxzZSB9LFxuICAgIHsgbGFiZWw6ICdSZWxlYXNlIFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogZmFsc2UgfSxcbiAgICB7IGxhYmVsOiAnRm9sbG93IFRhc2snLCBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7fSwgZGl2aWRlcjogdHJ1ZSB9LFxuICAgIHsgbGFiZWw6ICdVbmZvbGxvdyBUYXNrJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IHRydWUgfSxcblxuICAgIHtcbiAgICAgIGxhYmVsOiAnUGFzcyBPbicsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlBhc3NPbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkTmV4dEFjdGlvbnMoZGF0YS5Db2RlKTtcbiAgICAgICAgLy8gLnRoZW4oKGFjdGlvbnMpID0+IHtcbiAgICAgICAgLy8gICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24gPSBhY3Rpb25zWzBdO1xuICAgICAgICAvLyAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLy8gICAgICAgLmxvYWROZXh0QWN0b3JzKGRhdGEuQ29kZSwgdGhpcy5zZWxlY3RlZEFjdGlvbj8uQ29kZSlcbiAgICAgICAgLy8gICAgICAgLnRoZW4oKGFjdG9ycykgPT4ge30pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSk7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWRUYXNrRm9ybXMoZGF0YS5Db2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRhc2tDb2RlKTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnUGFzcyBCYWNrJyxcbiAgICAgIGFjdGlvbjogKGRhdGE6IFRhc2spID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVBY3Rpb25UeXBlID0gQWN0aW9uVHlwZS5QYXNzQmFjaztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkUHJldmlvdXNBY3Rpb25zKGRhdGEuQ29kZSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1NraXAgVG8nLFxuICAgICAgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge1xuICAgICAgICB0aGlzLmFjdGl2ZUFjdGlvblR5cGUgPSBBY3Rpb25UeXBlLlNraXBUbztcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tDb2RlID0gZGF0YS5Db2RlO1xuICAgICAgICB0aGlzLmZhY2FkZS5sb2FkQWxsUHJldmlvdXNBY3Rpb25zKGRhdGEuQ29kZSk7XG4gICAgICB9LFxuICAgICAgZGl2aWRlcjogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ1JlLUFzc2lnbicsXG4gICAgICBhY3Rpb246IChkYXRhOiBUYXNrKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlQWN0aW9uVHlwZSA9IEFjdGlvblR5cGUuUmVBc3NpZ247XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSA9IGRhdGEuQ29kZTtcbiAgICAgIH0sXG4gICAgICBkaXZpZGVyOiB0cnVlLFxuICAgIH0sXG4gICAgLy8geyBsYWJlbDogJ1ZpZXcgT3BlcmF0aW9uJywgYWN0aW9uOiAoZGF0YTogVGFzaykgPT4ge30sIGRpdmlkZXI6IGZhbHNlIH0sXG4gIF07XG5cbiAgbmV4dEFjdGlvbnM6IFdvcmtmbG93QWN0aW9uW10gPSBbXTtcbiAgbmV4dEFjdG9yczogQWN0b3JbXSA9IFtdO1xuICBzdGFnZUZvcm06IEZvcm0gfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlOiBudW1iZXIgPSAwO1xuICBkYXRhVHlwZTogRGF0YVR5cGUgPSBEYXRhVHlwZS5UZXh0O1xuXG4gIHJlY2lwaWVudENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZEFjdGlvbjogQmVoYXZpb3JTdWJqZWN0PFdvcmtmbG93QWN0aW9uIHwgbnVsbD4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8V29ya2Zsb3dBY3Rpb24gfCBudWxsPihudWxsKTtcbiAgY3VycmVudFRhc2s6IFRhc2sgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZmFjYWRlOiBNeVF1ZXVlRmFjYWRlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZmFjYWRlLmdldFJlcXVlc3RzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5kYXRhLnNldChkYXRhKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldE5leHRBY3Rpb25zJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5uZXh0QWN0aW9ucyA9IGRhdGE7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZhY2FkZS5nZXROZXh0QWN0b3JzJCgpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5uZXh0QWN0b3JzID0gZGF0YTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmFjYWRlLmdldFRhc2tGb3JtcyQoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc3RhZ2VGb3JtID0gZGF0YT8uWzBdIHx8IG51bGw7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLnN1YnNjcmliZSgoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZmFjYWRlLmxvYWROZXh0QWN0b3JzKHRoaXMuc2VsZWN0ZWRUYXNrQ29kZSEsIGFjdGlvbi5Ub1N0YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmV4dEFjdG9ycyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbG9hZEluaXRpYWxEYXRhKCkge1xuICAgIHRoaXMuZmFjYWRlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHsgdXNlcjogdGhpcy51c2VyIH0pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmZhY2FkZS5sb2FkUmVxdWVzdHMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgfVxuICB9XG5cbiAgLy8gcHJvdGVjdGVkIGdldENhcmREYXRhQnlJZGVudGlmaWVyKG1haWxBZGRyZXNzOiBzdHJpbmcpOiBDYXJkRGF0YSB8IHVuZGVmaW5lZCB7XG4gIC8vICAgcmV0dXJuIHRoaXMuY2FyZERhdGEoKS5maW5kKCh7IGRhdGEgfSkgPT4gZGF0YS5NYWlsQWRkcmVzcyA9PT0gbWFpbEFkZHJlc3MpO1xuICAvLyB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmFjYWRlLmxvYWRNb3JlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGdldFRhYmxlQWN0aW9ucyh0YXNrOiBUYXNrKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFtdIGFzIHR5cGVvZiB0aGlzLnRhYmxlUm93QWN0aW9ucztcbiAgICBpZiAodGhpcy5pc0dlbmVyYWwoKSkge1xuICAgICAgY29uc3QgYWN0aW9uTmFtZXMgPSBbXG4gICAgICAgICdQaWNrIFRhc2snLFxuICAgICAgICAnUmVsZWFzZSBUYXNrJyxcbiAgICAgICAgJ0ZvbGxvdyBUYXNrJyxcbiAgICAgICAgJ1VuZm9sbG93IFRhc2snLFxuICAgICAgXTtcbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKCh7IGxhYmVsIH0pID0+XG4gICAgICAgICAgYWN0aW9uTmFtZXMuaW5jbHVkZXMobGFiZWwpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdGlvbk5hbWVzID0gWydQYXNzIE9uJywgJ1Bhc3MgQmFjaycsICdTa2lwIFRvJywgJ1JlLUFzc2lnbiddO1xuICAgICAgaWYgKHRhc2suRnVsbFN0YWdlcz8uWzBdPy5Jc0VudHJ5UG9pbnQpIHtcbiAgICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMudGFibGVSb3dBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICh7IGxhYmVsIH0pID0+IGFjdGlvbk5hbWVzLmluY2x1ZGVzKGxhYmVsKSAmJiBsYWJlbCAhPT0gJ1Bhc3MgQmFjaydcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgLi4udGhpcy50YWJsZVJvd0FjdGlvbnMuZmlsdGVyKCh7IGxhYmVsIH0pID0+XG4gICAgICAgICAgICBhY3Rpb25OYW1lcy5pbmNsdWRlcyhsYWJlbClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICBncm91cEJ5V29ya2Zsb3dDb2RlKHRhc2s6IFRhc2spIHtcbiAgICByZXR1cm4gYFdvcmtmbG93OiAke3Rhc2suV29ya2Zsb3dDb2RlfWA7XG4gIH1cblxuICBoYW5kbGVQb3B1cENsb3NlKGV2ZW50OiBib29sZWFuKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFza0NvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yRm9ybVRoZW5QYXNzT24odGFzazogVGFzaywgcG9wdXA/OiBWZXJiZW5Qb3BVcENvbXBvbmVudCkge1xuICAgIHRoaXMuY3VycmVudFRhc2sgPSB0YXNrO1xuXG4gICAgLy8gaWYgKHRoaXMuc3RhZ2VGb3JtKSB7XG4gICAgLy8gICB0aGlzLmlzTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgdGhpcy5wYXNzT24oKTtcbiAgICAvLyB9XG5cbiAgICB0aGlzLnBhc3NPbihwb3B1cCk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24odGFzazogVGFzaywgcG9wdXA6IFZlcmJlblBvcFVwQ29tcG9uZW50KSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3RpdmVBY3Rpb25UeXBlO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5QYXNzT246XG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXNzIE9uIEFjdGlvbicsIHRhc2spO1xuICAgICAgICB0aGlzLmNoZWNrRm9yRm9ybVRoZW5QYXNzT24odGFzaywgcG9wdXApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5SZUFzc2lnbjpcbiAgICAgICAgdGhpcy5mYWNhZGUucmVBc3NpZ24odGFzaywgdGhpcy5jb21tZW50KS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgdGhpcy5yZWNpcGllbnRDb2RlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWN0aW9uLm5leHQobnVsbCk7XG4gICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBhc3NCYWNrOlxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQWN0aW9uID0gdGhpcy5zZWxlY3RlZEFjdGlvbi5nZXRWYWx1ZSgpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgICAgICAgLnBhc3NCYWNrKHNlbGVjdGVkQWN0aW9uLCB0YXNrLCB0aGlzLmNvbW1lbnQsIHRoaXMucmVjaXBpZW50Q29kZSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICBwb3B1cC50b2dnbGVEcm9wZG93bigpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuU2tpcFRvOlxuICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IHRoaXMuc2VsZWN0ZWRBY3Rpb24uZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRBY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmZhY2FkZVxuICAgICAgICAgICAgLnNraXBUbyhzZWxlY3RlZEFjdGlvbiwgdGFzaywgdGhpcy5jb21tZW50LCB0aGlzLnJlY2lwaWVudENvZGUpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgICAgICB0aGlzLm5leHRBY3Rpb25zID0gW107XG4gICAgICAgICAgICAgIHRoaXMucmVjaXBpZW50Q29kZSA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0Rm9ybSgpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5zdGFnZUZvcm07XG4gICAgaWYgKGZvcm0gJiYgdGhpcy5jdXJyZW50VGFzaykge1xuICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLmZpbGxGb3JtKGZvcm0sIHRoaXMuY3VycmVudFRhc2suQ29kZSlcbiAgICAgICAgLnRoZW4oKGZpbGxlZEZvcm0pID0+IHtcbiAgICAgICAgICB0aGlzLnN0YWdlRm9ybSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5pc01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucGFzc09uKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmaWxsaW5nIGZvcm06JywgZXJyb3IpO1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciAoZS5nLiwgc2hvdyBhIG5vdGlmaWNhdGlvbilcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcGFzc09uKHBvcHVwPzogVmVyYmVuUG9wVXBDb21wb25lbnQpIHtcbiAgICBjb25zdCBuZXh0QWN0aW9uID0gdGhpcy5uZXh0QWN0aW9uc1swXTtcbiAgICAvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRUYXNrLCBudWxsLCAyKSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRBY3Rpb24gPSB0aGlzLnNlbGVjdGVkQWN0aW9uLmdldFZhbHVlKCk7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbjonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgVGFzazonLCB0aGlzLmN1cnJlbnRUYXNrKTtcbiAgICBjb25zb2xlLmxvZygnQ29tbWVudDonLCB0aGlzLmNvbW1lbnQpO1xuICAgIGNvbnNvbGUubG9nKCdSZWNpcGllbnQgQ29kZTonLCB0aGlzLnJlY2lwaWVudENvZGUpO1xuICAgIGlmIChzZWxlY3RlZEFjdGlvbiAmJiB0aGlzLmN1cnJlbnRUYXNrICYmIHRoaXMuY29tbWVudCkge1xuICAgICAgdGhpcy5mYWNhZGVcbiAgICAgICAgLnBhc3NPbihcbiAgICAgICAgICBzZWxlY3RlZEFjdGlvbixcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYXNrLFxuICAgICAgICAgIHRoaXMuY29tbWVudCxcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUsXG4gICAgICAgICAgdGhpcy51c2VyXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMubmV4dEFjdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlY2lwaWVudENvZGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY3Rpb24ubmV4dChudWxsKTtcblxuICAgICAgICAgIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgcG9wdXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFyZVJlcXVpcmVkUHJvcGVydGllc0ZpbGxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5zdGFnZUZvcm0/LkVudGl0aWVzW3RoaXMuYWN0aXZlXS5Qcm9wZXJ0aWVzIHx8IFtdO1xuXG4gICAgLy8gQ2hlY2sgaWYgYWxsIHJlcXVpcmVkIHByb3BlcnRpZXMgaGF2ZSB2YWxpZCB2YWx1ZXNcbiAgICAvLyByZXR1cm4gcHJvcGVydGllcy5ldmVyeSgocHJvcGVydHk6IGFueSkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2cocHJvcGVydHkpO1xuICAgIC8vICAgcmV0dXJuIChcbiAgICAvLyAgICAgIXByb3BlcnR5LmlzUmVxdWlyZWQgfHxcbiAgICAvLyAgICAgKHByb3BlcnR5LlZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyAgICAgICBwcm9wZXJ0eS5WYWx1ZSAhPT0gbnVsbCAmJlxuICAgIC8vICAgICAgIHByb3BlcnR5LlZhbHVlICE9PSAnJylcbiAgICAvLyAgICk7XG4gICAgLy8gfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbkFjdGlvbkRyb3BEb3duQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZWxlY3RlZEFjdGlvbiA9IGV2ZW50IGFzIFdvcmtmbG93QWN0aW9uO1xuICAgIGlmIChzZWxlY3RlZEFjdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIEFjdGlvbjonLCBzZWxlY3RlZEFjdGlvbik7XG4gICAgICAvLyAvLyB0aGlzLnNlbGVjdGVkQWN0aW9uID0gc2VsZWN0ZWRBY3Rpb247XG4gICAgICAvLyB0aGlzLmZhY2FkZVxuICAgICAgLy8gICAubG9hZE5leHRBY3RvcnModGhpcy5zZWxlY3RlZFRhc2tDb2RlISwgc2VsZWN0ZWRBY3Rpb24uQ29kZSlcbiAgICAgIC8vICAgLnRoZW4oKGFjdG9ycykgPT4ge30pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgdmFyIG5ld0l0ZW06IFRhc2sgPSBuZXcgVGFza01vZGVsKHtcbiAgICAgICAgICBXb3JrZmxvd0NvZGU6ICcnLFxuICAgICAgICAgIFN0YXR1czogVGFza1N0YXR1cy5BY3RpdmUsXG4gICAgICAgICAgRmxvd2FibGU6ICcnLFxuICAgICAgICAgIEZsb3dhYmxlRGF0YTogbnVsbCxcbiAgICAgICAgICBGbG93YWJsZVBhdGg6ICcnLFxuICAgICAgICAgIEN1cnJlbnRBY3RvcnM6IFtdLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICB9KSBhcyB1bmtub3duIGFzIFRhc2s7XG4gICAgICAgIHRoaXMuZmFjYWRlLmFkZE5ld1JlcXVlc3QobmV3SXRlbSk7XG4gICAgICAgIC8vIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgLy8gICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIC8vICAgdGl0bGU6ICxcbiAgICAgICAgLy8gICBkYXRhOiBuZXdHcm91cCxcbiAgICAgICAgLy8gICBib2R5OiBbXSxcbiAgICAgICAgLy8gICBjaGlsZHJlbjogW10sXG4gICAgICAgIC8vIH07XG4gICAgICAgIC8vIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoW25ld0dyb3VwXSk7XG4gICAgICAgIC8vIHRoaXMuY2FyZERhdGEucHVzaChjYXJkRGF0YSk7XG4gICAgICAgIC8vIHRoaXMudXNlckNhcmRDbGlja2VkKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5pc1RhYmxlVmlldyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAvLyAgIHRoaXMuc2hvd0ZpbHRlciA9IGV2ZW50LnZhbHVlO1xuICAgICAgLy8gICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ3NvcnQnOlxuICAgICAgLy8gICB0aGlzLnNob3dTb3J0ID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnY29sdW1uJzpcbiAgICAgIC8vICAgdGhpcy5zaG93Q29sdW1uID0gZXZlbnQudmFsdWU7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmVudW0gQWN0aW9uVHlwZSB7XG4gIFBpY2tUYXNrID0gJ1BpY2tUYXNrJyxcbiAgVW5QaWNrVGFzayA9ICdVblBpY2tUYXNrJyxcbiAgUmVBc3NpZ24gPSAnUmVBc3NpZ24nLFxuICBQYXNzT24gPSAnUGFzc09uJyxcbiAgUGFzc0JhY2sgPSAnUGFzc0JhY2snLFxuICBGb2xsb3dUYXNrID0gJ0ZvbGxvd1Rhc2snLFxuICBVbmZvbGxvd1Rhc2sgPSAnVW5mb2xsb3dUYXNrJyxcbiAgU2tpcFRvID0gJ1NraXBUbycsXG59XG4iLCI8ZGl2IGNsYXNzPVwic3BhY2UteS04XCI+XG4gIDx2ZXJiZW4tZGF0YS12aWV3XG4gICAgI3ZkdlxuICAgIFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgIGlzQ3JlYXRlOiBpc0dlbmVyYWwoKSxcbiAgICAgIGlzVG9nZ2xlOiB0cnVlLFxuICAgIH1cIlxuICAgIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIlxuICAgIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIlxuICAgICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZVxuICAgICAgICBbZGF0YV09XCJkYXRhKClcIlxuICAgICAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgICAgIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZ3JvdXBCeV09XCJncm91cEJ5V29ya2Zsb3dDb2RlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJoaXN0b3J5XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZSBsZXQtZGVsZXRlUm93PlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvd29ya2Zsb3cvdGFzay1oaXN0b3J5JywgdmFsdWVdXCJcbiAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdXCJcbiAgICAgICAgICAgICAgPnZpZXcgaGlzdG9yeTwvYVxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwid29ya2Zsb3dcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvd29ya2Zsb3dzJywgdmFsdWVdXCJcbiAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidW5kZXJsaW5lIHRleHQtWyMwMDAwRkZdXCJcbiAgICAgICAgICAgICAgPnZpZXcgV29ya2Zsb3c8L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgPHZlcmJlbi1wb3AtVXBcbiAgICAgICAgICAgICAgI3BvcHVwXG4gICAgICAgICAgICAgIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICc5OScgfVwiXG4gICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2N1c3RvbVN0eWxlc109XCJ7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNkNGExMDc4MCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNXB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZSdcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIChkcm9wZG93bk9wZW5DaGFuZ2UpPVwiaGFuZGxlUG9wdXBDbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgaWNvbj1cImRvdHNcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCI0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjI0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHctYXV0b1wiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSByb3VuZGVkLXNtXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGFza0NvZGUgJiYgYWN0aXZlQWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTZyZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWJldHdlZW4gaC0xMiBweC0yIHB0LTRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxnIG9wYWNpdHk9XCIwLjZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi43NDY0OSA4LjAwMzM4QzYuOTE0ODMgOC4xMzQ3IDcuMDI1MiA4LjIwNDU1IDcuMTE1MzEgOC4yOTM5NkM3Ljk4ODQ2IDkuMTYyMjIgOC44NTc0MiAxMC4wMzQ3IDkuNzI5MTcgMTAuOTA1QzkuODcxNjcgMTEuMDQ3NSA5Ljk5MzkxIDExLjE5MjEgOS45OTMyMSAxMS40MTI5QzkuOTkyNTEgMTEuNjQ2MiA5Ljg5NDcyIDExLjgxNTIgOS42OTU2NCAxMS45MjU2QzkuNDkzMDcgMTIuMDM4IDkuMjkyNiAxMi4wMjA2IDkuMTA0NjkgMTEuODg5OUM5LjAzODMzIDExLjg0MzggOC45ODE3NSAxMS43ODQ1IDguOTIzNzggMTEuNzI3MkM3Ljg1NTc0IDEwLjY1OTIgNi43OTY3OCA5LjU4MjAzIDUuNzE0NzcgOC41Mjg2N0M1LjM3MTEgOC4xOTQwNyA1LjM4NDM3IDcuNzkxNzMgNS43MDc3OSA3LjQ3NTk5QzYuNzg4NCA2LjQyMTIzIDcuODQ4NzUgNS4zNDU1MSA4LjkxNTM5IDQuMjc2MDdDOS4xMTM3NyA0LjA3NzY5IDkuMzIwNTQgMy45MjI2MiA5LjYyMyA0LjA0MTM3QzkuOTc5MjQgNC4xODEwNyAxMC4xMTIgNC41ODkwMSA5Ljg5NDcyIDQuOTAzMzVDOS44Mjk3NiA0Ljk5NzY1IDkuNzQxNzQgNS4wNzcyOCA5LjY2MDAyIDUuMTU5N0M4LjgwNjQyIDYuMDE0NjkgNy45NTI4MyA2Ljg2OTY4IDcuMDk2NDUgNy43MjI1N0M3LjAxNDcyIDcuODA0MyA2LjkxNTUzIDcuODY4NTYgNi43NDU3OSA4LjAwNDA4TDYuNzQ2NDkgOC4wMDMzOFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIj5TZWxlY3QgQXNzaWduZWU8L2gzPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdhcC0yIG1heC1oLTk2IG92ZXJmbG93LXktYXV0byBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFsob3B0aW9ucyldPVwibmV4dEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEFjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZEFjdGlvbi5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBBY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhvcHRpb25zKV09XCJuZXh0QWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFjdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cIkNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVjaXBpZW50Q29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ29tbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0xIHRleHQteHMgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHJvdW5kZWQtbWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA4cmVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sc109XCI4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiIWNvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImFjdGl2ZUFjdGlvblR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb24ocm93LCBwb3B1cClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZT1cIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjMycHhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlQWN0aW9uVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7IEBmb3IgKGl0ZW0gb2YgZ2V0VGFibGVBY3Rpb25zKHJvdyk7IHRyYWNrIGl0ZW0ubGFiZWwpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmFjdGlvbihyb3cpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHktMiBweC0zIHRleHQtc20gaG92ZXI6YmctcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiYmctWyNGRkU2ODFdIGgtMSByb3VuZGVkLXhsIGJvcmRlci0wXCIgLz5cbiAgICAgICAgICAgICAgICB9IH0gfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxuICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInRleHQtY2VudGVyXCI+QWN0aW9uczwvc3Ryb25nPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9saWItZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXdcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTJweFwiXG4gICAgICAgIChsb2FkTW9yZUNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICAjdmRjdlxuICAgICAgICBkYXRhSWQ9XCJJZFwiXG4gICAgICAgIGJvcmRlcj1cIjVweFwiXG4gICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiXG4gICAgICAgIG1nPVwiMjBweFwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiSWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGEoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSBpc0dlbmVyYWwoKSA/IHZkY3Yub25JdGVtQ2xpY2soaXRlbSkgOiBudWxsXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0YSA9IGlzR2VuZXJhbCgpID8gdmRjdi5vbkl0ZW1DbGljayhpdGVtKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCJcbiAgICAgICAgICAgICAgICA+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
|