tango-app-ui-store-builder 1.0.74 → 1.0.76
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/ivm-logic-explorer/ivm-logic-explorer.component.mjs +26 -3
- package/esm2022/lib/components/manage-plano/onboard-table/onboard-table.component.mjs +4 -2
- package/esm2022/lib/components/manage-plano/rollout-table/rollout-table.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +5 -6
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +26 -8
- package/esm2022/lib/components/manage-store-plano/popups/schedule-task-popup/schedule-task-popup.component.mjs +64 -33
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +17 -17
- package/esm2022/lib/components/onboard-store-plano/create-planogram/create-planogram.component.mjs +23 -4
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +9 -11
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +1538 -0
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +13 -6
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/services/store-builder.service.mjs +4 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +6 -1
- package/esm2022/lib/tango-store-builder.module.mjs +4 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +1874 -239
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/ivm-logic-explorer/ivm-logic-explorer.component.d.ts +1 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/popups/schedule-task-popup/schedule-task-popup.component.d.ts +4 -1
- package/lib/components/onboard-store-plano/create-planogram/create-planogram.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +0 -1
- package/lib/components/plano-tools/cad-render/cad-render.component.d.ts +84 -0
- package/lib/services/store-builder.service.d.ts +1 -0
- package/lib/tango-store-builder.module.d.ts +46 -45
- package/package.json +1 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { DatePipe, NgClass, NgFor, NgStyle } from "@angular/common";
|
|
2
2
|
import { Component, Input } from "@angular/core";
|
|
3
|
-
import
|
|
3
|
+
import { finalize } from "rxjs";
|
|
4
4
|
import { DatePickerComponent } from "../../../date-picker/date-picker.component";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
7
|
+
import * as i2 from "projects/tango-store-builder/src/lib/services/store-builder.service";
|
|
7
8
|
export class ScheduleTaskPopupComponent {
|
|
8
9
|
activeModal;
|
|
10
|
+
apiService;
|
|
9
11
|
fixtures;
|
|
10
12
|
storeName;
|
|
11
13
|
mbqItems = [];
|
|
@@ -13,17 +15,19 @@ export class ScheduleTaskPopupComponent {
|
|
|
13
15
|
today = new Date();
|
|
14
16
|
scheduledDate;
|
|
15
17
|
showInfoBanner = false;
|
|
18
|
+
isDownloadButtonLoading = false;
|
|
16
19
|
sortOrder = 1;
|
|
17
20
|
sortedColumn = "";
|
|
18
21
|
numericColumns = new Set(["partition", "standardCapacity"]);
|
|
19
|
-
constructor(activeModal) {
|
|
22
|
+
constructor(activeModal, apiService) {
|
|
20
23
|
this.activeModal = activeModal;
|
|
24
|
+
this.apiService = apiService;
|
|
21
25
|
}
|
|
22
26
|
ngOnInit() {
|
|
23
27
|
// Collect all unique zone names across all fixtures in insertion order
|
|
24
28
|
const zoneSet = new Set();
|
|
25
29
|
for (const f of this.fixtures) {
|
|
26
|
-
for (const s of
|
|
30
|
+
for (const s of f?.shelfConfig ?? []) {
|
|
27
31
|
if (s.zone)
|
|
28
32
|
zoneSet.add(s.zone);
|
|
29
33
|
}
|
|
@@ -57,31 +61,58 @@ export class ScheduleTaskPopupComponent {
|
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
downloadMBQSheet() {
|
|
60
|
-
const headers = [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
];
|
|
70
|
-
const rows = this.mbqItems.map((item) => [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
])
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
XLSX.utils.
|
|
83
|
-
const
|
|
84
|
-
XLSX.
|
|
64
|
+
// const headers = [
|
|
65
|
+
// "Wall/Floor",
|
|
66
|
+
// "UFN",
|
|
67
|
+
// "Brand Category",
|
|
68
|
+
// "Type",
|
|
69
|
+
// "Size",
|
|
70
|
+
// "Partition",
|
|
71
|
+
// "Standard Capacity",
|
|
72
|
+
// ...this.zoneColumns.map((zone) => `${zone} Zone Allocation`),
|
|
73
|
+
// ];
|
|
74
|
+
// const rows = this.mbqItems.map((item) => [
|
|
75
|
+
// item?.wall ?? "",
|
|
76
|
+
// item?.ufn ?? "",
|
|
77
|
+
// item?.brand ?? "",
|
|
78
|
+
// item?.type ?? "",
|
|
79
|
+
// item?.size ?? "",
|
|
80
|
+
// item?.partition ?? "",
|
|
81
|
+
// item?.standardCapacity ?? "",
|
|
82
|
+
// ...this.zoneColumns.map(
|
|
83
|
+
// (zone) => item?.zoneAllocations?.[zone]?.join(", ") || "-"
|
|
84
|
+
// ),
|
|
85
|
+
// ]);
|
|
86
|
+
// const worksheet = XLSX.utils.aoa_to_sheet([headers, ...rows]);
|
|
87
|
+
// const workbook = XLSX.utils.book_new();
|
|
88
|
+
// XLSX.utils.book_append_sheet(workbook, worksheet, "MBQ");
|
|
89
|
+
// const safeStoreName = (this.storeName || "store").replace(
|
|
90
|
+
// /[\\/:*?"<>|]/g,
|
|
91
|
+
// "_"
|
|
92
|
+
// );
|
|
93
|
+
// XLSX.writeFile(workbook, `${safeStoreName}_mbq.xlsx`);
|
|
94
|
+
// try {
|
|
95
|
+
// } catch (error) {
|
|
96
|
+
// console.log("@@ ~ downloadMBQSheet [ERR]:", error);
|
|
97
|
+
// }
|
|
98
|
+
if (this.isDownloadButtonLoading)
|
|
99
|
+
return;
|
|
100
|
+
const storeName = [this.storeName];
|
|
101
|
+
this.isDownloadButtonLoading = true;
|
|
102
|
+
this.apiService
|
|
103
|
+
.exportMBQSheet({ storeName })
|
|
104
|
+
.pipe(finalize(() => {
|
|
105
|
+
this.isDownloadButtonLoading = false;
|
|
106
|
+
}))
|
|
107
|
+
.subscribe({
|
|
108
|
+
next: (res) => {
|
|
109
|
+
const safeStoreName = (this.storeName || "store").replace(/[\\/:*?"<>|]/g, "_");
|
|
110
|
+
this.apiService.saveAsExcelFile(res, `${safeStoreName}_mbq`);
|
|
111
|
+
},
|
|
112
|
+
error: (err) => {
|
|
113
|
+
console.log("@@ downloadMBQSheet [ERR]: ", err);
|
|
114
|
+
},
|
|
115
|
+
});
|
|
85
116
|
}
|
|
86
117
|
onSort(column) {
|
|
87
118
|
if (this.sortedColumn === column) {
|
|
@@ -120,15 +151,15 @@ export class ScheduleTaskPopupComponent {
|
|
|
120
151
|
onCancel() {
|
|
121
152
|
this.activeModal.dismiss();
|
|
122
153
|
}
|
|
123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScheduleTaskPopupComponent, deps: [{ token: i1.NgbActiveModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ScheduleTaskPopupComponent, isStandalone: true, selector: "schedule-task-popup", inputs: { fixtures: "fixtures", storeName: "storeName" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-3\">Publish Verification Task</h3>\r\n <p>You are about to send a verification task to <b>{{storeName}}</b>. Choose if you want to schedule the task\r\n for later.\r\n </p>\r\n\r\n\r\n <div class=\"d-flex align-items-center gap-3 mb-3\">\r\n <h4 class=\"me-auto\">MBQ for {{storeName}}</h4>\r\n\r\n <date-picker (dateChange)=\"onDateSelected($event)\">\r\n </date-picker>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n (click)=\"downloadMBQSheet()\" style=\"padding: 6px 8px;\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n @if(showInfoBanner){\r\n <div class=\"info-banner\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.6693 0.834961V4.16829M5.0026 0.834961V4.16829M0.835938 7.50163H15.8359M2.5026 2.50163H14.1693C15.0897 2.50163 15.8359 3.24782 15.8359 4.16829V15.835C15.8359 16.7554 15.0897 17.5016 14.1693 17.5016H2.5026C1.58213 17.5016 0.835938 16.7554 0.835938 15.835V4.16829C0.835938 3.24782 1.58213 2.50163 2.5026 2.50163Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>\r\n You are scheduling the layout verification task for <b>{{\r\n scheduledDate === (today | date:'yyyy-MM-dd')\r\n ? 'Today'\r\n : (scheduledDate | date:'dd MMMM, yyyy')\r\n }}</b>\r\n </span>\r\n\r\n <svg class=\"ms-auto cursor-pointer\" (click)=\"showInfoBanner = false;\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('wall')\">\n Wall/Floor\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'wall' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'wall' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('ufn')\">\n UFN\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'ufn' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'ufn' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('brand')\">\n Brand Category\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'brand' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'brand' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('type')\">\n Type\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'type' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'type' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('size')\">\n Size\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'size' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'size' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('partition')\">\n Partition\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'partition' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'partition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <!-- <th>\r\n Display Per Partition\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'displayPartition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'displayPartition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th class=\"cursor-pointer\" (click)=\"onSort('standardCapacity')\">\n Standard Capacity\n <i class=\"fa ms-1 mt-1\"\n [ngStyle]=\"{ color: sortedColumn === 'standardCapacity' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'standardCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Actual Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'actualCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'actualCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th *ngFor=\"let zone of zoneColumns\">\r\n {{zone}} Zone Allocation\r\n <i class=\"fa ms-1 mt-1\" aria-hidden=\"true\"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let item of mbqItems\">\r\n <td>{{item?.wall}}</td>\r\n <td>{{item?.ufn}}</td>\r\n <td>{{item?.brand}}</td>\r\n <td>{{item?.type}}</td>\r\n <td>{{item?.size}}</td>\r\n <td>{{item?.partition}}</td>\r\n <!-- <td>{{item?.displayPartition}}</td> -->\r\n <td>{{item?.standardCapacity}}</td>\r\n <!-- <td>{{item?.actualCapacity}}</td> -->\r\n <td *ngFor=\"let zone of zoneColumns\">{{item?.zoneAllocations?.[zone]?.join(', ') || '-'}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"scheduleTask()\">\r\n Schedule Task\r\n </button>\r\n </div>\r\n</div>\n", styles: [".modal-wrapper{padding:24px}.table-responsive{max-height:60vh}.info-banner{background:#f6fcff;margin-bottom:12px;border:1px solid #6bcaff;border-radius:4px;padding:12px;display:flex;align-items:center;gap:10px;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}.btn .spinner{height:22px;width:46px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:#fff;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .schedule-task-modal .modal-dialog{max-width:700px;width:100%}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DatePickerComponent, selector: "date-picker", outputs: ["dateChange"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
|
|
154
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScheduleTaskPopupComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.StoreBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ScheduleTaskPopupComponent, isStandalone: true, selector: "schedule-task-popup", inputs: { fixtures: "fixtures", storeName: "storeName" }, ngImport: i0, template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-3\">Publish Verification Task</h3>\r\n <p>You are about to send a verification task to <b>{{storeName}}</b>. Choose if you want to schedule the task\r\n for later.\r\n </p>\r\n\r\n\r\n <div class=\"d-flex align-items-center gap-3 mb-3\">\r\n <h4 class=\"me-auto\">MBQ for {{storeName}}</h4>\r\n\r\n <date-picker (dateChange)=\"onDateSelected($event)\">\r\n </date-picker>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center justify-content-center bg-white shadow-sm mbq-download-btn\"\r\n (click)=\"downloadMBQSheet()\" [disabled]=\"isDownloadButtonLoading\" style=\"padding: 9px 12px;\">\r\n @if (!isDownloadButtonLoading) {\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n } @else {\r\n <svg class=\"spinner\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"4\"></circle>\r\n </svg>\r\n }\r\n </button>\r\n </div>\r\n\r\n @if(showInfoBanner){\r\n <div class=\"info-banner\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.6693 0.834961V4.16829M5.0026 0.834961V4.16829M0.835938 7.50163H15.8359M2.5026 2.50163H14.1693C15.0897 2.50163 15.8359 3.24782 15.8359 4.16829V15.835C15.8359 16.7554 15.0897 17.5016 14.1693 17.5016H2.5026C1.58213 17.5016 0.835938 16.7554 0.835938 15.835V4.16829C0.835938 3.24782 1.58213 2.50163 2.5026 2.50163Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>\r\n You are scheduling the layout verification task for <b>{{\r\n scheduledDate === (today | date:'yyyy-MM-dd')\r\n ? 'Today'\r\n : (scheduledDate | date:'dd MMMM, yyyy')\r\n }}</b>\r\n </span>\r\n\r\n <svg class=\"ms-auto cursor-pointer\" (click)=\"showInfoBanner = false;\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('wall')\">\r\n Wall/Floor\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'wall' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'wall' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('ufn')\">\r\n UFN\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'ufn' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'ufn' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('brand')\">\r\n Brand Category\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'brand' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'brand' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('type')\">\r\n Type\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'type' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'type' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('size')\">\r\n Size\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'size' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'size' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('partition')\">\r\n Partition\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'partition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'partition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Display Per Partition\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'displayPartition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'displayPartition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th class=\"cursor-pointer\" (click)=\"onSort('standardCapacity')\">\r\n Standard Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'standardCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'standardCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Actual Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'actualCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'actualCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th *ngFor=\"let zone of zoneColumns\">\r\n {{zone}} Zone Allocation\r\n <i class=\"fa ms-1 mt-1\" aria-hidden=\"true\"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let item of mbqItems\">\r\n <td>{{item?.wall}}</td>\r\n <td>{{item?.ufn}}</td>\r\n <td>{{item?.brand}}</td>\r\n <td>{{item?.type}}</td>\r\n <td>{{item?.size}}</td>\r\n <td>{{item?.partition}}</td>\r\n <!-- <td>{{item?.displayPartition}}</td> -->\r\n <td>{{item?.standardCapacity}}</td>\r\n <!-- <td>{{item?.actualCapacity}}</td> -->\r\n <td *ngFor=\"let zone of zoneColumns\">{{item?.zoneAllocations?.[zone]?.join(', ') || '-'}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"scheduleTask()\">\r\n Schedule Task\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".modal-wrapper{padding:24px}.table-responsive{max-height:58vh}.info-banner{background:#f6fcff;margin-bottom:12px;border:1px solid #6bcaff;border-radius:4px;padding:12px;display:flex;align-items:center;gap:10px;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}.btn .spinner{height:22px;width:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:currentColor;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}.mbq-download-btn{min-width:38px}::ng-deep .schedule-task-modal .modal-dialog{max-width:700px;width:100%}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DatePickerComponent, selector: "date-picker", outputs: ["dateChange"] }, { kind: "pipe", type: DatePipe, name: "date" }] });
|
|
125
156
|
}
|
|
126
157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScheduleTaskPopupComponent, decorators: [{
|
|
127
158
|
type: Component,
|
|
128
|
-
args: [{ selector: "schedule-task-popup", standalone: true, imports: [NgClass, NgStyle, NgFor, DatePickerComponent, DatePipe], template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-3\">Publish Verification Task</h3>\r\n <p>You are about to send a verification task to <b>{{storeName}}</b>. Choose if you want to schedule the task\r\n for later.\r\n </p>\r\n\r\n\r\n <div class=\"d-flex align-items-center gap-3 mb-3\">\r\n <h4 class=\"me-auto\">MBQ for {{storeName}}</h4>\r\n\r\n <date-picker (dateChange)=\"onDateSelected($event)\">\r\n </date-picker>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center gap-3 bg-white shadow-sm\"\r\n (click)=\"downloadMBQSheet()\" style=\"padding: 6px 8px;\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n @if(showInfoBanner){\r\n <div class=\"info-banner\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.6693 0.834961V4.16829M5.0026 0.834961V4.16829M0.835938 7.50163H15.8359M2.5026 2.50163H14.1693C15.0897 2.50163 15.8359 3.24782 15.8359 4.16829V15.835C15.8359 16.7554 15.0897 17.5016 14.1693 17.5016H2.5026C1.58213 17.5016 0.835938 16.7554 0.835938 15.835V4.16829C0.835938 3.24782 1.58213 2.50163 2.5026 2.50163Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>\r\n You are scheduling the layout verification task for <b>{{\r\n scheduledDate === (today | date:'yyyy-MM-dd')\r\n ? 'Today'\r\n : (scheduledDate | date:'dd MMMM, yyyy')\r\n }}</b>\r\n </span>\r\n\r\n <svg class=\"ms-auto cursor-pointer\" (click)=\"showInfoBanner = false;\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('wall')\">\n Wall/Floor\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'wall' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'wall' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('ufn')\">\n UFN\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'ufn' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'ufn' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('brand')\">\n Brand Category\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'brand' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'brand' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('type')\">\n Type\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'type' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'type' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('size')\">\n Size\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'size' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'size' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <th class=\"cursor-pointer\" (click)=\"onSort('partition')\">\n Partition\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'partition' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'partition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\n aria-hidden=\"true\"></i>\n </th>\n <!-- <th>\r\n Display Per Partition\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'displayPartition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'displayPartition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th class=\"cursor-pointer\" (click)=\"onSort('standardCapacity')\">\n Standard Capacity\n <i class=\"fa ms-1 mt-1\"\n [ngStyle]=\"{ color: sortedColumn === 'standardCapacity' ? '#009BF3' : '' }\"\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'standardCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Actual Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'actualCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'actualCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th *ngFor=\"let zone of zoneColumns\">\r\n {{zone}} Zone Allocation\r\n <i class=\"fa ms-1 mt-1\" aria-hidden=\"true\"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let item of mbqItems\">\r\n <td>{{item?.wall}}</td>\r\n <td>{{item?.ufn}}</td>\r\n <td>{{item?.brand}}</td>\r\n <td>{{item?.type}}</td>\r\n <td>{{item?.size}}</td>\r\n <td>{{item?.partition}}</td>\r\n <!-- <td>{{item?.displayPartition}}</td> -->\r\n <td>{{item?.standardCapacity}}</td>\r\n <!-- <td>{{item?.actualCapacity}}</td> -->\r\n <td *ngFor=\"let zone of zoneColumns\">{{item?.zoneAllocations?.[zone]?.join(', ') || '-'}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"scheduleTask()\">\r\n Schedule Task\r\n </button>\r\n </div>\r\n</div>\n", styles: [".modal-wrapper{padding:24px}.table-responsive{max-height:60vh}.info-banner{background:#f6fcff;margin-bottom:12px;border:1px solid #6bcaff;border-radius:4px;padding:12px;display:flex;align-items:center;gap:10px;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}.btn .spinner{height:22px;width:46px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:#fff;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}::ng-deep .schedule-task-modal .modal-dialog{max-width:700px;width:100%}\n"] }]
|
|
129
|
-
}], ctorParameters: () => [{ type: i1.NgbActiveModal }], propDecorators: { fixtures: [{
|
|
159
|
+
args: [{ selector: "schedule-task-popup", standalone: true, imports: [NgClass, NgStyle, NgFor, DatePickerComponent, DatePipe], template: "<div class=\"modal-wrapper\">\r\n <h3 class=\"mb-3\">Publish Verification Task</h3>\r\n <p>You are about to send a verification task to <b>{{storeName}}</b>. Choose if you want to schedule the task\r\n for later.\r\n </p>\r\n\r\n\r\n <div class=\"d-flex align-items-center gap-3 mb-3\">\r\n <h4 class=\"me-auto\">MBQ for {{storeName}}</h4>\r\n\r\n <date-picker (dateChange)=\"onDateSelected($event)\">\r\n </date-picker>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center justify-content-center bg-white shadow-sm mbq-download-btn\"\r\n (click)=\"downloadMBQSheet()\" [disabled]=\"isDownloadButtonLoading\" style=\"padding: 9px 12px;\">\r\n @if (!isDownloadButtonLoading) {\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"#000000\" stroke-width=\"0.24000000000000005\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\"\r\n stroke-width=\"0.384\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path\r\n d=\"M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z\"\r\n fill=\"#1D2939\"></path>\r\n <path\r\n d=\"M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z\"\r\n fill=\"#1D2939\"></path>\r\n </g>\r\n </svg>\r\n } @else {\r\n <svg class=\"spinner\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"4\"></circle>\r\n </svg>\r\n }\r\n </button>\r\n </div>\r\n\r\n @if(showInfoBanner){\r\n <div class=\"info-banner\">\r\n <svg width=\"17\" height=\"19\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11.6693 0.834961V4.16829M5.0026 0.834961V4.16829M0.835938 7.50163H15.8359M2.5026 2.50163H14.1693C15.0897 2.50163 15.8359 3.24782 15.8359 4.16829V15.835C15.8359 16.7554 15.0897 17.5016 14.1693 17.5016H2.5026C1.58213 17.5016 0.835938 16.7554 0.835938 15.835V4.16829C0.835938 3.24782 1.58213 2.50163 2.5026 2.50163Z\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <span>\r\n You are scheduling the layout verification task for <b>{{\r\n scheduledDate === (today | date:'yyyy-MM-dd')\r\n ? 'Today'\r\n : (scheduledDate | date:'dd MMMM, yyyy')\r\n }}</b>\r\n </span>\r\n\r\n <svg class=\"ms-auto cursor-pointer\" (click)=\"showInfoBanner = false;\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('wall')\">\r\n Wall/Floor\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'wall' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'wall' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('ufn')\">\r\n UFN\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'ufn' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'ufn' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('brand')\">\r\n Brand Category\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'brand' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'brand' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('type')\">\r\n Type\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'type' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'type' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('size')\">\r\n Size\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'size' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'size' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('partition')\">\r\n Partition\r\n <i class=\"fa ms-1 mt-1\" [ngStyle]=\"{ color: sortedColumn === 'partition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'partition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Display Per Partition\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'displayPartition' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'displayPartition' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th class=\"cursor-pointer\" (click)=\"onSort('standardCapacity')\">\r\n Standard Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'standardCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'standardCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th>\r\n <!-- <th>\r\n Actual Capacity\r\n <i class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'actualCapacity' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'actualCapacity' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"></i>\r\n </th> -->\r\n <th *ngFor=\"let zone of zoneColumns\">\r\n {{zone}} Zone Allocation\r\n <i class=\"fa ms-1 mt-1\" aria-hidden=\"true\"></i>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let item of mbqItems\">\r\n <td>{{item?.wall}}</td>\r\n <td>{{item?.ufn}}</td>\r\n <td>{{item?.brand}}</td>\r\n <td>{{item?.type}}</td>\r\n <td>{{item?.size}}</td>\r\n <td>{{item?.partition}}</td>\r\n <!-- <td>{{item?.displayPartition}}</td> -->\r\n <td>{{item?.standardCapacity}}</td>\r\n <!-- <td>{{item?.actualCapacity}}</td> -->\r\n <td *ngFor=\"let zone of zoneColumns\">{{item?.zoneAllocations?.[zone]?.join(', ') || '-'}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"modal-actions\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"scheduleTask()\">\r\n Schedule Task\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".modal-wrapper{padding:24px}.table-responsive{max-height:58vh}.info-banner{background:#f6fcff;margin-bottom:12px;border:1px solid #6bcaff;border-radius:4px;padding:12px;display:flex;align-items:center;gap:10px;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.modal-actions{display:flex;justify-content:end;gap:12px}::ng-deep .modal-content{border-radius:12px!important}.btn .spinner{height:22px;width:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:6px;stroke:currentColor;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}.mbq-download-btn{min-width:38px}::ng-deep .schedule-task-modal .modal-dialog{max-width:700px;width:100%}\n"] }]
|
|
160
|
+
}], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.StoreBuilderService }], propDecorators: { fixtures: [{
|
|
130
161
|
type: Input
|
|
131
162
|
}], storeName: [{
|
|
132
163
|
type: Input
|
|
133
164
|
}] } });
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vcG9wdXBzL3NjaGVkdWxlLXRhc2stcG9wdXAvc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vcG9wdXBzL3NjaGVkdWxlLXRhc2stcG9wdXAvc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQVNqRixNQUFNLE9BQU8sMEJBQTBCO0lBZ0JqQjtJQWZYLFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBUztJQUUzQixRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQ3JCLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFFM0IsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkIsYUFBYSxDQUFTO0lBRXRCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQ1QsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FB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QUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO3dHQTFJVSwwQkFBMEI7NEZBQTFCLDBCQUEwQix5SUNidkMsb2tUQW1KQSx5dkJEeElZLE9BQU8sb0ZBQUUsT0FBTywyRUFBRSxLQUFLLG1IQUFFLG1CQUFtQiw0RUFBRSxRQUFROzs0RkFFckQsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNFLHFCQUFxQixjQUduQixJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUM7bUZBR3hELFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdTdHlsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xuaW1wb3J0ICogYXMgWExTWCBmcm9tIFwieGxzeFwiO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnRcIjtcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzY2hlZHVsZS10YXNrLXBvcHVwXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9zY2hlZHVsZS10YXNrLXBvcHVwLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9zY2hlZHVsZS10YXNrLXBvcHVwLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZSwgTmdGb3IsIERhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlVGFza1BvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZml4dHVyZXM6IGFueTtcclxuICBASW5wdXQoKSBzdG9yZU5hbWU6IHN0cmluZztcclxuXHJcbiAgbWJxSXRlbXM6IGFueVtdID0gW107XHJcbiAgem9uZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICBzY2hlZHVsZWREYXRlOiBzdHJpbmc7XHJcblxyXG4gIHNob3dJbmZvQmFubmVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNvcnRPcmRlcjogbnVtYmVyID0gMTtcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIHJlYWRvbmx5IG51bWVyaWNDb2x1bW5zID0gbmV3IFNldChbXCJwYXJ0aXRpb25cIiwgXCJzdGFuZGFyZENhcGFjaXR5XCJdKTtcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIENvbGxlY3QgYWxsIHVuaXF1ZSB6b25lIG5hbWVzIGFjcm9zcyBhbGwgZml4dHVyZXMgaW4gaW5zZXJ0aW9uIG9yZGVyXHJcbiAgICBjb25zdCB6b25lU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGYgb2YgdGhpcy5maXh0dXJlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHMgb2YgKGY/LnNoZWxmQ29uZmlnID8/IFtdKSkge1xyXG4gICAgICAgIGlmIChzLnpvbmUpIHpvbmVTZXQuYWRkKHMuem9uZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNvbHVtbnMgPSBBcnJheS5mcm9tKHpvbmVTZXQpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmID0gdGhpcy5maXh0dXJlc1tpXTtcclxuICAgICAgY29uc3Qgc2hlbGZEZXRhaWxzOiBhbnlbXSA9IGY/LnNoZWxmQ29uZmlnID8/IFtdO1xyXG5cclxuICAgICAgLy8gR3JvdXAgc2hlbHZlcyBieSB6b25lIGFuZCBjb2xsZWN0IHVuaXF1ZSBicmFuZCBuYW1lcyBwZXIgem9uZVxyXG4gICAgICBjb25zdCB6b25lQWxsb2NhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IHpvbmUgb2YgdGhpcy56b25lQ29sdW1ucykge1xyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBzaGVsZkRldGFpbHMuZmlsdGVyKChzOiBhbnkpID0+IHMuem9uZSA9PT0gem9uZSk7XHJcbiAgICAgICAgem9uZUFsbG9jYXRpb25zW3pvbmVdID0gW1xyXG4gICAgICAgICAgLi4ubmV3IFNldChzaGVsdmVzLmZsYXRNYXAoKHM6IGFueSkgPT4gcy5wcm9kdWN0QnJhbmROYW1lID8/IFtdKSksXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5tYnFJdGVtcy5wdXNoKHtcclxuICAgICAgICB3YWxsOlxyXG4gICAgICAgICAgZj8uYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09IFwid2FsbFwiXHJcbiAgICAgICAgICAgID8gYFdhbGwgJHtmPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcn1gXHJcbiAgICAgICAgICAgIDogXCJGbG9vclwiLFxyXG4gICAgICAgIHVmbjogYEZYIC0gJHtmPy5maXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgICAgYnJhbmQ6IGY/LmhlYWRlcj8ubGFiZWwsXHJcbiAgICAgICAgdHlwZTogZj8uZml4dHVyZUNhdGVnb3J5LFxyXG4gICAgICAgIHNpemU6IGAke2Y/LmZpeHR1cmVXaWR0aD8udmFsdWV9JHtmPy5maXh0dXJlV2lkdGg/LnVuaXR9YCxcclxuICAgICAgICBwYXJ0aXRpb246IHNoZWxmRGV0YWlscy5sZW5ndGgsXHJcbiAgICAgICAgLy8gZGlzcGxheVBhcnRpdGlvbjogc2hlbGZEZXRhaWxzLmxlbmd0aCxcclxuICAgICAgICBzdGFuZGFyZENhcGFjaXR5OiBmPy5maXh0dXJlQ2FwYWNpdHkgPz8gMCxcclxuICAgICAgICAvLyBhY3R1YWxDYXBhY2l0eTogZj8uZml4dHVyZUNhcGFjaXR5ID8/IDAsXHJcbiAgICAgICAgem9uZUFsbG9jYXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkTUJRU2hlZXQoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgIFwiV2FsbC9GbG9vclwiLFxuICAgICAgXCJVRk5cIixcbiAgICAgIFwiQnJhbmQgQ2F0ZWdvcnlcIixcbiAgICAgIFwiVHlwZVwiLFxuICAgICAgXCJTaXplXCIsXG4gICAgICBcIlBhcnRpdGlvblwiLFxuICAgICAgXCJTdGFuZGFyZCBDYXBhY2l0eVwiLFxuICAgICAgLi4udGhpcy56b25lQ29sdW1ucy5tYXAoKHpvbmUpID0+IGAke3pvbmV9IFpvbmUgQWxsb2NhdGlvbmApLFxuICAgIF07XG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5tYnFJdGVtcy5tYXAoKGl0ZW0pID0+IFtcbiAgICAgIGl0ZW0/LndhbGwgPz8gXCJcIixcbiAgICAgIGl0ZW0/LnVmbiA/PyBcIlwiLFxuICAgICAgaXRlbT8uYnJhbmQgPz8gXCJcIixcbiAgICAgIGl0ZW0/LnR5cGUgPz8gXCJcIixcbiAgICAgIGl0ZW0/LnNpemUgPz8gXCJcIixcbiAgICAgIGl0ZW0/LnBhcnRpdGlvbiA/PyBcIlwiLFxuICAgICAgaXRlbT8uc3RhbmRhcmRDYXBhY2l0eSA/PyBcIlwiLFxuICAgICAgLi4udGhpcy56b25lQ29sdW1ucy5tYXAoXG4gICAgICAgICh6b25lKSA9PiBpdGVtPy56b25lQWxsb2NhdGlvbnM/Llt6b25lXT8uam9pbihcIiwgXCIpIHx8IFwiLVwiXG4gICAgICApLFxuICAgIF0pO1xuXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoW2hlYWRlcnMsIC4uLnJvd3NdKTtcbiAgICBjb25zdCB3b3JrYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcbiAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdvcmtib29rLCB3b3Jrc2hlZXQsIFwiTUJRXCIpO1xuXG4gICAgY29uc3Qgc2FmZVN0b3JlTmFtZSA9ICh0aGlzLnN0b3JlTmFtZSB8fCBcInN0b3JlXCIpLnJlcGxhY2UoXG4gICAgICAvW1xcXFwvOio/XCI8PnxdL2csXG4gICAgICBcIl9cIlxuICAgICk7XG4gICAgWExTWC53cml0ZUZpbGUod29ya2Jvb2ssIGAke3NhZmVTdG9yZU5hbWV9X21icS54bHN4YCk7XG4gIH1cblxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciAqIC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRlZENvbHVtbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLm1icUl0ZW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFWYWx1ZSA9IGE/Lltjb2x1bW5dO1xuICAgICAgY29uc3QgYlZhbHVlID0gYj8uW2NvbHVtbl07XG5cbiAgICAgIGlmICh0aGlzLm51bWVyaWNDb2x1bW5zLmhhcyhjb2x1bW4pKSB7XG4gICAgICAgIGNvbnN0IGFOdW0gPSBOdW1iZXIoYVZhbHVlID8/IDApO1xuICAgICAgICBjb25zdCBiTnVtID0gTnVtYmVyKGJWYWx1ZSA/PyAwKTtcbiAgICAgICAgcmV0dXJuIChhTnVtIC0gYk51bSkgKiB0aGlzLnNvcnRPcmRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYVN0ciA9IFN0cmluZyhhVmFsdWUgPz8gXCJcIik7XG4gICAgICBjb25zdCBiU3RyID0gU3RyaW5nKGJWYWx1ZSA/PyBcIlwiKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGFTdHIubG9jYWxlQ29tcGFyZShiU3RyLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICBudW1lcmljOiB0cnVlLFxuICAgICAgICAgIHNlbnNpdGl2aXR5OiBcImJhc2VcIixcbiAgICAgICAgfSkgKiB0aGlzLnNvcnRPcmRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXHJcbiAgc2NoZWR1bGVUYXNrKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7XHJcbiAgICAgIHN0YXR1czogXCJzdWJtaXRcIixcclxuICAgICAgc2NoZWR1bGVkRGF0ZTogdGhpcy5zY2hlZHVsZWREYXRlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVTZWxlY3RlZChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2NoZWR1bGVkRGF0ZSA9IGRhdGE7XHJcbiAgICB0aGlzLnNob3dJbmZvQmFubmVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC13cmFwcGVyXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJtYi0zXCI+UHVibGlzaCBWZXJpZmljYXRpb24gVGFzazwvaDM+XHJcbiAgICA8cD5Zb3UgYXJlIGFib3V0IHRvIHNlbmQgYSB2ZXJpZmljYXRpb24gdGFzayB0byA8Yj57e3N0b3JlTmFtZX19PC9iPi4gQ2hvb3NlIGlmIHlvdSB3YW50IHRvIHNjaGVkdWxlIHRoZSB0YXNrXHJcbiAgICAgICAgZm9yIGxhdGVyLlxyXG4gICAgPC9wPlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBtYi0zXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwibWUtYXV0b1wiPk1CUSBmb3Ige3tzdG9yZU5hbWV9fTwvaDQ+XHJcblxyXG4gICAgICAgIDxkYXRlLXBpY2tlciAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9kYXRlLXBpY2tlcj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRNQlFTaGVldCgpXCIgc3R5bGU9XCJwYWRkaW5nOiA2cHggOHB4O1wiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZS13aWR0aD1cIjAuMjQwMDAwMDAwMDAwMDAwMDVcIj5cclxuICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjM4NFwiPjwvZz5cclxuICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTUzNSAxNi41MDYxQzEyLjQxMTQgMTYuNjYxNSAxMi4yMTA2IDE2Ljc1IDEyIDE2Ljc1QzExLjc4OTQgMTYuNzUgMTEuNTg4NiAxNi42NjE1IDExLjQ0NjUgMTYuNTA2MUw3LjQ0NjQ4IDEyLjEzMTFDNy4xNjY5OCAxMS44MjU0IDcuMTg4MjIgMTEuMzUxIDcuNDkzOTIgMTEuMDcxNUM3Ljc5OTYzIDEwLjc5MiA4LjI3NDAyIDEwLjgxMzIgOC41NTM1MiAxMS4xMTg5TDExLjI1IDE0LjA2ODJWM0MxMS4yNSAyLjU4NTc5IDExLjU4NTggMi4yNSAxMiAyLjI1QzEyLjQxNDIgMi4yNSAxMi43NSAyLjU4NTc5IDEyLjc1IDNWMTQuMDY4MkwxNS40NDY1IDExLjExODlDMTUuNzI2IDEwLjgxMzIgMTYuMjAwNCAxMC43OTIgMTYuNTA2MSAxMS4wNzE1QzE2LjgxMTggMTEuMzUxIDE2LjgzMyAxMS44MjU0IDE2LjU1MzUgMTIuMTMxMUwxMi41NTM1IDE2LjUwNjFaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjc1IDE1QzMuNzUgMTQuNTg1OCAzLjQxNDIyIDE0LjI1IDMgMTQuMjVDMi41ODU3OSAxNC4yNSAyLjI1IDE0LjU4NTggMi4yNSAxNVYxNS4wNTQ5QzIuMjQ5OTggMTYuNDIyNSAyLjI0OTk2IDE3LjUyNDggMi4zNjY1MiAxOC4zOTE4QzIuNDg3NTQgMTkuMjkxOSAyLjc0NjQzIDIwLjA0OTcgMy4zNDgzNSAyMC42NTE2QzMuOTUwMjcgMjEuMjUzNiA0LjcwODE0IDIxLjUxMjUgNS42MDgyNSAyMS42MzM1QzYuNDc1MjIgMjEuNzUgNy41Nzc1NCAyMS43NSA4Ljk0NTEzIDIxLjc1SDE1LjA1NDlDMTYuNDIyNSAyMS43NSAxNy41MjQ4IDIxLjc1IDE4LjM5MTggMjEuNjMzNUMxOS4yOTE5IDIxLjUxMjUgMjAuMDQ5NyAyMS4yNTM2IDIwLjY1MTcgMjAuNjUxNkMyMS4yNTM2IDIwLjA0OTcgMjEuNTEyNSAxOS4yOTE5IDIxLjYzMzUgMTguMzkxOEMyMS43NSAxNy41MjQ4IDIxLjc1IDE2LjQyMjUgMjEuNzUgMTUuMDU0OVYxNUMyMS43NSAxNC41ODU4IDIxLjQxNDIgMTQuMjUgMjEgMTQuMjVDMjAuNTg1OCAxNC4yNSAyMC4yNSAxNC41ODU4IDIwLjI1IDE1QzIwLjI1IDE2LjQzNTQgMjAuMjQ4NCAxNy40MzY1IDIwLjE0NjkgMTguMTkxOUMyMC4wNDgyIDE4LjkyNTcgMTkuODY3OCAxOS4zMTQyIDE5LjU5MSAxOS41OTFDMTkuMzE0MiAxOS44Njc4IDE4LjkyNTcgMjAuMDQ4MiAxOC4xOTE5IDIwLjE0NjlDMTcuNDM2NSAyMC4yNDg0IDE2LjQzNTQgMjAuMjUgMTUgMjAuMjVIOUM3LjU2NDU5IDIwLjI1IDYuNTYzNDcgMjAuMjQ4NCA1LjgwODEyIDIwLjE0NjlDNS4wNzQzNSAyMC4wNDgyIDQuNjg1NzcgMTkuODY3OCA0LjQwOTAxIDE5LjU5MUM0LjEzMjI1IDE5LjMxNDIgMy45NTE4IDE4LjkyNTcgMy44NTMxNSAxOC4xOTE5QzMuNzUxNTkgMTcuNDM2NSAzLjc1IDE2LjQzNTQgMy43NSAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYoc2hvd0luZm9CYW5uZXIpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgMTcgMTlcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS42NjkzIDAuODM0OTYxVjQuMTY4MjlNNS4wMDI2IDAuODM0OTYxVjQuMTY4MjlNMC44MzU5MzggNy41MDE2M0gxNS44MzU5TTIuNTAyNiAyLjUwMTYzSDE0LjE2OTNDMTUuMDg5NyAyLjUwMTYzIDE1LjgzNTkgMy4yNDc4MiAxNS44MzU5IDQuMTY4MjlWMTUuODM1QzE1LjgzNTkgMTYuNzU1NCAxNS4wODk3IDE3LjUwMTYgMTQuMTY5MyAxNy41MDE2SDIuNTAyNkMxLjU4MjEzIDE3LjUwMTYgMC44MzU5MzggMTYuNzU1NCAwLjgzNTkzOCAxNS44MzVWNC4xNjgyOUMwLjgzNTkzOCAzLjI0NzgyIDEuNTgyMTMgMi41MDE2MyAyLjUwMjYgMi41MDE2M1pcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIFlvdSBhcmUgc2NoZWR1bGluZyB0aGUgbGF5b3V0IHZlcmlmaWNhdGlvbiB0YXNrIGZvciA8Yj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWREYXRlID09PSAodG9kYXkgfCBkYXRlOid5eXl5LU1NLWRkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1RvZGF5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoc2NoZWR1bGVkRGF0ZSB8IGRhdGU6J2RkIE1NTU0sIHl5eXknKVxyXG4gICAgICAgICAgICAgICAgfX08L2I+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtcy1hdXRvIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNob3dJbmZvQmFubmVyID0gZmFsc2U7XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuNSA0LjVMNC41IDEzLjVNNC41IDQuNUwxMy41IDEzLjVcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnd2FsbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBXYWxsL0Zsb29yXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3dhbGwnID8gJyMwMDlCRjMnIDogJycgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3dhbGwnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3VmbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBVRk5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAndWZuJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICd1Zm4nID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2JyYW5kJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5kIENhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2JyYW5kJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdicmFuZCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHlwZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3R5cGUnID8gJyMwMDlCRjMnIDogJycgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3R5cGUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3NpemUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdzaXplJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdzaXplJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdwYXJ0aXRpb24nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFydGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3BhcnRpdGlvbicgPyAnIzAwOUJGMycgOiAnJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAncGFydGl0aW9uJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgUGVyIFBhcnRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdkaXNwbGF5UGFydGl0aW9uJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2Rpc3BsYXlQYXJ0aXRpb24nID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdGFuZGFyZENhcGFjaXR5JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIENhcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc3RhbmRhcmRDYXBhY2l0eScgPyAnIzAwOUJGMycgOiAnJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnc3RhbmRhcmRDYXBhY2l0eScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBY3R1YWwgQ2FwYWNpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnYWN0dWFsQ2FwYWNpdHknID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnYWN0dWFsQ2FwYWNpdHknID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCB6b25lIG9mIHpvbmVDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7em9uZX19IFpvbmUgQWxsb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuXHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtYnFJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2l0ZW0/LndhbGx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aXRlbT8udWZufX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2l0ZW0/LmJyYW5kfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2l0ZW0/LnR5cGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aXRlbT8uc2l6ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpdGVtPy5wYXJ0aXRpb259fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGQ+e3tpdGVtPy5kaXNwbGF5UGFydGl0aW9ufX08L3RkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpdGVtPy5zdGFuZGFyZENhcGFjaXR5fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHRkPnt7aXRlbT8uYWN0dWFsQ2FwYWNpdHl9fTwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgem9uZSBvZiB6b25lQ29sdW1uc1wiPnt7aXRlbT8uem9uZUFsbG9jYXRpb25zPy5bem9uZV0/LmpvaW4oJywgJykgfHwgJy0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2NoZWR1bGVUYXNrKClcIj5cclxuICAgICAgICAgICAgU2NoZWR1bGUgVGFza1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxuIl19
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vcG9wdXBzL3NjaGVkdWxlLXRhc2stcG9wdXAvc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vcG9wdXBzL3NjaGVkdWxlLXRhc2stcG9wdXAvc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQVVqRixNQUFNLE9BQU8sMEJBQTBCO0lBa0IzQjtJQUNBO0lBbEJELFFBQVEsQ0FBTTtJQUNkLFNBQVMsQ0FBUztJQUUzQixRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQ3JCLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFFM0IsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkIsYUFBYSxDQUFTO0lBRXRCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsdUJBQXVCLEdBQVksS0FBSyxDQUFDO0lBRXpDLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsWUFBWSxHQUFXLEVBQUUsQ0FB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Q0FBQyxJQUFTO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO3dHQTlLVSwwQkFBMEI7NEZBQTFCLDBCQUEwQix5SUNoQnZDLG1rVUF5SkEsa3lCRDNJWSxPQUFPLG9GQUFFLE9BQU8sMkVBQUUsS0FBSyxtSEFBRSxtQkFBbUIsNEVBQUUsUUFBUTs7NEZBRXJELDBCQUEwQjtrQkFQdEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxDQUFDO3FIQUd4RCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nU3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcblxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tIFwicnhqc1wiO1xuXHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwicHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic2NoZWR1bGUtdGFzay1wb3B1cFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2NoZWR1bGUtdGFzay1wb3B1cC5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW05nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yLCBEYXRlUGlja2VyQ29tcG9uZW50LCBEYXRlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZVRhc2tQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZml4dHVyZXM6IGFueTtcclxuICBASW5wdXQoKSBzdG9yZU5hbWU6IHN0cmluZztcclxuXHJcbiAgbWJxSXRlbXM6IGFueVtdID0gW107XHJcbiAgem9uZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICBzY2hlZHVsZWREYXRlOiBzdHJpbmc7XHJcblxyXG4gIHNob3dJbmZvQmFubmVyOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRG93bmxvYWRCdXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc29ydE9yZGVyOiBudW1iZXIgPSAxO1xuICBzb3J0ZWRDb2x1bW46IHN0cmluZyA9IFwiXCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbnVtZXJpY0NvbHVtbnMgPSBuZXcgU2V0KFtcInBhcnRpdGlvblwiLCBcInN0YW5kYXJkQ2FwYWNpdHlcIl0pO1xuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gQ29sbGVjdCBhbGwgdW5pcXVlIHpvbmUgbmFtZXMgYWNyb3NzIGFsbCBmaXh0dXJlcyBpbiBpbnNlcnRpb24gb3JkZXJcclxuICAgIGNvbnN0IHpvbmVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLmZpeHR1cmVzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcyBvZiBmPy5zaGVsZkNvbmZpZyA/PyBbXSkge1xyXG4gICAgICAgIGlmIChzLnpvbmUpIHpvbmVTZXQuYWRkKHMuem9uZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNvbHVtbnMgPSBBcnJheS5mcm9tKHpvbmVTZXQpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmID0gdGhpcy5maXh0dXJlc1tpXTtcclxuICAgICAgY29uc3Qgc2hlbGZEZXRhaWxzOiBhbnlbXSA9IGY/LnNoZWxmQ29uZmlnID8/IFtdO1xyXG5cclxuICAgICAgLy8gR3JvdXAgc2hlbHZlcyBieSB6b25lIGFuZCBjb2xsZWN0IHVuaXF1ZSBicmFuZCBuYW1lcyBwZXIgem9uZVxyXG4gICAgICBjb25zdCB6b25lQWxsb2NhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IHpvbmUgb2YgdGhpcy56b25lQ29sdW1ucykge1xyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBzaGVsZkRldGFpbHMuZmlsdGVyKChzOiBhbnkpID0+IHMuem9uZSA9PT0gem9uZSk7XHJcbiAgICAgICAgem9uZUFsbG9jYXRpb25zW3pvbmVdID0gW1xyXG4gICAgICAgICAgLi4ubmV3IFNldChzaGVsdmVzLmZsYXRNYXAoKHM6IGFueSkgPT4gcy5wcm9kdWN0QnJhbmROYW1lID8/IFtdKSksXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5tYnFJdGVtcy5wdXNoKHtcclxuICAgICAgICB3YWxsOlxyXG4gICAgICAgICAgZj8uYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09IFwid2FsbFwiXHJcbiAgICAgICAgICAgID8gYFdhbGwgJHtmPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcn1gXHJcbiAgICAgICAgICAgIDogXCJGbG9vclwiLFxyXG4gICAgICAgIHVmbjogYEZYIC0gJHtmPy5maXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgICAgYnJhbmQ6IGY/LmhlYWRlcj8ubGFiZWwsXHJcbiAgICAgICAgdHlwZTogZj8uZml4dHVyZUNhdGVnb3J5LFxyXG4gICAgICAgIHNpemU6IGAke2Y/LmZpeHR1cmVXaWR0aD8udmFsdWV9JHtmPy5maXh0dXJlV2lkdGg/LnVuaXR9YCxcclxuICAgICAgICBwYXJ0aXRpb246IHNoZWxmRGV0YWlscy5sZW5ndGgsXHJcbiAgICAgICAgLy8gZGlzcGxheVBhcnRpdGlvbjogc2hlbGZEZXRhaWxzLmxlbmd0aCxcclxuICAgICAgICBzdGFuZGFyZENhcGFjaXR5OiBmPy5maXh0dXJlQ2FwYWNpdHkgPz8gMCxcclxuICAgICAgICAvLyBhY3R1YWxDYXBhY2l0eTogZj8uZml4dHVyZUNhcGFjaXR5ID8/IDAsXHJcbiAgICAgICAgem9uZUFsbG9jYXRpb25zLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkTUJRU2hlZXQoKSB7XG4gICAgLy8gY29uc3QgaGVhZGVycyA9IFtcclxuICAgIC8vICAgXCJXYWxsL0Zsb29yXCIsXHJcbiAgICAvLyAgIFwiVUZOXCIsXHJcbiAgICAvLyAgIFwiQnJhbmQgQ2F0ZWdvcnlcIixcclxuICAgIC8vICAgXCJUeXBlXCIsXHJcbiAgICAvLyAgIFwiU2l6ZVwiLFxyXG4gICAgLy8gICBcIlBhcnRpdGlvblwiLFxyXG4gICAgLy8gICBcIlN0YW5kYXJkIENhcGFjaXR5XCIsXHJcbiAgICAvLyAgIC4uLnRoaXMuem9uZUNvbHVtbnMubWFwKCh6b25lKSA9PiBgJHt6b25lfSBab25lIEFsbG9jYXRpb25gKSxcclxuICAgIC8vIF07XHJcblxyXG4gICAgLy8gY29uc3Qgcm93cyA9IHRoaXMubWJxSXRlbXMubWFwKChpdGVtKSA9PiBbXHJcbiAgICAvLyAgIGl0ZW0/LndhbGwgPz8gXCJcIixcclxuICAgIC8vICAgaXRlbT8udWZuID8/IFwiXCIsXHJcbiAgICAvLyAgIGl0ZW0/LmJyYW5kID8/IFwiXCIsXHJcbiAgICAvLyAgIGl0ZW0/LnR5cGUgPz8gXCJcIixcclxuICAgIC8vICAgaXRlbT8uc2l6ZSA/PyBcIlwiLFxyXG4gICAgLy8gICBpdGVtPy5wYXJ0aXRpb24gPz8gXCJcIixcclxuICAgIC8vICAgaXRlbT8uc3RhbmRhcmRDYXBhY2l0eSA/PyBcIlwiLFxyXG4gICAgLy8gICAuLi50aGlzLnpvbmVDb2x1bW5zLm1hcChcclxuICAgIC8vICAgICAoem9uZSkgPT4gaXRlbT8uem9uZUFsbG9jYXRpb25zPy5bem9uZV0/LmpvaW4oXCIsIFwiKSB8fCBcIi1cIlxyXG4gICAgLy8gICApLFxyXG4gICAgLy8gXSk7XHJcblxyXG4gICAgLy8gY29uc3Qgd29ya3NoZWV0ID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoW2hlYWRlcnMsIC4uLnJvd3NdKTtcclxuICAgIC8vIGNvbnN0IHdvcmtib29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgLy8gWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3b3JrYm9vaywgd29ya3NoZWV0LCBcIk1CUVwiKTtcclxuXHJcbiAgICAvLyBjb25zdCBzYWZlU3RvcmVOYW1lID0gKHRoaXMuc3RvcmVOYW1lIHx8IFwic3RvcmVcIikucmVwbGFjZShcclxuICAgIC8vICAgL1tcXFxcLzoqP1wiPD58XS9nLFxyXG4gICAgLy8gICBcIl9cIlxyXG4gICAgLy8gKTtcclxuICAgIC8vIFhMU1gud3JpdGVGaWxlKHdvcmtib29rLCBgJHtzYWZlU3RvcmVOYW1lfV9tYnEueGxzeGApO1xyXG5cclxuICAgIC8vIHRyeSB7XHJcblxyXG4gICAgLy8gfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJAQCB+IGRvd25sb2FkTUJRU2hlZXQgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkQnV0dG9uTG9hZGluZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RvcmVOYW1lID0gW3RoaXMuc3RvcmVOYW1lXTtcbiAgICB0aGlzLmlzRG93bmxvYWRCdXR0b25Mb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmV4cG9ydE1CUVNoZWV0KHsgc3RvcmVOYW1lIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNEb3dubG9hZEJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2FmZVN0b3JlTmFtZSA9ICh0aGlzLnN0b3JlTmFtZSB8fCBcInN0b3JlXCIpLnJlcGxhY2UoXG4gICAgICAgICAgICAvW1xcXFwvOio/XCI8PnxdL2csXG4gICAgICAgICAgICBcIl9cIixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIGAke3NhZmVTdG9yZU5hbWV9X21icWApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgZG93bmxvYWRNQlFTaGVldCBbRVJSXTogXCIsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXHJcbiAgb25Tb3J0KGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyICogLTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRlZENvbHVtbiA9IGNvbHVtbjtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWJxSXRlbXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICBjb25zdCBhVmFsdWUgPSBhPy5bY29sdW1uXTtcclxuICAgICAgY29uc3QgYlZhbHVlID0gYj8uW2NvbHVtbl07XHJcblxyXG4gICAgICBpZiAodGhpcy5udW1lcmljQ29sdW1ucy5oYXMoY29sdW1uKSkge1xyXG4gICAgICAgIGNvbnN0IGFOdW0gPSBOdW1iZXIoYVZhbHVlID8/IDApO1xyXG4gICAgICAgIGNvbnN0IGJOdW0gPSBOdW1iZXIoYlZhbHVlID8/IDApO1xyXG4gICAgICAgIHJldHVybiAoYU51bSAtIGJOdW0pICogdGhpcy5zb3J0T3JkZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFTdHIgPSBTdHJpbmcoYVZhbHVlID8/IFwiXCIpO1xyXG4gICAgICBjb25zdCBiU3RyID0gU3RyaW5nKGJWYWx1ZSA/PyBcIlwiKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBhU3RyLmxvY2FsZUNvbXBhcmUoYlN0ciwgdW5kZWZpbmVkLCB7XHJcbiAgICAgICAgICBudW1lcmljOiB0cnVlLFxyXG4gICAgICAgICAgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiLFxyXG4gICAgICAgIH0pICogdGhpcy5zb3J0T3JkZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2NoZWR1bGVUYXNrKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7XHJcbiAgICAgIHN0YXR1czogXCJzdWJtaXRcIixcclxuICAgICAgc2NoZWR1bGVkRGF0ZTogdGhpcy5zY2hlZHVsZWREYXRlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVTZWxlY3RlZChkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuc2NoZWR1bGVkRGF0ZSA9IGRhdGE7XHJcbiAgICB0aGlzLnNob3dJbmZvQmFubmVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC13cmFwcGVyXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJtYi0zXCI+UHVibGlzaCBWZXJpZmljYXRpb24gVGFzazwvaDM+XHJcbiAgICA8cD5Zb3UgYXJlIGFib3V0IHRvIHNlbmQgYSB2ZXJpZmljYXRpb24gdGFzayB0byA8Yj57e3N0b3JlTmFtZX19PC9iPi4gQ2hvb3NlIGlmIHlvdSB3YW50IHRvIHNjaGVkdWxlIHRoZSB0YXNrXHJcbiAgICAgICAgZm9yIGxhdGVyLlxyXG4gICAgPC9wPlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBtYi0zXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwibWUtYXV0b1wiPk1CUSBmb3Ige3tzdG9yZU5hbWV9fTwvaDQ+XHJcblxyXG4gICAgICAgIDxkYXRlLXBpY2tlciAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9kYXRlLXBpY2tlcj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJnLXdoaXRlIHNoYWRvdy1zbSBtYnEtZG93bmxvYWQtYnRuXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkTUJRU2hlZXQoKVwiIFtkaXNhYmxlZF09XCJpc0Rvd25sb2FkQnV0dG9uTG9hZGluZ1wiIHN0eWxlPVwicGFkZGluZzogOXB4IDEycHg7XCI+XHJcbiAgICAgICAgICAgIEBpZiAoIWlzRG93bmxvYWRCdXR0b25Mb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDAwMDBcIiBzdHJva2Utd2lkdGg9XCIwLjI0MDAwMDAwMDAwMDAwMDA1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC4zODRcIj48L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjU1MzUgMTYuNTA2MUMxMi40MTE0IDE2LjY2MTUgMTIuMjEwNiAxNi43NSAxMiAxNi43NUMxMS43ODk0IDE2Ljc1IDExLjU4ODYgMTYuNjYxNSAxMS40NDY1IDE2LjUwNjFMNy40NDY0OCAxMi4xMzExQzcuMTY2OTggMTEuODI1NCA3LjE4ODIyIDExLjM1MSA3LjQ5MzkyIDExLjA3MTVDNy43OTk2MyAxMC43OTIgOC4yNzQwMiAxMC44MTMyIDguNTUzNTIgMTEuMTE4OUwxMS4yNSAxNC4wNjgyVjNDMTEuMjUgMi41ODU3OSAxMS41ODU4IDIuMjUgMTIgMi4yNUMxMi40MTQyIDIuMjUgMTIuNzUgMi41ODU3OSAxMi43NSAzVjE0LjA2ODJMMTUuNDQ2NSAxMS4xMTg5QzE1LjcyNiAxMC44MTMyIDE2LjIwMDQgMTAuNzkyIDE2LjUwNjEgMTEuMDcxNUMxNi44MTE4IDExLjM1MSAxNi44MzMgMTEuODI1NCAxNi41NTM1IDEyLjEzMTFMMTIuNTUzNSAxNi41MDYxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43NSAxNUMzLjc1IDE0LjU4NTggMy40MTQyMiAxNC4yNSAzIDE0LjI1QzIuNTg1NzkgMTQuMjUgMi4yNSAxNC41ODU4IDIuMjUgMTVWMTUuMDU0OUMyLjI0OTk4IDE2LjQyMjUgMi4yNDk5NiAxNy41MjQ4IDIuMzY2NTIgMTguMzkxOEMyLjQ4NzU0IDE5LjI5MTkgMi43NDY0MyAyMC4wNDk3IDMuMzQ4MzUgMjAuNjUxNkMzLjk1MDI3IDIxLjI1MzYgNC43MDgxNCAyMS41MTI1IDUuNjA4MjUgMjEuNjMzNUM2LjQ3NTIyIDIxLjc1IDcuNTc3NTQgMjEuNzUgOC45NDUxMyAyMS43NUgxNS4wNTQ5QzE2LjQyMjUgMjEuNzUgMTcuNTI0OCAyMS43NSAxOC4zOTE4IDIxLjYzMzVDMTkuMjkxOSAyMS41MTI1IDIwLjA0OTcgMjEuMjUzNiAyMC42NTE3IDIwLjY1MTZDMjEuMjUzNiAyMC4wNDk3IDIxLjUxMjUgMTkuMjkxOSAyMS42MzM1IDE4LjM5MThDMjEuNzUgMTcuNTI0OCAyMS43NSAxNi40MjI1IDIxLjc1IDE1LjA1NDlWMTVDMjEuNzUgMTQuNTg1OCAyMS40MTQyIDE0LjI1IDIxIDE0LjI1QzIwLjU4NTggMTQuMjUgMjAuMjUgMTQuNTg1OCAyMC4yNSAxNUMyMC4yNSAxNi40MzU0IDIwLjI0ODQgMTcuNDM2NSAyMC4xNDY5IDE4LjE5MTlDMjAuMDQ4MiAxOC45MjU3IDE5Ljg2NzggMTkuMzE0MiAxOS41OTEgMTkuNTkxQzE5LjMxNDIgMTkuODY3OCAxOC45MjU3IDIwLjA0ODIgMTguMTkxOSAyMC4xNDY5QzE3LjQzNjUgMjAuMjQ4NCAxNi40MzU0IDIwLjI1IDE1IDIwLjI1SDlDNy41NjQ1OSAyMC4yNSA2LjU2MzQ3IDIwLjI0ODQgNS44MDgxMiAyMC4xNDY5QzUuMDc0MzUgMjAuMDQ4MiA0LjY4NTc3IDE5Ljg2NzggNC40MDkwMSAxOS41OTFDNC4xMzIyNSAxOS4zMTQyIDMuOTUxOCAxOC45MjU3IDMuODUzMTUgMTguMTkxOUMzLjc1MTU5IDE3LjQzNjUgMy43NSAxNi40MzU0IDMuNzUgMTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJzcGlubmVyXCIgdmlld0JveD1cIjAgMCA1MCA1MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYoc2hvd0luZm9CYW5uZXIpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgMTcgMTlcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS42NjkzIDAuODM0OTYxVjQuMTY4MjlNNS4wMDI2IDAuODM0OTYxVjQuMTY4MjlNMC44MzU5MzggNy41MDE2M0gxNS44MzU5TTIuNTAyNiAyLjUwMTYzSDE0LjE2OTNDMTUuMDg5NyAyLjUwMTYzIDE1LjgzNTkgMy4yNDc4MiAxNS44MzU5IDQuMTY4MjlWMTUuODM1QzE1LjgzNTkgMTYuNzU1NCAxNS4wODk3IDE3LjUwMTYgMTQuMTY5MyAxNy41MDE2SDIuNTAyNkMxLjU4MjEzIDE3LjUwMTYgMC44MzU5MzggMTYuNzU1NCAwLjgzNTkzOCAxNS44MzVWNC4xNjgyOUMwLjgzNTkzOCAzLjI0NzgyIDEuNTgyMTMgMi41MDE2MyAyLjUwMjYgMi41MDE2M1pcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIFlvdSBhcmUgc2NoZWR1bGluZyB0aGUgbGF5b3V0IHZlcmlmaWNhdGlvbiB0YXNrIGZvciA8Yj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWREYXRlID09PSAodG9kYXkgfCBkYXRlOid5eXl5LU1NLWRkJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1RvZGF5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoc2NoZWR1bGVkRGF0ZSB8IGRhdGU6J2RkIE1NTU0sIHl5eXknKVxyXG4gICAgICAgICAgICAgICAgfX08L2I+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtcy1hdXRvIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNob3dJbmZvQmFubmVyID0gZmFsc2U7XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuNSA0LjVMNC41IDEzLjVNNC41IDQuNUwxMy41IDEzLjVcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnd2FsbCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdhbGwvRmxvb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICd3YWxsJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3dhbGwnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3VmbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVGTlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3VmbicgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICd1Zm4nID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ2JyYW5kJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmQgQ2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdicmFuZCcgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdicmFuZCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHlwZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICd0eXBlJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3R5cGUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc2l6ZScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdzaXplJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdwYXJ0aXRpb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdwYXJ0aXRpb24nID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAncGFydGl0aW9uJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgUGVyIFBhcnRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdkaXNwbGF5UGFydGl0aW9uJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2Rpc3BsYXlQYXJ0aXRpb24nID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdGFuZGFyZENhcGFjaXR5JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgQ2FwYWNpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc3RhbmRhcmRDYXBhY2l0eScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdzdGFuZGFyZENhcGFjaXR5JyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjdHVhbCBDYXBhY2l0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdhY3R1YWxDYXBhY2l0eScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdhY3R1YWxDYXBhY2l0eScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHpvbmUgb2Ygem9uZUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t6b25lfX0gWm9uZSBBbGxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1icUl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aXRlbT8ud2FsbH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpdGVtPy51Zm59fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aXRlbT8uYnJhbmR9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aXRlbT8udHlwZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpdGVtPy5zaXplfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2l0ZW0/LnBhcnRpdGlvbn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDx0ZD57e2l0ZW0/LmRpc3BsYXlQYXJ0aXRpb259fTwvdGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2l0ZW0/LnN0YW5kYXJkQ2FwYWNpdHl9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGQ+e3tpdGVtPy5hY3R1YWxDYXBhY2l0eX19PC90ZD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB6b25lIG9mIHpvbmVDb2x1bW5zXCI+e3tpdGVtPy56b25lQWxsb2NhdGlvbnM/Llt6b25lXT8uam9pbignLCAnKSB8fCAnLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzY2hlZHVsZVRhc2soKVwiPlxyXG4gICAgICAgICAgICBTY2hlZHVsZSBUYXNrXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|