tango-app-ui-store-builder 1.0.37 → 1.0.39
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/manage-plano/popups/create-planogram/create-planogram.component.mjs +19 -8
- package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +8 -2
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +60 -39
- package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +14 -15
- package/esm2022/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.mjs +13 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +30 -31
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +54 -7
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-table/plano-filter/plano-filter.component.mjs +13 -12
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +4 -4
- package/fesm2022/tango-app-ui-store-builder.mjs +207 -125
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/manage-plano/popups/create-planogram/create-planogram.component.d.ts +1 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +1 -1
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +2 -2
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +2 -4
- package/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.d.ts +1 -4
- package/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.d.ts +1 -4
- package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +1 -4
- package/lib/components/plano-tools/plano-migrate/plano-migrate.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ export class EditableFixtureComponent {
|
|
|
14
14
|
gs;
|
|
15
15
|
cd;
|
|
16
16
|
ngbModal;
|
|
17
|
-
vmList = [];
|
|
17
|
+
// @Input() vmList: VmLibraryList[] = [];
|
|
18
18
|
fixture;
|
|
19
19
|
editingAiFixture = null;
|
|
20
20
|
editFixtureQuickDetails = [];
|
|
@@ -126,14 +126,15 @@ export class EditableFixtureComponent {
|
|
|
126
126
|
});
|
|
127
127
|
return list;
|
|
128
128
|
}
|
|
129
|
-
getSelectedVM(vm) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
129
|
+
// getSelectedVM(vm: any) {
|
|
130
|
+
// if (vm?.vmId) {
|
|
131
|
+
// return this.vmList.find((v) => v.id === vm.vmId);
|
|
132
|
+
// } else {
|
|
133
|
+
// return this.vmList.find(
|
|
134
|
+
// (v) => v.name === vm.vmName && v.type === vm.vmType
|
|
135
|
+
// );
|
|
136
|
+
// }
|
|
137
|
+
// }
|
|
137
138
|
get bodyEl() {
|
|
138
139
|
return (this.fixtureRoot?.nativeElement?.querySelector("#body-block-sum") ?? null);
|
|
139
140
|
}
|
|
@@ -581,14 +582,12 @@ export class EditableFixtureComponent {
|
|
|
581
582
|
this.destroy$.complete();
|
|
582
583
|
}
|
|
583
584
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditableFixtureComponent, deps: [{ token: i1.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
584
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EditableFixtureComponent, isStandalone: true, selector: "editable-fixture", inputs: { vmList: "vmList", fixture: "fixture", showColors: "showColors", showVMs: "showVMs", showBCs: "showBCs", editMode: "editMode" }, outputs: { onCancel: "onCancel", onDone: "onDone", editTab: "editTab" }, viewQueries: [{ propertyName: "fixtureRoot", first: true, predicate: ["fixtureRoot"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n}@else {\r\n\r\n <div *ngIf=\"editMode\" class=\"quick-edit-actions\">\r\n <button class=\"btn btn-outline quick-btn\" type=\"button\" (click)=\"onClickCancel()\">\r\n Cancel\r\n </button>\r\n <button class=\"btn btn-primary quick-btn\" type=\"button\" (click)=\"onClickDone()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n <section #fixtureRoot id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"editingAiFixture?.header?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n @if(editMode){\r\n\r\n <div class=\"d-flex flex-column align-items-start w-100\">\r\n <input [class.diff]=\"editingAiFixture?.header?.isDifferent\"\r\n class=\"col-6 value edit-input form-control w-100\" type=\"text\" maxlength=\"150\"\r\n [ngModel]=\"headerItem?.value\" (ngModelChange)=\"onQuickValueChange(headerItem!, $event)\" />\r\n\r\n @if (isInvalidHeaderValue(headerItem?.value) && isQuickEditSubmitted) {\r\n <p class=\"text-danger m-0 mt-1 ms-1\" style=\"font-size: 11px;\">\r\n Cannot be empty\r\n </p>\r\n }\r\n </div>\r\n\r\n }@else {\r\n <p [class.diff]=\"editingAiFixture?.header?.isDifferent\">{{ editingAiFixture?.header?.label }}</p>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"editingAiFixture?.vmConfig?.length && showVMs\">\r\n <ng-container *ngFor=\"let vm of editingAiFixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\"\r\n alt=\"Vm Image\" class=\"cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\" />\r\n\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"editMode\" class=\"vm-actions\">\r\n <svg (click)=\"deleteVm(i)\" class=\"cursor-pointer\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <path\r\n d=\"M8.5 10H9.5M9.5 10H17.5M9.5 10V17C9.5 17.2652 9.60536 17.5196 9.79289 17.7071C9.98043 17.8946 10.2348 18 10.5 18H15.5C15.7652 18 16.0196 17.8946 16.2071 17.7071C16.3946 17.5196 16.5 17.2652 16.5 17V10H9.5ZM11 10V9C11 8.73478 11.1054 8.48043 11.2929 8.29289C11.4804 8.10536 11.7348 8 12 8H14C14.2652 8 14.5196 8.10536 14.7071 8.29289C14.8946 8.48043 15 8.73478 15 9V10M12 12.5V15.5M14 12.5V15.5\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"editVm()\" class=\"cursor-pointer ms-1\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <g clip-path=\"url(#clip0_476_30801)\">\r\n <path\r\n d=\"M15.5 8.50015C15.6313 8.36883 15.7872 8.26466 15.9588 8.19359C16.1304 8.12252 16.3143 8.08594 16.5 8.08594C16.6857 8.08594 16.8696 8.12252 17.0412 8.19359C17.2128 8.26466 17.3687 8.36883 17.5 8.50015C17.6313 8.63147 17.7355 8.78737 17.8066 8.95895C17.8776 9.13054 17.9142 9.31443 17.9142 9.50015C17.9142 9.68587 17.8776 9.86977 17.8066 10.0413C17.7355 10.2129 17.6313 10.3688 17.5 10.5002L10.75 17.2502L8 18.0002L8.75 15.2502L15.5 8.50015Z\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_476_30801\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(7 7)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L1' && showBCs\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"editingAiFixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of editingAiFixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L3' && showBCs\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of editingAiFixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L2' && showBCs\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n\r\n <div class=\"input-container\">\r\n <input [class.diff]=\"item?.isDifferent\" class=\"value edit-input form-control\"\r\n type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\"\r\n [disabled]=\"!editMode\" [value]=\"getQuickItem(item.shelfType + (i + 1))?.value\"\r\n (input)=\"onCapacityInput($event, getQuickItem(item.shelfType + (i + 1))!)\"\r\n [ngClass]=\"{\r\n 'border-red': isInvalidQuickValue(getQuickItem(item.shelfType + (i + 1))?.value) && isQuickEditSubmitted\r\n }\" />\r\n </div>\r\n\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n\r\n <!-- Tray visual -->\r\n <div *ngFor=\"let row of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n\r\n <!-- Tray inputs -->\r\n <div class=\"input-container\">\r\n <div class=\"row-container d-flex gap-1 align-items-center\"\r\n [ngClass]=\"{'border-red': isInvalidTray(item) && isQuickEditSubmitted}\">\r\n <!-- ngbTooltip=\"Total rows x Capacity per row = Total capacity\" -->\r\n <!-- Tray rows -->\r\n <input class=\"value edit-input form-control\" style=\"right: 58px;\" type=\"text\"\r\n inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"R\"\r\n [disabled]=\"!editMode\" [value]=\"item.trayRows\"\r\n (input)=\"onTrayRowChange($event, item)\" />\r\n x\r\n <!-- Products per row -->\r\n <input class=\"value edit-input form-control\" type=\"text\" inputmode=\"numeric\"\r\n pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"C\" [disabled]=\"!editMode\"\r\n [value]=\"item.productPerShelf\" (input)=\"onTrayProductChange($event, item)\" />\r\n =\r\n <span style=\"font-size: 14px; font-weight: 400;\"\r\n [class.diff]=\"item?.isDifferent\">{{item.trayRows && item.productPerShelf ? item.trayRows * item.productPerShelf : 0}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"editingAiFixture?.footer?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ editingAiFixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}.quick-btn:hover{box-shadow:0 1px 2px #10182834}.quick-edit-actions{margin-top:-36px;margin-bottom:12px;width:100%;display:flex;justify-content:end;align-items:center;gap:6px}.diff{color:#d92d20!important;font-weight:600}.diff-border{border:4px solid var(--Black, rgb(255, 0, 0))}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:1px solid #98a2b3}#fixture-view #vm-products-sum .body-block .block .row-container{border:.77px solid rgb(208,213,221);box-shadow:0 .77px 1.55px #1018280d;padding:4px 8px;background:#fff;border-radius:6px}#fixture-view #vm-products-sum .body-block .block .row-container .edit-input{width:37px;padding:8px 2px;background:transparent;border:none!important}#fixture-view #vm-products-sum .body-block .block .edit-input{border-radius:6px;padding:14px 4px;width:40px;height:26px;box-shadow:0 .77px 1.55px #1018280d;text-align:center;background:#fff;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .input-container{position:absolute;right:12px;top:10px;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .border-red{border-color:#e03131!important}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-block:hover .vm-actions{display:flex;width:100%;position:absolute;height:100%;justify-content:center;align-items:center;top:0}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#fixture-view #vm-products-sum .vm-actions{display:none;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
585
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EditableFixtureComponent, isStandalone: true, selector: "editable-fixture", inputs: { fixture: "fixture", showColors: "showColors", showVMs: "showVMs", showBCs: "showBCs", editMode: "editMode" }, outputs: { onCancel: "onCancel", onDone: "onDone", editTab: "editTab" }, viewQueries: [{ propertyName: "fixtureRoot", first: true, predicate: ["fixtureRoot"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n}@else {\r\n\r\n <div *ngIf=\"editMode\" class=\"quick-edit-actions\">\r\n <button class=\"btn btn-outline quick-btn\" type=\"button\" (click)=\"onClickCancel()\">\r\n Cancel\r\n </button>\r\n <button class=\"btn btn-primary quick-btn\" type=\"button\" (click)=\"onClickDone()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n <section #fixtureRoot id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"editingAiFixture?.header?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n @if(editMode){\r\n\r\n <div class=\"d-flex flex-column align-items-start w-100\">\r\n <input [class.diff]=\"editingAiFixture?.header?.isDifferent\"\r\n class=\"col-6 value edit-input form-control w-100\" type=\"text\" maxlength=\"150\"\r\n [ngModel]=\"headerItem?.value\" (ngModelChange)=\"onQuickValueChange(headerItem!, $event)\" />\r\n\r\n @if (isInvalidHeaderValue(headerItem?.value) && isQuickEditSubmitted) {\r\n <p class=\"text-danger m-0 mt-1 ms-1\" style=\"font-size: 11px;\">\r\n Cannot be empty\r\n </p>\r\n }\r\n </div>\r\n\r\n }@else {\r\n <p [class.diff]=\"editingAiFixture?.header?.isDifferent\">{{ editingAiFixture?.header?.label }}</p>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"editingAiFixture?.vmConfig?.length && showVMs\">\r\n <ng-container *ngFor=\"let vm of editingAiFixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImage; else placeholder\" [src]=\"imgCDN + vm?.vmImage\"\r\n alt=\"Vm Image\" class=\"cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\" />\r\n\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"editMode\" class=\"vm-actions\">\r\n <svg (click)=\"deleteVm(i)\" class=\"cursor-pointer\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <path\r\n d=\"M8.5 10H9.5M9.5 10H17.5M9.5 10V17C9.5 17.2652 9.60536 17.5196 9.79289 17.7071C9.98043 17.8946 10.2348 18 10.5 18H15.5C15.7652 18 16.0196 17.8946 16.2071 17.7071C16.3946 17.5196 16.5 17.2652 16.5 17V10H9.5ZM11 10V9C11 8.73478 11.1054 8.48043 11.2929 8.29289C11.4804 8.10536 11.7348 8 12 8H14C14.2652 8 14.5196 8.10536 14.7071 8.29289C14.8946 8.48043 15 8.73478 15 9V10M12 12.5V15.5M14 12.5V15.5\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"editVm()\" class=\"cursor-pointer ms-1\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <g clip-path=\"url(#clip0_476_30801)\">\r\n <path\r\n d=\"M15.5 8.50015C15.6313 8.36883 15.7872 8.26466 15.9588 8.19359C16.1304 8.12252 16.3143 8.08594 16.5 8.08594C16.6857 8.08594 16.8696 8.12252 17.0412 8.19359C17.2128 8.26466 17.3687 8.36883 17.5 8.50015C17.6313 8.63147 17.7355 8.78737 17.8066 8.95895C17.8776 9.13054 17.9142 9.31443 17.9142 9.50015C17.9142 9.68587 17.8776 9.86977 17.8066 10.0413C17.7355 10.2129 17.6313 10.3688 17.5 10.5002L10.75 17.2502L8 18.0002L8.75 15.2502L15.5 8.50015Z\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_476_30801\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(7 7)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L1' && showBCs\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"editingAiFixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of editingAiFixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L3' && showBCs\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of editingAiFixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L2' && showBCs\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n\r\n <div class=\"input-container\">\r\n <input [class.diff]=\"item?.isDifferent\" class=\"value edit-input form-control\"\r\n type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\"\r\n [disabled]=\"!editMode\" [value]=\"getQuickItem(item.shelfType + (i + 1))?.value\"\r\n (input)=\"onCapacityInput($event, getQuickItem(item.shelfType + (i + 1))!)\"\r\n [ngClass]=\"{\r\n 'border-red': isInvalidQuickValue(getQuickItem(item.shelfType + (i + 1))?.value) && isQuickEditSubmitted\r\n }\" />\r\n </div>\r\n\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n\r\n <!-- Tray visual -->\r\n <div *ngFor=\"let row of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n\r\n <!-- Tray inputs -->\r\n <div class=\"input-container\">\r\n <div class=\"row-container d-flex gap-1 align-items-center\"\r\n [ngClass]=\"{'border-red': isInvalidTray(item) && isQuickEditSubmitted}\">\r\n <!-- ngbTooltip=\"Total rows x Capacity per row = Total capacity\" -->\r\n <!-- Tray rows -->\r\n <input class=\"value edit-input form-control\" style=\"right: 58px;\" type=\"text\"\r\n inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"R\"\r\n [disabled]=\"!editMode\" [value]=\"item.trayRows\"\r\n (input)=\"onTrayRowChange($event, item)\" />\r\n x\r\n <!-- Products per row -->\r\n <input class=\"value edit-input form-control\" type=\"text\" inputmode=\"numeric\"\r\n pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"C\" [disabled]=\"!editMode\"\r\n [value]=\"item.productPerShelf\" (input)=\"onTrayProductChange($event, item)\" />\r\n =\r\n <span style=\"font-size: 14px; font-weight: 400;\"\r\n [class.diff]=\"item?.isDifferent\">{{item.trayRows && item.productPerShelf ? item.trayRows * item.productPerShelf : 0}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"editingAiFixture?.footer?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ editingAiFixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}.quick-btn:hover{box-shadow:0 1px 2px #10182834}.quick-edit-actions{margin-top:-36px;margin-bottom:12px;width:100%;display:flex;justify-content:end;align-items:center;gap:6px}.diff{color:#d92d20!important;font-weight:600}.diff-border{border:4px solid var(--Black, rgb(255, 0, 0))}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:1px solid #98a2b3}#fixture-view #vm-products-sum .body-block .block .row-container{border:.77px solid rgb(208,213,221);box-shadow:0 .77px 1.55px #1018280d;padding:4px 8px;background:#fff;border-radius:6px}#fixture-view #vm-products-sum .body-block .block .row-container .edit-input{width:37px;padding:8px 2px;background:transparent;border:none!important}#fixture-view #vm-products-sum .body-block .block .edit-input{border-radius:6px;padding:14px 4px;width:40px;height:26px;box-shadow:0 .77px 1.55px #1018280d;text-align:center;background:#fff;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .input-container{position:absolute;right:12px;top:10px;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .border-red{border-color:#e03131!important}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-block:hover .vm-actions{display:flex;width:100%;position:absolute;height:100%;justify-content:center;align-items:center;top:0}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#fixture-view #vm-products-sum .vm-actions{display:none;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
585
586
|
}
|
|
586
587
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditableFixtureComponent, decorators: [{
|
|
587
588
|
type: Component,
|
|
588
|
-
args: [{ selector: "editable-fixture", standalone: true, imports: [NgIf, NgFor, NgbTooltip, NgClass, FormsModule], template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n}@else {\r\n\r\n <div *ngIf=\"editMode\" class=\"quick-edit-actions\">\r\n <button class=\"btn btn-outline quick-btn\" type=\"button\" (click)=\"onClickCancel()\">\r\n Cancel\r\n </button>\r\n <button class=\"btn btn-primary quick-btn\" type=\"button\" (click)=\"onClickDone()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n <section #fixtureRoot id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"editingAiFixture?.header?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n @if(editMode){\r\n\r\n <div class=\"d-flex flex-column align-items-start w-100\">\r\n <input [class.diff]=\"editingAiFixture?.header?.isDifferent\"\r\n class=\"col-6 value edit-input form-control w-100\" type=\"text\" maxlength=\"150\"\r\n [ngModel]=\"headerItem?.value\" (ngModelChange)=\"onQuickValueChange(headerItem!, $event)\" />\r\n\r\n @if (isInvalidHeaderValue(headerItem?.value) && isQuickEditSubmitted) {\r\n <p class=\"text-danger m-0 mt-1 ms-1\" style=\"font-size: 11px;\">\r\n Cannot be empty\r\n </p>\r\n }\r\n </div>\r\n\r\n }@else {\r\n <p [class.diff]=\"editingAiFixture?.header?.isDifferent\">{{ editingAiFixture?.header?.label }}</p>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"editingAiFixture?.vmConfig?.length && showVMs\">\r\n <ng-container *ngFor=\"let vm of editingAiFixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\"\r\n alt=\"Vm Image\" class=\"cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\" />\r\n\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"editMode\" class=\"vm-actions\">\r\n <svg (click)=\"deleteVm(i)\" class=\"cursor-pointer\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <path\r\n d=\"M8.5 10H9.5M9.5 10H17.5M9.5 10V17C9.5 17.2652 9.60536 17.5196 9.79289 17.7071C9.98043 17.8946 10.2348 18 10.5 18H15.5C15.7652 18 16.0196 17.8946 16.2071 17.7071C16.3946 17.5196 16.5 17.2652 16.5 17V10H9.5ZM11 10V9C11 8.73478 11.1054 8.48043 11.2929 8.29289C11.4804 8.10536 11.7348 8 12 8H14C14.2652 8 14.5196 8.10536 14.7071 8.29289C14.8946 8.48043 15 8.73478 15 9V10M12 12.5V15.5M14 12.5V15.5\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"editVm()\" class=\"cursor-pointer ms-1\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <g clip-path=\"url(#clip0_476_30801)\">\r\n <path\r\n d=\"M15.5 8.50015C15.6313 8.36883 15.7872 8.26466 15.9588 8.19359C16.1304 8.12252 16.3143 8.08594 16.5 8.08594C16.6857 8.08594 16.8696 8.12252 17.0412 8.19359C17.2128 8.26466 17.3687 8.36883 17.5 8.50015C17.6313 8.63147 17.7355 8.78737 17.8066 8.95895C17.8776 9.13054 17.9142 9.31443 17.9142 9.50015C17.9142 9.68587 17.8776 9.86977 17.8066 10.0413C17.7355 10.2129 17.6313 10.3688 17.5 10.5002L10.75 17.2502L8 18.0002L8.75 15.2502L15.5 8.50015Z\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_476_30801\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(7 7)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L1' && showBCs\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"editingAiFixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of editingAiFixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L3' && showBCs\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of editingAiFixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L2' && showBCs\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n\r\n <div class=\"input-container\">\r\n <input [class.diff]=\"item?.isDifferent\" class=\"value edit-input form-control\"\r\n type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\"\r\n [disabled]=\"!editMode\" [value]=\"getQuickItem(item.shelfType + (i + 1))?.value\"\r\n (input)=\"onCapacityInput($event, getQuickItem(item.shelfType + (i + 1))!)\"\r\n [ngClass]=\"{\r\n 'border-red': isInvalidQuickValue(getQuickItem(item.shelfType + (i + 1))?.value) && isQuickEditSubmitted\r\n }\" />\r\n </div>\r\n\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n\r\n <!-- Tray visual -->\r\n <div *ngFor=\"let row of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n\r\n <!-- Tray inputs -->\r\n <div class=\"input-container\">\r\n <div class=\"row-container d-flex gap-1 align-items-center\"\r\n [ngClass]=\"{'border-red': isInvalidTray(item) && isQuickEditSubmitted}\">\r\n <!-- ngbTooltip=\"Total rows x Capacity per row = Total capacity\" -->\r\n <!-- Tray rows -->\r\n <input class=\"value edit-input form-control\" style=\"right: 58px;\" type=\"text\"\r\n inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"R\"\r\n [disabled]=\"!editMode\" [value]=\"item.trayRows\"\r\n (input)=\"onTrayRowChange($event, item)\" />\r\n x\r\n <!-- Products per row -->\r\n <input class=\"value edit-input form-control\" type=\"text\" inputmode=\"numeric\"\r\n pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"C\" [disabled]=\"!editMode\"\r\n [value]=\"item.productPerShelf\" (input)=\"onTrayProductChange($event, item)\" />\r\n =\r\n <span style=\"font-size: 14px; font-weight: 400;\"\r\n [class.diff]=\"item?.isDifferent\">{{item.trayRows && item.productPerShelf ? item.trayRows * item.productPerShelf : 0}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"editingAiFixture?.footer?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ editingAiFixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}.quick-btn:hover{box-shadow:0 1px 2px #10182834}.quick-edit-actions{margin-top:-36px;margin-bottom:12px;width:100%;display:flex;justify-content:end;align-items:center;gap:6px}.diff{color:#d92d20!important;font-weight:600}.diff-border{border:4px solid var(--Black, rgb(255, 0, 0))}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:1px solid #98a2b3}#fixture-view #vm-products-sum .body-block .block .row-container{border:.77px solid rgb(208,213,221);box-shadow:0 .77px 1.55px #1018280d;padding:4px 8px;background:#fff;border-radius:6px}#fixture-view #vm-products-sum .body-block .block .row-container .edit-input{width:37px;padding:8px 2px;background:transparent;border:none!important}#fixture-view #vm-products-sum .body-block .block .edit-input{border-radius:6px;padding:14px 4px;width:40px;height:26px;box-shadow:0 .77px 1.55px #1018280d;text-align:center;background:#fff;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .input-container{position:absolute;right:12px;top:10px;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .border-red{border-color:#e03131!important}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-block:hover .vm-actions{display:flex;width:100%;position:absolute;height:100%;justify-content:center;align-items:center;top:0}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#fixture-view #vm-products-sum .vm-actions{display:none;width:100%;height:100%}\n"] }]
|
|
589
|
-
}], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgbModal }], propDecorators: {
|
|
590
|
-
type: Input
|
|
591
|
-
}], fixture: [{
|
|
589
|
+
args: [{ selector: "editable-fixture", standalone: true, imports: [NgIf, NgFor, NgbTooltip, NgClass, FormsModule], template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n}@else {\r\n\r\n <div *ngIf=\"editMode\" class=\"quick-edit-actions\">\r\n <button class=\"btn btn-outline quick-btn\" type=\"button\" (click)=\"onClickCancel()\">\r\n Cancel\r\n </button>\r\n <button class=\"btn btn-primary quick-btn\" type=\"button\" (click)=\"onClickDone()\">\r\n Submit\r\n </button>\r\n </div>\r\n\r\n <section #fixtureRoot id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"editingAiFixture?.header?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n @if(editMode){\r\n\r\n <div class=\"d-flex flex-column align-items-start w-100\">\r\n <input [class.diff]=\"editingAiFixture?.header?.isDifferent\"\r\n class=\"col-6 value edit-input form-control w-100\" type=\"text\" maxlength=\"150\"\r\n [ngModel]=\"headerItem?.value\" (ngModelChange)=\"onQuickValueChange(headerItem!, $event)\" />\r\n\r\n @if (isInvalidHeaderValue(headerItem?.value) && isQuickEditSubmitted) {\r\n <p class=\"text-danger m-0 mt-1 ms-1\" style=\"font-size: 11px;\">\r\n Cannot be empty\r\n </p>\r\n }\r\n </div>\r\n\r\n }@else {\r\n <p [class.diff]=\"editingAiFixture?.header?.isDifferent\">{{ editingAiFixture?.header?.label }}</p>\r\n }\r\n\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"editingAiFixture?.vmConfig?.length && showVMs\">\r\n <ng-container *ngFor=\"let vm of editingAiFixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImage; else placeholder\" [src]=\"imgCDN + vm?.vmImage\"\r\n alt=\"Vm Image\" class=\"cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\" />\r\n\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder cursor-pointer\" [class.diff-border]=\"vm?.isDifferent\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n\r\n <div *ngIf=\"editMode\" class=\"vm-actions\">\r\n <svg (click)=\"deleteVm(i)\" class=\"cursor-pointer\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <path\r\n d=\"M8.5 10H9.5M9.5 10H17.5M9.5 10V17C9.5 17.2652 9.60536 17.5196 9.79289 17.7071C9.98043 17.8946 10.2348 18 10.5 18H15.5C15.7652 18 16.0196 17.8946 16.2071 17.7071C16.3946 17.5196 16.5 17.2652 16.5 17V10H9.5ZM11 10V9C11 8.73478 11.1054 8.48043 11.2929 8.29289C11.4804 8.10536 11.7348 8 12 8H14C14.2652 8 14.5196 8.10536 14.7071 8.29289C14.8946 8.48043 15 8.73478 15 9V10M12 12.5V15.5M14 12.5V15.5\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"editVm()\" class=\"cursor-pointer ms-1\" style=\"height: 22px;\" width=\"26\"\r\n height=\"26\" viewBox=\"0 0 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" fill=\"#F2F4F7\" />\r\n <rect x=\"1\" y=\"1\" width=\"24\" height=\"24\" rx=\"12\" stroke=\"#EAECF0\"\r\n stroke-width=\"2\" />\r\n <g clip-path=\"url(#clip0_476_30801)\">\r\n <path\r\n d=\"M15.5 8.50015C15.6313 8.36883 15.7872 8.26466 15.9588 8.19359C16.1304 8.12252 16.3143 8.08594 16.5 8.08594C16.6857 8.08594 16.8696 8.12252 17.0412 8.19359C17.2128 8.26466 17.3687 8.36883 17.5 8.50015C17.6313 8.63147 17.7355 8.78737 17.8066 8.95895C17.8776 9.13054 17.9142 9.31443 17.9142 9.50015C17.9142 9.68587 17.8776 9.86977 17.8066 10.0413C17.7355 10.2129 17.6313 10.3688 17.5 10.5002L10.75 17.2502L8 18.0002L8.75 15.2502L15.5 8.50015Z\"\r\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_476_30801\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(7 7)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L1' && showBCs\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"editingAiFixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of editingAiFixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"editingAiFixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of editingAiFixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L3' && showBCs\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of editingAiFixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"editingAiFixture?.productResolutionLevel === 'L2' && showBCs\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n\r\n <div class=\"input-container\">\r\n <input [class.diff]=\"item?.isDifferent\" class=\"value edit-input form-control\"\r\n type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\"\r\n [disabled]=\"!editMode\" [value]=\"getQuickItem(item.shelfType + (i + 1))?.value\"\r\n (input)=\"onCapacityInput($event, getQuickItem(item.shelfType + (i + 1))!)\"\r\n [ngClass]=\"{\r\n 'border-red': isInvalidQuickValue(getQuickItem(item.shelfType + (i + 1))?.value) && isQuickEditSubmitted\r\n }\" />\r\n </div>\r\n\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n\r\n <!-- Tray visual -->\r\n <div *ngFor=\"let row of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n\r\n <!-- Tray inputs -->\r\n <div class=\"input-container\">\r\n <div class=\"row-container d-flex gap-1 align-items-center\"\r\n [ngClass]=\"{'border-red': isInvalidTray(item) && isQuickEditSubmitted}\">\r\n <!-- ngbTooltip=\"Total rows x Capacity per row = Total capacity\" -->\r\n <!-- Tray rows -->\r\n <input class=\"value edit-input form-control\" style=\"right: 58px;\" type=\"text\"\r\n inputmode=\"numeric\" pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"R\"\r\n [disabled]=\"!editMode\" [value]=\"item.trayRows\"\r\n (input)=\"onTrayRowChange($event, item)\" />\r\n x\r\n <!-- Products per row -->\r\n <input class=\"value edit-input form-control\" type=\"text\" inputmode=\"numeric\"\r\n pattern=\"[0-9]*\" autocomplete=\"off\" placeholder=\"C\" [disabled]=\"!editMode\"\r\n [value]=\"item.productPerShelf\" (input)=\"onTrayProductChange($event, item)\" />\r\n =\r\n <span style=\"font-size: 14px; font-weight: 400;\"\r\n [class.diff]=\"item?.isDifferent\">{{item.trayRows && item.productPerShelf ? item.trayRows * item.productPerShelf : 0}}</span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"editingAiFixture?.footer?.isEnabled && editingAiFixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ editingAiFixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}.quick-btn:hover{box-shadow:0 1px 2px #10182834}.quick-edit-actions{margin-top:-36px;margin-bottom:12px;width:100%;display:flex;justify-content:end;align-items:center;gap:6px}.diff{color:#d92d20!important;font-weight:600}.diff-border{border:4px solid var(--Black, rgb(255, 0, 0))}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:1px solid #98a2b3}#fixture-view #vm-products-sum .body-block .block .row-container{border:.77px solid rgb(208,213,221);box-shadow:0 .77px 1.55px #1018280d;padding:4px 8px;background:#fff;border-radius:6px}#fixture-view #vm-products-sum .body-block .block .row-container .edit-input{width:37px;padding:8px 2px;background:transparent;border:none!important}#fixture-view #vm-products-sum .body-block .block .edit-input{border-radius:6px;padding:14px 4px;width:40px;height:26px;box-shadow:0 .77px 1.55px #1018280d;text-align:center;background:#fff;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .input-container{position:absolute;right:12px;top:10px;transition:all .3s ease}#fixture-view #vm-products-sum .body-block .block .border-red{border-color:#e03131!important}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-block:hover .vm-actions{display:flex;width:100%;position:absolute;height:100%;justify-content:center;align-items:center;top:0}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}#fixture-view #vm-products-sum .vm-actions{display:none;width:100%;height:100%}\n"] }]
|
|
590
|
+
}], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgbModal }], propDecorators: { fixture: [{
|
|
592
591
|
type: Input
|
|
593
592
|
}], showColors: [{
|
|
594
593
|
type: Input
|
|
@@ -608,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
608
607
|
type: ViewChild,
|
|
609
608
|
args: ["fixtureRoot", { static: false }]
|
|
610
609
|
}] } });
|
|
611
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2VkaXRhYmxlLWZpeHR1cmUvZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2VkaXRhYmxlLWZpeHR1cmUvZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWhFLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7O0FBU3JHLE1BQU0sT0FBTyx3QkFBd0I7SUE0Q3pCO0lBQ0E7SUFDQTtJQTNDRCxNQUFNLEdBQW9C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QUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBR1AsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RhdGEvZml4dHVyZS10ZW1wbGF0ZS5kYXRhXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgU2VjdGlvbkNvbmZpZyxcclxuICBTaGVsZkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyByZ2JUb0hleCB9IGZyb20gXCIuLi8uLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgVm1MaWJyYXJ5TGlzdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JUb29sdGlwIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9hY3Rpb24tY29uZmlybS1wb3B1cC9hY3Rpb24tY29uZmlybS1wb3B1cC5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVkaXRhYmxlLWZpeHR1cmVcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgTmdiVG9vbHRpcCwgTmdDbGFzcywgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdGFibGVGaXh0dXJlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95XHJcbntcclxuICBASW5wdXQoKSB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZpeHR1cmU6IGFueTtcclxuICBlZGl0aW5nQWlGaXh0dXJlOiBhbnkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZWRpdEZpeHR1cmVRdWlja0RldGFpbHM6IEZpeHR1cmVRdWlja0RldGFpbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDb2xvcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Vk1zOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QkNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0VGFiID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJmaXh0dXJlUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBmaXh0dXJlUm9vdCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBpbWdDRE46IHN0cmluZztcclxuICBzaGVsZkNvbG9ycyA9IFNIRUxGX0NPTE9SUztcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1F1aWNrRWRpdFN1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJmaXh0dXJlXCJdIHx8IGNoYW5nZXNbXCJlZGl0TW9kZVwiXSB8fCBjaGFuZ2VzW1wicGxhbm9GaXh0dXJlXCJdKSB7XHJcbiAgICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpeHR1cmUpO1xyXG4gICAgICB0aGlzLmVkaXRGaXh0dXJlUXVpY2tEZXRhaWxzID0gdGhpcy5idWlsZEZpeHR1cmVRdWlja0RldGFpbHMoXHJcbiAgICAgICAgdGhpcy5lZGl0aW5nQWlGaXh0dXJlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICAgIH0sIDQwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNCQ0luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNCQ0luaXRpYWxpemVkID0gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNWTUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWTUluaXRpYWxpemVkID0gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVpY2tJdGVtKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lZGl0Rml4dHVyZVF1aWNrRGV0YWlscy5maW5kKChpKSA9PiBpLmtleSA9PT0ga2V5KTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRml4dHVyZVF1aWNrRGV0YWlscyhmaXh0dXJlOiBhbnkpIHtcclxuICAgIGlmICghZml4dHVyZSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGxpc3Q6IEZpeHR1cmVRdWlja0RldGFpbFtdID0gW107XHJcblxyXG4gICAgY29uc3Qgc2FmZSA9ICh2OiBhbnkpID0+XHJcbiAgICAgIHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IFwiXCIgPyBcIi1cIiA6IHY7XHJcblxyXG4gICAgbGlzdC5wdXNoKHtcclxuICAgICAga2V5OiBcImZpeHR1cmVIZWFkZXJcIixcclxuICAgICAgbGFiZWw6IFwiRml4dHVyZSBIZWFkZXI6XCIsXHJcbiAgICAgIHZhbHVlOiBzYWZlKGZpeHR1cmU/LmhlYWRlcj8ubGFiZWwpLFxyXG4gICAgICBlZGl0YWJsZTogdHJ1ZSxcclxuICAgICAgbWV0YTogeyB0eXBlOiBcImZpeHR1cmVcIiB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbHZlcyA9IEFycmF5LmlzQXJyYXkoZml4dHVyZS5zaGVsZkNvbmZpZylcclxuICAgICAgPyBmaXh0dXJlLnNoZWxmQ29uZmlnXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgc2hlbHZlc1xyXG4gICAgICAuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuc2hlbGZOdW1iZXIgLSBiLnNoZWxmTnVtYmVyKVxyXG4gICAgICAuZm9yRWFjaCgoczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZOdW0gPSBOdW1iZXIoc2FmZShzLnNoZWxmTnVtYmVyKSk7XHJcbiAgICAgICAgY29uc3QgaXNTaGVsZiA9IHMuc2hlbGZUeXBlID09PSBcInNoZWxmXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IGtleSA9IGAke2lzU2hlbGYgPyBcInNoZWxmXCIgOiBcInRyYXlcIn0ke3NoZWxmTnVtfWA7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpc1NoZWxmXHJcbiAgICAgICAgICA/IGBTaGVsZiAke3NoZWxmTnVtfSBjYXBhY2l0eTpgXHJcbiAgICAgICAgICA6IGBUcmF5ICR7c2hlbGZOdW19IGNhcGFjaXR5OmA7XHJcblxyXG4gICAgICAgIGxldCBjYXBhY2l0eSA9IFwiMFwiO1xyXG5cclxuICAgICAgICBpZiAocy5wcm9kdWN0UGVyU2hlbGYpIHtcclxuICAgICAgICAgIGlmIChpc1NoZWxmKSB7XHJcbiAgICAgICAgICAgIGNhcGFjaXR5ID0gU3RyaW5nKHMucHJvZHVjdFBlclNoZWxmKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gcy50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgICBjYXBhY2l0eSA9IHRyYXlSb3dzID8gU3RyaW5nKHMucHJvZHVjdFBlclNoZWxmICogdHJheVJvd3MpIDogXCIwXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0LnB1c2goe1xyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgICAgbGFiZWwsXHJcbiAgICAgICAgICB2YWx1ZTogY2FwYWNpdHksXHJcbiAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgdHlwZTogaXNTaGVsZiA/IFwic2hlbGZcIiA6IFwidHJheVwiLFxyXG4gICAgICAgICAgICBzaGVsZk51bWJlcjogc2hlbGZOdW0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRWTSh2bTogYW55KSB7XHJcbiAgICBpZiAodm0/LnZtSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoKHYpID0+IHYuaWQgPT09IHZtLnZtSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoXHJcbiAgICAgICAgKHYpID0+IHYubmFtZSA9PT0gdm0udm1OYW1lICYmIHYudHlwZSA9PT0gdm0udm1UeXBlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBib2R5RWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZVJvb3Q/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIjYm9keS1ibG9jay1zdW1cIikgPz8gbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dWTXMpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdQb3J0ID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgdGhpcy5lZGl0aW5nQWlGaXh0dXJlPy52bUNvbmZpZz8uZm9yRWFjaCgoZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHN0YXJ0U2hlbGYgPSBlPy5zdGFydFlQb3NpdGlvbiA/PyAxO1xyXG5cclxuICAgICAgbGV0IGVuZFNoZWxmID1cclxuICAgICAgICBlPy5lbmRZUG9zaXRpb24gPz8gdGhpcy5lZGl0aW5nQWlGaXh0dXJlPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDE7XHJcblxyXG4gICAgICBjb25zdCB2bSA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCN2bSR7aX1gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKCF2bSkgcmV0dXJuO1xyXG5cclxuICAgICAgbGV0IHggPSAwO1xyXG4gICAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgICBsZXQgeVN0YXJ0ID0gMDtcclxuICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzdGFydFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcblxyXG4gICAgICAgIHlTdGFydCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHBsYWNlbWVudEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBwbGFjZW1lbnRXaWR0aCA9IGJvZHlXaWR0aDtcclxuXHJcbiAgICAgIGZvciAobGV0IGsgPSBzdGFydFNoZWxmOyBrIDw9IGVuZFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcbiAgICAgICAgcGxhY2VtZW50SGVpZ2h0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGVmYXVsdFcgPSBwbGFjZW1lbnRXaWR0aCAvIDM7XHJcbiAgICAgIGxldCBkZWZhdWx0SCA9IHBsYWNlbWVudEhlaWdodCAvIDM7XHJcblxyXG4gICAgICBsZXQgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgbGV0IGhlaWdodCA9IGRlZmF1bHRIO1xyXG5cclxuICAgICAgc3dpdGNoIChlPy54Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gYm9keVdpZHRoIC0gd2lkdGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IChib2R5V2lkdGggLSB3aWR0aCkgLyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIHdpZHRoID0gYm9keVdpZHRoO1xyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChlPy55Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gKHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCkgLyAyICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZtLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xyXG4gICAgICB2bS5zdHlsZS5oZWlnaHQgPSBgICR7aGVpZ2h0fXB4YDtcclxuICAgICAgdm0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZ2V0U2hlbGZEaXYoazogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGRpdiA9IHZpZXdQb3J0Py5xdWVyeVNlbGVjdG9yKGAjc2hlbGYke2t9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKCFkaXYpIGRpdiA9IHZpZXdQb3J0Py5xdWVyeVNlbGVjdG9yKGAjdHJheSR7a31gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICByZXR1cm4gZGl2IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTaGVsZkNvbG9ycygpIHtcclxuICAgIGNvbnN0IGJvZGllcyA9IHRoaXMuYm9keUVsO1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcz8uY2hpbGRyZW4gPz8gW10pIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgY29uc3Qgc2hlbGZEaXZzID0gYm9keUNoaWxkcmVuXHJcbiAgICAgIC5tYXAoKGRpdikgPT4gZGl2IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAuZmlsdGVyKChkKSA9PiBkPy5pZC5pbmNsdWRlcyhcInN1bVNoZWxmQ29udGFpbmVyXCIpKTtcclxuXHJcbiAgICBpZiAoIXNoZWxmRGl2cykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGFkanVzdCA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCkge1xyXG4gICAgICBjYXNlIFwiTDFcIjogLy9maXh0dXJlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzWzBdLmJnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1pbnB1dFwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgLy8gY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAvLyAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAvLyBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICAvLyB5ICs9IGQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIkwzXCI6IC8vc2VjdGlvblxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBzaGVsZkRpdnNcclxuICAgICAgICAgICAgLm1hcCgoZGl2KSA9PlxyXG4gICAgICAgICAgICAgIGRpdi5sYXN0RWxlbWVudENoaWxkPy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZGl2XCJcclxuICAgICAgICAgICAgICAgID8gKGRpdi5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWx2ZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbkFycmF5ID0gdGhpcy5ncm91cFNoZWx2ZXNCeVpvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZT8uc2hlbGZDb25maWcgPz8gW11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBhbGxTZWN0aW9uU2hlbHZlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgICBzZWN0aW9uQXJyYXkuZm9yRWFjaCgoc2UsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2hlbGZJZHMgPVxyXG4gICAgICAgICAgICAgIHNlLnNoZWx2ZXM/Lm1hcCgoc2gpID0+IHNoLnJlcGxhY2UoL1xccy9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpKSA/P1xyXG4gICAgICAgICAgICAgIFtdO1xyXG4gICAgICAgICAgICBhbGxTZWN0aW9uU2hlbHZlcy5wdXNoKC4uLnNoZWxmSWRzKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VjRGl2cyA9IHNoZWx2ZXMuZmlsdGVyKChpdGVtKSA9PlxyXG4gICAgICAgICAgICAgIHNoZWxmSWRzPy5pbmNsdWRlcyhpdGVtPy5pZCA/PyBcIlwiKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgIHNlY0RpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1jb250YWluZXJcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHNZID0geSAtIGNhcC5vZmZzZXRUb3AgKyAxMDtcclxuICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICB5ICs9IGQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dCQ3MpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICAgIGxldCBzZWN0aW9uR3JvdXBIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgc3ouc2VjdGlvbi5zaGVsZkRpdnNbMF0/Lm9mZnNldFdpZHRoID8/IDM0NTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYmMgPSBib2RpZXMucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWBcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnMuZmluZCgoYykgPT4gYy5iZyA9PT0gc2VjQmcpID8/XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IGNvbG9yLmJvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gKGN1cnJlbnRTZWN0aW9uV2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNZID1cclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTZWN0aW9uSGVpZ2h0IC0gYmMub2Zmc2V0SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodCArPSBjdXJyZW50U2VjdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMMlwiOiAvL3NoZWxmXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLy8gbGV0IHkgPSAwO1xyXG5cclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkaXYsIGkpID0+IHtcclxuICAgICAgICAgICAgLy8gY29uc3QgY2FwID0gZGl2LnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1pbnB1dFwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgLy8gY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAvLyAgIHkgKyAoZGl2Lm9mZnNldEhlaWdodCAtIGNhcC5vZmZzZXRIZWlnaHQpIC8gMiAtIGNhcC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIC8vIGNhcC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3NZfXB4KWA7XHJcbiAgICAgICAgICAgIC8vIHkgKz0gZGl2Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5iZztcclxuICAgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gYDEuNHB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXJ9YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dCQ3MpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZGl2LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGAjYnJhbmQtY2F0ZWdvcnkke2l9YCk7XHJcbiAgICAgICAgICAgIGlmICghYmMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJjWCA9IChkaXYub2Zmc2V0V2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICBjb25zdCBiY1kgPSAoZGl2Lm9mZnNldEhlaWdodCAtIGJjLm9mZnNldEhlaWdodCkgLyAyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXI7XHJcbiAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS50ZXh0Qmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2JjWCArIGFkanVzdH1weCwgJHtiY1l9cHgpYDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkw0XCI6IC8vc3BvdFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIGxldCB5ID0gMDtcclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY29uc3QgY2FwID0gZC5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtaW5wdXRcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHNZID1cclxuICAgICAgICAgICAgLy8gICB5ICsgKGQub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgLy8gY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgLy8geSArPSBkLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICAvLyBsZXQgeSA9IDA7XHJcbiAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgIGlmICghZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzWzBdLmJnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5lZGl0LWlucHV0XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgLy8gY29uc3Qgc1kgPVxyXG4gICAgICAgICAgLy8gICB5ICsgKGQub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgIC8vIGNhcC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3NZfXB4KWA7XHJcbiAgICAgICAgICAvLyB5ICs9IGQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbGZEaXZzOiAoSFRNTEVsZW1lbnQgfCBudWxsKVtdKSB7XHJcbiAgICBjb25zdCBuZXdTZWN0aW9uQnlab25lcyA9IFtdO1xyXG5cclxuICAgIGxldCBwWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5lZGl0aW5nQWlGaXh0dXJlPy5zaGVsZkNvbmZpZyA/PyBbXSkge1xyXG4gICAgICBjb25zdCB6b25lID0gcy56b25lIHx8IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmSWQgPSBgJHtzLnNoZWxmVHlwZX0ke3Muc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgY29uc3Qgc2hlbGZEaXYgPSBzaGVsZkRpdnMuZmluZCgoZCkgPT4gZD8uaWQgPT09IHNoZWxmSWQpO1xyXG5cclxuICAgICAgaWYgKHpvbmUgPT09IFwiXCIpIGNvbnRpbnVlO1xyXG4gICAgICBpZiAoem9uZSAhPT0gcFpvbmUpIHtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lcy5wdXNoKHtcclxuICAgICAgICAgIHpvbmUsXHJcbiAgICAgICAgICBzZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIGJyYW5kczogcy5wcm9kdWN0QnJhbmROYW1lID8/IFtdLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBzLnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICAgICAgc2hlbHZlczogW3NoZWxmSWRdLFxyXG4gICAgICAgICAgICBzaGVsZkRpdnM6IFtzaGVsZkRpdl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBab25lID0gem9uZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uLnNoZWx2ZXMucHVzaChcclxuICAgICAgICAgIHNoZWxmSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzW25ld1NlY3Rpb25CeVpvbmVzLmxlbmd0aCAtIDFdLnNlY3Rpb24uc2hlbGZEaXZzLnB1c2goXHJcbiAgICAgICAgICBzaGVsZkRpdlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlY3Rpb25CeVpvbmVzID0gWy4uLm5ld1NlY3Rpb25CeVpvbmVzXTtcclxuXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdyb3VwU2hlbHZlc0J5Wm9uZShpbnB1dDogU2hlbGZDb25maWdbXSk6IFNlY3Rpb25Db25maWdbXSB7XHJcbiAgICBjb25zdCB6b25lTWFwOiB7IFt6b25lOiBzdHJpbmddOiBTZWN0aW9uQ29uZmlnIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IGl0ZW0/LnpvbmUgPz8gXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke2l0ZW0uc2hlbGZUeXBlfSAke2l0ZW0uc2hlbGZOdW1iZXJ9YDtcclxuXHJcbiAgICAgIGlmICghem9uZU1hcFt6b25lXSkge1xyXG4gICAgICAgIHpvbmVNYXBbem9uZV0gPSB7XHJcbiAgICAgICAgICBzaGVsdmVzOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RCcmFuZE5hbWVcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OlxyXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB6b25lTWFwW3pvbmVdPy5zaGVsdmVzPy5wdXNoKHNoZWxmTGFiZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHpvbmVNYXApO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKHNlY3Rpb25zOiBTZWN0aW9uQ29uZmlnW10pOiBTaGVsZkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHNlY3Rpb25NYXAgPSBuZXcgTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIFBpY2s8U2VjdGlvbkNvbmZpZywgXCJ6b25lXCIgfCBcInByb2R1Y3RCcmFuZE5hbWVcIiB8IFwicHJvZHVjdENhdGVnb3J5XCI+XHJcbiAgICA+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGZMYWJlbCBvZiBzZWN0aW9uLnNoZWx2ZXMhKSB7XHJcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2hlbGZMYWJlbCwge1xyXG4gICAgICAgICAgem9uZTogc2VjdGlvbi56b25lLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogc2VjdGlvbi5wcm9kdWN0QnJhbmROYW1lLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBzZWN0aW9uLnByb2R1Y3RDYXRlZ29yeSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwcGx5IG92ZXJyaWRlcyB0byBtYXRjaGluZyBzaGVsdmVzXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmU/LnNoZWxmQ29uZmlnPy5tYXAoKHM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtzLnNoZWxmVHlwZX0gJHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBzZWN0aW9uTWFwLmdldChzaGVsZkxhYmVsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnMsXHJcbiAgICAgICAgICB6b25lOiBvdmVycmlkZT8uem9uZSB8fCBcIlwiLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogb3ZlcnJpZGU/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IG92ZXJyaWRlPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSkgPz8gW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkNhcGFjaXR5SW5wdXQoZXZlbnQ6IEV2ZW50LCBpdGVtOiBGaXh0dXJlUXVpY2tEZXRhaWwpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBsZXQgdiA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1teMC05XS9nLCBcIlwiKS5zbGljZSgwLCAyKTtcclxuXHJcbiAgICBpbnB1dC52YWx1ZSA9IHY7XHJcbiAgICBpdGVtLnZhbHVlID0gdjtcclxuXHJcbiAgICB0aGlzLm9uUXVpY2tWYWx1ZUNoYW5nZShpdGVtLCBpdGVtLnZhbHVlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIG9uUXVpY2tWYWx1ZUNoYW5nZShpdGVtOiBGaXh0dXJlUXVpY2tEZXRhaWwsIG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhcmdldEZpeHR1cmUgPSB0aGlzLmVkaXRpbmdBaUZpeHR1cmU7XHJcblxyXG4gICAgaWYgKCF0YXJnZXRGaXh0dXJlIHx8ICFpdGVtPy5tZXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdmFsdWUgPSBuZXdWYWx1ZT8udHJpbSgpO1xyXG4gICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmIChpdGVtLm1ldGEudHlwZSA9PT0gXCJmaXh0dXJlXCIgJiYgaXRlbS5rZXkgPT09IFwiZml4dHVyZUhlYWRlclwiKSB7XHJcbiAgICAgIHRhcmdldEZpeHR1cmUuaGVhZGVyLmxhYmVsID0gdmFsdWUgfHwgXCJcIjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNoZWxmTnVtYmVyID0gaXRlbS5tZXRhLnNoZWxmTnVtYmVyO1xyXG4gICAgaWYgKCFzaGVsZk51bWJlcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmID0gKHRhcmdldEZpeHR1cmUuc2hlbGZDb25maWcgPz8gW10pLmZpbmQoXHJcbiAgICAgIChzOiBhbnkpID0+IE51bWJlcihzLnNoZWxmTnVtYmVyKSA9PT0gc2hlbGZOdW1iZXJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzaGVsZikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICBpZiAoaXNOYU4obnVtZXJpY1ZhbHVlKSB8fCBudW1lcmljVmFsdWUgPCAwKSByZXR1cm47XHJcblxyXG4gICAgLy8gU2hlbGYg4oaSIGRpcmVjdCBtYXBwaW5nXHJcbiAgICBpZiAoaXRlbS5tZXRhLnR5cGUgPT09IFwic2hlbGZcIikge1xyXG4gICAgICBzaGVsZi5wcm9kdWN0UGVyU2hlbGYgPSBudW1lcmljVmFsdWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVHJheVByb2R1Y3RDaGFuZ2UoZXZlbnQ6IEV2ZW50LCBzaGVsZjogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgbGV0IHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9bXjAtOV0vZywgXCJcIikuc2xpY2UoMCwgMik7XHJcbiAgICBpbnB1dC52YWx1ZSA9IHY7XHJcblxyXG4gICAgc2hlbGYucHJvZHVjdFBlclNoZWxmID0gdiA/IE51bWJlcih2KSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBvblRyYXlSb3dDaGFuZ2UoZXZlbnQ6IEV2ZW50LCBzaGVsZjogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgbGV0IHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9bXjAtOV0vZywgXCJcIikuc2xpY2UoMCwgMik7XHJcbiAgICBpbnB1dC52YWx1ZSA9IHY7XHJcblxyXG4gICAgc2hlbGYudHJheVJvd3MgPSB2ID8gTnVtYmVyKHYpIDogbnVsbDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICAgIHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcblxyXG4gIGlzSW52YWxpZFRyYXkoc2hlbGY6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgc2hlbGYuc2hlbGZUeXBlID09PSBcInRyYXlcIiAmJlxyXG4gICAgICAoIXNoZWxmLnRyYXlSb3dzIHx8XHJcbiAgICAgICAgc2hlbGYudHJheVJvd3MgPD0gMCB8fFxyXG4gICAgICAgICFzaGVsZi5wcm9kdWN0UGVyU2hlbGYgfHxcclxuICAgICAgICBzaGVsZi5wcm9kdWN0UGVyU2hlbGYgPD0gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRG9uZSgpIHtcclxuICAgIHRoaXMuaXNRdWlja0VkaXRTdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaXNRdWlja1ZhbHVlc0NvbnRhaW5zRXJyb3IoKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMub25Eb25lLmVtaXQodGhpcy5lZGl0aW5nQWlGaXh0dXJlKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDYW5jZWwoKSB7XHJcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGlzUXVpY2tWYWx1ZXNDb250YWluc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcXVpY2tMaXN0ID0gdGhpcy5lZGl0Rml4dHVyZVF1aWNrRGV0YWlscyA/PyBbXTtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmVkaXRpbmdBaUZpeHR1cmU7XHJcbiAgICBjb25zdCBzaGVsZkVycm9yID0gcXVpY2tMaXN0XHJcbiAgICAgIC5maWx0ZXIoKGwpID0+IGwuZWRpdGFibGUgJiYgbC5tZXRhPy50eXBlID09PSBcInNoZWxmXCIpXHJcbiAgICAgIC5zb21lKChsKSA9PiB0aGlzLmlzSW52YWxpZFF1aWNrVmFsdWUobC52YWx1ZSkpO1xyXG5cclxuICAgIGlmIChzaGVsZkVycm9yKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBmaXh0dXJlRXJyb3IgPSBxdWlja0xpc3RcclxuICAgICAgLmZpbHRlcigobCkgPT4gbC5lZGl0YWJsZSAmJiBsLm1ldGE/LnR5cGUgPT09IFwiZml4dHVyZVwiKVxyXG4gICAgICAuc29tZSgobCkgPT4gdGhpcy5pc0ludmFsaWRIZWFkZXJWYWx1ZShsLnZhbHVlKSk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVFcnJvcikgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgY29uc3QgdHJheUVycm9yID0gKGZpeHR1cmU/LnNoZWxmQ29uZmlnID8/IFtdKS5zb21lKChzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHMuc2hlbGZUeXBlICE9PSBcInRyYXlcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY29uc3Qgcm93c0ludmFsaWQgPSAhcy50cmF5Um93cyB8fCBpc05hTigrcy50cmF5Um93cykgfHwgK3MudHJheVJvd3MgPD0gMDtcclxuXHJcbiAgICAgIGNvbnN0IGNhcGFjaXR5SW52YWxpZCA9XHJcbiAgICAgICAgIXMucHJvZHVjdFBlclNoZWxmIHx8XHJcbiAgICAgICAgaXNOYU4oK3MucHJvZHVjdFBlclNoZWxmKSB8fFxyXG4gICAgICAgICtzLnByb2R1Y3RQZXJTaGVsZiA8PSAwO1xyXG5cclxuICAgICAgcmV0dXJuIHJvd3NJbnZhbGlkIHx8IGNhcGFjaXR5SW52YWxpZDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0cmF5RXJyb3IpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBoZWFkZXJJdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVpY2tJdGVtKFwiZml4dHVyZUhlYWRlclwiKTtcclxuICB9XHJcblxyXG4gIGdldFF1aWNrSXRlbU9uY2Uoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFF1aWNrSXRlbShrZXkpO1xyXG4gIH1cclxuXHJcbiAgaXNJbnZhbGlkUXVpY2tWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gXCIwXCIgfHwgdmFsdWUgPT09IFwiMDBcIjtcclxuICB9XHJcblxyXG4gIGlzSW52YWxpZEhlYWRlclZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgZWRpdFZtKCkge1xyXG4gICAgaWYgKCF0aGlzLmVkaXRNb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5lZGl0VGFiLmVtaXQoe1xyXG4gICAgICB0YWI6IFwidm1zXCIsXHJcbiAgICAgIGZpeHR1cmVEYXRhOiB0aGlzLmVkaXRpbmdBaUZpeHR1cmUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVZtKHZtSW5kZXg6IGFueSkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtQWN0aW9uKFwiZGVsZXRlVk1cIik7XHJcbiAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09IFwibm90T2tcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZS52bUNvbmZpZy5zcGxpY2Uodm1JbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtQWN0aW9uKFxyXG4gICAgdHlwZTogXCJyZWRvXCIgfCBcImFjY2VwdEFJXCIgfCBcImtlZXBQbGFub1wiIHwgXCJkZWxldGVWTVwiXHJcbiAgKTogUHJvbWlzZTx7IGFjdGlvbjogc3RyaW5nOyByZW1hcms6IHN0cmluZyB8IG51bGwgfSB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPHtcclxuICAgICAgICBhY3Rpb246IHN0cmluZztcclxuICAgICAgICByZW1hcms6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIH0+KChyZXN1bHQpID0+IHJlc3VsdCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgRml4dHVyZVF1aWNrRGV0YWlsIHtcclxuICBrZXk6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgZWRpdGFibGU6IGJvb2xlYW47XHJcbiAgaXNEaWZmZXJlbnQ/OiBib29sZWFuO1xyXG5cclxuICBtZXRhPzoge1xyXG4gICAgdHlwZTogXCJmaXh0dXJlXCIgfCBcInNoZWxmXCIgfCBcInRyYXlcIjtcclxuICAgIHNoZWxmTnVtYmVyPzogbnVtYmVyO1xyXG4gIH07XHJcbn1cclxuIiwiQGlmKGlzUGFnZUxvYWRpbmcpe1xyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbn1AZWxzZSB7XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImVkaXRNb2RlXCIgY2xhc3M9XCJxdWljay1lZGl0LWFjdGlvbnNcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHF1aWNrLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0NhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcXVpY2stYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsaWNrRG9uZSgpXCI+XHJcbiAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHNlY3Rpb24gI2ZpeHR1cmVSb290IGlkPVwiZml4dHVyZS12aWV3XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cInZtLXByb2R1Y3RzLXN1bVwiIGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LmhlYWRlcj8uaXNFbmFibGVkICYmIGVkaXRpbmdBaUZpeHR1cmU/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgICAgICAgIEBpZihlZGl0TW9kZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnQgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzcy5kaWZmXT1cImVkaXRpbmdBaUZpeHR1cmU/LmhlYWRlcj8uaXNEaWZmZXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtNiB2YWx1ZSBlZGl0LWlucHV0IGZvcm0tY29udHJvbCB3LTEwMFwiIHR5cGU9XCJ0ZXh0XCIgbWF4bGVuZ3RoPVwiMTUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImhlYWRlckl0ZW0/LnZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25RdWlja1ZhbHVlQ2hhbmdlKGhlYWRlckl0ZW0hLCAkZXZlbnQpXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNJbnZhbGlkSGVhZGVyVmFsdWUoaGVhZGVySXRlbT8udmFsdWUpICYmIGlzUXVpY2tFZGl0U3VibWl0dGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtZGFuZ2VyIG0tMCBtdC0xIG1zLTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTFweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5ub3QgYmUgZW1wdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgW2NsYXNzLmRpZmZdPVwiZWRpdGluZ0FpRml4dHVyZT8uaGVhZGVyPy5pc0RpZmZlcmVudFwiPnt7IGVkaXRpbmdBaUZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQm9keSBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImJvZHktYmxvY2stc3VtXCIgY2xhc3M9XCJib2R5LWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bVk0gQkxPQ0tdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LnZtQ29uZmlnPy5sZW5ndGggJiYgc2hvd1ZNc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZtIG9mIGVkaXRpbmdBaUZpeHR1cmU/LnZtQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIid2bScgKyBpXCIgY2xhc3M9XCJ2bS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFNlbGVjdGVkVk0odm0pIGFzIHNlbGVjdGVkVk1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwic2VsZWN0ZWRWTT8uaW1nVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCIgW3NyY109XCJzZWxlY3RlZFZNPy5pbWdVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJWbSBJbWFnZVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbY2xhc3MuZGlmZi1ib3JkZXJdPVwidm0/LmlzRGlmZmVyZW50XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZtLXBsYWNlaG9sZGVyIGN1cnNvci1wb2ludGVyXCIgW2NsYXNzLmRpZmYtYm9yZGVyXT1cInZtPy5pc0RpZmZlcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPnt7IHNlbGVjdGVkVk0/Lm5hbWUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWRpdE1vZGVcIiBjbGFzcz1cInZtLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlVm0oaSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgd2lkdGg9XCIyNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIiNGMkY0RjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBzdHJva2U9XCIjRUFFQ0YwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjUgMTBIOS41TTkuNSAxMEgxNy41TTkuNSAxMFYxN0M5LjUgMTcuMjY1MiA5LjYwNTM2IDE3LjUxOTYgOS43OTI4OSAxNy43MDcxQzkuOTgwNDMgMTcuODk0NiAxMC4yMzQ4IDE4IDEwLjUgMThIMTUuNUMxNS43NjUyIDE4IDE2LjAxOTYgMTcuODk0NiAxNi4yMDcxIDE3LjcwNzFDMTYuMzk0NiAxNy41MTk2IDE2LjUgMTcuMjY1MiAxNi41IDE3VjEwSDkuNVpNMTEgMTBWOUMxMSA4LjczNDc4IDExLjEwNTQgOC40ODA0MyAxMS4yOTI5IDguMjkyODlDMTEuNDgwNCA4LjEwNTM2IDExLjczNDggOCAxMiA4SDE0QzE0LjI2NTIgOCAxNC41MTk2IDguMTA1MzYgMTQuNzA3MSA4LjI5Mjg5QzE0Ljg5NDYgOC40ODA0MyAxNSA4LjczNDc4IDE1IDlWMTBNMTIgMTIuNVYxNS41TTE0IDEyLjVWMTUuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZWRpdFZtKClcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1zLTFcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiB3aWR0aD1cIjI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI2XCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIHN0cm9rZT1cIiNFQUVDRjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80NzZfMzA4MDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNS41IDguNTAwMTVDMTUuNjMxMyA4LjM2ODgzIDE1Ljc4NzIgOC4yNjQ2NiAxNS45NTg4IDguMTkzNTlDMTYuMTMwNCA4LjEyMjUyIDE2LjMxNDMgOC4wODU5NCAxNi41IDguMDg1OTRDMTYuNjg1NyA4LjA4NTk0IDE2Ljg2OTYgOC4xMjI1MiAxNy4wNDEyIDguMTkzNTlDMTcuMjEyOCA4LjI2NDY2IDE3LjM2ODcgOC4zNjg4MyAxNy41IDguNTAwMTVDMTcuNjMxMyA4LjYzMTQ3IDE3LjczNTUgOC43ODczNyAxNy44MDY2IDguOTU4OTVDMTcuODc3NiA5LjEzMDU0IDE3LjkxNDIgOS4zMTQ0MyAxNy45MTQyIDkuNTAwMTVDMTcuOTE0MiA5LjY4NTg3IDE3Ljg3NzYgOS44Njk3NyAxNy44MDY2IDEwLjA0MTNDMTcuNzM1NSAxMC4yMTI5IDE3LjYzMTMgMTAuMzY4OCAxNy41IDEwLjUwMDJMMTAuNzUgMTcuMjUwMkw4IDE4LjAwMDJMOC43NSAxNS4yNTAyTDE1LjUgOC41MDAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ3Nl8zMDgwMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNyA3KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0ZJWFRVUkUgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWxldmVsXCIgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDEnICYmIHNob3dCQ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYnJhbmQtY2F0ZWdvcnlcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgZHJhZnQgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5DYXRlZ29yaWVzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1NFQ1RJT04gTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzZWN0aW9uLWxldmVsXCIgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDMnICYmIHNob3dCQ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgaWQ9XCJib2R5LWxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlY3Rpb25CeVpvbmVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArICRpbmRleFwiIGNsYXNzPVwiYnJhbmQtY2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgZHJhZnQgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uem9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uYnJhbmRzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj4gLSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGMgb2YgaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGIgb2YgaXRlbT8uc2VjdGlvbj8uYnJhbmRzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5DYXRlZ29yaWVzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGMgb2YgaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCInc3VtU2hlbGZDb250YWluZXInICsgaVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGVkaXRpbmdBaUZpeHR1cmU/LnNoZWxmQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtTSEVMRiBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNoZWxmLWxldmVsXCIgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDInICYmIHNob3dCQ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArIGlcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtLnByb2R1Y3RCcmFuZE5hbWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGl0ZW0ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0nc2hlbGYnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9jayBzaGVsZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzcy5kaWZmXT1cIml0ZW0/LmlzRGlmZmVyZW50XCIgY2xhc3M9XCJ2YWx1ZSBlZGl0LWlucHV0IGZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiIHBhdHRlcm49XCJbMC05XSpcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVkaXRNb2RlXCIgW3ZhbHVlXT1cImdldFF1aWNrSXRlbShpdGVtLnNoZWxmVHlwZSArIChpICsgMSkpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNhcGFjaXR5SW5wdXQoJGV2ZW50LCBnZXRRdWlja0l0ZW0oaXRlbS5zaGVsZlR5cGUgKyAoaSArIDEpKSEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJlZCc6IGlzSW52YWxpZFF1aWNrVmFsdWUoZ2V0UXVpY2tJdGVtKGl0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKSk/LnZhbHVlKSAmJiBpc1F1aWNrRWRpdFN1Ym1pdHRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJheSB2aXN1YWwgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyYXkgaW5wdXRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctY29udGFpbmVyIGQtZmxleCBnYXAtMSBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1yZWQnOiBpc0ludmFsaWRUcmF5KGl0ZW0pICYmIGlzUXVpY2tFZGl0U3VibWl0dGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG5nYlRvb2x0aXA9XCJUb3RhbCByb3dzIHggQ2FwYWNpdHkgcGVyIHJvdyA9IFRvdGFsIGNhcGFjaXR5XCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJheSByb3dzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ2YWx1ZSBlZGl0LWlucHV0IGZvcm0tY29udHJvbFwiIHN0eWxlPVwicmlnaHQ6IDU4cHg7XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiIHBhdHRlcm49XCJbMC05XSpcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cIlJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFlZGl0TW9kZVwiIFt2YWx1ZV09XCJpdGVtLnRyYXlSb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblRyYXlSb3dDaGFuZ2UoJGV2ZW50LCBpdGVtKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcm9kdWN0cyBwZXIgcm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ2YWx1ZSBlZGl0LWlucHV0IGZvcm0tY29udHJvbFwiIHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJDXCIgW2Rpc2FibGVkXT1cIiFlZGl0TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5wcm9kdWN0UGVyU2hlbGZcIiAoaW5wdXQpPVwib25UcmF5UHJvZHVjdENoYW5nZSgkZXZlbnQsIGl0ZW0pXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDQwMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpZmZdPVwiaXRlbT8uaXNEaWZmZXJlbnRcIj57e2l0ZW0udHJheVJvd3MgJiYgaXRlbS5wcm9kdWN0UGVyU2hlbGYgPyBpdGVtLnRyYXlSb3dzICogaXRlbS5wcm9kdWN0UGVyU2hlbGYgOiAwfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGVkaXRpbmdBaUZpeHR1cmU/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIGxlZnQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciByaWdodC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwPnt7IGVkaXRpbmdBaUZpeHR1cmU/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG59Il19
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2VkaXRhYmxlLWZpeHR1cmUvZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2VkaXRhYmxlLWZpeHR1cmUvZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWhFLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7Ozs7O0FBU3JHLE1BQU0sT0FBTyx3QkFBd0I7SUE0Q3pCO0lBQ0E7SUFDQTtJQTNDVix5Q0FBeUM7SUFD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QUM7WUFDSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUV2QyxPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBRzlCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBNXRCVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qiw4WUNuQ3JDLHdqbUJBNFNDLGsyaEJEN1FXLElBQUksNkZBQUUsS0FBSyxtSEFBRSxVQUFVLDJUQUFFLE9BQU8sbUZBQUUsV0FBVzs7NEZBSTVDLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQzs4SUFRL0MsT0FBTztzQkFBZixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBR1AsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RhdGEvZml4dHVyZS10ZW1wbGF0ZS5kYXRhXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgU2VjdGlvbkNvbmZpZyxcclxuICBTaGVsZkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyByZ2JUb0hleCB9IGZyb20gXCIuLi8uLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgVm1MaWJyYXJ5TGlzdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JUb29sdGlwIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9hY3Rpb24tY29uZmlybS1wb3B1cC9hY3Rpb24tY29uZmlybS1wb3B1cC5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVkaXRhYmxlLWZpeHR1cmVcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgTmdiVG9vbHRpcCwgTmdDbGFzcywgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdGFibGVGaXh0dXJlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95XHJcbntcclxuICAvLyBASW5wdXQoKSB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZpeHR1cmU6IGFueTtcclxuICBlZGl0aW5nQWlGaXh0dXJlOiBhbnkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZWRpdEZpeHR1cmVRdWlja0RldGFpbHM6IEZpeHR1cmVRdWlja0RldGFpbFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDb2xvcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Vk1zOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93QkNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0VGFiID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJmaXh0dXJlUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBmaXh0dXJlUm9vdCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBpbWdDRE46IHN0cmluZztcclxuICBzaGVsZkNvbG9ycyA9IFNIRUxGX0NPTE9SUztcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1F1aWNrRWRpdFN1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZVwiXSB8fCBjaGFuZ2VzW1wiZWRpdE1vZGVcIl0gfHwgY2hhbmdlc1tcInBsYW5vRml4dHVyZVwiXSkge1xyXG4gICAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmUgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5maXh0dXJlKTtcclxuICAgICAgdGhpcy5lZGl0Rml4dHVyZVF1aWNrRGV0YWlscyA9IHRoaXMuYnVpbGRGaXh0dXJlUXVpY2tEZXRhaWxzKFxyXG4gICAgICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgICB9LCA0MDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzQkNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLmlzQkNJbml0aWFsaXplZCA9IHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzVk1Jbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLmlzVk1Jbml0aWFsaXplZCA9IHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFF1aWNrSXRlbShrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdEZpeHR1cmVRdWlja0RldGFpbHMuZmluZCgoaSkgPT4gaS5rZXkgPT09IGtleSk7XHJcbiAgfVxyXG5cclxuICBidWlsZEZpeHR1cmVRdWlja0RldGFpbHMoZml4dHVyZTogYW55KSB7XHJcbiAgICBpZiAoIWZpeHR1cmUpIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBsaXN0OiBGaXh0dXJlUXVpY2tEZXRhaWxbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNhZmUgPSAodjogYW55KSA9PlxyXG4gICAgICB2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBcIlwiID8gXCItXCIgOiB2O1xyXG5cclxuICAgIGxpc3QucHVzaCh7XHJcbiAgICAgIGtleTogXCJmaXh0dXJlSGVhZGVyXCIsXHJcbiAgICAgIGxhYmVsOiBcIkZpeHR1cmUgSGVhZGVyOlwiLFxyXG4gICAgICB2YWx1ZTogc2FmZShmaXh0dXJlPy5oZWFkZXI/LmxhYmVsKSxcclxuICAgICAgZWRpdGFibGU6IHRydWUsXHJcbiAgICAgIG1ldGE6IHsgdHlwZTogXCJmaXh0dXJlXCIgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXMgPSBBcnJheS5pc0FycmF5KGZpeHR1cmUuc2hlbGZDb25maWcpXHJcbiAgICAgID8gZml4dHVyZS5zaGVsZkNvbmZpZ1xyXG4gICAgICA6IFtdO1xyXG5cclxuICAgIHNoZWx2ZXNcclxuICAgICAgLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLnNoZWxmTnVtYmVyIC0gYi5zaGVsZk51bWJlcilcclxuICAgICAgLmZvckVhY2goKHM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTnVtID0gTnVtYmVyKHNhZmUocy5zaGVsZk51bWJlcikpO1xyXG4gICAgICAgIGNvbnN0IGlzU2hlbGYgPSBzLnNoZWxmVHlwZSA9PT0gXCJzaGVsZlwiO1xyXG5cclxuICAgICAgICBjb25zdCBrZXkgPSBgJHtpc1NoZWxmID8gXCJzaGVsZlwiIDogXCJ0cmF5XCJ9JHtzaGVsZk51bX1gO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXNTaGVsZlxyXG4gICAgICAgICAgPyBgU2hlbGYgJHtzaGVsZk51bX0gY2FwYWNpdHk6YFxyXG4gICAgICAgICAgOiBgVHJheSAke3NoZWxmTnVtfSBjYXBhY2l0eTpgO1xyXG5cclxuICAgICAgICBsZXQgY2FwYWNpdHkgPSBcIjBcIjtcclxuXHJcbiAgICAgICAgaWYgKHMucHJvZHVjdFBlclNoZWxmKSB7XHJcbiAgICAgICAgICBpZiAoaXNTaGVsZikge1xyXG4gICAgICAgICAgICBjYXBhY2l0eSA9IFN0cmluZyhzLnByb2R1Y3RQZXJTaGVsZik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHMudHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgICAgY2FwYWNpdHkgPSB0cmF5Um93cyA/IFN0cmluZyhzLnByb2R1Y3RQZXJTaGVsZiAqIHRyYXlSb3dzKSA6IFwiMFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGxhYmVsLFxyXG4gICAgICAgICAgdmFsdWU6IGNhcGFjaXR5LFxyXG4gICAgICAgICAgZWRpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6IGlzU2hlbGYgPyBcInNoZWxmXCIgOiBcInRyYXlcIixcclxuICAgICAgICAgICAgc2hlbGZOdW1iZXI6IHNoZWxmTnVtLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkVk0odm06IGFueSkge1xyXG4gIC8vICAgaWYgKHZtPy52bUlkKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnZtTGlzdC5maW5kKCh2KSA9PiB2LmlkID09PSB2bS52bUlkKTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnZtTGlzdC5maW5kKFxyXG4gIC8vICAgICAgICh2KSA9PiB2Lm5hbWUgPT09IHZtLnZtTmFtZSAmJiB2LnR5cGUgPT09IHZtLnZtVHlwZVxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgYm9keUVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmZpeHR1cmVSb290Py5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFwiI2JvZHktYmxvY2stc3VtXCIpID8/IG51bGxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5zaG93Vk1zKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3UG9ydCA9IHRoaXMuYm9keUVsO1xyXG4gICAgaWYgKCF2aWV3UG9ydCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHZpZXdQb3J0Lm9mZnNldFdpZHRoO1xyXG5cclxuICAgIHRoaXMuZWRpdGluZ0FpRml4dHVyZT8udm1Db25maWc/LmZvckVhY2goKGU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGxldCBzdGFydFNoZWxmID0gZT8uc3RhcnRZUG9zaXRpb24gPz8gMTtcclxuXHJcbiAgICAgIGxldCBlbmRTaGVsZiA9XHJcbiAgICAgICAgZT8uZW5kWVBvc2l0aW9uID8/IHRoaXMuZWRpdGluZ0FpRml4dHVyZT8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAxO1xyXG5cclxuICAgICAgY29uc3Qgdm0gPSB2aWV3UG9ydC5xdWVyeVNlbGVjdG9yKGAjdm0ke2l9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICghdm0pIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB4ID0gMDtcclxuICAgICAgbGV0IHkgPSAwO1xyXG5cclxuICAgICAgbGV0IHlTdGFydCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgc3RhcnRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG5cclxuICAgICAgICB5U3RhcnQgKz0gcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwbGFjZW1lbnRIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgcGxhY2VtZW50V2lkdGggPSBib2R5V2lkdGg7XHJcblxyXG4gICAgICBmb3IgKGxldCBrID0gc3RhcnRTaGVsZjsgayA8PSBlbmRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG4gICAgICAgIHBsYWNlbWVudEhlaWdodCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRlZmF1bHRXID0gcGxhY2VtZW50V2lkdGggLyAzO1xyXG4gICAgICBsZXQgZGVmYXVsdEggPSBwbGFjZW1lbnRIZWlnaHQgLyAzO1xyXG5cclxuICAgICAgbGV0IHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBkZWZhdWx0SDtcclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueFpvbmUpIHtcclxuICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IGJvZHlXaWR0aCAtIHdpZHRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIHggPSAoYm9keVdpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGJvZHlXaWR0aDtcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueVpvbmUpIHtcclxuICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IChwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQpIC8gMiArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSBwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQgKyB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RyZXRjaFwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0O1xyXG4gICAgICAgICAgeSA9IHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2bS5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcclxuICAgICAgdm0uc3R5bGUuaGVpZ2h0ID0gYCAke2hlaWdodH1weGA7XHJcbiAgICAgIHZtLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldFNoZWxmRGl2KGs6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBkaXYgPSB2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3NoZWxmJHtrfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICghZGl2KSBkaXYgPSB2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3RyYXkke2t9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGRpdiBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2hlbGZDb2xvcnMoKSB7XHJcbiAgICBjb25zdCBib2RpZXMgPSB0aGlzLmJvZHlFbDtcclxuICAgIGlmICghYm9kaWVzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keUNoaWxkcmVuID0gQXJyYXkuZnJvbShib2RpZXM/LmNoaWxkcmVuID8/IFtdKSBhcyBIVE1MRWxlbWVudFtdO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmRGl2cyA9IGJvZHlDaGlsZHJlblxyXG4gICAgICAubWFwKChkaXYpID0+IGRpdiBhcyBIVE1MRWxlbWVudClcclxuICAgICAgLmZpbHRlcigoZCkgPT4gZD8uaWQuaW5jbHVkZXMoXCJzdW1TaGVsZkNvbnRhaW5lclwiKSk7XHJcblxyXG4gICAgaWYgKCFzaGVsZkRpdnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBhZGp1c3QgPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcIkwxXCI6IC8vZml4dHVyZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxldCB5ID0gMDtcclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY29uc3QgY2FwID0gZC5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtaW5wdXRcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHNZID1cclxuICAgICAgICAgICAgLy8gICB5ICsgKGQub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgLy8gY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgLy8geSArPSBkLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMM1wiOiAvL3NlY3Rpb25cclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsdmVzID0gc2hlbGZEaXZzXHJcbiAgICAgICAgICAgIC5tYXAoKGRpdikgPT5cclxuICAgICAgICAgICAgICBkaXYubGFzdEVsZW1lbnRDaGlsZD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImRpdlwiXHJcbiAgICAgICAgICAgICAgICA/IChkaXYubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudClcclxuICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsdmVzKTtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25BcnJheSA9IHRoaXMuZ3JvdXBTaGVsdmVzQnlab25lKFxyXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmU/LnNoZWxmQ29uZmlnID8/IFtdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgICAgc2VjdGlvbkFycmF5LmZvckVhY2goKHNlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgICBzZS5zaGVsdmVzPy5tYXAoKHNoKSA9PiBzaC5yZXBsYWNlKC9cXHMvZywgXCJcIikudG9Mb3dlckNhc2UoKSkgPz9cclxuICAgICAgICAgICAgICBbXTtcclxuICAgICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY0RpdnMgPSBzaGVsdmVzLmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICAgICAgICBzaGVsZklkcz8uaW5jbHVkZXMoaXRlbT8uaWQgPz8gXCJcIilcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBzZWNEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtY29udGFpbmVyXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICAvLyBjb25zdCBzWSA9IHkgLSBjYXAub2Zmc2V0VG9wICsgMTA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNZID1cclxuICAgICAgICAgICAgICB5ICsgKGQub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgeSArPSBkLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5zaG93QkNzKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBjb25zdCB1bmFzc2lnbmVkU2hlbHZlcyA9IHNoZWxmRGl2cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChpdGVtKSA9PiAhYWxsU2VjdGlvblNoZWx2ZXMuaW5jbHVkZXMoaXRlbS5pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB1bmFzc2lnbmVkU2hlbHZlcy5mb3JFYWNoKChkKSA9PiAoZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCIpKTtcclxuXHJcbiAgICAgICAgICBsZXQgc2VjdGlvbkdyb3VwSGVpZ2h0ID0gMDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25CeVpvbmVzLmZvckVhY2goKHN6LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlY3Rpb25IZWlnaHQgPSBzei5zZWN0aW9uLnNoZWxmRGl2cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoaCwgZCkgPT4gaCArIChkPy5vZmZzZXRIZWlnaHQgPz8gMCksXHJcbiAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbldpZHRoID1cclxuICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5vZmZzZXRXaWR0aCA/PyAzNDU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGJjID0gYm9kaWVzLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxyXG4gICAgICAgICAgICAgICAgYCNicmFuZC1jYXRlZ29yeSR7aX1gXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGJjKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNCZyA9IHJnYlRvSGV4KFxyXG4gICAgICAgICAgICAgICAgICBzei5zZWN0aW9uLnNoZWxmRGl2c1swXT8uc3R5bGUuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzLmZpbmQoKGMpID0+IGMuYmcgPT09IHNlY0JnKSA/P1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNoZWxmQ29sb3JzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvci5ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiI2ZmZlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJjWCA9IChjdXJyZW50U2VjdGlvbldpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJjWSA9XHJcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50U2VjdGlvbkhlaWdodCAtIGJjLm9mZnNldEhlaWdodCkgLyAyICtcclxuICAgICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2JjWCArIGFkanVzdH1weCwgJHtiY1l9cHgpYDtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQgKz0gY3VycmVudFNlY3Rpb25IZWlnaHQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDJcIjogLy9zaGVsZlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIGxldCB5ID0gMDtcclxuXHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZGl2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGNhcCA9IGRpdi5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtaW5wdXRcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IHNZID1cclxuICAgICAgICAgICAgLy8gICB5ICsgKGRpdi5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAvLyBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICAvLyB5ICs9IGRpdi5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJvcmRlciA9IGAxLjRweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QkNzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyO1xyXG4gICAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMNFwiOiAvL3Nwb3RcclxuICAgICAgICB7XHJcbiAgICAgICAgICAvLyBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5lZGl0LWlucHV0XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICAvLyBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgIC8vICAgeSArIChkLm9mZnNldEhlaWdodCAtIGNhcC5vZmZzZXRIZWlnaHQpIC8gMiAtIGNhcC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgIC8vIGNhcC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3NZfXB4KWA7XHJcbiAgICAgICAgICAgIC8vIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgLy8gbGV0IHkgPSAwO1xyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1pbnB1dFwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIC8vIGNvbnN0IHNZID1cclxuICAgICAgICAgIC8vICAgeSArIChkLm9mZnNldEhlaWdodCAtIGNhcC5vZmZzZXRIZWlnaHQpIC8gMiAtIGNhcC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAvLyBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgLy8geSArPSBkLm9mZnNldEhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbClbXSkge1xyXG4gICAgY29uc3QgbmV3U2VjdGlvbkJ5Wm9uZXMgPSBbXTtcclxuXHJcbiAgICBsZXQgcFpvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuZWRpdGluZ0FpRml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IHNoZWxmRGl2ID0gc2hlbGZEaXZzLmZpbmQoKGQpID0+IGQ/LmlkID09PSBzaGVsZklkKTtcclxuXHJcbiAgICAgIGlmICh6b25lID09PSBcIlwiKSBjb250aW51ZTtcclxuICAgICAgaWYgKHpvbmUgIT09IHBab25lKSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXMucHVzaCh7XHJcbiAgICAgICAgICB6b25lLFxyXG4gICAgICAgICAgc2VjdGlvbjoge1xyXG4gICAgICAgICAgICBicmFuZHM6IHMucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogcy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgICAgIHNoZWx2ZXM6IFtzaGVsZklkXSxcclxuICAgICAgICAgICAgc2hlbGZEaXZzOiBbc2hlbGZEaXZdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwWm9uZSA9IHpvbmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbi5zaGVsdmVzLnB1c2goXHJcbiAgICAgICAgICBzaGVsZklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uLnNoZWxmRGl2cy5wdXNoKFxyXG4gICAgICAgICAgc2hlbGZEaXZcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcyA9IFsuLi5uZXdTZWN0aW9uQnlab25lc107XHJcblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBncm91cFNoZWx2ZXNCeVpvbmUoaW5wdXQ6IFNoZWxmQ29uZmlnW10pOiBTZWN0aW9uQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgem9uZU1hcDogeyBbem9uZTogc3RyaW5nXTogU2VjdGlvbkNvbmZpZyB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBpdGVtPy56b25lID8/IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtpdGVtLnNoZWxmVHlwZX0gJHtpdGVtLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoIXpvbmVNYXBbem9uZV0pIHtcclxuICAgICAgICB6b25lTWFwW3pvbmVdID0ge1xyXG4gICAgICAgICAgc2hlbHZlczogW10sXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOlxyXG4gICAgICAgICAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0QnJhbmROYW1lXHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTpcclxuICAgICAgICAgICAgdGhpcy5lZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdENhdGVnb3J5XHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHpvbmU6IHpvbmUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgem9uZU1hcFt6b25lXT8uc2hlbHZlcz8ucHVzaChzaGVsZkxhYmVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh6b25lTWFwKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2VjdGlvbkNvbmZpZ1RvU2hlbHZlcyhzZWN0aW9uczogU2VjdGlvbkNvbmZpZ1tdKTogU2hlbGZDb25maWdbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICBQaWNrPFNlY3Rpb25Db25maWcsIFwiem9uZVwiIHwgXCJwcm9kdWN0QnJhbmROYW1lXCIgfCBcInByb2R1Y3RDYXRlZ29yeVwiPlxyXG4gICAgPigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmTGFiZWwgb2Ygc2VjdGlvbi5zaGVsdmVzISkge1xyXG4gICAgICAgIHNlY3Rpb25NYXAuc2V0KHNoZWxmTGFiZWwsIHtcclxuICAgICAgICAgIHpvbmU6IHNlY3Rpb24uem9uZSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IHNlY3Rpb24ucHJvZHVjdEJyYW5kTmFtZSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogc2VjdGlvbi5wcm9kdWN0Q2F0ZWdvcnksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBcHBseSBvdmVycmlkZXMgdG8gbWF0Y2hpbmcgc2hlbHZlc1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5lZGl0aW5nQWlGaXh0dXJlPy5zaGVsZkNvbmZpZz8ubWFwKChzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7cy5zaGVsZlR5cGV9ICR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gc2VjdGlvbk1hcC5nZXQoc2hlbGZMYWJlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zLFxyXG4gICAgICAgICAgem9uZTogb3ZlcnJpZGU/LnpvbmUgfHwgXCJcIixcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IG92ZXJyaWRlPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBvdmVycmlkZT8ucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pID8/IFtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25DYXBhY2l0eUlucHV0KGV2ZW50OiBFdmVudCwgaXRlbTogRml4dHVyZVF1aWNrRGV0YWlsKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgbGV0IHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9bXjAtOV0vZywgXCJcIikuc2xpY2UoMCwgMik7XHJcblxyXG4gICAgaW5wdXQudmFsdWUgPSB2O1xyXG4gICAgaXRlbS52YWx1ZSA9IHY7XHJcblxyXG4gICAgdGhpcy5vblF1aWNrVmFsdWVDaGFuZ2UoaXRlbSwgaXRlbS52YWx1ZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBvblF1aWNrVmFsdWVDaGFuZ2UoaXRlbTogRml4dHVyZVF1aWNrRGV0YWlsLCBuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXRGaXh0dXJlID0gdGhpcy5lZGl0aW5nQWlGaXh0dXJlO1xyXG5cclxuICAgIGlmICghdGFyZ2V0Rml4dHVyZSB8fCAhaXRlbT8ubWV0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gbmV3VmFsdWU/LnRyaW0oKTtcclxuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAoaXRlbS5tZXRhLnR5cGUgPT09IFwiZml4dHVyZVwiICYmIGl0ZW0ua2V5ID09PSBcImZpeHR1cmVIZWFkZXJcIikge1xyXG4gICAgICB0YXJnZXRGaXh0dXJlLmhlYWRlci5sYWJlbCA9IHZhbHVlIHx8IFwiXCI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzaGVsZk51bWJlciA9IGl0ZW0ubWV0YS5zaGVsZk51bWJlcjtcclxuICAgIGlmICghc2hlbGZOdW1iZXIpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzaGVsZiA9ICh0YXJnZXRGaXh0dXJlLnNoZWxmQ29uZmlnID8/IFtdKS5maW5kKFxyXG4gICAgICAoczogYW55KSA9PiBOdW1iZXIocy5zaGVsZk51bWJlcikgPT09IHNoZWxmTnVtYmVyXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc2hlbGYpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBudW1lcmljVmFsdWUgPSBOdW1iZXIodmFsdWUpO1xyXG4gICAgaWYgKGlzTmFOKG51bWVyaWNWYWx1ZSkgfHwgbnVtZXJpY1ZhbHVlIDwgMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFNoZWxmIOKGkiBkaXJlY3QgbWFwcGluZ1xyXG4gICAgaWYgKGl0ZW0ubWV0YS50eXBlID09PSBcInNoZWxmXCIpIHtcclxuICAgICAgc2hlbGYucHJvZHVjdFBlclNoZWxmID0gbnVtZXJpY1ZhbHVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblRyYXlQcm9kdWN0Q2hhbmdlKGV2ZW50OiBFdmVudCwgc2hlbGY6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGxldCB2ID0gaW5wdXQudmFsdWUucmVwbGFjZSgvW14wLTldL2csIFwiXCIpLnNsaWNlKDAsIDIpO1xyXG4gICAgaW5wdXQudmFsdWUgPSB2O1xyXG5cclxuICAgIHNoZWxmLnByb2R1Y3RQZXJTaGVsZiA9IHYgPyBOdW1iZXIodikgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25UcmF5Um93Q2hhbmdlKGV2ZW50OiBFdmVudCwgc2hlbGY6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGxldCB2ID0gaW5wdXQudmFsdWUucmVwbGFjZSgvW14wLTldL2csIFwiXCIpLnNsaWNlKDAsIDIpO1xyXG4gICAgaW5wdXQudmFsdWUgPSB2O1xyXG5cclxuICAgIHNoZWxmLnRyYXlSb3dzID0gdiA/IE51bWJlcih2KSA6IG51bGw7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgICB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBpc0ludmFsaWRUcmF5KHNoZWxmOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHNoZWxmLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIgJiZcclxuICAgICAgKCFzaGVsZi50cmF5Um93cyB8fFxyXG4gICAgICAgIHNoZWxmLnRyYXlSb3dzIDw9IDAgfHxcclxuICAgICAgICAhc2hlbGYucHJvZHVjdFBlclNoZWxmIHx8XHJcbiAgICAgICAgc2hlbGYucHJvZHVjdFBlclNoZWxmIDw9IDApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0RvbmUoKSB7XHJcbiAgICB0aGlzLmlzUXVpY2tFZGl0U3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmlzUXVpY2tWYWx1ZXNDb250YWluc0Vycm9yKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLm9uRG9uZS5lbWl0KHRoaXMuZWRpdGluZ0FpRml4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBpc1F1aWNrVmFsdWVzQ29udGFpbnNFcnJvcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHF1aWNrTGlzdCA9IHRoaXMuZWRpdEZpeHR1cmVRdWlja0RldGFpbHMgPz8gW107XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5lZGl0aW5nQWlGaXh0dXJlO1xyXG4gICAgY29uc3Qgc2hlbGZFcnJvciA9IHF1aWNrTGlzdFxyXG4gICAgICAuZmlsdGVyKChsKSA9PiBsLmVkaXRhYmxlICYmIGwubWV0YT8udHlwZSA9PT0gXCJzaGVsZlwiKVxyXG4gICAgICAuc29tZSgobCkgPT4gdGhpcy5pc0ludmFsaWRRdWlja1ZhbHVlKGwudmFsdWUpKTtcclxuXHJcbiAgICBpZiAoc2hlbGZFcnJvcikgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZUVycm9yID0gcXVpY2tMaXN0XHJcbiAgICAgIC5maWx0ZXIoKGwpID0+IGwuZWRpdGFibGUgJiYgbC5tZXRhPy50eXBlID09PSBcImZpeHR1cmVcIilcclxuICAgICAgLnNvbWUoKGwpID0+IHRoaXMuaXNJbnZhbGlkSGVhZGVyVmFsdWUobC52YWx1ZSkpO1xyXG5cclxuICAgIGlmIChmaXh0dXJlRXJyb3IpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHRyYXlFcnJvciA9IChmaXh0dXJlPy5zaGVsZkNvbmZpZyA/PyBbXSkuc29tZSgoczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzLnNoZWxmVHlwZSAhPT0gXCJ0cmF5XCIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNvbnN0IHJvd3NJbnZhbGlkID0gIXMudHJheVJvd3MgfHwgaXNOYU4oK3MudHJheVJvd3MpIHx8ICtzLnRyYXlSb3dzIDw9IDA7XHJcblxyXG4gICAgICBjb25zdCBjYXBhY2l0eUludmFsaWQgPVxyXG4gICAgICAgICFzLnByb2R1Y3RQZXJTaGVsZiB8fFxyXG4gICAgICAgIGlzTmFOKCtzLnByb2R1Y3RQZXJTaGVsZikgfHxcclxuICAgICAgICArcy5wcm9kdWN0UGVyU2hlbGYgPD0gMDtcclxuXHJcbiAgICAgIHJldHVybiByb3dzSW52YWxpZCB8fCBjYXBhY2l0eUludmFsaWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodHJheUVycm9yKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVhZGVySXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFF1aWNrSXRlbShcImZpeHR1cmVIZWFkZXJcIik7XHJcbiAgfVxyXG5cclxuICBnZXRRdWlja0l0ZW1PbmNlKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRRdWlja0l0ZW0oa2V5KTtcclxuICB9XHJcblxyXG4gIGlzSW52YWxpZFF1aWNrVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT09IFwiMFwiIHx8IHZhbHVlID09PSBcIjAwXCI7XHJcbiAgfVxyXG5cclxuICBpc0ludmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIjtcclxuICB9XHJcblxyXG4gIGVkaXRWbSgpIHtcclxuICAgIGlmICghdGhpcy5lZGl0TW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZWRpdFRhYi5lbWl0KHtcclxuICAgICAgdGFiOiBcInZtc1wiLFxyXG4gICAgICBmaXh0dXJlRGF0YTogdGhpcy5lZGl0aW5nQWlGaXh0dXJlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVWbSh2bUluZGV4OiBhbnkpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImRlbGV0ZVZNXCIpO1xyXG4gICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmVkaXRpbmdBaUZpeHR1cmUudm1Db25maWcuc3BsaWNlKHZtSW5kZXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUFjdGlvbihcclxuICAgIHR5cGU6IFwicmVkb1wiIHwgXCJhY2NlcHRBSVwiIHwgXCJrZWVwUGxhbm9cIiB8IFwiZGVsZXRlVk1cIlxyXG4gICk6IFByb21pc2U8eyBhY3Rpb246IHN0cmluZzsgcmVtYXJrOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihBY3Rpb25Db25maXJtUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdHlwZTtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjx7XHJcbiAgICAgICAgYWN0aW9uOiBzdHJpbmc7XHJcbiAgICAgICAgcmVtYXJrOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICB9PigocmVzdWx0KSA9PiByZXN1bHQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIEZpeHR1cmVRdWlja0RldGFpbCB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGVkaXRhYmxlOiBib29sZWFuO1xyXG4gIGlzRGlmZmVyZW50PzogYm9vbGVhbjtcclxuXHJcbiAgbWV0YT86IHtcclxuICAgIHR5cGU6IFwiZml4dHVyZVwiIHwgXCJzaGVsZlwiIHwgXCJ0cmF5XCI7XHJcbiAgICBzaGVsZk51bWJlcj86IG51bWJlcjtcclxuICB9O1xyXG59XHJcbiIsIkBpZihpc1BhZ2VMb2FkaW5nKXtcclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG59QGVsc2Uge1xyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJlZGl0TW9kZVwiIGNsYXNzPVwicXVpY2stZWRpdC1hY3Rpb25zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBxdWljay1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2tDYW5jZWwoKVwiPlxyXG4gICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHF1aWNrLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0RvbmUoKVwiPlxyXG4gICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzZWN0aW9uICNmaXh0dXJlUm9vdCBpZD1cImZpeHR1cmUtdmlld1wiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJ2bS1wcm9kdWN0cy1zdW1cIiBjbGFzcz1cIndhbGwtdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBlZGl0aW5nQWlGaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYoZWRpdE1vZGUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2xhc3MuZGlmZl09XCJlZGl0aW5nQWlGaXh0dXJlPy5oZWFkZXI/LmlzRGlmZmVyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTYgdmFsdWUgZWRpdC1pbnB1dCBmb3JtLWNvbnRyb2wgdy0xMDBcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjE1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJoZWFkZXJJdGVtPy52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUXVpY2tWYWx1ZUNoYW5nZShoZWFkZXJJdGVtISwgJGV2ZW50KVwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzSW52YWxpZEhlYWRlclZhbHVlKGhlYWRlckl0ZW0/LnZhbHVlKSAmJiBpc1F1aWNrRWRpdFN1Ym1pdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtLTAgbXQtMSBtcy0xXCIgc3R5bGU9XCJmb250LXNpemU6IDExcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fubm90IGJlIGVtcHR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIDxwIFtjbGFzcy5kaWZmXT1cImVkaXRpbmdBaUZpeHR1cmU/LmhlYWRlcj8uaXNEaWZmZXJlbnRcIj57eyBlZGl0aW5nQWlGaXh0dXJlPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJib2R5LWJsb2NrLXN1bVwiIGNsYXNzPVwiYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1ZNIEJMT0NLXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy52bUNvbmZpZz8ubGVuZ3RoICYmIHNob3dWTXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2bSBvZiBlZGl0aW5nQWlGaXh0dXJlPy52bUNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIndm0nICsgaVwiIGNsYXNzPVwidm0tYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInZtPy52bUltYWdlOyBlbHNlIHBsYWNlaG9sZGVyXCIgW3NyY109XCJpbWdDRE4gKyB2bT8udm1JbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlZtIEltYWdlXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtjbGFzcy5kaWZmLWJvcmRlcl09XCJ2bT8uaXNEaWZmZXJlbnRcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0tcGxhY2Vob2xkZXIgY3Vyc29yLXBvaW50ZXJcIiBbY2xhc3MuZGlmZi1ib3JkZXJdPVwidm0/LmlzRGlmZmVyZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+e3sgdm0/LnZtTmFtZSB9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0TW9kZVwiIGNsYXNzPVwidm0tYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVWbShpKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiB3aWR0aD1cIjI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI2XCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIHN0cm9rZT1cIiNFQUVDRjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguNSAxMEg5LjVNOS41IDEwSDE3LjVNOS41IDEwVjE3QzkuNSAxNy4yNjUyIDkuNjA1MzYgMTcuNTE5NiA5Ljc5Mjg5IDE3LjcwNzFDOS45ODA0MyAxNy44OTQ2IDEwLjIzNDggMTggMTAuNSAxOEgxNS41QzE1Ljc2NTIgMTggMTYuMDE5NiAxNy44OTQ2IDE2LjIwNzEgMTcuNzA3MUMxNi4zOTQ2IDE3LjUxOTYgMTYuNSAxNy4yNjUyIDE2LjUgMTdWMTBIOS41Wk0xMSAxMFY5QzExIDguNzM0NzggMTEuMTA1NCA4LjQ4MDQzIDExLjI5MjkgOC4yOTI4OUMxMS40ODA0IDguMTA1MzYgMTEuNzM0OCA4IDEyIDhIMTRDMTQuMjY1MiA4IDE0LjUxOTYgOC4xMDUzNiAxNC43MDcxIDguMjkyODlDMTQuODk0NiA4LjQ4MDQzIDE1IDguNzM0NzggMTUgOVYxME0xMiAxMi41VjE1LjVNMTQgMTIuNVYxNS41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJlZGl0Vm0oKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbXMtMVwiIHN0eWxlPVwiaGVpZ2h0OiAyMnB4O1wiIHdpZHRoPVwiMjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjZcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIGZpbGw9XCIjRjJGNEY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgc3Ryb2tlPVwiI0VBRUNGMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ3Nl8zMDgwMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1LjUgOC41MDAxNUMxNS42MzEzIDguMzY4ODMgMTUuNzg3MiA4LjI2NDY2IDE1Ljk1ODggOC4xOTM1OUMxNi4xMzA0IDguMTIyNTIgMTYuMzE0MyA4LjA4NTk0IDE2LjUgOC4wODU5NEMxNi42ODU3IDguMDg1OTQgMTYuODY5NiA4LjEyMjUyIDE3LjA0MTIgOC4xOTM1OUMxNy4yMTI4IDguMjY0NjYgMTcuMzY4NyA4LjM2ODgzIDE3LjUgOC41MDAxNUMxNy42MzEzIDguNjMxNDcgMTcuNzM1NSA4Ljc4NzM3IDE3LjgwNjYgOC45NTg5NUMxNy44Nzc2IDkuMTMwNTQgMTcuOTE0MiA5LjMxNDQzIDE3LjkxNDIgOS41MDAxNUMxNy45MTQyIDkuNjg1ODcgMTcuODc3NiA5Ljg2OTc3IDE3LjgwNjYgMTAuMDQxM0MxNy43MzU1IDEwLjIxMjkgMTcuNjMxMyAxMC4zNjg4IDE3LjUgMTAuNTAwMkwxMC43NSAxNy4yNTAyTDggMTguMDAwMkw4Ljc1IDE1LjI1MDJMMTUuNSA4LjUwMDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDc2XzMwODAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3IDcpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bRklYVFVSRSBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImZpeHR1cmUtbGV2ZWxcIiAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMScgJiYgc2hvd0JDc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJicmFuZC1jYXRlZ29yeVwiIGNsYXNzPVwiYnJhbmQtY2F0ZWdvcnlcIiAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RCcmFuZE5hbWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImJyYW5kQ2F0ZWdvcnlUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgZWRpdGluZ0FpRml4dHVyZT8ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJlZGl0aW5nQWlGaXh0dXJlPy5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bU0VDVElPTiBMRVZFTCAtIEJSQU5EIENBVEVHT1JZXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3Rpb24tbGV2ZWxcIiAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMycgJiYgc2hvd0JDc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBpZD1cImJvZHktbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2VjdGlvbkJ5Wm9uZXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCInYnJhbmQtY2F0ZWdvcnknICsgJGluZGV4XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS56b25lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5icmFuZHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidzdW1TaGVsZkNvbnRhaW5lcicgKyBpXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZWRpdGluZ0FpRml4dHVyZT8uc2hlbGZDb25maWc7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1NIRUxGIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2hlbGYtbGV2ZWxcIiAqbmdJZj1cImVkaXRpbmdBaUZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMicgJiYgc2hvd0JDc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCInYnJhbmQtY2F0ZWdvcnknICsgaVwiIGNsYXNzPVwiYnJhbmQtY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImJyYW5kQ2F0ZWdvcnlUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCIgKm5nSWY9XCJpdGVtLnByb2R1Y3RCcmFuZE5hbWU/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj4gLSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtLnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBpdGVtLnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBpdGVtLnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5DYXRlZ29yaWVzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgaXRlbS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uc2hlbGZUeXBlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzLmRpZmZdPVwiaXRlbT8uaXNEaWZmZXJlbnRcIiBjbGFzcz1cInZhbHVlIGVkaXQtaW5wdXQgZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgcGF0dGVybj1cIlswLTldKlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWRpdE1vZGVcIiBbdmFsdWVdPVwiZ2V0UXVpY2tJdGVtKGl0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKSk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2FwYWNpdHlJbnB1dCgkZXZlbnQsIGdldFF1aWNrSXRlbShpdGVtLnNoZWxmVHlwZSArIChpICsgMSkpISlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmVkJzogaXNJbnZhbGlkUXVpY2tWYWx1ZShnZXRRdWlja0l0ZW0oaXRlbS5zaGVsZlR5cGUgKyAoaSArIDEpKT8udmFsdWUpICYmIGlzUXVpY2tFZGl0U3VibWl0dGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmF5IHZpc3VhbCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnRyYXlSb3dzKVwiIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJheSBpbnB1dHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1jb250YWluZXIgZC1mbGV4IGdhcC0xIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLXJlZCc6IGlzSW52YWxpZFRyYXkoaXRlbSkgJiYgaXNRdWlja0VkaXRTdWJtaXR0ZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbmdiVG9vbHRpcD1cIlRvdGFsIHJvd3MgeCBDYXBhY2l0eSBwZXIgcm93ID0gVG90YWwgY2FwYWNpdHlcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmF5IHJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInZhbHVlIGVkaXQtaW5wdXQgZm9ybS1jb250cm9sXCIgc3R5bGU9XCJyaWdodDogNThweDtcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJudW1lcmljXCIgcGF0dGVybj1cIlswLTldKlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiUlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVkaXRNb2RlXCIgW3ZhbHVlXT1cIml0ZW0udHJheVJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVHJheVJvd0NoYW5nZSgkZXZlbnQsIGl0ZW0pXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFByb2R1Y3RzIHBlciByb3cgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInZhbHVlIGVkaXQtaW5wdXQgZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJudW1lcmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cIkNcIiBbZGlzYWJsZWRdPVwiIWVkaXRNb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnByb2R1Y3RQZXJTaGVsZlwiIChpbnB1dCk9XCJvblRyYXlQcm9kdWN0Q2hhbmdlKCRldmVudCwgaXRlbSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlmZl09XCJpdGVtPy5pc0RpZmZlcmVudFwiPnt7aXRlbS50cmF5Um93cyAmJiBpdGVtLnByb2R1Y3RQZXJTaGVsZiA/IGl0ZW0udHJheVJvd3MgKiBpdGVtLnByb2R1Y3RQZXJTaGVsZiA6IDB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdGluZ0FpRml4dHVyZT8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZWRpdGluZ0FpRml4dHVyZT8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZWRpdGluZ0FpRml4dHVyZT8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbn0iXX0=
|