tango-app-ui-store-builder 1.0.78 → 1.0.80

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.
Files changed (19) hide show
  1. package/esm2022/lib/components/fixture-preview/fixture-preview.component.mjs +342 -6
  2. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +15 -8
  3. package/esm2022/lib/components/onboard-store-plano/onboard-fixture/onboard-fixture.component.mjs +3 -4
  4. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +3 -3
  5. package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +3 -2
  6. package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +80 -10
  7. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +48 -5
  8. package/esm2022/lib/components/planogram/plano-analytics/zone-analytics/zone-analytics.component.mjs +3 -3
  9. package/esm2022/lib/data/fixture-template.data.mjs +62 -34
  10. package/esm2022/lib/tango-store-builder.module.mjs +6 -3
  11. package/fesm2022/tango-app-ui-store-builder.mjs +546 -66
  12. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  13. package/lib/components/fixture-preview/fixture-preview.component.d.ts +41 -2
  14. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +1 -1
  15. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +1 -0
  16. package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +9 -0
  17. package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +6 -1
  18. package/lib/tango-store-builder.module.d.ts +2 -1
  19. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { Component, EventEmitter, Input, Output, ViewChild, } from "@angular/cor
2
2
  import { firstValueFrom, Subject, takeUntil } from "rxjs";
3
3
  import { AnalyticsPopupComponent } from "../analytics-popup/analytics-popup.component";
4
4
  import { ZoneAnalyticsComponent } from "../zone-analytics/zone-analytics.component";
5
- import { PICKUP_HEATMAP_COLORS } from "../../../../data/fixture-template.data";
5
+ import { FOOTFALL_HEATMAP_COLORS, PICKUP_HEATMAP_COLORS, } from "../../../../data/fixture-template.data";
6
6
  import { lightenColor } from "../../../../functions/plano.function";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../../../services/store-builder.service";
@@ -27,6 +27,13 @@ export class FixtureAnalyticsComponent {
27
27
  fixtureTemplateDetails;
28
28
  clientId;
29
29
  imgCDN;
30
+ fixtureEngagement = 0;
31
+ fixtureRankBadgeColors = {
32
+ bg: "#E3E8F0",
33
+ border: "#CBD5E1",
34
+ innerBg: "#F8F9FC",
35
+ text: "#475467",
36
+ };
30
37
  zoneColor = {
31
38
  right: {
32
39
  bg: "#ffffff",
@@ -81,16 +88,24 @@ export class FixtureAnalyticsComponent {
81
88
  async ngOnChanges(changes) {
82
89
  if (changes["fixtureDetails"]?.currentValue) {
83
90
  this.isPageLoading = true;
91
+ this.setFixtureRankBadgeColors();
84
92
  this.allFixtures = [
85
93
  ...this.floorData?.layoutPolygon.flatMap((e) => e.fixtures),
86
94
  ...this.floorData?.centerFixture,
87
95
  ];
88
- await Promise.all([this.getEngagersList(), this.getFixtureFootfall()]);
96
+ await Promise.all([
97
+ this.getFixtureShelfDetails(changes["fixtureDetails"].currentValue),
98
+ this.getEngagersList(),
99
+ this.getFixtureFootfall(),
100
+ ]);
89
101
  this.processFixtureHeatMapData();
90
102
  this.isPageLoading = false;
91
103
  setTimeout(() => {
92
104
  this.applyShelfColors();
93
105
  this.handleVmPositionAndSize();
106
+ if (this.fixtureDetails?.targetProduct) {
107
+ this.onClickProduct(this.fixtureDetails.targetProduct);
108
+ }
94
109
  }, 200);
95
110
  }
96
111
  }
@@ -102,8 +117,43 @@ export class FixtureAnalyticsComponent {
102
117
  this.isVMInitialized = this.handleVmPositionAndSize();
103
118
  }
104
119
  }
120
+ async getFixtureShelfDetails(data) {
121
+ let payload = {
122
+ fixtureId: data?._id,
123
+ planoId: data?.planoId,
124
+ floorId: data?.floorId,
125
+ compliance: true,
126
+ ...(this.fixtureDetails?.revisionId && {
127
+ revisionId: this.fixtureDetails.revisionId,
128
+ }),
129
+ };
130
+ try {
131
+ const res = await firstValueFrom(this.storeBuilderService.getShelfDetails(payload));
132
+ if (res?.status === "success" && res?.data) {
133
+ this.fixtureTemplateDetails = {
134
+ ...res?.data,
135
+ shelfConfig: res?.data?.shelves ?? [],
136
+ };
137
+ this.fixtureTemplateDetails.shelfConfig =
138
+ this.fixtureTemplateDetails.shelfConfig.map((s) => {
139
+ if (s.shelfType !== "shelf" && s.products?.length) {
140
+ s.distributedRows = this.distributeRoundRobin(s.products, s.trayRows);
141
+ }
142
+ return s;
143
+ });
144
+ const allProducts = (this.fixtureTemplateDetails?.shelfConfig ?? []).flatMap((s) => s.products ?? []);
145
+ allProducts.forEach((p, i) => {
146
+ if (!p?.productId) {
147
+ p["productId"] = i;
148
+ }
149
+ });
150
+ }
151
+ }
152
+ catch (error) {
153
+ console.log("@@ ~ getFixtureShelfDetails [ERR]:", error);
154
+ }
155
+ }
105
156
  processFixtureHeatMapData() {
106
- this.fixtureTemplateDetails = structuredClone(this.fixtureDetails);
107
157
  const topMaskingPos = 1;
108
158
  const bottomSlanderPos = this.fixtureTemplateDetails?.shelfConfig?.length ?? 0;
109
159
  this.fixtureTemplateDetails.vmConfig =
@@ -113,9 +163,26 @@ export class FixtureAnalyticsComponent {
113
163
  [topMaskingPos, bottomSlanderPos].includes(vm.startYPosition));
114
164
  this.shelfGroupedData = this.buildShelfMap();
115
165
  }
166
+ setFixtureRankBadgeColors() {
167
+ const rank = this.fixtureDetails?.footfallRank;
168
+ const fallbackHeatmap = rank > 0
169
+ ? FOOTFALL_HEATMAP_COLORS[Math.min(rank - 1, FOOTFALL_HEATMAP_COLORS.length - 1)]
170
+ : {
171
+ bg: "#E3E8F0",
172
+ border: "#CBD5E1",
173
+ };
174
+ const heatmap = this.fixtureDetails?.heatmapColor ?? fallbackHeatmap;
175
+ this.fixtureRankBadgeColors = {
176
+ bg: heatmap?.bg ?? fallbackHeatmap.bg,
177
+ border: heatmap?.border ?? fallbackHeatmap.border,
178
+ innerBg: lightenColor(heatmap?.bg ?? fallbackHeatmap.bg, 0.72),
179
+ text: heatmap?.border ?? fallbackHeatmap.border,
180
+ };
181
+ }
116
182
  buildShelfMap() {
117
183
  const shelfMap = {};
118
- Object.values(this.engagersList || {}).forEach((products) => {
184
+ ["Top Engaged", "Least Engaged", "Non Engaged"].forEach((engagerKey) => {
185
+ const products = this.engagersList?.[engagerKey] || [];
119
186
  (products || []).forEach((product) => {
120
187
  const shelf = product?.shelfNumber || "Unknown";
121
188
  if (!shelfMap[shelf]) {
@@ -142,7 +209,9 @@ export class FixtureAnalyticsComponent {
142
209
  .getStoreFixtureEngagers(payload)
143
210
  .pipe(takeUntil(this.destroy$)));
144
211
  if (res && res.code == 200) {
145
- this.engagersList = res?.data || {};
212
+ const { fixtureEngagement = 0, ...engagersList } = res?.data || {};
213
+ this.fixtureEngagement = fixtureEngagement;
214
+ this.engagersList = engagersList;
146
215
  }
147
216
  }
148
217
  catch (error) {
@@ -177,8 +246,8 @@ export class FixtureAnalyticsComponent {
177
246
  }
178
247
  leastEngagers() {
179
248
  return [
180
- ...this.engagersList?.["Non Engaged"],
181
- ...this.engagersList?.["Least Engaged"]?.sort((a, b) => a.count - b.count),
249
+ ...(this.engagersList?.["Non Engaged"] || []),
250
+ ...(this.engagersList?.["Least Engaged"] || []).sort((a, b) => a.count - b.count),
182
251
  ]?.slice(0, 3);
183
252
  }
184
253
  get bodyEl() {
@@ -584,6 +653,7 @@ export class FixtureAnalyticsComponent {
584
653
  this.onClose.emit("");
585
654
  }
586
655
  onClickProduct(product) {
656
+ console.log("@@ ~ product:", product);
587
657
  if (product) {
588
658
  const zone = this.fixtureTemplateDetails.shelfConfig.find((s) => s.shelfNumber === Number(product?.shelfNumber ?? "2")).zone;
589
659
  const productZone = this.sectionByZones.find((sec) => sec.zone === zone);
@@ -610,11 +680,11 @@ export class FixtureAnalyticsComponent {
610
680
  this.destroy$.complete();
611
681
  }
612
682
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureAnalyticsComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i3.NgbModal }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
613
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FixtureAnalyticsComponent, selector: "lib-fixture-analytics", inputs: { fixtureDetails: "fixtureDetails", floorData: "floorData", startDate: "startDate", endDate: "endDate", dataType: "dataType" }, outputs: { onClose: "onClose", changeFixture: "changeFixture" }, viewQueries: [{ propertyName: "fixtureRoot", first: true, predicate: ["analyticsFixtureRoot"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section #analyticsFixtureRoot id=\"fixture-analytic-details\" class=\"scale-down\" [class.d-none]=\"isPageLoading\">\r\n <div class=\"hero-block\">\r\n <svg (click)=\"onClickClose()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h1 style=\"font-size: 18px;font-weight: 400;\" class=\"mb-2\">Rank <b>#{{ fixtureDetails?.footfallRank ?? 0 }}</b>\r\n of\r\n {{allFixtures.length}}\r\n </h1>\r\n <h2 style=\"font-size: 18px;font-weight: 600;\" class=\"m-0\">{{ fixtureTemplateDetails?.header?.label }}</h2>\r\n <p>\r\n {{fixtureTemplateDetails?.fixtureCategory}} <span>&#8226;</span>\r\n {{fixtureTemplateDetails?.fixtureWidth.value}}{{fixtureTemplateDetails?.fixtureWidth.unit}}<span>&#8226;</span>\r\n {{fixtureTemplateDetails?.actualShelves?.length}} Shelves\r\n </p>\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Total Footfall</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.zoneTotal?.count}}</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.zoneTotal?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.zoneTotal?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Zone Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.conversionCount?.count}}%</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.conversionCount?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.conversionCount?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Avg Dwell Time</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.dwellTime?.count}} mins</h2>\r\n\r\n <div class=\"d-flex align-items-centergap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.dwellTime?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.dwellTime?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-end mt-2 pe-5\" style=\"margin-top:14px\">\r\n <div class=\"form-check form-switch \">\r\n <input [checked]=\"showVMs\" [(ngModel)]=\"showVMs\" [ngModelOptions]=\"{ standalone: true }\"\r\n style=\"cursor: pointer\" class=\"form-check-input\" type=\"checkbox\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Show VM\r\n </label>\r\n </div>\r\n </div> -->\r\n\r\n <div id=\"vm-products-sum\" class=\"wall-viewport my-4\">\r\n <div class=\"fixture-wrapper\">\r\n <div id=\"header-block\" class=\"header-block\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\" [ngClass]=\"{'d-none':!showVMs}\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImageUrl; else placeholder\" [src]=\"imgCDN+vm?.vmImageUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\"\r\n (click)=\"openZoneLevelProductModal(item,'section')\">\r\n <div class=\"d-flex gap-1\">\r\n <span class=\"badge inactive\">\r\n {{ item.zone }}\r\n </span>\r\n <span class=\"badge inactive\">\r\n Capacity {{ item?.section?.capacity }}\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex gap-1 my-1\">\r\n <span class=\"badge inactive\">\r\n Pickups {{ item?.section?.pickupCount }}\r\n </span>\r\n </div>\r\n\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 <div [id]=\"'sumShelfContainer' + i\"\r\n *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div id=\"footer-block\" class=\"footer-block\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center my-4\">\r\n <span class=\"heatmap-txt\">High</span>\r\n <svg style=\"height: 18px; width: auto;\" width=\"452\" height=\"39\" viewBox=\"0 0 452 39\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"452\" height=\"39\" rx=\"6\" fill=\"url(#paint0_linear_6676_185872)\" />\r\n <defs>\r\n <linearGradient id=\"paint0_linear_6676_185872\" x1=\"0\" y1=\"19.5\" x2=\"452\" y2=\"19.5\"\r\n gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FCD6DA\" />\r\n <stop offset=\"0.17802\" stop-color=\"#FDEEDA\" />\r\n <stop offset=\"0.362811\" stop-color=\"#FCFFD5\" />\r\n <stop offset=\"0.509803\" stop-color=\"#D8E4FF\" />\r\n <stop offset=\"0.669395\" stop-color=\"#E9FBFF\" />\r\n <stop offset=\"0.845787\" stop-color=\"#F0F2F4\" />\r\n <stop offset=\"1\" stop-color=\"#FEFEFE\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <span class=\"heatmap-txt text-nowrap\">Low engagement rate</span>\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-25\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"engagersList?.['Top Engaged']?.length\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Top Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let top of topEngagers()\" (click)=\"onClickProduct(top)\">\r\n <div class=\"col-auto\">\r\n <img [src]=\"top?.imageUrl ? top.imageUrl : '{{imgCDN}}fixtureImage/imagenotfound.png'\"\r\n alt=\"Product\" class=\"rounded\">\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{top?.Brandname ?? ''}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{top?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{top?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('Top Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Non Engaged']?.length ||engagersList?.['Least Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Least/Non Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let least of leastEngagers()\" (click)=\"onClickProduct(least)\">\r\n <div class=\"col-auto\">\r\n <img [src]=\"least?.imageUrl ? least.imageUrl : '{{imgCDN}}fixtureImage/imagenotfound.png'\"\r\n alt=\"Product\" class=\"rounded\">\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{least.Brandname}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{least?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{least?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('least_Non_Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" [class.d-none]=\"!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 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</section>", 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;max-width:345px;min-width:234px;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 .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{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 .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.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.draft{background:#f2f4f7;color:#667085}.indicator.draft 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.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending 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}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#fixture-analytic-details .close-icon{cursor:pointer;margin:10px;right:0;top:0;position:absolute}#fixture-analytic-details #heatmap-txt{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;background:#475467}#fixture-analytic-details #vm-products-sum{margin-top:-12px}#fixture-analytic-details #vm-products-sum .wall-viewport{align-items:self-start;margin-bottom:0!important}#fixture-analytic-details #vm-products-sum .body-block{position:relative;width:fit-content}#fixture-analytic-details #vm-products-sum .body-block .block{border:none}#fixture-analytic-details #vm-products-sum .body-block .product-placeholder{height:100%;width:auto}#fixture-analytic-details #vm-products-sum .product{padding:1px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;border:.52px solid #e6e6e6;box-shadow:0 .52px 1.04px #1018280d}#fixture-analytic-details #vm-products-sum .product img{object-fit:cover;border-radius:4px;opacity:.8}#fixture-analytic-details #vm-products-sum .product.top{border:.52px solid #ffd0d0;background-color:#ffd0d0}#fixture-analytic-details #vm-products-sum .product.least{border:.52px solid #ffe77c;background-color:#ffe77c}#fixture-analytic-details #vm-products-sum .product.non{border:.52px solid #dadada;background-color:#fff}#fixture-analytic-details #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);background:var(--White, #fff);top:50%;left:59%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-analytic-details #vm-products-sum #fixture-level .brand,#fixture-analytic-details #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-analytic-details #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-analytic-details #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #33b5ff);background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #section-level .brand,#fixture-analytic-details #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #shelf-level .brand,#fixture-analytic-details #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .brand-category.proper{border:1.12px solid var(--Primary-200, #32d583)!important}#fixture-analytic-details #vm-products-sum .brand-category .badge{color:#f04438;background-color:#fef3f2}#fixture-analytic-details #vm-products-sum .brand-category .badge.proper{color:#12b76a!important;background-color:#ecfdf3!important}#fixture-analytic-details #vm-products-sum .header-block{width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important;width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-analytic-details #vm-products-sum .storage-box{position:relative;bottom:70px;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1px solid #33b5ff;background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum .storage-box .brand,#fixture-analytic-details #vm-products-sum .storage-box .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #vm-products-sum .storage-box .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-analytic-details #vm-products-sum img{width:100%;height:100%;display:block}#fixture-analytic-details #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;z-index:1000;transition:all .3s ease;padding:1px}#fixture-analytic-details #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-analytic-details #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-analytic-details .hero-block{position:relative;background-color:#f9fafb;width:100%;display:flex;flex-direction:column;gap:6px;padding:12px;justify-content:center;align-items:center;margin-bottom:18px}#fixture-analytic-details .hero-block h1{font-size:18px;font-weight:600;color:#101828;margin:0}#fixture-analytic-details .hero-block p{font-weight:500;font-size:16px;line-height:24px;color:#475467;margin:0}.metric-header{background-color:#eaf8ff;padding:8px;border-radius:4px;display:flex;align-items:center;justify-content:space-between;gap:8px}.w-20{width:33%}.card-body img{width:38px;height:38px;object-fit:cover}.w-25{width:50%!important}@media (max-width: 1280px){.scale-down{zoom:.55}}.list-tile:hover{cursor:pointer;background-color:#f7f7f7}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }] });
683
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FixtureAnalyticsComponent, selector: "lib-fixture-analytics", inputs: { fixtureDetails: "fixtureDetails", floorData: "floorData", startDate: "startDate", endDate: "endDate", dataType: "dataType" }, outputs: { onClose: "onClose", changeFixture: "changeFixture" }, viewQueries: [{ propertyName: "fixtureRoot", first: true, predicate: ["analyticsFixtureRoot"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section #analyticsFixtureRoot id=\"fixture-analytic-details\" class=\"scale-down\" [class.d-none]=\"isPageLoading\">\r\n <div class=\"hero-block\">\r\n <svg (click)=\"onClickClose()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"hero-content\">\n <div class=\"hero-rank\">\n <div class=\"rank-badge\" [style.--rank-bg]=\"fixtureRankBadgeColors.bg\"\n [style.--rank-border]=\"fixtureRankBadgeColors.border\"\n [style.--rank-inner-bg]=\"fixtureRankBadgeColors.innerBg\"\n [style.--rank-text]=\"fixtureRankBadgeColors.text\">\n <span class=\"rank-hash\">#</span>\n <span class=\"rank-num\">{{ fixtureDetails?.footfallRank ?? 0 }}</span>\n </div>\n\n <div class=\"hero-rank-copy\">\n <h1>Rank based on Footfall</h1>\n <span class=\"hero-rank-meta\">Out of {{allFixtures.length}} fixtures</span>\n </div>\n </div>\n\n <h2 class=\"hero-compliance m-0\">\n Merch compliance: <b>{{fixtureTemplateDetails?.fixtureCompliance}}%</b>\n </h2>\n\n <p class=\"hero-meta\">\n <b>\n {{ fixtureTemplateDetails?.header?.label }}\n </b> <span>&#8226;</span>\n\n {{fixtureTemplateDetails?.fixtureCategory}} <span>&#8226;</span>\n {{fixtureTemplateDetails?.fixtureWidth.value}}{{fixtureTemplateDetails?.fixtureWidth.unit}}<span>&#8226;</span>\n {{fixtureTemplateDetails?.actualShelves?.length}} Shelves\n </p>\n </div>\n </div>\n\r\n <div class=\"row g-3 mb-3\">\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Footfall</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.zoneTotal?.count}}</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.zoneTotal?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.zoneTotal?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Avg Dwell Time</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.dwellTime?.count}} mins</h2>\r\n\r\n <div class=\"d-flex align-items-centergap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.dwellTime?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.dwellTime?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Fixture Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.conversionCount?.count}}%</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.conversionCount?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.conversionCount?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-6\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Engagement Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">\r\n {{fixtureEngagement + '%'}}\r\n </h2>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-end mt-2 pe-5\" style=\"margin-top:14px\">\r\n <div class=\"form-check form-switch \">\r\n <input [checked]=\"showVMs\" [(ngModel)]=\"showVMs\" [ngModelOptions]=\"{ standalone: true }\"\r\n style=\"cursor: pointer\" class=\"form-check-input\" type=\"checkbox\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Show VM\r\n </label>\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Top Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Top Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let top of topEngagers()\" (click)=\"onClickProduct(top)\">\r\n <div class=\"col-auto\">\r\n @if (top?.imageUrl && !top?.imageLoadError) {\r\n <img [src]=\"top.imageUrl\" alt=\"Product\" class=\"rounded\"\r\n (error)=\"top.imageLoadError = true\">\r\n } @else {\r\n <div class=\"card-image-placeholder rounded\"></div>\r\n }\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{top?.Brandname ?? ''}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{top?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{top?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('Top Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Non Engaged']?.length || engagersList?.['Least Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Least/Non Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let least of leastEngagers()\" (click)=\"onClickProduct(least)\">\r\n <div class=\"col-auto\">\r\n @if (least?.imageUrl && !least?.imageLoadError) {\r\n <img [src]=\"least.imageUrl\" alt=\"Product\" class=\"rounded\"\r\n (error)=\"least.imageLoadError = true\">\r\n } @else {\r\n <div class=\"card-image-placeholder rounded\"></div>\r\n }\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{least.Brandname}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{least?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{least?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('least_Non_Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-products-sum\" class=\"wall-viewport my-4\">\r\n <div class=\"fixture-wrapper\">\r\n <div id=\"header-block\" class=\"header-block\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\" [ngClass]=\"{'d-none':!showVMs}\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImageUrl; else placeholder\" [src]=\"imgCDN+vm?.vmImageUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\"\r\n (click)=\"openZoneLevelProductModal(item,'section')\">\r\n <div class=\"d-flex gap-1\">\r\n <span class=\"badge inactive\">\r\n {{ item.zone }}\r\n </span>\r\n <span class=\"badge inactive\">\r\n Capacity {{ item?.section?.capacity }}\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex gap-1 my-1\">\r\n <span class=\"badge inactive\">\r\n Pickups {{ item?.section?.pickupCount }}\r\n </span>\r\n </div>\r\n\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 <div [id]=\"'sumShelfContainer' + i\"\r\n *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <!-- <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n\r\n </div>\r\n </div> -->\r\n\r\n @if(item.products.length){\r\n <div *ngFor=\"let row of item.distributedRows;let r = index\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of row;let p = index\" class=\"product\"\r\n [style.background]=\"'white'\">\r\n @if(product.status != 'missing'){\r\n <img *ngIf=\"product?.productImageUrl; else placeholder\"\r\n [src]=\"product?.productImageUrl\" alt=\"Product Image\" />\r\n <ng-template #placeholder>\r\n <div></div>\r\n </ng-template>\r\n }@else {\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n }@else{\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\"\r\n [style.border-color]=\"item?.heatmap?.border\" style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <!-- <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div> -->\r\n\r\n @if(item.products.length){\r\n <div *ngFor=\"let product of item.products;let p = index\" class=\"product\"\r\n [style.background]=\"'white'\">\r\n @if(product.status != 'missing'){\r\n <img *ngIf=\"product?.productImageUrl; else placeholder\"\r\n [src]=\"product?.productImageUrl\" alt=\"Product Image\" />\r\n <ng-template #placeholder>\r\n <div></div>\r\n </ng-template>\r\n }@else {\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n }\r\n </div>\r\n }@else {\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div id=\"footer-block\" class=\"footer-block\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex gap-3 align-items-center my-4\">\r\n <span class=\"heatmap-txt\">High</span>\r\n <svg style=\"height: 18px; width: auto;\" width=\"452\" height=\"39\" viewBox=\"0 0 452 39\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"452\" height=\"39\" rx=\"6\" fill=\"url(#paint0_linear_6676_185872)\" />\r\n <defs>\r\n <linearGradient id=\"paint0_linear_6676_185872\" x1=\"0\" y1=\"19.5\" x2=\"452\" y2=\"19.5\"\r\n gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FCA5A5\" />\r\n <stop offset=\"0.2\" stop-color=\"#FECACA\" />\r\n <stop offset=\"0.4\" stop-color=\"#93C5FD\" />\r\n <stop offset=\"0.6\" stop-color=\"#BAE6FD\" />\r\n <stop offset=\"0.8\" stop-color=\"#86EFAC\" />\r\n <stop offset=\"1\" stop-color=\"#BBF7D0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <span class=\"heatmap-txt text-nowrap\">Low engagement rate</span>\r\n </div>\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" [class.d-none]=\"!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 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</section>\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;max-width:345px;min-width:234px;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 .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{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 .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.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.draft{background:#f2f4f7;color:#667085}.indicator.draft 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.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending 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}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#fixture-analytic-details .close-icon{cursor:pointer;margin:10px;right:0;top:0;position:absolute}#fixture-analytic-details #heatmap-txt{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;background:#475467}#fixture-analytic-details #vm-products-sum{margin-top:-12px}#fixture-analytic-details #vm-products-sum .wall-viewport{align-items:self-start;margin-bottom:0!important}#fixture-analytic-details #vm-products-sum .body-block{position:relative;width:fit-content}#fixture-analytic-details #vm-products-sum .body-block .block{border:none}#fixture-analytic-details #vm-products-sum .body-block .product-placeholder{height:100%;width:auto}#fixture-analytic-details #vm-products-sum .product{padding:1px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;border:.52px solid #e6e6e6;box-shadow:0 .52px 1.04px #1018280d}#fixture-analytic-details #vm-products-sum .product img{object-fit:cover;border-radius:4px;opacity:.8}#fixture-analytic-details #vm-products-sum .product.top{border:.52px solid #ffd0d0;background-color:#ffd0d0}#fixture-analytic-details #vm-products-sum .product.least{border:.52px solid #ffe77c;background-color:#ffe77c}#fixture-analytic-details #vm-products-sum .product.non{border:.52px solid #dadada;background-color:#fff}#fixture-analytic-details #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);background:var(--White, #fff);top:50%;left:59%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-analytic-details #vm-products-sum #fixture-level .brand,#fixture-analytic-details #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-analytic-details #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-analytic-details #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #33b5ff);background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #section-level .brand,#fixture-analytic-details #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #shelf-level .brand,#fixture-analytic-details #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .brand-category.proper{border:1.12px solid var(--Primary-200, #32d583)!important}#fixture-analytic-details #vm-products-sum .brand-category .badge{color:#f04438;background-color:#fef3f2}#fixture-analytic-details #vm-products-sum .brand-category .badge.proper{color:#12b76a!important;background-color:#ecfdf3!important}#fixture-analytic-details #vm-products-sum .header-block{width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important;width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-analytic-details #vm-products-sum .storage-box{position:relative;bottom:70px;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1px solid #33b5ff;background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum .storage-box .brand,#fixture-analytic-details #vm-products-sum .storage-box .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #vm-products-sum .storage-box .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-analytic-details #vm-products-sum img{width:100%;height:100%;display:block}#fixture-analytic-details #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;z-index:1000;transition:all .3s ease;padding:1px}#fixture-analytic-details #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-analytic-details #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-analytic-details .hero-block{position:relative;background-color:#f9fafb;width:100%;display:flex;flex-direction:column;padding:16px 56px 16px 20px;justify-content:center;align-items:stretch;margin-bottom:18px}#fixture-analytic-details .hero-block .hero-content{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center}#fixture-analytic-details .hero-block .hero-rank{display:flex;align-items:center;justify-content:center;gap:14px}#fixture-analytic-details .hero-block .hero-rank-copy{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left}#fixture-analytic-details .hero-block .hero-rank-meta{color:#667085;font-size:14px;font-weight:500;line-height:20px}#fixture-analytic-details .hero-block .hero-compliance{color:#101828;font-size:16px;font-weight:400;line-height:24px}#fixture-analytic-details .hero-block .hero-meta{max-width:100%;color:#475467;font-size:15px;font-weight:500;line-height:22px;margin:0;text-wrap:balance}#fixture-analytic-details .hero-block .rank-badge{--rank-bg: #e3e8f0;--rank-border: #cbd5e1;--rank-inner-bg: #f8f9fc;--rank-text: #475467;width:52px;height:52px;border-radius:50%;border:1px solid var(--rank-border);background:var(--rank-bg);display:flex;align-items:center;justify-content:center;gap:1px;position:relative;flex-shrink:0}#fixture-analytic-details .hero-block .rank-badge:before{content:\"\";position:absolute;inset:4px;border-radius:50%;border:1px solid var(--rank-border);background:var(--rank-inner-bg)}#fixture-analytic-details .hero-block .rank-badge span{position:relative;z-index:1}#fixture-analytic-details .hero-block .rank-hash{color:var(--rank-text);font-size:16px;font-weight:400;line-height:1}#fixture-analytic-details .hero-block .rank-num{color:var(--rank-text);font-size:20px;font-weight:700;line-height:1}#fixture-analytic-details .hero-block h1{font-size:18px;font-weight:600;color:#101828;margin:0}#fixture-analytic-details .hero-block p{font-weight:500;font-size:16px;line-height:24px;color:#475467;margin:0}.metric-header{background-color:#eaf8ff;padding:8px;border-radius:4px;display:flex;align-items:center;justify-content:space-between;gap:8px}.w-20{width:33%}.card-body img{width:38px;height:38px;object-fit:cover}.card-image-placeholder{width:38px;height:38px;background:#f2f4f7;border:1px solid #e4e7ec}.w-25{width:50%!important}@media (max-width: 1280px){.scale-down{zoom:.55}}.list-tile:hover{cursor:pointer;background-color:#f7f7f7}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }] });
614
684
  }
615
685
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureAnalyticsComponent, decorators: [{
616
686
  type: Component,
617
- args: [{ selector: "lib-fixture-analytics", template: "<section #analyticsFixtureRoot id=\"fixture-analytic-details\" class=\"scale-down\" [class.d-none]=\"isPageLoading\">\r\n <div class=\"hero-block\">\r\n <svg (click)=\"onClickClose()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h1 style=\"font-size: 18px;font-weight: 400;\" class=\"mb-2\">Rank <b>#{{ fixtureDetails?.footfallRank ?? 0 }}</b>\r\n of\r\n {{allFixtures.length}}\r\n </h1>\r\n <h2 style=\"font-size: 18px;font-weight: 600;\" class=\"m-0\">{{ fixtureTemplateDetails?.header?.label }}</h2>\r\n <p>\r\n {{fixtureTemplateDetails?.fixtureCategory}} <span>&#8226;</span>\r\n {{fixtureTemplateDetails?.fixtureWidth.value}}{{fixtureTemplateDetails?.fixtureWidth.unit}}<span>&#8226;</span>\r\n {{fixtureTemplateDetails?.actualShelves?.length}} Shelves\r\n </p>\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Total Footfall</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.zoneTotal?.count}}</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.zoneTotal?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.zoneTotal?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Zone Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.conversionCount?.count}}%</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.conversionCount?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.conversionCount?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"w-20\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Avg Dwell Time</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.dwellTime?.count}} mins</h2>\r\n\r\n <div class=\"d-flex align-items-centergap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.dwellTime?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.dwellTime?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-end mt-2 pe-5\" style=\"margin-top:14px\">\r\n <div class=\"form-check form-switch \">\r\n <input [checked]=\"showVMs\" [(ngModel)]=\"showVMs\" [ngModelOptions]=\"{ standalone: true }\"\r\n style=\"cursor: pointer\" class=\"form-check-input\" type=\"checkbox\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Show VM\r\n </label>\r\n </div>\r\n </div> -->\r\n\r\n <div id=\"vm-products-sum\" class=\"wall-viewport my-4\">\r\n <div class=\"fixture-wrapper\">\r\n <div id=\"header-block\" class=\"header-block\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\" [ngClass]=\"{'d-none':!showVMs}\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImageUrl; else placeholder\" [src]=\"imgCDN+vm?.vmImageUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\"\r\n (click)=\"openZoneLevelProductModal(item,'section')\">\r\n <div class=\"d-flex gap-1\">\r\n <span class=\"badge inactive\">\r\n {{ item.zone }}\r\n </span>\r\n <span class=\"badge inactive\">\r\n Capacity {{ item?.section?.capacity }}\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex gap-1 my-1\">\r\n <span class=\"badge inactive\">\r\n Pickups {{ item?.section?.pickupCount }}\r\n </span>\r\n </div>\r\n\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 <div [id]=\"'sumShelfContainer' + i\"\r\n *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div id=\"footer-block\" class=\"footer-block\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex gap-3 align-items-center my-4\">\r\n <span class=\"heatmap-txt\">High</span>\r\n <svg style=\"height: 18px; width: auto;\" width=\"452\" height=\"39\" viewBox=\"0 0 452 39\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"452\" height=\"39\" rx=\"6\" fill=\"url(#paint0_linear_6676_185872)\" />\r\n <defs>\r\n <linearGradient id=\"paint0_linear_6676_185872\" x1=\"0\" y1=\"19.5\" x2=\"452\" y2=\"19.5\"\r\n gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FCD6DA\" />\r\n <stop offset=\"0.17802\" stop-color=\"#FDEEDA\" />\r\n <stop offset=\"0.362811\" stop-color=\"#FCFFD5\" />\r\n <stop offset=\"0.509803\" stop-color=\"#D8E4FF\" />\r\n <stop offset=\"0.669395\" stop-color=\"#E9FBFF\" />\r\n <stop offset=\"0.845787\" stop-color=\"#F0F2F4\" />\r\n <stop offset=\"1\" stop-color=\"#FEFEFE\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <span class=\"heatmap-txt text-nowrap\">Low engagement rate</span>\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-25\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\" *ngIf=\"engagersList?.['Top Engaged']?.length\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Top Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let top of topEngagers()\" (click)=\"onClickProduct(top)\">\r\n <div class=\"col-auto\">\r\n <img [src]=\"top?.imageUrl ? top.imageUrl : '{{imgCDN}}fixtureImage/imagenotfound.png'\"\r\n alt=\"Product\" class=\"rounded\">\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{top?.Brandname ?? ''}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{top?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{top?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('Top Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Non Engaged']?.length ||engagersList?.['Least Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Least/Non Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let least of leastEngagers()\" (click)=\"onClickProduct(least)\">\r\n <div class=\"col-auto\">\r\n <img [src]=\"least?.imageUrl ? least.imageUrl : '{{imgCDN}}fixtureImage/imagenotfound.png'\"\r\n alt=\"Product\" class=\"rounded\">\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{least.Brandname}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{least?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{least?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('least_Non_Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" [class.d-none]=\"!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 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</section>", 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;max-width:345px;min-width:234px;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 .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{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 .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.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.draft{background:#f2f4f7;color:#667085}.indicator.draft 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.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending 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}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#fixture-analytic-details .close-icon{cursor:pointer;margin:10px;right:0;top:0;position:absolute}#fixture-analytic-details #heatmap-txt{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;background:#475467}#fixture-analytic-details #vm-products-sum{margin-top:-12px}#fixture-analytic-details #vm-products-sum .wall-viewport{align-items:self-start;margin-bottom:0!important}#fixture-analytic-details #vm-products-sum .body-block{position:relative;width:fit-content}#fixture-analytic-details #vm-products-sum .body-block .block{border:none}#fixture-analytic-details #vm-products-sum .body-block .product-placeholder{height:100%;width:auto}#fixture-analytic-details #vm-products-sum .product{padding:1px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;border:.52px solid #e6e6e6;box-shadow:0 .52px 1.04px #1018280d}#fixture-analytic-details #vm-products-sum .product img{object-fit:cover;border-radius:4px;opacity:.8}#fixture-analytic-details #vm-products-sum .product.top{border:.52px solid #ffd0d0;background-color:#ffd0d0}#fixture-analytic-details #vm-products-sum .product.least{border:.52px solid #ffe77c;background-color:#ffe77c}#fixture-analytic-details #vm-products-sum .product.non{border:.52px solid #dadada;background-color:#fff}#fixture-analytic-details #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);background:var(--White, #fff);top:50%;left:59%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-analytic-details #vm-products-sum #fixture-level .brand,#fixture-analytic-details #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-analytic-details #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-analytic-details #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #33b5ff);background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #section-level .brand,#fixture-analytic-details #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #shelf-level .brand,#fixture-analytic-details #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .brand-category.proper{border:1.12px solid var(--Primary-200, #32d583)!important}#fixture-analytic-details #vm-products-sum .brand-category .badge{color:#f04438;background-color:#fef3f2}#fixture-analytic-details #vm-products-sum .brand-category .badge.proper{color:#12b76a!important;background-color:#ecfdf3!important}#fixture-analytic-details #vm-products-sum .header-block{width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important;width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-analytic-details #vm-products-sum .storage-box{position:relative;bottom:70px;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1px solid #33b5ff;background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum .storage-box .brand,#fixture-analytic-details #vm-products-sum .storage-box .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #vm-products-sum .storage-box .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-analytic-details #vm-products-sum img{width:100%;height:100%;display:block}#fixture-analytic-details #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;z-index:1000;transition:all .3s ease;padding:1px}#fixture-analytic-details #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-analytic-details #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-analytic-details .hero-block{position:relative;background-color:#f9fafb;width:100%;display:flex;flex-direction:column;gap:6px;padding:12px;justify-content:center;align-items:center;margin-bottom:18px}#fixture-analytic-details .hero-block h1{font-size:18px;font-weight:600;color:#101828;margin:0}#fixture-analytic-details .hero-block p{font-weight:500;font-size:16px;line-height:24px;color:#475467;margin:0}.metric-header{background-color:#eaf8ff;padding:8px;border-radius:4px;display:flex;align-items:center;justify-content:space-between;gap:8px}.w-20{width:33%}.card-body img{width:38px;height:38px;object-fit:cover}.w-25{width:50%!important}@media (max-width: 1280px){.scale-down{zoom:.55}}.list-tile:hover{cursor:pointer;background-color:#f7f7f7}\n"] }]
687
+ args: [{ selector: "lib-fixture-analytics", template: "<section #analyticsFixtureRoot id=\"fixture-analytic-details\" class=\"scale-down\" [class.d-none]=\"isPageLoading\">\r\n <div class=\"hero-block\">\r\n <svg (click)=\"onClickClose()\" class=\"close-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"hero-content\">\n <div class=\"hero-rank\">\n <div class=\"rank-badge\" [style.--rank-bg]=\"fixtureRankBadgeColors.bg\"\n [style.--rank-border]=\"fixtureRankBadgeColors.border\"\n [style.--rank-inner-bg]=\"fixtureRankBadgeColors.innerBg\"\n [style.--rank-text]=\"fixtureRankBadgeColors.text\">\n <span class=\"rank-hash\">#</span>\n <span class=\"rank-num\">{{ fixtureDetails?.footfallRank ?? 0 }}</span>\n </div>\n\n <div class=\"hero-rank-copy\">\n <h1>Rank based on Footfall</h1>\n <span class=\"hero-rank-meta\">Out of {{allFixtures.length}} fixtures</span>\n </div>\n </div>\n\n <h2 class=\"hero-compliance m-0\">\n Merch compliance: <b>{{fixtureTemplateDetails?.fixtureCompliance}}%</b>\n </h2>\n\n <p class=\"hero-meta\">\n <b>\n {{ fixtureTemplateDetails?.header?.label }}\n </b> <span>&#8226;</span>\n\n {{fixtureTemplateDetails?.fixtureCategory}} <span>&#8226;</span>\n {{fixtureTemplateDetails?.fixtureWidth.value}}{{fixtureTemplateDetails?.fixtureWidth.unit}}<span>&#8226;</span>\n {{fixtureTemplateDetails?.actualShelves?.length}} Shelves\n </p>\n </div>\n </div>\n\r\n <div class=\"row g-3 mb-3\">\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Footfall</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.zoneTotal?.count}}</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.zoneTotal?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.zoneTotal?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.zoneTotal?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Avg Dwell Time</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.dwellTime?.count}} mins</h2>\r\n\r\n <div class=\"d-flex align-items-centergap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.dwellTime?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.dwellTime?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.dwellTime?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\" *ngIf=\"fixtureFootfall?.conversionCount\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Fixture Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">{{fixtureFootfall?.conversionCount?.count}}%</h2>\r\n\r\n <div class=\"d-flex align-items-center gap-1 small\"\r\n [ngClass]=\"fixtureFootfall?.conversionCount?.PreviousVariation ? 'text-success' : 'text-danger'\">\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n style=\"transform: rotate(180deg);\"\r\n *ngIf=\"!fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#D92D20\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"\r\n *ngIf=\"fixtureFootfall?.conversionCount?.PreviousVariation\">\r\n <path\r\n d=\"M12.3198 3.21386L7.23117 8.30246L4.55296 5.62425L0.535643 9.64157M12.3198 3.21386H9.10592M12.3198 3.21386V6.42771\"\r\n stroke=\"#039855\" stroke-width=\"1.2052\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"fw-semibold\">{{fixtureFootfall?.conversionCount?.PreviousData}}%</span>\r\n <span class=\"text-muted\">vs Previous day</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"col-6\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header\">\r\n <span class=\"fw-semibold\">Engagement Conversion</span>\r\n </div>\r\n\r\n <div class=\"mt-2\">\r\n <h2 class=\"mb-1\">\r\n {{fixtureEngagement + '%'}}\r\n </h2>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex justify-content-end mt-2 pe-5\" style=\"margin-top:14px\">\r\n <div class=\"form-check form-switch \">\r\n <input [checked]=\"showVMs\" [(ngModel)]=\"showVMs\" [ngModelOptions]=\"{ standalone: true }\"\r\n style=\"cursor: pointer\" class=\"form-check-input\" type=\"checkbox\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Show VM\r\n </label>\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"row g-3\">\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Top Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Top Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let top of topEngagers()\" (click)=\"onClickProduct(top)\">\r\n <div class=\"col-auto\">\r\n @if (top?.imageUrl && !top?.imageLoadError) {\r\n <img [src]=\"top.imageUrl\" alt=\"Product\" class=\"rounded\"\r\n (error)=\"top.imageLoadError = true\">\r\n } @else {\r\n <div class=\"card-image-placeholder rounded\"></div>\r\n }\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{top?.Brandname ?? ''}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{top?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{top?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('Top Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-25\" *ngIf=\"engagersList?.['Non Engaged']?.length || engagersList?.['Least Engaged']?.length\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body p-2\">\r\n <div class=\"metric-header bg-header d-flex justify-content-between\">\r\n <span>Least/Non Engaged</span>\r\n <span>Count</span>\r\n </div>\r\n <div class=\"row align-items-center py-2 border-bottom mx-0 list-tile\"\r\n *ngFor=\"let least of leastEngagers()\" (click)=\"onClickProduct(least)\">\r\n <div class=\"col-auto\">\r\n @if (least?.imageUrl && !least?.imageLoadError) {\r\n <img [src]=\"least.imageUrl\" alt=\"Product\" class=\"rounded\"\r\n (error)=\"least.imageLoadError = true\">\r\n } @else {\r\n <div class=\"card-image-placeholder rounded\"></div>\r\n }\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"fw-medium text-dark small\">{{least.Brandname}}</div>\r\n <div class=\"text-muted\" style=\"font-size: 12px;\">{{least?.productBrandName ?? ''}}</div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <span class=\"fw-medium text-dark\">{{least?.count ?? 0}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-end py-1\">\r\n <a class=\"text-primary text-decoration-underline cursor-pointer\"\r\n (click)=\"openPopup('least_Non_Engaged')\">\r\n View all\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-products-sum\" class=\"wall-viewport my-4\">\r\n <div class=\"fixture-wrapper\">\r\n <div id=\"header-block\" class=\"header-block\">\r\n <p>{{ fixtureTemplateDetails?.header?.label }}</p>\r\n </div>\r\n\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <div *ngIf=\"fixtureTemplateDetails?.vmConfig?.length\" [ngClass]=\"{'d-none':!showVMs}\">\r\n <ng-container *ngFor=\"let vm of fixtureTemplateDetails?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container>\r\n <img *ngIf=\"vm?.vmImageUrl; else placeholder\" [src]=\"imgCDN+vm?.vmImageUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ vm?.vmName }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div id=\"section-level\" *ngIf=\"fixtureTemplateDetails?.productResolutionLevel === 'L3'\">\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\" [ngbTooltip]=\"brandCategoryTooltip\"\r\n (click)=\"openZoneLevelProductModal(item,'section')\">\r\n <div class=\"d-flex gap-1\">\r\n <span class=\"badge inactive\">\r\n {{ item.zone }}\r\n </span>\r\n <span class=\"badge inactive\">\r\n Capacity {{ item?.section?.capacity }}\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex gap-1 my-1\">\r\n <span class=\"badge inactive\">\r\n Pickups {{ item?.section?.pickupCount }}\r\n </span>\r\n </div>\r\n\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 <div [id]=\"'sumShelfContainer' + i\"\r\n *ngFor=\"let item of fixtureTemplateDetails?.shelfConfig; let i = index\">\r\n @if(item.shelfType ==='tray'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block\">\r\n <!-- <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n\r\n </div>\r\n </div> -->\r\n\r\n @if(item.products.length){\r\n <div *ngFor=\"let row of item.distributedRows;let r = index\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of row;let p = index\" class=\"product\"\r\n [style.background]=\"'white'\">\r\n @if(product.status != 'missing'){\r\n <img *ngIf=\"product?.productImageUrl; else placeholder\"\r\n [src]=\"product?.productImageUrl\" alt=\"Product Image\" />\r\n <ng-template #placeholder>\r\n <div></div>\r\n </ng-template>\r\n }@else {\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n }@else{\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\"\r\n [style.border-color]=\"item?.heatmap?.border\" style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block shelf\"\r\n [class.vmonly-placeholder]=\"item.shelfType ==='vmonly'\">\r\n <!-- <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n\r\n </div> -->\r\n\r\n @if(item.products.length){\r\n <div *ngFor=\"let product of item.products;let p = index\" class=\"product\"\r\n [style.background]=\"'white'\">\r\n @if(product.status != 'missing'){\r\n <img *ngIf=\"product?.productImageUrl; else placeholder\"\r\n [src]=\"product?.productImageUrl\" alt=\"Product Image\" />\r\n <ng-template #placeholder>\r\n <div></div>\r\n </ng-template>\r\n }@else {\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n }\r\n </div>\r\n }@else {\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"\r\n [style.background]=\"item?.heatmap?.bg\" [style.border-color]=\"item?.heatmap?.border\"\r\n style=\"opacity: 0.7;\">\r\n <svg style=\"opacity: 0.5;\" width=\"40\" height=\"19\" viewBox=\"0 0 40 19\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M31.0536 0.000138522C31.4767 0.00329514 31.8941 0.0635538 32.3075 0.186662C33.7233 0.609655 34.3548 1.37353 35.1425 2.32045C35.2335 2.43086 35.3247 2.53814 35.3573 2.57924L39.8426 7.92397C40.0866 8.21431 40.0413 8.64307 39.7421 8.88295C39.6737 8.93661 39.5985 8.97489 39.5204 9.00014C39.0874 9.70402 38.2056 10.5156 37.9745 10.8439C37.4635 11.5604 37.0333 12.3966 36.6493 13.3087C36.0927 14.9185 35.422 16.1997 34.6278 17.1183C33.8759 17.9926 33.0105 18.5393 32.0243 18.7413C31.8941 18.7666 31.7665 18.7986 31.6395 18.8175C29.9045 19.0921 26.7539 19.1076 25.12 18.4953C24.6448 18.3185 24.2121 18.0437 23.8182 17.7091C23.2681 17.2956 22.4181 15.758 21.7704 14.3722C21.318 13.4068 20.5275 12.7978 20.0653 12.7785C19.5543 12.7564 18.7105 13.3212 18.2352 14.2902C17.8707 15.0257 17.3729 15.7267 17.0702 16.3927C16.0579 18.6213 13.5056 19.0096 10.8788 19.0001C10.1692 18.997 9.46267 18.9367 8.74988 18.8136C6.17861 18.3622 5.44608 18.0592 4.38171 15.796C3.03742 12.9489 2.85847 11.427 0.413939 9.17006C0.30334 9.03755 0.224787 8.91474 0.172728 8.79799C-0.0485357 8.55177 -0.0609602 8.18203 0.157103 7.92006L4.64538 2.57924C4.6812 2.53818 4.7691 2.43091 4.86023 2.32045C5.64465 1.37353 6.27943 0.609667 7.69519 0.186662C8.10524 0.0635809 8.52537 0.00331947 8.94519 0.000138522C9.35851 -0.00301753 9.76884 0.0478256 10.1757 0.145646C10.5532 0.234032 10.7847 0.606854 10.6903 0.969865C10.599 1.33585 10.2149 1.55943 9.8407 1.46791C9.53799 1.39531 9.24171 1.35734 8.95202 1.36049C8.67209 1.36365 8.38854 1.40221 8.10534 1.48744C7.10301 1.78736 6.58865 2.40602 5.95398 3.17299C5.90193 3.23608 5.84615 3.302 5.7323 3.43764L2.24304 7.59487C2.34395 7.58855 2.45203 7.58262 2.55945 7.57631C7.0122 6.99875 11.4358 7.43711 15.83 9.19838C17.4607 9.85179 19.0621 11.0892 20.8426 10.6378C22.0209 10.338 23.7428 9.23354 25.162 8.73158C29.5336 7.188 33.4369 7.18183 37.828 7.68373L34.2635 3.43764C34.1497 3.30205 34.0939 3.23609 34.0419 3.17299C33.4072 2.40597 32.893 1.78731 31.8905 1.48744C31.6073 1.40222 31.327 1.36049 31.0438 1.36049C30.7544 1.35738 30.4585 1.39543 30.1561 1.46791C29.7787 1.55626 29.3979 1.33577 29.3065 0.969865C29.2154 0.603756 29.4427 0.234107 29.8202 0.145646C30.2302 0.0478282 30.6403 -0.00297627 31.0536 0.000138522ZM10.7714 9.006C8.33663 8.45679 5.17599 8.10028 4.31335 9.60268C3.66559 10.7296 4.32964 12.46 4.65515 13.6437C4.95461 14.6537 5.35541 15.4964 5.86316 16.1466C7.56554 18.3244 11.6598 18.2743 14.0555 17.4601C15.7514 17.0781 16.7964 15.7801 16.7411 12.9455C16.7897 10.3004 12.9392 9.49526 10.7714 9.006ZM35.6405 9.60268C34.7778 8.10031 31.6172 8.45678 29.1825 9.006C27.0147 9.49526 23.1642 10.3004 23.2128 12.9455C23.1574 15.7801 24.2024 17.0781 25.8983 17.4601C28.294 18.2743 32.3883 18.3243 34.0907 16.1466C34.6017 15.4964 34.9992 14.6537 35.2987 13.6437C35.6242 12.46 36.2883 10.7296 35.6405 9.60268Z\"\r\n fill=\"#98A2B3\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div id=\"footer-block\" class=\"footer-block\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateDetails?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex gap-3 align-items-center my-4\">\r\n <span class=\"heatmap-txt\">High</span>\r\n <svg style=\"height: 18px; width: auto;\" width=\"452\" height=\"39\" viewBox=\"0 0 452 39\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"452\" height=\"39\" rx=\"6\" fill=\"url(#paint0_linear_6676_185872)\" />\r\n <defs>\r\n <linearGradient id=\"paint0_linear_6676_185872\" x1=\"0\" y1=\"19.5\" x2=\"452\" y2=\"19.5\"\r\n gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#FCA5A5\" />\r\n <stop offset=\"0.2\" stop-color=\"#FECACA\" />\r\n <stop offset=\"0.4\" stop-color=\"#93C5FD\" />\r\n <stop offset=\"0.6\" stop-color=\"#BAE6FD\" />\r\n <stop offset=\"0.8\" stop-color=\"#86EFAC\" />\r\n <stop offset=\"1\" stop-color=\"#BBF7D0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <span class=\"heatmap-txt text-nowrap\">Low engagement rate</span>\r\n </div>\r\n</section>\r\n\r\n<section id=\"template-summary-skeleton\" [class.d-none]=\"!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 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</section>\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;max-width:345px;min-width:234px;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 .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{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 .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.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.draft{background:#f2f4f7;color:#667085}.indicator.draft 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.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending 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}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#fixture-analytic-details .close-icon{cursor:pointer;margin:10px;right:0;top:0;position:absolute}#fixture-analytic-details #heatmap-txt{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;background:#475467}#fixture-analytic-details #vm-products-sum{margin-top:-12px}#fixture-analytic-details #vm-products-sum .wall-viewport{align-items:self-start;margin-bottom:0!important}#fixture-analytic-details #vm-products-sum .body-block{position:relative;width:fit-content}#fixture-analytic-details #vm-products-sum .body-block .block{border:none}#fixture-analytic-details #vm-products-sum .body-block .product-placeholder{height:100%;width:auto}#fixture-analytic-details #vm-products-sum .product{padding:1px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;border:.52px solid #e6e6e6;box-shadow:0 .52px 1.04px #1018280d}#fixture-analytic-details #vm-products-sum .product img{object-fit:cover;border-radius:4px;opacity:.8}#fixture-analytic-details #vm-products-sum .product.top{border:.52px solid #ffd0d0;background-color:#ffd0d0}#fixture-analytic-details #vm-products-sum .product.least{border:.52px solid #ffe77c;background-color:#ffe77c}#fixture-analytic-details #vm-products-sum .product.non{border:.52px solid #dadada;background-color:#fff}#fixture-analytic-details #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);background:var(--White, #fff);top:50%;left:59%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-analytic-details #vm-products-sum #fixture-level .brand,#fixture-analytic-details #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-analytic-details #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-analytic-details #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1.12px solid var(--Primary-200, #33b5ff);background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #section-level .brand,#fixture-analytic-details #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:8px;border:1.12px solid var(--Primary-200, #f04438);transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-analytic-details #vm-products-sum #shelf-level .brand,#fixture-analytic-details #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #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-analytic-details #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-analytic-details #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .brand-category.proper{border:1.12px solid var(--Primary-200, #32d583)!important}#fixture-analytic-details #vm-products-sum .brand-category .badge{color:#f04438;background-color:#fef3f2}#fixture-analytic-details #vm-products-sum .brand-category .badge.proper{color:#12b76a!important;background-color:#ecfdf3!important}#fixture-analytic-details #vm-products-sum .header-block{width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important;width:fit-content}#fixture-analytic-details #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-analytic-details #vm-products-sum .storage-box{position:relative;bottom:70px;width:200px;overflow:hidden;padding:4px;border-radius:8px;border:1px solid #33b5ff;background-color:#f6fcff;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-analytic-details #vm-products-sum .storage-box .brand,#fixture-analytic-details #vm-products-sum .storage-box .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-analytic-details #vm-products-sum .storage-box .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-analytic-details #vm-products-sum .storage-box .separator{margin:0 4px;font-weight:600}#fixture-analytic-details #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-analytic-details #vm-products-sum img{width:100%;height:100%;display:block}#fixture-analytic-details #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;z-index:1000;transition:all .3s ease;padding:1px}#fixture-analytic-details #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-analytic-details #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-analytic-details .hero-block{position:relative;background-color:#f9fafb;width:100%;display:flex;flex-direction:column;padding:16px 56px 16px 20px;justify-content:center;align-items:stretch;margin-bottom:18px}#fixture-analytic-details .hero-block .hero-content{width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center}#fixture-analytic-details .hero-block .hero-rank{display:flex;align-items:center;justify-content:center;gap:14px}#fixture-analytic-details .hero-block .hero-rank-copy{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left}#fixture-analytic-details .hero-block .hero-rank-meta{color:#667085;font-size:14px;font-weight:500;line-height:20px}#fixture-analytic-details .hero-block .hero-compliance{color:#101828;font-size:16px;font-weight:400;line-height:24px}#fixture-analytic-details .hero-block .hero-meta{max-width:100%;color:#475467;font-size:15px;font-weight:500;line-height:22px;margin:0;text-wrap:balance}#fixture-analytic-details .hero-block .rank-badge{--rank-bg: #e3e8f0;--rank-border: #cbd5e1;--rank-inner-bg: #f8f9fc;--rank-text: #475467;width:52px;height:52px;border-radius:50%;border:1px solid var(--rank-border);background:var(--rank-bg);display:flex;align-items:center;justify-content:center;gap:1px;position:relative;flex-shrink:0}#fixture-analytic-details .hero-block .rank-badge:before{content:\"\";position:absolute;inset:4px;border-radius:50%;border:1px solid var(--rank-border);background:var(--rank-inner-bg)}#fixture-analytic-details .hero-block .rank-badge span{position:relative;z-index:1}#fixture-analytic-details .hero-block .rank-hash{color:var(--rank-text);font-size:16px;font-weight:400;line-height:1}#fixture-analytic-details .hero-block .rank-num{color:var(--rank-text);font-size:20px;font-weight:700;line-height:1}#fixture-analytic-details .hero-block h1{font-size:18px;font-weight:600;color:#101828;margin:0}#fixture-analytic-details .hero-block p{font-weight:500;font-size:16px;line-height:24px;color:#475467;margin:0}.metric-header{background-color:#eaf8ff;padding:8px;border-radius:4px;display:flex;align-items:center;justify-content:space-between;gap:8px}.w-20{width:33%}.card-body img{width:38px;height:38px;object-fit:cover}.card-image-placeholder{width:38px;height:38px;background:#f2f4f7;border:1px solid #e4e7ec}.w-25{width:50%!important}@media (max-width: 1280px){.scale-down{zoom:.55}}.list-tile:hover{cursor:pointer;background-color:#f7f7f7}\n"] }]
618
688
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i3.NgbModal }, { type: i4.ToastService }], propDecorators: { fixtureDetails: [{
619
689
  type: Input
620
690
  }], floorData: [{
@@ -633,4 +703,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
633
703
  type: ViewChild,
634
704
  args: ["analyticsFixtureRoot", { static: false }]
635
705
  }] } });
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1hbmFseXRpY3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm9ncmFtL3BsYW5vLWFuYWx5dGljcy9maXh0dXJlLWFuYWx5dGljcy9maXh0dXJlLWFuYWx5dGljcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFub2dyYW0vcGxhbm8tYW5hbHl0aWNzL2ZpeHR1cmUtYW5hbHl0aWNzL2ZpeHR1cmUtYW5hbHl0aWNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFPcEUsTUFBTSxPQUFPLHlCQUF5QjtJQXlFMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQTFFRCxjQUFjLENBQU07SUFDcEIsU0FBUyxDQUFNO0lBQ2YsU0FBUyxDQUFNO0lBQ2YsT0FBTyxDQUFNO0lBQ2IsUUFBUSxDQUFNO0lBRWIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbEMsYUFB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Q0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNwRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QyxRQUFRLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUU3QyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ25DLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBdndCVSx5QkFBeUI7NEZBQXpCLHlCQUF5QixnWkNqQ3RDLDJ6MkJBNlhVOzs0RkQ1VkcseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QjsyTUFPeEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQVFQLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuICBTaGVsZkNvbmZpZyxcclxuICBTZWN0aW9uQ29uZmlnLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2ZpeHR1cmUtdGVtcGxhdGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFuYWx5dGljc1BvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FuYWx5dGljcy1wb3B1cC9hbmFseXRpY3MtcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpvbmVBbmFseXRpY3NDb21wb25lbnQgfSBmcm9tIFwiLi4vem9uZS1hbmFseXRpY3Mvem9uZS1hbmFseXRpY3MuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFBJQ0tVUF9IRUFUTUFQX0NPTE9SUyB9IGZyb20gXCIuLi8uLi8uLi8uLi9kYXRhL2ZpeHR1cmUtdGVtcGxhdGUuZGF0YVwiO1xyXG5pbXBvcnQgeyBsaWdodGVuQ29sb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItZml4dHVyZS1hbmFseXRpY3NcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2ZpeHR1cmUtYW5hbHl0aWNzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9maXh0dXJlLWFuYWx5dGljcy5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRml4dHVyZUFuYWx5dGljc0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveVxyXG57XHJcbiAgQElucHV0KCkgZml4dHVyZURldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBmbG9vckRhdGE6IGFueTtcclxuICBASW5wdXQoKSBzdGFydERhdGU6IGFueTtcclxuICBASW5wdXQoKSBlbmREYXRlOiBhbnk7XHJcbiAgQElucHV0KCkgZGF0YVR5cGU6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlRml4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZml4dHVyZUlkOiBzdHJpbmc7XHJcbiAgICBmaXh0dXJlTmFtZTogc3RyaW5nO1xyXG4gICAgc2hlbGZJZDogc3RyaW5nO1xyXG4gICAgem9uZTogc3RyaW5nO1xyXG4gIH0+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJhbmFseXRpY3NGaXh0dXJlUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBmaXh0dXJlUm9vdCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzOiBhbnk7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcblxyXG4gIHpvbmVDb2xvciA9IHtcclxuICAgIHJpZ2h0OiB7XHJcbiAgICAgIGJnOiBcIiNmZmZmZmZcIixcclxuICAgICAgdGV4dDogXCIjMTJCNzZBXCIsXHJcbiAgICAgIGJvcmRlcjogXCIjMzJENTgzXCIsXHJcbiAgICAgIHByb2R1Y3RCb3JkZXI6IFwiIzEyQjc2QVwiLFxyXG4gICAgICBwcm9kdWN0Qmc6IFwiI0ZDRkNGRFwiLFxyXG4gICAgfSxcclxuICAgIHdyb25nOiB7XHJcbiAgICAgIGJnOiBcIiNmZmZmZmZcIixcclxuICAgICAgdGV4dDogXCIjRjA0NDM4XCIsXHJcbiAgICAgIGJvcmRlcjogXCIjOThhMmIzXCIsXHJcbiAgICAgIHByb2R1Y3RCb3JkZXI6IFwiI0YwNDQzOFwiLFxyXG4gICAgICBwcm9kdWN0Qmc6IFwiI0ZFQ0RDQVwiLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBzZWN0aW9uQnlab25lczoge1xyXG4gICAgem9uZTogc3RyaW5nO1xyXG4gICAgc2VjdGlvbjoge1xyXG4gICAgICBicmFuZHM6IHN0cmluZ1tdO1xyXG4gICAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuICAgICAgc2hlbHZlczogc3RyaW5nW107XHJcbiAgICAgIHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZClbXTtcclxuICAgICAgY2FwYWNpdHk6IG51bWJlcjtcclxuICAgICAgcGlja3VwQ291bnQ/OiBudW1iZXI7XHJcbiAgICAgIGhlYXRtYXA/OiB7XHJcbiAgICAgICAgYmc6IHN0cmluZztcclxuICAgICAgICBib3JkZXI6IHN0cmluZztcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfVtdID0gW107XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dWTXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgZW5nYWdlcnNMaXN0OiBhbnk7XHJcbiAgZml4dHVyZUZvb3RmYWxsOiBhbnk7XHJcblxyXG4gIHNoZWxmR3JvdXBlZERhdGE6IGFueTtcclxuXHJcbiAgYWxsRml4dHVyZXM6IGFueVtdID0gW107XHJcbiAgYWxsUHJvZHVjdHM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZURldGFpbHNcIl0/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFsbEZpeHR1cmVzID0gW1xyXG4gICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uLmZsYXRNYXAoKGU6IGFueSkgPT4gZS5maXh0dXJlcyksXHJcbiAgICAgICAgLi4udGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUsXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5nZXRFbmdhZ2Vyc0xpc3QoKSwgdGhpcy5nZXRGaXh0dXJlRm9vdGZhbGwoKV0pO1xyXG5cclxuICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZUhlYXRNYXBEYXRhKCk7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNCQ0luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNCQ0luaXRpYWxpemVkID0gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNWTUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWTUluaXRpYWxpemVkID0gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0ZpeHR1cmVIZWF0TWFwRGF0YSgpIHtcclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmZpeHR1cmVEZXRhaWxzKTtcclxuXHJcbiAgICBjb25zdCB0b3BNYXNraW5nUG9zID0gMTtcclxuICAgIGNvbnN0IGJvdHRvbVNsYW5kZXJQb3MgPVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMudm1Db25maWcgPVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5maWx0ZXIoXHJcbiAgICAgICAgKHZtOiBhbnkpID0+XHJcbiAgICAgICAgICB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIgJiZcclxuICAgICAgICAgIHZtLnlab25lID09PSBcInN0cmV0Y2hcIiAmJlxyXG4gICAgICAgICAgdm0uc3RhcnRZUG9zaXRpb24gPT09IHZtLmVuZFlQb3NpdGlvbiAmJlxyXG4gICAgICAgICAgW3RvcE1hc2tpbmdQb3MsIGJvdHRvbVNsYW5kZXJQb3NdLmluY2x1ZGVzKHZtLnN0YXJ0WVBvc2l0aW9uKSxcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLnNoZWxmR3JvdXBlZERhdGEgPSB0aGlzLmJ1aWxkU2hlbGZNYXAoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkU2hlbGZNYXAoKSB7XHJcbiAgICBjb25zdCBzaGVsZk1hcDogYW55ID0ge307XHJcblxyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmVuZ2FnZXJzTGlzdCB8fCB7fSkuZm9yRWFjaCgocHJvZHVjdHM6IGFueSkgPT4ge1xyXG4gICAgICAocHJvZHVjdHMgfHwgW10pLmZvckVhY2goKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gcHJvZHVjdD8uc2hlbGZOdW1iZXIgfHwgXCJVbmtub3duXCI7XHJcblxyXG4gICAgICAgIGlmICghc2hlbGZNYXBbc2hlbGZdKSB7XHJcbiAgICAgICAgICBzaGVsZk1hcFtzaGVsZl0gPSB7XHJcbiAgICAgICAgICAgIHByb2R1Y3RzOiBbXSxcclxuICAgICAgICAgICAgdG90YWxQaWNrdXBDb3VudDogMCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaGVsZk1hcFtzaGVsZl0ucHJvZHVjdHMucHVzaChwcm9kdWN0KTtcclxuICAgICAgICBzaGVsZk1hcFtzaGVsZl0udG90YWxQaWNrdXBDb3VudCArPSBwcm9kdWN0Py5jb3VudCB8fCAwO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzaGVsZk1hcDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVuZ2FnZXJzTGlzdCgpIHtcclxuICAgIHRoaXMuZW5nYWdlcnNMaXN0ID0gbnVsbDtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBmcm9tX2RhdGU6IHRoaXMuc3RhcnREYXRlLFxyXG4gICAgICB0b19kYXRlOiB0aGlzLmVuZERhdGUsXHJcbiAgICAgIGZpeHR1cmVJZDogdGhpcy5maXh0dXJlRGV0YWlscy5faWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0U3RvcmVGaXh0dXJlRW5nYWdlcnMocGF5bG9hZClcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuZW5nYWdlcnNMaXN0ID0gcmVzPy5kYXRhIHx8IHt9O1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ2V0RW5nYWdlcnNMaXN0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRGaXh0dXJlRm9vdGZhbGwoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVGb290ZmFsbCA9IG51bGw7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogW3RoaXMuZmxvb3JEYXRhLnN0b3JlSWRdLFxyXG4gICAgICB6b25lOiBgRml4dHVyZSAke3RoaXMuZml4dHVyZURldGFpbHM/LmZpeHR1cmVOdW1iZXJ9YCxcclxuICAgICAgZGF0ZVR5cGU6IHRoaXMuZGF0YVR5cGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuZ2V0U3RvcmVGaXh0dXJlRm9vdGZhbGwocGF5bG9hZClcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuZml4dHVyZUZvb3RmYWxsID0gcmVzPy5kYXRhPy5jYXJkIHx8IHt9O1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ2V0Rml4dHVyZUZvb3RmYWxsIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b3BFbmdhZ2VycygpIHtcclxuICAgIHJldHVybiB0aGlzLmVuZ2FnZXJzTGlzdD8uW1wiVG9wIEVuZ2FnZWRcIl1cclxuICAgICAgPy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYi5jb3VudCAtIGEuY291bnQpXHJcbiAgICAgID8uc2xpY2UoMCwgMyk7XHJcbiAgfVxyXG5cclxuICBsZWFzdEVuZ2FnZXJzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgLi4udGhpcy5lbmdhZ2Vyc0xpc3Q/LltcIk5vbiBFbmdhZ2VkXCJdLFxyXG4gICAgICAuLi50aGlzLmVuZ2FnZXJzTGlzdD8uW1wiTGVhc3QgRW5nYWdlZFwiXT8uc29ydChcclxuICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+IGEuY291bnQgLSBiLmNvdW50LFxyXG4gICAgICApLFxyXG4gICAgXT8uc2xpY2UoMCwgMyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBib2R5RWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZVJvb3Q/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIjYm9keS1ibG9jay1zdW1cIikgPz8gbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCkge1xyXG4gICAgY29uc3Qgdmlld1BvcnQgPSB0aGlzLmJvZHlFbDtcclxuICAgIGlmICghdmlld1BvcnQpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBib2R5V2lkdGggPSB2aWV3UG9ydC5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlYWRlci1ibG9ja1wiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGZvb3RlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZm9vdGVyLWJsb2NrXCIpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGhlYWRlci5zdHlsZS53aWR0aCA9IGAke2JvZHlXaWR0aH1weGA7XHJcbiAgICBmb290ZXIuc3R5bGUud2lkdGggPSBgJHtib2R5V2lkdGh9cHhgO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc/LmZvckVhY2goKGU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGxldCBzdGFydFNoZWxmID0gZT8uc3RhcnRZUG9zaXRpb24gPz8gMTtcclxuXHJcbiAgICAgIGxldCBlbmRTaGVsZiA9XHJcbiAgICAgICAgZT8uZW5kWVBvc2l0aW9uID8/XHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/XHJcbiAgICAgICAgMTtcclxuXHJcbiAgICAgIGNvbnN0IHZtID0gdmlld1BvcnQucXVlcnlTZWxlY3RvcihgI3ZtJHtpfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIXZtKSByZXR1cm47XHJcblxyXG4gICAgICBsZXQgeCA9IDA7XHJcbiAgICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAgIGxldCB5U3RhcnQgPSAwO1xyXG4gICAgICBmb3IgKGxldCBrID0gMTsgayA8IHN0YXJ0U2hlbGY7IGsrKykge1xyXG4gICAgICAgIGNvbnN0IHMgPSBnZXRTaGVsZkRpdihrKTtcclxuICAgICAgICBpZiAoIXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgeVN0YXJ0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcGxhY2VtZW50SGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IHBsYWNlbWVudFdpZHRoID0gYm9keVdpZHRoO1xyXG5cclxuICAgICAgZm9yIChsZXQgayA9IHN0YXJ0U2hlbGY7IGsgPD0gZW5kU2hlbGY7IGsrKykge1xyXG4gICAgICAgIGNvbnN0IHMgPSBnZXRTaGVsZkRpdihrKTtcclxuICAgICAgICBpZiAoIXMpIHJldHVybjtcclxuICAgICAgICBwbGFjZW1lbnRIZWlnaHQgKz0gcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkZWZhdWx0VyA9IHBsYWNlbWVudFdpZHRoIC8gMztcclxuICAgICAgbGV0IGRlZmF1bHRIID0gcGxhY2VtZW50SGVpZ2h0IC8gMztcclxuXHJcbiAgICAgIGxldCB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICBsZXQgaGVpZ2h0ID0gZGVmYXVsdEg7XHJcblxyXG4gICAgICBzd2l0Y2ggKGU/Lnhab25lKSB7XHJcbiAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIHggPSBib2R5V2lkdGggLSB3aWR0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gKGJvZHlXaWR0aCAtIHdpZHRoKSAvIDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RyZXRjaFwiOlxyXG4gICAgICAgICAgd2lkdGggPSBib2R5V2lkdGg7XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGU/Lnlab25lKSB7XHJcbiAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSAocGxhY2VtZW50SGVpZ2h0IC0gaGVpZ2h0KSAvIDIgKyB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gcGxhY2VtZW50SGVpZ2h0IC0gaGVpZ2h0ICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgdm0uc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XHJcbiAgICAgIHZtLnN0eWxlLmhlaWdodCA9IGAgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB2bS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XHJcblxyXG4gICAgICBmdW5jdGlvbiBnZXRTaGVsZkRpdihrOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gKHZpZXdQb3J0Py5xdWVyeVNlbGVjdG9yKGAjc2hlbGYke2t9YCkgfHxcclxuICAgICAgICAgIHZpZXdQb3J0Py5xdWVyeVNlbGVjdG9yKGAjdHJheSR7a31gKSB8fFxyXG4gICAgICAgICAgdmlld1BvcnQ/LnF1ZXJ5U2VsZWN0b3IoYCN2bW9ubHkke2t9YCkpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTaGVsZkNvbG9ycygpIHtcclxuICAgIGNvbnN0IGJvZGllcyA9IHRoaXMuYm9keUVsO1xyXG4gICAgaWYgKCFib2RpZXMpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IGJvZGllcy5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICBjb25zdCBib2R5Q2hpbGRyZW4gPSBBcnJheS5mcm9tKGJvZGllcz8uY2hpbGRyZW4gPz8gW10pIGFzIEhUTUxFbGVtZW50W107XHJcblxyXG4gICAgY29uc3Qgc2hlbGZEaXZzID0gYm9keUNoaWxkcmVuXHJcbiAgICAgIC5tYXAoKGRpdikgPT4gZGl2IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAuZmlsdGVyKChkKSA9PiBkPy5pZC5pbmNsdWRlcyhcInN1bVNoZWxmQ29udGFpbmVyXCIpKTtcclxuXHJcbiAgICBpZiAoIXNoZWxmRGl2cykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGFkanVzdCA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCkge1xyXG4gICAgICBjYXNlIFwiTDFcIjogLy9maXh0dXJlXHJcbiAgICAgICAgLy8gY29uc3QgYWxsUHJvZHVjdHMgPSAoXHJcbiAgICAgICAgLy8gICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWx2ZXMgPz8gW11cclxuICAgICAgICAvLyApLmZsYXRNYXAoKHM6IGFueSkgPT4gcy5wcm9kdWN0cyA/PyBbXSk7XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IGlzSW1wcm9wZXIgPVxyXG4gICAgICAgIC8vICAgYWxsUHJvZHVjdHMubGVuZ3RoID09IDBcclxuICAgICAgICAvLyAgICAgPyB0cnVlXHJcbiAgICAgICAgLy8gICAgIDogYWxsUHJvZHVjdHMuc29tZShcclxuICAgICAgICAvLyAgICAgICAgIChwOiBhbnkpID0+XHJcbiAgICAgICAgLy8gICAgICAgICAgIHAuc3RhdHVzID09PSBcIm1pc3BsYWNlZFwiIHx8XHJcbiAgICAgICAgLy8gICAgICAgICAgIHAuc3RhdHVzID09PSBcIm1pc3NpbmdcIiB8fFxyXG4gICAgICAgIC8vICAgICAgICAgICBwLnN0YXR1cyA9PT0gXCJcIlxyXG4gICAgICAgIC8vICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgLy8gICBpZiAoZCkge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBibG9ja0RpdiA9IGQucXVlcnlTZWxlY3RvcihcIi5ibG9ja1wiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAvLyAgICAgaWYgKGJsb2NrRGl2KSB7XHJcbiAgICAgICAgLy8gICAgICAgYmxvY2tEaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSBpc0ltcHJvcGVyXHJcbiAgICAgICAgLy8gICAgICAgICA/IHRoaXMuem9uZUNvbG9yLndyb25nLmJvcmRlclxyXG4gICAgICAgIC8vICAgICAgICAgOiB0aGlzLnpvbmVDb2xvci5yaWdodC5ib3JkZXI7XHJcbiAgICAgICAgLy8gICAgICAgYmxvY2tEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gaXNJbXByb3BlclxyXG4gICAgICAgIC8vICAgICAgICAgPyB0aGlzLnpvbmVDb2xvci53cm9uZy5iZ1xyXG4gICAgICAgIC8vICAgICAgICAgOiB0aGlzLnpvbmVDb2xvci5yaWdodC5iZztcclxuICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIGNvbnN0IGwxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmaXh0dXJlLWxldmVsXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIC8vIGlmIChsMSkge1xyXG4gICAgICAgIC8vICAgY29uc3QgYmMgPSBsMS5xdWVyeVNlbGVjdG9yKFwiLmJyYW5kLWNhdGVnb3J5XCIpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAvLyAgIGlmIChiYykge1xyXG4gICAgICAgIC8vICAgICBpZiAoaXNJbXByb3Blcikge1xyXG4gICAgICAgIC8vICAgICAgIGJjLmNsYXNzTGlzdC5hZGQoXCJ3cm9uZ1wiKTtcclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICBiYy5jbGFzc0xpc3QucmVtb3ZlKFwid3JvbmdcIik7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIkwzXCI6IC8vc2VjdGlvblxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBzaGVsZkRpdnNcclxuICAgICAgICAgICAgLm1hcCgoZGl2KSA9PlxyXG4gICAgICAgICAgICAgIGRpdi5sYXN0RWxlbWVudENoaWxkPy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZGl2XCJcclxuICAgICAgICAgICAgICAgID8gKGRpdi5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsdmVzKTtcclxuICAgICAgICAgIHRoaXMucGF0Y2hab25lUGlja3VwQ291bnRzKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmdlbmVyYXRlWm9uZUhlYXRtYXBDb2xvcnMoKTtcclxuICAgICAgICAgIHRoaXMuYXNzaWduSGVhdG1hcEZyb21QYWxldHRlKCk7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5Wm9uZUhlYXRtYXBFdmVyeXdoZXJlKCk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbkFycmF5ID0gdGhpcy5ncm91cFNoZWx2ZXNCeVpvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWcgPz8gW10sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgICAgc2VjdGlvbkFycmF5LmZvckVhY2goKHNlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgICBzZS5zaGVsdmVzPy5tYXAoKHNoKSA9PiBzaC5yZXBsYWNlKC9cXHMvZywgXCJcIikudG9Mb3dlckNhc2UoKSkgPz9cclxuICAgICAgICAgICAgICBbXTtcclxuICAgICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY0RpdnMgPSBzaGVsdmVzLmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICAgICAgICBzaGVsZklkcz8uaW5jbHVkZXMoaXRlbT8uaWQgPz8gXCJcIiksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZSA9IHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZmluZChcclxuICAgICAgICAgICAgICAocykgPT4gcy56b25lID09PSBzZS56b25lLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2VjRGl2cy5mb3JFYWNoKChkLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGQpIHtcclxuICAgICAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gbGlnaHRlbkNvbG9yKFxyXG4gICAgICAgICAgICAgICAgICBjdXJyZW50U2U/LnNlY3Rpb24uaGVhdG1hcD8uYmcgPz8gXCIjZmZmXCIsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJSaWdodCA9IGAxLjJweCBzb2xpZGA7XHJcbiAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlckxlZnQgPSBgMS4ycHggc29saWRgO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWNEaXZzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyID0gYDEuMnB4IHNvbGlkYDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VjRGl2cy5sZW5ndGggPiAxICYmIHNlY0RpdnMubGVuZ3RoIDw9IDIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyVG9wID0gYDFweCBzb2xpZGA7XHJcbiAgICAgICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJCb3R0b20gPSBgMC41cHggZG90dGVkYDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IHNlY0RpdnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyQm90dG9tID0gYDFweCBzb2xpZGA7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlclRvcCA9IGAxcHggc29saWRgO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gc2VjRGl2cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJCb3R0b20gPSBgMXB4IHNvbGlkYDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlclRvcCA9IGAwLjVweCBkb3R0ZWRgO1xyXG4gICAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyQm90dG9tID0gYDAuNXB4IGRvdHRlZGA7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyQ29sb3IgPSBgIzk4YTJiM2A7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB1bmFzc2lnbmVkU2hlbHZlcy5mb3JFYWNoKChkKSA9PiAoZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCIpKTtcclxuXHJcbiAgICAgICAgICBsZXQgc2VjdGlvbkdyb3VwSGVpZ2h0ID0gMDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25CeVpvbmVzLmZvckVhY2goKHN6LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlY3Rpb25IZWlnaHQgPSBzei5zZWN0aW9uLnNoZWxmRGl2cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoaCwgZCkgPT4gaCArIChkPy5vZmZzZXRIZWlnaHQgPz8gMCksXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc3QgYmMgPSBib2RpZXMucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWAsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGJjKSB7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmZmZcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1ggPSBib2R5V2lkdGggKyAxNjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJjWSA9XHJcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50U2VjdGlvbkhlaWdodCAtIGJjLm9mZnNldEhlaWdodCkgLyAyICtcclxuICAgICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2JjWCArIGFkanVzdH1weCwgJHtiY1l9cHgpYDtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQgKz0gY3VycmVudFNlY3Rpb25IZWlnaHQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgICAgICAgXCJzdG9yYWdlLWJveC16b25lXCIsXHJcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhbGlnbiA9IGJvZHlXaWR0aCArIDE2O1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0b3JlQm94KSB7XHJcbiAgICAgICAgICAgICAgc3RvcmVCb3guc3R5bGUubGVmdCA9IGAke2FsaWdufXB4YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMMlwiOiAvL3NoZWxmXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGRpdiwgaSkgPT4ge1xyXG4gICAgICAgICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy56b25lQ29sb3IucmlnaHQuYmc7XHJcbiAgICAgICAgICAgIGRpdi5zdHlsZS5ib3JkZXIgPSBgMS40cHggc29saWQgJHt0aGlzLnpvbmVDb2xvci5yaWdodC5ib3JkZXJ9YDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZGl2LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGAjYnJhbmQtY2F0ZWdvcnkke2l9YCk7XHJcbiAgICAgICAgICAgIGlmICghYmMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJjWCA9IChkaXYub2Zmc2V0V2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICBjb25zdCBiY1kgPSAoZGl2Lm9mZnNldEhlaWdodCAtIGJjLm9mZnNldEhlaWdodCkgLyAyO1xyXG5cclxuICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSB0aGlzLnpvbmVDb2xvci5yaWdodC5ib3JkZXI7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuem9uZUNvbG9yLnJpZ2h0LmJnO1xyXG4gICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTDRcIjogLy9zcG90XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgIGlmIChkKSBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuem9uZUNvbG9yLnJpZ2h0LmJnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbGZEaXZzOiAoSFRNTEVsZW1lbnQgfCBudWxsKVtdKSB7XHJcbiAgICBjb25zdCBuZXdTZWN0aW9uQnlab25lcyA9IFtdO1xyXG4gICAgbGV0IHBab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZyA/PyBbXSkge1xyXG4gICAgICBjb25zdCB6b25lID0gcy56b25lIHx8IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmSWQgPSBgJHtzLnNoZWxmVHlwZX0ke3Muc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgY29uc3Qgc2hlbGZEaXYgPSBzaGVsZkRpdnMuZmluZCgoZCkgPT4gZD8uaWQgPT09IHNoZWxmSWQpO1xyXG5cclxuICAgICAgaWYgKHpvbmUgPT09IFwiXCIpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgY29uc3Qgc2hlbGZDYXBhY2l0eSA9XHJcbiAgICAgICAgcy5zaGVsZlR5cGUgPT09IFwidHJheVwiXHJcbiAgICAgICAgICA/IHMucHJvZHVjdFBlclNoZWxmICogcy50cmF5Um93c1xyXG4gICAgICAgICAgOiBzLnByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW3NoZWxmRGl2XSxcclxuICAgICAgICAgICAgY2FwYWNpdHk6IHNoZWxmQ2FwYWNpdHksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBab25lID0gem9uZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBzZWN0aW9uID0gbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbjtcclxuXHJcbiAgICAgICAgc2VjdGlvbi5zaGVsdmVzLnB1c2goc2hlbGZJZCk7XHJcbiAgICAgICAgc2VjdGlvbi5zaGVsZkRpdnMucHVzaChzaGVsZkRpdik7XHJcbiAgICAgICAgc2VjdGlvbi5jYXBhY2l0eSArPSBzaGVsZkNhcGFjaXR5O1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5icmFuZHMubGVuZ3RoKSBzZWN0aW9uLmJyYW5kcyA9IHM/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW107XHJcbiAgICAgICAgaWYgKCFzZWN0aW9uLmNhdGVnb3JpZXMubGVuZ3RoKVxyXG4gICAgICAgICAgc2VjdGlvbi5jYXRlZ29yaWVzID0gcz8ucHJvZHVjdENhdGVnb3J5ID8/IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcyA9IFsuLi5uZXdTZWN0aW9uQnlab25lc107XHJcbiAgfVxyXG5cclxuICBwYXRjaFpvbmVQaWNrdXBDb3VudHMoKSB7XHJcbiAgICBjb25zdCBzaGVsZk1hcCA9IHRoaXMuc2hlbGZHcm91cGVkRGF0YSB8fCB7fTtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb25CeVpvbmVzLmZvckVhY2goKHpvbmVPYmo6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdG90YWwgPSAwO1xyXG5cclxuICAgICAgem9uZU9iai5zZWN0aW9uLnNoZWx2ZXMuZm9yRWFjaCgoc2hlbGZJZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZOdW1iZXIgPSBzaGVsZklkLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgdG90YWwgKz0gc2hlbGZNYXA/LltzaGVsZk51bWJlcl0/LnRvdGFsUGlja3VwQ291bnQgfHwgMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB6b25lT2JqLnNlY3Rpb24ucGlja3VwQ291bnQgPSB0b3RhbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXNzaWduSGVhdG1hcEZyb21QYWxldHRlKCkge1xyXG4gICAgaWYgKCF0aGlzLnNlY3Rpb25CeVpvbmVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjb3VudHMgPSB0aGlzLnNlY3Rpb25CeVpvbmVzLm1hcCgoejogYW55KSA9PiB6LnNlY3Rpb24ucGlja3VwQ291bnQpO1xyXG4gICAgY29uc3QgbWluID0gTWF0aC5taW4oLi4uY291bnRzKTtcclxuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmNvdW50cyk7XHJcbiAgICBjb25zdCByYW5nZSA9IG1heCAtIG1pbiB8fCAxO1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoem9uZU9iajogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IHpvbmVPYmouc2VjdGlvbi5waWNrdXBDb3VudDtcclxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9ICh2YWwgLSBtaW4pIC8gcmFuZ2U7XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoXHJcbiAgICAgICAgKDEgLSBub3JtYWxpemVkKSAqIChQSUNLVVBfSEVBVE1BUF9DT0xPUlMubGVuZ3RoIC0gMSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB6b25lT2JqLnNlY3Rpb24uaGVhdG1hcCA9IFBJQ0tVUF9IRUFUTUFQX0NPTE9SU1tpbmRleF07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFwcGx5Wm9uZUhlYXRtYXBFdmVyeXdoZXJlKCkge1xyXG4gICAgaWYgKCF0aGlzLnNlY3Rpb25CeVpvbmVzKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcy5mb3JFYWNoKCh6b25lT2JqOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaGVhdCA9IHpvbmVPYmouc2VjdGlvbi5oZWF0bWFwO1xyXG5cclxuICAgICAgem9uZU9iai5zZWN0aW9uLnNoZWx2ZXMuZm9yRWFjaCgoc2hlbGZJZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZOdW1iZXIgPSBzaGVsZklkLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgLy8gLS0tLS0tLS0tLSBBUFBMWSBUTyBTSEVMRiBDT05GSUcgLS0tLS0tLS0tLVxyXG4gICAgICAgIGNvbnN0IHNoZWxmQ29uZmlnID0gdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8uZmluZChcclxuICAgICAgICAgIChzOiBhbnkpID0+IFN0cmluZyhzLnNoZWxmTnVtYmVyKSA9PT0gc2hlbGZOdW1iZXIsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgICBzaGVsZkNvbmZpZy5oZWF0bWFwID0gaGVhdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0gQVBQTFkgVE8gUFJPRFVDVFMgLS0tLS0tLS0tLVxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gdGhpcy5zaGVsZkdyb3VwZWREYXRhPy5bc2hlbGZOdW1iZXJdO1xyXG4gICAgICAgIGlmIChzaGVsZj8ucHJvZHVjdHMpIHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBwcm9kdWN0LmhlYXRtYXAgPSBoZWF0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ3JvdXBTaGVsdmVzQnlab25lKGlucHV0OiBTaGVsZkNvbmZpZ1tdKTogU2VjdGlvbkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHpvbmVNYXA6IHsgW3pvbmU6IHN0cmluZ106IFNlY3Rpb25Db25maWcgfSA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dCkge1xyXG4gICAgICBjb25zdCB6b25lID0gaXRlbT8uem9uZSA/PyBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7aXRlbS5zaGVsZlR5cGV9ICR7aXRlbS5zaGVsZk51bWJlcn1gO1xyXG5cclxuICAgICAgaWYgKCF6b25lTWFwW3pvbmVdKSB7XHJcbiAgICAgICAgem9uZU1hcFt6b25lXSA9IHtcclxuICAgICAgICAgIHNoZWx2ZXM6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdEJyYW5kTmFtZVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICB6b25lOiB6b25lLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHpvbmVNYXBbem9uZV0/LnNoZWx2ZXM/LnB1c2goc2hlbGZMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoem9uZU1hcCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoc2VjdGlvbnM6IFNlY3Rpb25Db25maWdbXSk6IFNoZWxmQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgc2VjdGlvbk1hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgUGljazxTZWN0aW9uQ29uZmlnLCBcInpvbmVcIiB8IFwicHJvZHVjdEJyYW5kTmFtZVwiIHwgXCJwcm9kdWN0Q2F0ZWdvcnlcIj5cclxuICAgID4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVsZkxhYmVsIG9mIHNlY3Rpb24uc2hlbHZlcyEpIHtcclxuICAgICAgICBzZWN0aW9uTWFwLnNldChzaGVsZkxhYmVsLCB7XHJcbiAgICAgICAgICB6b25lOiBzZWN0aW9uLnpvbmUsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBzZWN0aW9uLnByb2R1Y3RCcmFuZE5hbWUsXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IHNlY3Rpb24ucHJvZHVjdENhdGVnb3J5LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXBwbHkgb3ZlcnJpZGVzIHRvIG1hdGNoaW5nIHNoZWx2ZXNcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lm1hcCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtzaGVsZi5zaGVsZlR5cGV9ICR7c2hlbGYuc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IHNlY3Rpb25NYXAuZ2V0KHNoZWxmTGFiZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uc2hlbGYsXHJcbiAgICAgICAgICB6b25lOiBvdmVycmlkZT8uem9uZSB8fCBcIlwiLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogb3ZlcnJpZGU/LnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IG92ZXJyaWRlPy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSkgPz8gW11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvcGVuWm9uZUxldmVsUHJvZHVjdE1vZGFsKHpvbmVEYXRhOiBhbnksIGxldmVsOiBzdHJpbmcsIHByb2R1Y3Q/OiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHpvbmU6IHpvbmVEYXRhLnpvbmUsXHJcbiAgICAgIHNoZWx2ZXM6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5zaGVsZkNvbmZpZy5maWx0ZXIoXHJcbiAgICAgICAgKHM6IGFueSkgPT4gcy56b25lID09PSB6b25lRGF0YS56b25lICYmIHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIsXHJcbiAgICAgICksXHJcbiAgICAgIGhlYXRtYXA6IHpvbmVEYXRhLnNlY3Rpb24uaGVhdG1hcCxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oWm9uZUFuYWx5dGljc0NvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgd2luZG93Q2xhc3M6IFwibWVyY2gtY29tcGxpYW5jZS1tb2RhbFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuem9uZURhdGEgPSBkYXRhO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubGV2ZWwgPSBsZXZlbDtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkUHJvZHVjdCA9IHByb2R1Y3Q7XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZUZpeHR1cmUuZW1pdChyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpc3RyaWJ1dGVSb3VuZFJvYmluKHByb2R1Y3RzOiBhbnksIHRyYXlSb3dzOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdHJheVJvd3MgfSwgKCkgPT4gW10pO1xyXG5cclxuICAgIHByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3Q6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCB0cmF5SW5kZXggPSBpbmRleCAlIHRyYXlSb3dzO1xyXG4gICAgICByZXN1bHRbdHJheUluZGV4XS5wdXNoKHByb2R1Y3QpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbG9zZSgpIHtcclxuICAgIHRoaXMub25DbG9zZS5lbWl0KFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1Byb2R1Y3QocHJvZHVjdDogYW55KSB7XHJcbiAgICBpZiAocHJvZHVjdCkge1xyXG4gICAgICBjb25zdCB6b25lID0gdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLnNoZWxmQ29uZmlnLmZpbmQoXHJcbiAgICAgICAgKHM6IGFueSkgPT4gcy5zaGVsZk51bWJlciA9PT0gTnVtYmVyKHByb2R1Y3Q/LnNoZWxmTnVtYmVyID8/IFwiMlwiKSxcclxuICAgICAgKS56b25lO1xyXG4gICAgICBjb25zdCBwcm9kdWN0Wm9uZSA9IHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZmluZCgoc2VjKSA9PiBzZWMuem9uZSA9PT0gem9uZSk7XHJcblxyXG4gICAgICB0aGlzLm9wZW5ab25lTGV2ZWxQcm9kdWN0TW9kYWwocHJvZHVjdFpvbmUsIFwic2VjdGlvblwiLCBwcm9kdWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Qb3B1cCh0eXBlOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFuYWx5dGljc1BvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJtZXJjaC1jb21wbGlhbmNlLW1vZGFsXCIsXHJcbiAgICAgIHNpemU6IFwibGdcIixcclxuICAgIH0pO1xyXG5cclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSB0aGlzLmVuZ2FnZXJzTGlzdDtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2VsZWN0YWJsZSA9IHRydWU7XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLm9uQ2xpY2tQcm9kdWN0KHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gI2FuYWx5dGljc0ZpeHR1cmVSb290IGlkPVwiZml4dHVyZS1hbmFseXRpYy1kZXRhaWxzXCIgY2xhc3M9XCJzY2FsZS1kb3duXCIgW2NsYXNzLmQtbm9uZV09XCJpc1BhZ2VMb2FkaW5nXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVyby1ibG9ja1wiPlxyXG4gICAgICAgIDxzdmcgKGNsaWNrKT1cIm9uQ2xpY2tDbG9zZSgpXCIgY2xhc3M9XCJjbG9zZS1pY29uXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE4IDZMNiAxOE02IDZMMTggMThcIiBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8aDEgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7Zm9udC13ZWlnaHQ6IDQwMDtcIiBjbGFzcz1cIm1iLTJcIj5SYW5rIDxiPiN7eyBmaXh0dXJlRGV0YWlscz8uZm9vdGZhbGxSYW5rID8/IDAgfX08L2I+XHJcbiAgICAgICAgICAgIG9mXHJcbiAgICAgICAgICAgIHt7YWxsRml4dHVyZXMubGVuZ3RofX1cclxuICAgICAgICA8L2gxPlxyXG4gICAgICAgIDxoMiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtmb250LXdlaWdodDogNjAwO1wiIGNsYXNzPVwibS0wXCI+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCB9fTwvaDI+XHJcbiAgICAgICAgPHA+XHJcbiAgICAgICAgICAgIHt7Zml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUNhdGVnb3J5fX0gPHNwYW4+JiM4MjI2Ozwvc3Bhbj5cclxuICAgICAgICAgICAge3tmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGgudmFsdWV9fXt7Zml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoLnVuaXR9fTxzcGFuPiYjODIyNjs8L3NwYW4+XHJcbiAgICAgICAgICAgIHt7Zml4dHVyZVRlbXBsYXRlRGV0YWlscz8uYWN0dWFsU2hlbHZlcz8ubGVuZ3RofX0gU2hlbHZlc1xyXG4gICAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0yXCIgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj5Ub3RhbCBGb290ZmFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItMVwiPnt7Zml4dHVyZUZvb3RmYWxsPy56b25lVG90YWw/LmNvdW50fX08L2gyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgc21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4dHVyZUZvb3RmYWxsPy56b25lVG90YWw/LlByZXZpb3VzVmFyaWF0aW9uID8gJ3RleHQtc3VjY2VzcycgOiAndGV4dC1kYW5nZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZml4dHVyZUZvb3RmYWxsPy56b25lVG90YWw/LlByZXZpb3VzVmFyaWF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi4zMTk4IDMuMjEzODZMNy4yMzExNyA4LjMwMjQ2TDQuNTUyOTYgNS42MjQyNUwwLjUzNTY0MyA5LjY0MTU3TTEyLjMxOTggMy4yMTM4Nkg5LjEwNTkyTTEyLjMxOTggMy4yMTM4NlY2LjQyNzcxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuMjA1MlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVGb290ZmFsbD8uem9uZVRvdGFsPy5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3tmaXh0dXJlRm9vdGZhbGw/LnpvbmVUb3RhbD8uUHJldmlvdXNEYXRhfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+dnMgUHJldmlvdXMgZGF5PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0yMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTJcIiAqbmdJZj1cImZpeHR1cmVGb290ZmFsbD8uY29udmVyc2lvbkNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPlpvbmUgQ29udmVyc2lvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItMVwiPnt7Zml4dHVyZUZvb3RmYWxsPy5jb252ZXJzaW9uQ291bnQ/LmNvdW50fX0lPC9oMj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIHNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZpeHR1cmVGb290ZmFsbD8uY29udmVyc2lvbkNvdW50Py5QcmV2aW91c1ZhcmlhdGlvbiA/ICd0ZXh0LXN1Y2Nlc3MnIDogJ3RleHQtZGFuZ2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEzIDEzXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpeHR1cmVGb290ZmFsbD8uY29udmVyc2lvbkNvdW50Py5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudD8uUHJldmlvdXNWYXJpYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjMxOTggMy4yMTM4Nkw3LjIzMTE3IDguMzAyNDZMNC41NTI5NiA1LjYyNDI1TDAuNTM1NjQzIDkuNjQxNTdNMTIuMzE5OCAzLjIxMzg2SDkuMTA1OTJNMTIuMzE5OCAzLjIxMzg2VjYuNDI3NzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4yMDUyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7Zml4dHVyZUZvb3RmYWxsPy5jb252ZXJzaW9uQ291bnQ/LlByZXZpb3VzRGF0YX19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPnZzIFByZXZpb3VzIGRheTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0yXCIgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj5BdmcgRHdlbGwgVGltZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItMVwiPnt7Zml4dHVyZUZvb3RmYWxsPy5kd2VsbFRpbWU/LmNvdW50fX0gbWluczwvaDI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcmdhcC0xIHNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZpeHR1cmVGb290ZmFsbD8uZHdlbGxUaW1lPy5QcmV2aW91c1ZhcmlhdGlvbiA/ICd0ZXh0LXN1Y2Nlc3MnIDogJ3RleHQtZGFuZ2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEzIDEzXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpeHR1cmVGb290ZmFsbD8uZHdlbGxUaW1lPy5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmR3ZWxsVGltZT8uUHJldmlvdXNWYXJpYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjMxOTggMy4yMTM4Nkw3LjIzMTE3IDguMzAyNDZMNC41NTI5NiA1LjYyNDI1TDAuNTM1NjQzIDkuNjQxNTdNMTIuMzE5OCAzLjIxMzg2SDkuMTA1OTJNMTIuMzE5OCAzLjIxMzg2VjYuNDI3NzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4yMDUyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7Zml4dHVyZUZvb3RmYWxsPy5kd2VsbFRpbWU/LlByZXZpb3VzRGF0YX19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPnZzIFByZXZpb3VzIGRheTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yIHBlLTVcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTRweFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2hvd1ZNc1wiIFsobmdNb2RlbCldPVwic2hvd1ZNc1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWIgbXMtMlwiIGZvcj1cInNob3dWTXNcIj5cclxuICAgICAgICAgICAgICAgIFNob3cgVk1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8ZGl2IGlkPVwidm0tcHJvZHVjdHMtc3VtXCIgY2xhc3M9XCJ3YWxsLXZpZXdwb3J0IG15LTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJoZWFkZXItYmxvY2tcIiBjbGFzcz1cImhlYWRlci1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiYm9keS1ibG9jay1zdW1cIiBjbGFzcz1cImJvZHktYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy52bUNvbmZpZz8ubGVuZ3RoXCIgW25nQ2xhc3NdPVwieydkLW5vbmUnOiFzaG93Vk1zfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZtIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIid2bScgKyBpXCIgY2xhc3M9XCJ2bS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwidm0/LnZtSW1hZ2VVcmw7IGVsc2UgcGxhY2Vob2xkZXJcIiBbc3JjXT1cImltZ0NETit2bT8udm1JbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlZtIEltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0tcGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz57eyB2bT8udm1OYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzZWN0aW9uLWxldmVsXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyAkaW5kZXhcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5ab25lTGV2ZWxQcm9kdWN0TW9kYWwoaXRlbSwnc2VjdGlvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnpvbmUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBhY2l0eSB7eyBpdGVtPy5zZWN0aW9uPy5jYXBhY2l0eSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGluYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpY2t1cHMge3sgaXRlbT8uc2VjdGlvbj8ucGlja3VwQ291bnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5icmFuZHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidzdW1TaGVsZkNvbnRhaW5lcicgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0udHJheVJvd3MpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIml0ZW0/LmhlYXRtYXA/LmJnXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJpdGVtPy5oZWF0bWFwPy5ib3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNztcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJvcGFjaXR5OiAwLjU7XCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjE5XCIgdmlld0JveD1cIjAgMCA0MCAxOVwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMS4wNTM2IDAuMDAwMTM4NTIyQzMxLjQ3NjcgMC4wMDMyOTUxNCAzMS44OTQxIDAuMDYzNTUzOCAzMi4zMDc1IDAuMTg2NjYyQzMzLjcyMzMgMC42MDk2NTUgMzQuMzU0OCAxLjM3MzUzIDM1LjE0MjUgMi4zMjA0NUMzNS4yMzM1IDIuNDMwODYgMzUuMzI0NyAyLjUzODE0IDM1LjM1NzMgMi41NzkyNEwzOS44NDI2IDcuOTIzOTdDNDAuMDg2NiA4LjIxNDMxIDQwLjA0MTMgOC42NDMwNyAzOS43NDIxIDguODgyOTVDMzkuNjczNyA4LjkzNjYxIDM5LjU5ODUgOC45NzQ4OSAzOS41MjA0IDkuMDAwMTRDMzkuMDg3NCA5LjcwNDAyIDM4LjIwNTYgMTAuNTE1NiAzNy45NzQ1IDEwLjg0MzlDMzcuNDYzNSAxMS41NjA0IDM3LjAzMzMgMTIuMzk2NiAzNi42NDkzIDEzLjMwODdDMzYuMDkyNyAxNC45MTg1IDM1LjQyMiAxNi4xOTk3IDM0LjYyNzggMTcuMTE4M0MzMy44NzU5IDE3Ljk5MjYgMzMuMDEwNSAxOC41MzkzIDMyLjAyNDMgMTguNzQxM0MzMS44OTQxIDE4Ljc2NjYgMzEuNzY2NSAxOC43OTg2IDMxLjYzOTUgMTguODE3NUMyOS45MDQ1IDE5LjA5MjEgMjYuNzUzOSAxOS4xMDc2IDI1LjEyIDE4LjQ5NTNDMjQuNjQ0OCAxOC4zMTg1IDI0LjIxMjEgMTguMDQzNyAyMy44MTgyIDE3LjcwOTFDMjMuMjY4MSAxNy4yOTU2IDIyLjQxODEgMTUuNzU4IDIxLjc3MDQgMTQuMzcyMkMyMS4zMTggMTMuNDA2OCAyMC41Mjc1IDEyLjc5NzggMjAuMDY1MyAxMi43Nzg1QzE5LjU1NDMgMTIuNzU2NCAxOC43MTA1IDEzLjMyMTIgMTguMjM1MiAxNC4yOTAyQzE3Ljg3MDcgMTUuMDI1NyAxNy4zNzI5IDE1LjcyNjcgMTcuMDcwMiAxNi4zOTI3QzE2LjA1NzkgMTguNjIxMyAxMy41MDU2IDE5LjAwOTYgMTAuODc4OCAxOS4wMDAxQzEwLjE2OTIgMTguOTk3IDkuNDYyNjcgMTguOTM2NyA4Ljc0OTg4IDE4LjgxMzZDNi4xNzg2MSAxOC4zNjIyIDUuNDQ2MDggMTguMDU5MiA0LjM4MTcxIDE1Ljc5NkMzLjAzNzQyIDEyLjk0ODkgMi44NTg0NyAxMS40MjcgMC40MTM5MzkgOS4xNzAwNkMwLjMwMzM0IDkuMDM3NTUgMC4yMjQ3ODcgOC45MTQ3NCAwLjE3MjcyOCA4Ljc5Nzk5Qy0wLjA0ODUzNTcgOC41NTE3NyAtMC4wNjA5NjAyIDguMTgyMDMgMC4xNTcxMDMgNy45MjAwNkw0LjY0NTM4IDIuNTc5MjRDNC42ODEyIDIuNTM4MTggNC43NjkxIDIuNDMwOTEgNC44NjAyMyAyLjMyMDQ1QzUuNjQ0NjUgMS4zNzM1MyA2LjI3OTQzIDAuNjA5NjY3IDcuNjk1MTkgMC4xODY2NjJDOC4xMDUyNCAwLjA2MzU4MDkgOC41MjUzNyAwLjAwMzMxOTQ3IDguOTQ1MTkgMC4wMDAxMzg1MjJDOS4zNTg1MSAtMC4wMDMwMTc1MyA5Ljc2ODg0IDAuMDQ3ODI1NiAxMC4xNzU3IDAuMTQ1NjQ2QzEwLjU1MzIgMC4yMzQwMzIgMTAuNzg0NyAwLjYwNjg1NCAxMC42OTAzIDAuOTY5ODY1QzEwLjU5OSAxLjMzNTg1IDEwLjIxNDkgMS41NTk0MyA5Ljg0MDcgMS40Njc5MUM5LjUzNzk5IDEuMzk1MzEgOS4yNDE3MSAxLjM1NzM0IDguOTUyMDIgMS4zNjA0OUM4LjY3MjA5IDEuMzYzNjUgOC4zODg1NCAxLjQwMjIxIDguMTA1MzQgMS40ODc0NEM3LjEwMzAxIDEuNzg3MzYgNi41ODg2NSAyLjQwNjAyIDUuOTUzOTggMy4xNzI5OUM1LjkwMTkzIDMuMjM2MDggNS44NDYxNSAzLjMwMiA1LjczMjMgMy40Mzc2NEwyLjI0MzA0IDcuNTk0ODdDMi4zNDM5NSA3LjU4ODU1IDIuNDUyMDMgNy41ODI2MiAyLjU1OTQ1IDcuNTc2MzFDNy4wMTIyIDYuOTk4NzUgMTEuNDM1OCA3LjQzNzExIDE1LjgzIDkuMTk4MzhDMTcuNDYwNyA5Ljg1MTc5IDE5LjA2MjEgMTEuMDg5MiAyMC44NDI2IDEwLjYzNzhDMjIuMDIwOSAxMC4zMzggMjMuNzQyOCA5LjIzMzU0IDI1LjE2MiA4LjczMTU4QzI5LjUzMzYgNy4xODggMzMuNDM2OSA3LjE4MTgzIDM3LjgyOCA3LjY4MzczTDM0LjI2MzUgMy40Mzc2NEMzNC4xNDk3IDMuMzAyMDUgMzQuMDkzOSAzLjIzNjA5IDM0LjA0MTkgMy4xNzI5OUMzMy40MDcyIDIuNDA1OTcgMzIuODkzIDEuNzg3MzEgMzEuODkwNSAxLjQ4NzQ0QzMxLjYwNzMgMS40MDIyMiAzMS4zMjcgMS4zNjA0OSAzMS4wNDM4IDEuMzYwNDlDMzAuNzU0NCAxLjM1NzM4IDMwLjQ1ODUgMS4zOTU0MyAzMC4xNTYxIDEuNDY3OTFDMjkuNzc4NyAxLjU1NjI2IDI5LjM5NzkgMS4zMzU3NyAyOS4zMDY1IDAuOTY5ODY1QzI5LjIxNTQgMC42MDM3NTYgMjkuNDQyNyAwLjIzNDEwNyAyOS44MjAyIDAuMTQ1NjQ2QzMwLjIzMDIgMC4wNDc4MjgyIDMwLjY0MDMgLTAuMDAyOTc2MjcgMzEuMDUzNiAwLjAwMDEzODUyMlpNMTAuNzcxNCA5LjAwNkM4LjMzNjYzIDguNDU2NzkgNS4xNzU5OSA4LjEwMDI4IDQuMzEzMzUgOS42MDI2OEMzLjY2NTU5IDEwLjcyOTYgNC4zMjk2NCAxMi40NiA0LjY1NTE1IDEzLjY0MzdDNC45NTQ2MSAxNC42NTM3IDUuMzU1NDEgMTUuNDk2NCA1Ljg2MzE2IDE2LjE0NjZDNy41NjU1NCAxOC4zMjQ0IDExLjY1OTggMTguMjc0MyAxNC4wNTU1IDE3LjQ2MDFDMTUuNzUxNCAxNy4wNzgxIDE2Ljc5NjQgMTUuNzgwMSAxNi43NDExIDEyLjk0NTVDMTYuNzg5NyAxMC4zMDA0IDEyLjkzOTIgOS40OTUyNiAxMC43NzE0IDkuMDA2Wk0zNS42NDA1IDkuNjAyNjhDMzQuNzc3OCA4LjEwMDMxIDMxLjYxNzIgOC40NTY3OCAyOS4xODI1IDkuMDA2QzI3LjAxNDcgOS40OTUyNiAyMy4xNjQyIDEwLjMwMDQgMjMuMjEyOCAxMi45NDU1QzIzLjE1NzQgMTUuNzgwMSAyNC4yMDI0IDE3LjA3ODEgMjUuODk4MyAxNy40NjAxQzI4LjI5NCAxOC4yNzQzIDMyLjM4ODMgMTguMzI0MyAzNC4wOTA3IDE2LjE0NjZDMzQuNjAxNyAxNS40OTY0IDM0Ljk5OTIgMTQuNjUzNyAzNS4yOTg3IDEzLjY0MzdDMzUuNjI0MiAxMi40NiAzNi4yODgzIDEwLjcyOTYgMzUuNjQwNSA5LjYwMjY4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM5OEEyQjNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlISArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52bW9ubHktcGxhY2Vob2xkZXJdPVwiaXRlbS5zaGVsZlR5cGUgPT09J3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJpdGVtPy5oZWF0bWFwPy5iZ1wiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiaXRlbT8uaGVhdG1hcD8uYm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNztcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwib3BhY2l0eTogMC41O1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgNDAgMTlcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzEuMDUzNiAwLjAwMDEzODUyMkMzMS40NzY3IDAuMDAzMjk1MTQgMzEuODk0MSAwLjA2MzU1MzggMzIuMzA3NSAwLjE4NjY2MkMzMy43MjMzIDAuNjA5NjU1IDM0LjM1NDggMS4zNzM1MyAzNS4xNDI1IDIuMzIwNDVDMzUuMjMzNSAyLjQzMDg2IDM1LjMyNDcgMi41MzgxNCAzNS4zNTczIDIuNTc5MjRMMzkuODQyNiA3LjkyMzk3QzQwLjA4NjYgOC4yMTQzMSA0MC4wNDEzIDguNjQzMDcgMzkuNzQyMSA4Ljg4Mjk1QzM5LjY3MzcgOC45MzY2MSAzOS41OTg1IDguOTc0ODkgMzkuNTIwNCA5LjAwMDE0QzM5LjA4NzQgOS43MDQwMiAzOC4yMDU2IDEwLjUxNTYgMzcuOTc0NSAxMC44NDM5QzM3LjQ2MzUgMTEuNTYwNCAzNy4wMzMzIDEyLjM5NjYgMzYuNjQ5MyAxMy4zMDg3QzM2LjA5MjcgMTQuOTE4NSAzNS40MjIgMTYuMTk5NyAzNC42Mjc4IDE3LjExODNDMzMuODc1OSAxNy45OTI2IDMzLjAxMDUgMTguNTM5MyAzMi4wMjQzIDE4Ljc0MTNDMzEuODk0MSAxOC43NjY2IDMxLjc2NjUgMTguNzk4NiAzMS42Mzk1IDE4LjgxNzVDMjkuOTA0NSAxOS4wOTIxIDI2Ljc1MzkgMTkuMTA3NiAyNS4xMiAxOC40OTUzQzI0LjY0NDggMTguMzE4NSAyNC4yMTIxIDE4LjA0MzcgMjMuODE4MiAxNy43MDkxQzIzLjI2ODEgMTcuMjk1NiAyMi40MTgxIDE1Ljc1OCAyMS43NzA0IDE0LjM3MjJDMjEuMzE4IDEzLjQwNjggMjAuNTI3NSAxMi43OTc4IDIwLjA2NTMgMTIuNzc4NUMxOS41NTQzIDEyLjc1NjQgMTguNzEwNSAxMy4zMjEyIDE4LjIzNTIgMTQuMjkwMkMxNy44NzA3IDE1LjAyNTcgMTcuMzcyOSAxNS43MjY3IDE3LjA3MDIgMTYuMzkyN0MxNi4wNTc5IDE4LjYyMTMgMTMuNTA1NiAxOS4wMDk2IDEwLjg3ODggMTkuMDAwMUMxMC4xNjkyIDE4Ljk5NyA5LjQ2MjY3IDE4LjkzNjcgOC43NDk4OCAxOC44MTM2QzYuMTc4NjEgMTguMzYyMiA1LjQ0NjA4IDE4LjA1OTIgNC4zODE3MSAxNS43OTZDMy4wMzc0MiAxMi45NDg5IDIuODU4NDcgMTEuNDI3IDAuNDEzOTM5IDkuMTcwMDZDMC4zMDMzNCA5LjAzNzU1IDAuMjI0Nzg3IDguOTE0NzQgMC4xNzI3MjggOC43OTc5OUMtMC4wNDg1MzU3IDguNTUxNzcgLTAuMDYwOTYwMiA4LjE4MjAzIDAuMTU3MTAzIDcuOTIwMDZMNC42NDUzOCAyLjU3OTI0QzQuNjgxMiAyLjUzODE4IDQuNzY5MSAyLjQzMDkxIDQuODYwMjMgMi4zMjA0NUM1LjY0NDY1IDEuMzczNTMgNi4yNzk0MyAwLjYwOTY2NyA3LjY5NTE5IDAuMTg2NjYyQzguMTA1MjQgMC4wNjM1ODA5IDguNTI1MzcgMC4wMDMzMTk0NyA4Ljk0NTE5IDAuMDAwMTM4NTIyQzkuMzU4NTEgLTAuMDAzMDE3NTMgOS43Njg4NCAwLjA0NzgyNTYgMTAuMTc1NyAwLjE0NTY0NkMxMC41NTMyIDAuMjM0MDMyIDEwLjc4NDcgMC42MDY4NTQgMTAuNjkwMyAwLjk2OTg2NUMxMC41OTkgMS4zMzU4NSAxMC4yMTQ5IDEuNTU5NDMgOS44NDA3IDEuNDY3OTFDOS41Mzc5OSAxLjM5NTMxIDkuMjQxNzEgMS4zNTczNCA4Ljk1MjAyIDEuMzYwNDlDOC42NzIwOSAxLjM2MzY1IDguMzg4NTQgMS40MDIyMSA4LjEwNTM0IDEuNDg3NDRDNy4xMDMwMSAxLjc4NzM2IDYuNTg4NjUgMi40MDYwMiA1Ljk1Mzk4IDMuMTcyOTlDNS45MDE5MyAzLjIzNjA4IDUuODQ2MTUgMy4zMDIgNS43MzIzIDMuNDM3NjRMMi4yNDMwNCA3LjU5NDg3QzIuMzQzOTUgNy41ODg1NSAyLjQ1MjAzIDcuNTgyNjIgMi41NTk0NSA3LjU3NjMxQzcuMDEyMiA2Ljk5ODc1IDExLjQzNTggNy40MzcxMSAxNS44MyA5LjE5ODM4QzE3LjQ2MDcgOS44NTE3OSAxOS4wNjIxIDExLjA4OTIgMjAuODQyNiAxMC42Mzc4QzIyLjAyMDkgMTAuMzM4IDIzLjc0MjggOS4yMzM1NCAyNS4xNjIgOC43MzE1OEMyOS41MzM2IDcuMTg4IDMzLjQzNjkgNy4xODE4MyAzNy44MjggNy42ODM3M0wzNC4yNjM1IDMuNDM3NjRDMzQuMTQ5NyAzLjMwMjA1IDM0LjA5MzkgMy4yMzYwOSAzNC4wNDE5IDMuMTcyOTlDMzMuNDA3MiAyLjQwNTk3IDMyLjg5MyAxLjc4NzMxIDMxLjg5MDUgMS40ODc0NEMzMS42MDczIDEuNDAyMjIgMzEuMzI3IDEuMzYwNDkgMzEuMDQzOCAxLjM2MDQ5QzMwLjc1NDQgMS4zNTczOCAzMC40NTg1IDEuMzk1NDMgMzAuMTU2MSAxLjQ2NzkxQzI5Ljc3ODcgMS41NTYyNiAyOS4zOTc5IDEuMzM1NzcgMjkuMzA2NSAwLjk2OTg2NUMyOS4yMTU0IDAuNjAzNzU2IDI5LjQ0MjcgMC4yMzQxMDcgMjkuODIwMiAwLjE0NTY0NkMzMC4yMzAyIDAuMDQ3ODI4MiAzMC42NDAzIC0wLjAwMjk3NjI3IDMxLjA1MzYgMC4wMDAxMzg1MjJaTTEwLjc3MTQgOS4wMDZDOC4zMzY2MyA4LjQ1Njc5IDUuMTc1OTkgOC4xMDAyOCA0LjMxMzM1IDkuNjAyNjhDMy42NjU1OSAxMC43Mjk2IDQuMzI5NjQgMTIuNDYgNC42NTUxNSAxMy42NDM3QzQuOTU0NjEgMTQuNjUzNyA1LjM1NTQxIDE1LjQ5NjQgNS44NjMxNiAxNi4xNDY2QzcuNTY1NTQgMTguMzI0NCAxMS42NTk4IDE4LjI3NDMgMTQuMDU1NSAxNy40NjAxQzE1Ljc1MTQgMTcuMDc4MSAxNi43OTY0IDE1Ljc4MDEgMTYuNzQxMSAxMi45NDU1QzE2Ljc4OTcgMTAuMzAwNCAxMi45MzkyIDkuNDk1MjYgMTAuNzcxNCA5LjAwNlpNMzUuNjQwNSA5LjYwMjY4QzM0Ljc3NzggOC4xMDAzMSAzMS42MTcyIDguNDU2NzggMjkuMTgyNSA5LjAwNkMyNy4wMTQ3IDkuNDk1MjYgMjMuMTY0MiAxMC4zMDA0IDIzLjIxMjggMTIuOTQ1NUMyMy4xNTc0IDE1Ljc4MDEgMjQuMjAyNCAxNy4wNzgxIDI1Ljg5ODMgMTcuNDYwMUMyOC4yOTQgMTguMjc0MyAzMi4zODgzIDE4LjMyNDMgMzQuMDkwNyAxNi4xNDY2QzM0LjYwMTcgMTUuNDk2NCAzNC45OTkyIDE0LjY1MzcgMzUuMjk4NyAxMy42NDM3QzM1LjYyNDIgMTIuNDYgMzYuMjg4MyAxMC43Mjk2IDM1LjY0MDUgOS42MDI2OFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM5OEEyQjNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiZm9vdGVyLWJsb2NrXCIgY2xhc3M9XCJmb290ZXItYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIGxlZnQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciByaWdodC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBteS00XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWF0bWFwLXR4dFwiPkhpZ2g8L3NwYW4+XHJcbiAgICAgICAgPHN2ZyBzdHlsZT1cImhlaWdodDogMThweDsgd2lkdGg6IGF1dG87XCIgd2lkdGg9XCI0NTJcIiBoZWlnaHQ9XCIzOVwiIHZpZXdCb3g9XCIwIDAgNDUyIDM5XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDUyXCIgaGVpZ2h0PVwiMzlcIiByeD1cIjZcIiBmaWxsPVwidXJsKCNwYWludDBfbGluZWFyXzY2NzZfMTg1ODcyKVwiIC8+XHJcbiAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicGFpbnQwX2xpbmVhcl82Njc2XzE4NTg3MlwiIHgxPVwiMFwiIHkxPVwiMTkuNVwiIHgyPVwiNDUyXCIgeTI9XCIxOS41XCJcclxuICAgICAgICAgICAgICAgICAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPVwiI0ZDRDZEQVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC4xNzgwMlwiIHN0b3AtY29sb3I9XCIjRkRFRURBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjM2MjgxMVwiIHN0b3AtY29sb3I9XCIjRkNGRkQ1XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjUwOTgwM1wiIHN0b3AtY29sb3I9XCIjRDhFNEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjY2OTM5NVwiIHN0b3AtY29sb3I9XCIjRTlGQkZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjg0NTc4N1wiIHN0b3AtY29sb3I9XCIjRjBGMkY0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIxXCIgc3RvcC1jb2xvcj1cIiNGRUZFRkVcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhdG1hcC10eHQgdGV4dC1ub3dyYXBcIj5Mb3cgZW5nYWdlbWVudCByYXRlPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0yNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTJcIiAqbmdJZj1cImVuZ2FnZXJzTGlzdD8uWydUb3AgRW5nYWdlZCddPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWhlYWRlciBiZy1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRvcCBFbmdhZ2VkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Db3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBweS0yIGJvcmRlci1ib3R0b20gbXgtMCBsaXN0LXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdG9wIG9mIHRvcEVuZ2FnZXJzKClcIiAoY2xpY2spPVwib25DbGlja1Byb2R1Y3QodG9wKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ0b3A/LmltYWdlVXJsID8gdG9wLmltYWdlVXJsIDogJ3t7aW1nQ0ROfX1maXh0dXJlSW1hZ2UvaW1hZ2Vub3Rmb3VuZC5wbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJQcm9kdWN0XCIgY2xhc3M9XCJyb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFyayBzbWFsbFwiPnt7dG9wPy5CcmFuZG5hbWUgPz8gJyd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj57e3RvcD8ucHJvZHVjdEJyYW5kTmFtZSA/PyAnJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFya1wiPnt7dG9wPy5jb3VudCA/PyAwfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUG9wdXAoJ1RvcCBFbmdhZ2VkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIiAqbmdJZj1cImVuZ2FnZXJzTGlzdD8uWydOb24gRW5nYWdlZCddPy5sZW5ndGggfHxlbmdhZ2Vyc0xpc3Q/LlsnTGVhc3QgRW5nYWdlZCddPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXIgYmctaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5MZWFzdC9Ob24gRW5nYWdlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMiBib3JkZXItYm90dG9tICBteC0wIGxpc3QtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsZWFzdCBvZiBsZWFzdEVuZ2FnZXJzKClcIiAoY2xpY2spPVwib25DbGlja1Byb2R1Y3QobGVhc3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImxlYXN0Py5pbWFnZVVybCA/IGxlYXN0LmltYWdlVXJsIDogJ3t7aW1nQ0ROfX1maXh0dXJlSW1hZ2UvaW1hZ2Vub3Rmb3VuZC5wbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJQcm9kdWN0XCIgY2xhc3M9XCJyb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFyayBzbWFsbFwiPnt7bGVhc3QuQnJhbmRuYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7XCI+e3tsZWFzdD8ucHJvZHVjdEJyYW5kTmFtZSA/PyAnJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFya1wiPnt7bGVhc3Q/LmNvdW50ID8/IDB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwidGV4dC1wcmltYXJ5IHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Qb3B1cCgnbGVhc3RfTm9uX0VuZ2FnZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uIGlkPVwidGVtcGxhdGUtc3VtbWFyeS1za2VsZXRvblwiIFtjbGFzcy5kLW5vbmVdPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPiJdfQ==
706
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1hbmFseXRpY3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm9ncmFtL3BsYW5vLWFuYWx5dGljcy9maXh0dXJlLWFuYWx5dGljcy9maXh0dXJlLWFuYWx5dGljcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFub2dyYW0vcGxhbm8tYW5hbHl0aWNzL2ZpeHR1cmUtYW5hbHl0aWNzL2ZpeHR1cmUtYW5hbHl0aWNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHFCQUFxQixHQUN0QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7OztBQU9wRSxNQUFNLE9BQU8seUJBQXlCO0lBK0UxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBaEZELGNBQWMsQ0FBTTtJQUNwQixTQUFTLENBQU07SUFDZixTQUFTLENBQU07SUFDZixPQUFPLENBQU07SUFDYixRQUFRLENBQU07SUFFYixPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8s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Q0FBQyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWwyQlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsZ1pDcEN0Qyx5dDVDQWdmQTs7NEZENWNhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7Mk1BT3hCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFRUCxXQUFXO3NCQURWLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcbiAgU2hlbGZDb25maWcsXHJcbiAgU2VjdGlvbkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9hbmFseXRpY3MtcG9wdXAvYW5hbHl0aWNzLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBab25lQW5hbHl0aWNzQ29tcG9uZW50IH0gZnJvbSBcIi4uL3pvbmUtYW5hbHl0aWNzL3pvbmUtYW5hbHl0aWNzLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5pbXBvcnQge1xyXG4gIEZPT1RGQUxMX0hFQVRNQVBfQ09MT1JTLFxyXG4gIFBJQ0tVUF9IRUFUTUFQX0NPTE9SUyxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vZGF0YS9maXh0dXJlLXRlbXBsYXRlLmRhdGFcIjtcclxuaW1wb3J0IHsgbGlnaHRlbkNvbG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLWZpeHR1cmUtYW5hbHl0aWNzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maXh0dXJlLWFuYWx5dGljcy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vZml4dHVyZS1hbmFseXRpY3MuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpeHR1cmVBbmFseXRpY3NDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3lcclxue1xyXG4gIEBJbnB1dCgpIGZpeHR1cmVEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgZmxvb3JEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgc3RhcnREYXRlOiBhbnk7XHJcbiAgQElucHV0KCkgZW5kRGF0ZTogYW55O1xyXG4gIEBJbnB1dCgpIGRhdGFUeXBlOiBhbnk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYW5nZUZpeHR1cmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgZml4dHVyZU5hbWU6IHN0cmluZztcclxuICAgIHNoZWxmSWQ6IHN0cmluZztcclxuICAgIHpvbmU6IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiYW5hbHl0aWNzRml4dHVyZVJvb3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgZml4dHVyZVJvb3QhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzOiBhbnk7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcbiAgZml4dHVyZUVuZ2FnZW1lbnQ6IG51bWJlciA9IDA7XHJcbiAgZml4dHVyZVJhbmtCYWRnZUNvbG9ycyA9IHtcclxuICAgIGJnOiBcIiNFM0U4RjBcIixcclxuICAgIGJvcmRlcjogXCIjQ0JENUUxXCIsXHJcbiAgICBpbm5lckJnOiBcIiNGOEY5RkNcIixcclxuICAgIHRleHQ6IFwiIzQ3NTQ2N1wiLFxyXG4gIH07XHJcblxyXG4gIHpvbmVDb2xvciA9IHtcclxuICAgIHJpZ2h0OiB7XHJcbiAgICAgIGJnOiBcIiNmZmZmZmZcIixcclxuICAgICAgdGV4dDogXCIjMTJCNzZBXCIsXHJcbiAgICAgIGJvcmRlcjogXCIjMzJENTgzXCIsXHJcbiAgICAgIHByb2R1Y3RCb3JkZXI6IFwiIzEyQjc2QVwiLFxyXG4gICAgICBwcm9kdWN0Qmc6IFwiI0ZDRkNGRFwiLFxyXG4gICAgfSxcclxuICAgIHdyb25nOiB7XHJcbiAgICAgIGJnOiBcIiNmZmZmZmZcIixcclxuICAgICAgdGV4dDogXCIjRjA0NDM4XCIsXHJcbiAgICAgIGJvcmRlcjogXCIjOThhMmIzXCIsXHJcbiAgICAgIHByb2R1Y3RCb3JkZXI6IFwiI0YwNDQzOFwiLFxyXG4gICAgICBwcm9kdWN0Qmc6IFwiI0ZFQ0RDQVwiLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBzZWN0aW9uQnlab25lczoge1xyXG4gICAgem9uZTogc3RyaW5nO1xyXG4gICAgc2VjdGlvbjoge1xyXG4gICAgICBicmFuZHM6IHN0cmluZ1tdO1xyXG4gICAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuICAgICAgc2hlbHZlczogc3RyaW5nW107XHJcbiAgICAgIHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZClbXTtcclxuICAgICAgY2FwYWNpdHk6IG51bWJlcjtcclxuICAgICAgcGlja3VwQ291bnQ/OiBudW1iZXI7XHJcbiAgICAgIGhlYXRtYXA/OiB7XHJcbiAgICAgICAgYmc6IHN0cmluZztcclxuICAgICAgICBib3JkZXI6IHN0cmluZztcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfVtdID0gW107XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dWTXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgZW5nYWdlcnNMaXN0OiBhbnk7XHJcbiAgZml4dHVyZUZvb3RmYWxsOiBhbnk7XHJcblxyXG4gIHNoZWxmR3JvdXBlZERhdGE6IGFueTtcclxuXHJcbiAgYWxsRml4dHVyZXM6IGFueVtdID0gW107XHJcbiAgYWxsUHJvZHVjdHM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZURldGFpbHNcIl0/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldEZpeHR1cmVSYW5rQmFkZ2VDb2xvcnMoKTtcclxuICAgICAgdGhpcy5hbGxGaXh0dXJlcyA9IFtcclxuICAgICAgICAuLi50aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbi5mbGF0TWFwKChlOiBhbnkpID0+IGUuZml4dHVyZXMpLFxyXG4gICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgIHRoaXMuZ2V0Rml4dHVyZVNoZWxmRGV0YWlscyhjaGFuZ2VzW1wiZml4dHVyZURldGFpbHNcIl0uY3VycmVudFZhbHVlKSxcclxuICAgICAgICB0aGlzLmdldEVuZ2FnZXJzTGlzdCgpLFxyXG4gICAgICAgIHRoaXMuZ2V0Rml4dHVyZUZvb3RmYWxsKCksXHJcbiAgICAgIF0pO1xyXG5cclxuICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZUhlYXRNYXBEYXRhKCk7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maXh0dXJlRGV0YWlscz8udGFyZ2V0UHJvZHVjdCkge1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWNrUHJvZHVjdCh0aGlzLmZpeHR1cmVEZXRhaWxzLnRhcmdldFByb2R1Y3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjAwKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNCQ0luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNCQ0luaXRpYWxpemVkID0gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNWTUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWTUluaXRpYWxpemVkID0gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Rml4dHVyZVNoZWxmRGV0YWlscyhkYXRhOiBhbnkpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGRhdGE/Ll9pZCxcclxuICAgICAgcGxhbm9JZDogZGF0YT8ucGxhbm9JZCxcclxuICAgICAgZmxvb3JJZDogZGF0YT8uZmxvb3JJZCxcclxuICAgICAgY29tcGxpYW5jZTogdHJ1ZSxcclxuICAgICAgLi4uKHRoaXMuZml4dHVyZURldGFpbHM/LnJldmlzaW9uSWQgJiYge1xyXG4gICAgICAgIHJldmlzaW9uSWQ6IHRoaXMuZml4dHVyZURldGFpbHMucmV2aXNpb25JZCxcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFNoZWxmRGV0YWlscyhwYXlsb2FkKSxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIiAmJiByZXM/LmRhdGEpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB7XHJcbiAgICAgICAgICAuLi5yZXM/LmRhdGEsXHJcbiAgICAgICAgICBzaGVsZkNvbmZpZzogcmVzPy5kYXRhPy5zaGVsdmVzID8/IFtdLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5zaGVsZkNvbmZpZyA9XHJcbiAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuc2hlbGZDb25maWcubWFwKChzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHMuc2hlbGZUeXBlICE9PSBcInNoZWxmXCIgJiYgcy5wcm9kdWN0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcy5kaXN0cmlidXRlZFJvd3MgPSB0aGlzLmRpc3RyaWJ1dGVSb3VuZFJvYmluKFxyXG4gICAgICAgICAgICAgICAgcy5wcm9kdWN0cyxcclxuICAgICAgICAgICAgICAgIHMudHJheVJvd3MsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcztcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBhbGxQcm9kdWN0cyA9IChcclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWcgPz8gW11cclxuICAgICAgICApLmZsYXRNYXAoKHM6IGFueSkgPT4gcy5wcm9kdWN0cyA/PyBbXSk7XHJcblxyXG4gICAgICAgIGFsbFByb2R1Y3RzLmZvckVhY2goKHA6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXA/LnByb2R1Y3RJZCkge1xyXG4gICAgICAgICAgICBwW1wicHJvZHVjdElkXCJdID0gaTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldEZpeHR1cmVTaGVsZkRldGFpbHMgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlSGVhdE1hcERhdGEoKSB7XHJcbiAgICBjb25zdCB0b3BNYXNraW5nUG9zID0gMTtcclxuICAgIGNvbnN0IGJvdHRvbVNsYW5kZXJQb3MgPVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMudm1Db25maWcgPVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5maWx0ZXIoXHJcbiAgICAgICAgKHZtOiBhbnkpID0+XHJcbiAgICAgICAgICB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIgJiZcclxuICAgICAgICAgIHZtLnlab25lID09PSBcInN0cmV0Y2hcIiAmJlxyXG4gICAgICAgICAgdm0uc3RhcnRZUG9zaXRpb24gPT09IHZtLmVuZFlQb3NpdGlvbiAmJlxyXG4gICAgICAgICAgW3RvcE1hc2tpbmdQb3MsIGJvdHRvbVNsYW5kZXJQb3NdLmluY2x1ZGVzKHZtLnN0YXJ0WVBvc2l0aW9uKSxcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLnNoZWxmR3JvdXBlZERhdGEgPSB0aGlzLmJ1aWxkU2hlbGZNYXAoKTtcclxuICB9XHJcblxyXG4gIHNldEZpeHR1cmVSYW5rQmFkZ2VDb2xvcnMoKSB7XHJcbiAgICBjb25zdCByYW5rID0gdGhpcy5maXh0dXJlRGV0YWlscz8uZm9vdGZhbGxSYW5rO1xyXG4gICAgY29uc3QgZmFsbGJhY2tIZWF0bWFwID1cclxuICAgICAgcmFuayA+IDBcclxuICAgICAgICA/IEZPT1RGQUxMX0hFQVRNQVBfQ09MT1JTW1xyXG4gICAgICAgICAgICBNYXRoLm1pbihyYW5rIC0gMSwgRk9PVEZBTExfSEVBVE1BUF9DT0xPUlMubGVuZ3RoIC0gMSlcclxuICAgICAgICAgIF1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgYmc6IFwiI0UzRThGMFwiLFxyXG4gICAgICAgICAgICBib3JkZXI6IFwiI0NCRDVFMVwiLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWF0bWFwID0gdGhpcy5maXh0dXJlRGV0YWlscz8uaGVhdG1hcENvbG9yID8/IGZhbGxiYWNrSGVhdG1hcDtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVSYW5rQmFkZ2VDb2xvcnMgPSB7XHJcbiAgICAgIGJnOiBoZWF0bWFwPy5iZyA/PyBmYWxsYmFja0hlYXRtYXAuYmcsXHJcbiAgICAgIGJvcmRlcjogaGVhdG1hcD8uYm9yZGVyID8/IGZhbGxiYWNrSGVhdG1hcC5ib3JkZXIsXHJcbiAgICAgIGlubmVyQmc6IGxpZ2h0ZW5Db2xvcihoZWF0bWFwPy5iZyA/PyBmYWxsYmFja0hlYXRtYXAuYmcsIDAuNzIpLFxyXG4gICAgICB0ZXh0OiBoZWF0bWFwPy5ib3JkZXIgPz8gZmFsbGJhY2tIZWF0bWFwLmJvcmRlcixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBidWlsZFNoZWxmTWFwKCkge1xyXG4gICAgY29uc3Qgc2hlbGZNYXA6IGFueSA9IHt9O1xyXG5cclxuICAgIFtcIlRvcCBFbmdhZ2VkXCIsIFwiTGVhc3QgRW5nYWdlZFwiLCBcIk5vbiBFbmdhZ2VkXCJdLmZvckVhY2goKGVuZ2FnZXJLZXkpID0+IHtcclxuICAgICAgY29uc3QgcHJvZHVjdHMgPSB0aGlzLmVuZ2FnZXJzTGlzdD8uW2VuZ2FnZXJLZXldIHx8IFtdO1xyXG5cclxuICAgICAgKHByb2R1Y3RzIHx8IFtdKS5mb3JFYWNoKChwcm9kdWN0OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBzaGVsZiA9IHByb2R1Y3Q/LnNoZWxmTnVtYmVyIHx8IFwiVW5rbm93blwiO1xyXG5cclxuICAgICAgICBpZiAoIXNoZWxmTWFwW3NoZWxmXSkge1xyXG4gICAgICAgICAgc2hlbGZNYXBbc2hlbGZdID0ge1xyXG4gICAgICAgICAgICBwcm9kdWN0czogW10sXHJcbiAgICAgICAgICAgIHRvdGFsUGlja3VwQ291bnQ6IDAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2hlbGZNYXBbc2hlbGZdLnByb2R1Y3RzLnB1c2gocHJvZHVjdCk7XHJcbiAgICAgICAgc2hlbGZNYXBbc2hlbGZdLnRvdGFsUGlja3VwQ291bnQgKz0gcHJvZHVjdD8uY291bnQgfHwgMDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc2hlbGZNYXA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFbmdhZ2Vyc0xpc3QoKSB7XHJcbiAgICB0aGlzLmVuZ2FnZXJzTGlzdCA9IG51bGw7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgZnJvbV9kYXRlOiB0aGlzLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9fZGF0ZTogdGhpcy5lbmREYXRlLFxyXG4gICAgICBmaXh0dXJlSWQ6IHRoaXMuZml4dHVyZURldGFpbHMuX2lkLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAgICAgLmdldFN0b3JlRml4dHVyZUVuZ2FnZXJzKHBheWxvYWQpXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICBjb25zdCB7IGZpeHR1cmVFbmdhZ2VtZW50ID0gMCwgLi4uZW5nYWdlcnNMaXN0IH0gPSByZXM/LmRhdGEgfHwge307XHJcblxyXG4gICAgICAgIHRoaXMuZml4dHVyZUVuZ2FnZW1lbnQgPSBmaXh0dXJlRW5nYWdlbWVudDtcclxuICAgICAgICB0aGlzLmVuZ2FnZXJzTGlzdCA9IGVuZ2FnZXJzTGlzdDtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldEVuZ2FnZXJzTGlzdCBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Rml4dHVyZUZvb3RmYWxsKCkge1xyXG4gICAgdGhpcy5maXh0dXJlRm9vdGZhbGwgPSBudWxsO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IFt0aGlzLmZsb29yRGF0YS5zdG9yZUlkXSxcclxuICAgICAgem9uZTogYEZpeHR1cmUgJHt0aGlzLmZpeHR1cmVEZXRhaWxzPy5maXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgIGRhdGVUeXBlOiB0aGlzLmRhdGFUeXBlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAgICAgLmdldFN0b3JlRml4dHVyZUZvb3RmYWxsKHBheWxvYWQpXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVGb290ZmFsbCA9IHJlcz8uZGF0YT8uY2FyZCB8fCB7fTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldEZpeHR1cmVGb290ZmFsbCBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9wRW5nYWdlcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmdhZ2Vyc0xpc3Q/LltcIlRvcCBFbmdhZ2VkXCJdXHJcbiAgICAgID8uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIuY291bnQgLSBhLmNvdW50KVxyXG4gICAgICA/LnNsaWNlKDAsIDMpO1xyXG4gIH1cclxuXHJcbiAgbGVhc3RFbmdhZ2VycygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC4uLih0aGlzLmVuZ2FnZXJzTGlzdD8uW1wiTm9uIEVuZ2FnZWRcIl0gfHwgW10pLFxyXG4gICAgICAuLi4odGhpcy5lbmdhZ2Vyc0xpc3Q/LltcIkxlYXN0IEVuZ2FnZWRcIl0gfHwgW10pLnNvcnQoXHJcbiAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PiBhLmNvdW50IC0gYi5jb3VudCxcclxuICAgICAgKSxcclxuICAgIF0/LnNsaWNlKDAsIDMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgYm9keUVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmZpeHR1cmVSb290Py5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFwiI2JvZHktYmxvY2stc3VtXCIpID8/IG51bGxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpIHtcclxuICAgIGNvbnN0IHZpZXdQb3J0ID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWFkZXItYmxvY2tcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBmb290ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZvb3Rlci1ibG9ja1wiKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBoZWFkZXIuc3R5bGUud2lkdGggPSBgJHtib2R5V2lkdGh9cHhgO1xyXG4gICAgZm9vdGVyLnN0eWxlLndpZHRoID0gYCR7Ym9keVdpZHRofXB4YDtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5mb3JFYWNoKChlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBsZXQgc3RhcnRTaGVsZiA9IGU/LnN0YXJ0WVBvc2l0aW9uID8/IDE7XHJcblxyXG4gICAgICBsZXQgZW5kU2hlbGYgPVxyXG4gICAgICAgIGU/LmVuZFlQb3NpdGlvbiA/P1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/P1xyXG4gICAgICAgIDE7XHJcblxyXG4gICAgICBjb25zdCB2bSA9IHZpZXdQb3J0LnF1ZXJ5U2VsZWN0b3IoYCN2bSR7aX1gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKCF2bSkgcmV0dXJuO1xyXG5cclxuICAgICAgbGV0IHggPSAwO1xyXG4gICAgICBsZXQgeSA9IDA7XHJcblxyXG4gICAgICBsZXQgeVN0YXJ0ID0gMDtcclxuICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzdGFydFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcblxyXG4gICAgICAgIHlTdGFydCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHBsYWNlbWVudEhlaWdodCA9IDA7XHJcbiAgICAgIGxldCBwbGFjZW1lbnRXaWR0aCA9IGJvZHlXaWR0aDtcclxuXHJcbiAgICAgIGZvciAobGV0IGsgPSBzdGFydFNoZWxmOyBrIDw9IGVuZFNoZWxmOyBrKyspIHtcclxuICAgICAgICBjb25zdCBzID0gZ2V0U2hlbGZEaXYoayk7XHJcbiAgICAgICAgaWYgKCFzKSByZXR1cm47XHJcbiAgICAgICAgcGxhY2VtZW50SGVpZ2h0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZGVmYXVsdFcgPSBwbGFjZW1lbnRXaWR0aCAvIDM7XHJcbiAgICAgIGxldCBkZWZhdWx0SCA9IHBsYWNlbWVudEhlaWdodCAvIDM7XHJcblxyXG4gICAgICBsZXQgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgbGV0IGhlaWdodCA9IGRlZmF1bHRIO1xyXG5cclxuICAgICAgc3dpdGNoIChlPy54Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gYm9keVdpZHRoIC0gd2lkdGg7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IChib2R5V2lkdGggLSB3aWR0aCkgLyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIHdpZHRoID0gYm9keVdpZHRoO1xyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChlPy55Wm9uZSkge1xyXG4gICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gKHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCkgLyAyICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHBsYWNlbWVudEhlaWdodCAtIGhlaWdodCArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZtLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xyXG4gICAgICB2bS5zdHlsZS5oZWlnaHQgPSBgICR7aGVpZ2h0fXB4YDtcclxuICAgICAgdm0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZ2V0U2hlbGZEaXYoazogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuICh2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3NoZWxmJHtrfWApIHx8XHJcbiAgICAgICAgICB2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3RyYXkke2t9YCkgfHxcclxuICAgICAgICAgIHZpZXdQb3J0Py5xdWVyeVNlbGVjdG9yKGAjdm1vbmx5JHtrfWApKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2hlbGZDb2xvcnMoKSB7XHJcbiAgICBjb25zdCBib2RpZXMgPSB0aGlzLmJvZHlFbDtcclxuICAgIGlmICghYm9kaWVzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBib2R5V2lkdGggPSBib2RpZXMub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgY29uc3QgYm9keUNoaWxkcmVuID0gQXJyYXkuZnJvbShib2RpZXM/LmNoaWxkcmVuID8/IFtdKSBhcyBIVE1MRWxlbWVudFtdO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmRGl2cyA9IGJvZHlDaGlsZHJlblxyXG4gICAgICAubWFwKChkaXYpID0+IGRpdiBhcyBIVE1MRWxlbWVudClcclxuICAgICAgLmZpbHRlcigoZCkgPT4gZD8uaWQuaW5jbHVkZXMoXCJzdW1TaGVsZkNvbnRhaW5lclwiKSk7XHJcblxyXG4gICAgaWYgKCFzaGVsZkRpdnMpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBhZGp1c3QgPSAwO1xyXG4gICAgc3dpdGNoICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwpIHtcclxuICAgICAgY2FzZSBcIkwxXCI6IC8vZml4dHVyZVxyXG4gICAgICAgIC8vIGNvbnN0IGFsbFByb2R1Y3RzID0gKFxyXG4gICAgICAgIC8vICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsdmVzID8/IFtdXHJcbiAgICAgICAgLy8gKS5mbGF0TWFwKChzOiBhbnkpID0+IHMucHJvZHVjdHMgPz8gW10pO1xyXG5cclxuICAgICAgICAvLyBjb25zdCBpc0ltcHJvcGVyID1cclxuICAgICAgICAvLyAgIGFsbFByb2R1Y3RzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgLy8gICAgID8gdHJ1ZVxyXG4gICAgICAgIC8vICAgICA6IGFsbFByb2R1Y3RzLnNvbWUoXHJcbiAgICAgICAgLy8gICAgICAgICAocDogYW55KSA9PlxyXG4gICAgICAgIC8vICAgICAgICAgICBwLnN0YXR1cyA9PT0gXCJtaXNwbGFjZWRcIiB8fFxyXG4gICAgICAgIC8vICAgICAgICAgICBwLnN0YXR1cyA9PT0gXCJtaXNzaW5nXCIgfHxcclxuICAgICAgICAvLyAgICAgICAgICAgcC5zdGF0dXMgPT09IFwiXCJcclxuICAgICAgICAvLyAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYgKGQpIHtcclxuICAgICAgICAvLyAgICAgY29uc3QgYmxvY2tEaXYgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuYmxvY2tcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgLy8gICAgIGlmIChibG9ja0Rpdikge1xyXG4gICAgICAgIC8vICAgICAgIGJsb2NrRGl2LnN0eWxlLmJvcmRlckNvbG9yID0gaXNJbXByb3BlclxyXG4gICAgICAgIC8vICAgICAgICAgPyB0aGlzLnpvbmVDb2xvci53cm9uZy5ib3JkZXJcclxuICAgICAgICAvLyAgICAgICAgIDogdGhpcy56b25lQ29sb3IucmlnaHQuYm9yZGVyO1xyXG4gICAgICAgIC8vICAgICAgIGJsb2NrRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGlzSW1wcm9wZXJcclxuICAgICAgICAvLyAgICAgICAgID8gdGhpcy56b25lQ29sb3Iud3JvbmcuYmdcclxuICAgICAgICAvLyAgICAgICAgIDogdGhpcy56b25lQ29sb3IucmlnaHQuYmc7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyBjb25zdCBsMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZml4dHVyZS1sZXZlbFwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAvLyBpZiAobDEpIHtcclxuICAgICAgICAvLyAgIGNvbnN0IGJjID0gbDEucXVlcnlTZWxlY3RvcihcIi5icmFuZC1jYXRlZ29yeVwiKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy8gICBpZiAoYmMpIHtcclxuICAgICAgICAvLyAgICAgaWYgKGlzSW1wcm9wZXIpIHtcclxuICAgICAgICAvLyAgICAgICBiYy5jbGFzc0xpc3QuYWRkKFwid3JvbmdcIik7XHJcbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgICAgYmMuY2xhc3NMaXN0LnJlbW92ZShcIndyb25nXCIpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMM1wiOiAvL3NlY3Rpb25cclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsdmVzID0gc2hlbGZEaXZzXHJcbiAgICAgICAgICAgIC5tYXAoKGRpdikgPT5cclxuICAgICAgICAgICAgICBkaXYubGFzdEVsZW1lbnRDaGlsZD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImRpdlwiXHJcbiAgICAgICAgICAgICAgICA/IChkaXYubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudClcclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbHZlcyk7XHJcbiAgICAgICAgICB0aGlzLnBhdGNoWm9uZVBpY2t1cENvdW50cygpO1xyXG4gICAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZVpvbmVIZWF0bWFwQ29sb3JzKCk7XHJcbiAgICAgICAgICB0aGlzLmFzc2lnbkhlYXRtYXBGcm9tUGFsZXR0ZSgpO1xyXG4gICAgICAgICAgdGhpcy5hcHBseVpvbmVIZWF0bWFwRXZlcnl3aGVyZSgpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25BcnJheSA9IHRoaXMuZ3JvdXBTaGVsdmVzQnlab25lKFxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnID8/IFtdLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgIHNlY3Rpb25BcnJheS5mb3JFYWNoKChzZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsZklkcyA9XHJcbiAgICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/XHJcbiAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgIGFsbFNlY3Rpb25TaGVsdmVzLnB1c2goLi4uc2hlbGZJZHMpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNEaXZzID0gc2hlbHZlcy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgc2hlbGZJZHM/LmluY2x1ZGVzKGl0ZW0/LmlkID8/IFwiXCIpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2UgPSB0aGlzLnNlY3Rpb25CeVpvbmVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgKHMpID0+IHMuem9uZSA9PT0gc2Uuem9uZSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNlY0RpdnMuZm9yRWFjaCgoZCwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkKSB7XHJcbiAgICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGxpZ2h0ZW5Db2xvcihcclxuICAgICAgICAgICAgICAgICAgY3VycmVudFNlPy5zZWN0aW9uLmhlYXRtYXA/LmJnID8/IFwiI2ZmZlwiLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyUmlnaHQgPSBgMS4ycHggc29saWRgO1xyXG4gICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJMZWZ0ID0gYDEuMnB4IHNvbGlkYDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjRGl2cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlciA9IGAxLjJweCBzb2xpZGA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY0RpdnMubGVuZ3RoID4gMSAmJiBzZWNEaXZzLmxlbmd0aCA8PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlclRvcCA9IGAxcHggc29saWRgO1xyXG4gICAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyQm90dG9tID0gYDAuNXB4IGRvdHRlZGA7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PSBzZWNEaXZzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlckJvdHRvbSA9IGAxcHggc29saWRgO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJUb3AgPSBgMXB4IHNvbGlkYDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IHNlY0RpdnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGQuc3R5bGUuYm9yZGVyQm90dG9tID0gYDFweCBzb2xpZGA7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZC5zdHlsZS5ib3JkZXJUb3AgPSBgMC41cHggZG90dGVkYDtcclxuICAgICAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlckJvdHRvbSA9IGAwLjVweCBkb3R0ZWRgO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkLnN0eWxlLmJvcmRlckNvbG9yID0gYCM5OGEyYjNgO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCB1bmFzc2lnbmVkU2hlbHZlcyA9IHNoZWxmRGl2cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChpdGVtKSA9PiAhYWxsU2VjdGlvblNoZWx2ZXMuaW5jbHVkZXMoaXRlbS5pZCksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdW5hc3NpZ25lZFNoZWx2ZXMuZm9yRWFjaCgoZCkgPT4gKGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCJ3aGl0ZVwiKSk7XHJcblxyXG4gICAgICAgICAgbGV0IHNlY3Rpb25Hcm91cEhlaWdodCA9IDA7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uQnlab25lcy5mb3JFYWNoKChzeiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uSGVpZ2h0ID0gc3ouc2VjdGlvbi5zaGVsZkRpdnMucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgKGgsIGQpID0+IGggKyAoZD8ub2Zmc2V0SGVpZ2h0ID8/IDApLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGJjID0gYm9kaWVzLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxyXG4gICAgICAgICAgICAgICAgYCNicmFuZC1jYXRlZ29yeSR7aX1gLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChiYykge1xyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gYm9keVdpZHRoICsgMTY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1kgPVxyXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFNlY3Rpb25IZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMiArXHJcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0ICs9IGN1cnJlbnRTZWN0aW9uSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZUJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgICAgICAgIFwic3RvcmFnZS1ib3gtem9uZVwiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWxpZ24gPSBib2R5V2lkdGggKyAxNjtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdG9yZUJveCkge1xyXG4gICAgICAgICAgICAgIHN0b3JlQm94LnN0eWxlLmxlZnQgPSBgJHthbGlnbn1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDJcIjogLy9zaGVsZlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkaXYsIGkpID0+IHtcclxuICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuem9uZUNvbG9yLnJpZ2h0LmJnO1xyXG4gICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gYDEuNHB4IHNvbGlkICR7dGhpcy56b25lQ29sb3IucmlnaHQuYm9yZGVyfWA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy56b25lQ29sb3IucmlnaHQuYm9yZGVyO1xyXG4gICAgICAgICAgICBiYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnpvbmVDb2xvci5yaWdodC5iZztcclxuICAgICAgICAgICAgYmMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2JjWCArIGFkanVzdH1weCwgJHtiY1l9cHgpYDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkw0XCI6IC8vc3BvdFxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZCkgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnpvbmVDb2xvci5yaWdodC5iZztcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbClbXSkge1xyXG4gICAgY29uc3QgbmV3U2VjdGlvbkJ5Wm9uZXMgPSBbXTtcclxuICAgIGxldCBwWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWcgPz8gW10pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IHNoZWxmRGl2ID0gc2hlbGZEaXZzLmZpbmQoKGQpID0+IGQ/LmlkID09PSBzaGVsZklkKTtcclxuXHJcbiAgICAgIGlmICh6b25lID09PSBcIlwiKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmQ2FwYWNpdHkgPVxyXG4gICAgICAgIHMuc2hlbGZUeXBlID09PSBcInRyYXlcIlxyXG4gICAgICAgICAgPyBzLnByb2R1Y3RQZXJTaGVsZiAqIHMudHJheVJvd3NcclxuICAgICAgICAgIDogcy5wcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICBpZiAoem9uZSAhPT0gcFpvbmUpIHtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lcy5wdXNoKHtcclxuICAgICAgICAgIHpvbmUsXHJcbiAgICAgICAgICBzZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIGJyYW5kczogcy5wcm9kdWN0QnJhbmROYW1lID8/IFtdLFxyXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBzLnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICAgICAgc2hlbHZlczogW3NoZWxmSWRdLFxyXG4gICAgICAgICAgICBzaGVsZkRpdnM6IFtzaGVsZkRpdl0sXHJcbiAgICAgICAgICAgIGNhcGFjaXR5OiBzaGVsZkNhcGFjaXR5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwWm9uZSA9IHpvbmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IG5ld1NlY3Rpb25CeVpvbmVzW25ld1NlY3Rpb25CeVpvbmVzLmxlbmd0aCAtIDFdLnNlY3Rpb247XHJcblxyXG4gICAgICAgIHNlY3Rpb24uc2hlbHZlcy5wdXNoKHNoZWxmSWQpO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbGZEaXZzLnB1c2goc2hlbGZEaXYpO1xyXG4gICAgICAgIHNlY3Rpb24uY2FwYWNpdHkgKz0gc2hlbGZDYXBhY2l0eTtcclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2hab25lUGlja3VwQ291bnRzKCkge1xyXG4gICAgY29uc3Qgc2hlbGZNYXAgPSB0aGlzLnNoZWxmR3JvdXBlZERhdGEgfHwge307XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcy5mb3JFYWNoKCh6b25lT2JqOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRvdGFsID0gMDtcclxuXHJcbiAgICAgIHpvbmVPYmouc2VjdGlvbi5zaGVsdmVzLmZvckVhY2goKHNoZWxmSWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTnVtYmVyID0gc2hlbGZJZC5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIHRvdGFsICs9IHNoZWxmTWFwPy5bc2hlbGZOdW1iZXJdPy50b3RhbFBpY2t1cENvdW50IHx8IDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgem9uZU9iai5zZWN0aW9uLnBpY2t1cENvdW50ID0gdG90YWw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzc2lnbkhlYXRtYXBGcm9tUGFsZXR0ZSgpIHtcclxuICAgIGlmICghdGhpcy5zZWN0aW9uQnlab25lcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY291bnRzID0gdGhpcy5zZWN0aW9uQnlab25lcy5tYXAoKHo6IGFueSkgPT4gei5zZWN0aW9uLnBpY2t1cENvdW50KTtcclxuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmNvdW50cyk7XHJcbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5jb3VudHMpO1xyXG4gICAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gfHwgMTtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb25CeVpvbmVzLmZvckVhY2goKHpvbmVPYmo6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSB6b25lT2JqLnNlY3Rpb24ucGlja3VwQ291bnQ7XHJcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAodmFsIC0gbWluKSAvIHJhbmdlO1xyXG5cclxuICAgICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICgxIC0gbm9ybWFsaXplZCkgKiAoUElDS1VQX0hFQVRNQVBfQ09MT1JTLmxlbmd0aCAtIDEpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgem9uZU9iai5zZWN0aW9uLmhlYXRtYXAgPSBQSUNLVVBfSEVBVE1BUF9DT0xPUlNbaW5kZXhdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhcHBseVpvbmVIZWF0bWFwRXZlcnl3aGVyZSgpIHtcclxuICAgIGlmICghdGhpcy5zZWN0aW9uQnlab25lcykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoem9uZU9iajogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGhlYXQgPSB6b25lT2JqLnNlY3Rpb24uaGVhdG1hcDtcclxuXHJcbiAgICAgIHpvbmVPYmouc2VjdGlvbi5zaGVsdmVzLmZvckVhY2goKHNoZWxmSWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNoZWxmTnVtYmVyID0gc2hlbGZJZC5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0gQVBQTFkgVE8gU0hFTEYgQ09ORklHIC0tLS0tLS0tLS1cclxuICAgICAgICBjb25zdCBzaGVsZkNvbmZpZyA9IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LmZpbmQoXHJcbiAgICAgICAgICAoczogYW55KSA9PiBTdHJpbmcocy5zaGVsZk51bWJlcikgPT09IHNoZWxmTnVtYmVyLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChzaGVsZkNvbmZpZykge1xyXG4gICAgICAgICAgc2hlbGZDb25maWcuaGVhdG1hcCA9IGhlYXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0tLS0tLS0tIEFQUExZIFRPIFBST0RVQ1RTIC0tLS0tLS0tLS1cclxuICAgICAgICBjb25zdCBzaGVsZiA9IHRoaXMuc2hlbGZHcm91cGVkRGF0YT8uW3NoZWxmTnVtYmVyXTtcclxuICAgICAgICBpZiAoc2hlbGY/LnByb2R1Y3RzKSB7XHJcbiAgICAgICAgICBzaGVsZi5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcHJvZHVjdC5oZWF0bWFwID0gaGVhdDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGdyb3VwU2hlbHZlc0J5Wm9uZShpbnB1dDogU2hlbGZDb25maWdbXSk6IFNlY3Rpb25Db25maWdbXSB7XHJcbiAgICBjb25zdCB6b25lTWFwOiB7IFt6b25lOiBzdHJpbmddOiBTZWN0aW9uQ29uZmlnIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IGl0ZW0/LnpvbmUgPz8gXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke2l0ZW0uc2hlbGZUeXBlfSAke2l0ZW0uc2hlbGZOdW1iZXJ9YDtcclxuXHJcbiAgICAgIGlmICghem9uZU1hcFt6b25lXSkge1xyXG4gICAgICAgIHpvbmVNYXBbem9uZV0gPSB7XHJcbiAgICAgICAgICBzaGVsdmVzOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RCcmFuZE5hbWVcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB6b25lTWFwW3pvbmVdPy5zaGVsdmVzPy5wdXNoKHNoZWxmTGFiZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHpvbmVNYXApO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWN0aW9uQ29uZmlnVG9TaGVsdmVzKHNlY3Rpb25zOiBTZWN0aW9uQ29uZmlnW10pOiBTaGVsZkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHNlY3Rpb25NYXAgPSBuZXcgTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIFBpY2s8U2VjdGlvbkNvbmZpZywgXCJ6b25lXCIgfCBcInByb2R1Y3RCcmFuZE5hbWVcIiB8IFwicHJvZHVjdENhdGVnb3J5XCI+XHJcbiAgICA+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGZMYWJlbCBvZiBzZWN0aW9uLnNoZWx2ZXMhKSB7XHJcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2hlbGZMYWJlbCwge1xyXG4gICAgICAgICAgem9uZTogc2VjdGlvbi56b25lLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogc2VjdGlvbi5wcm9kdWN0QnJhbmROYW1lLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBzZWN0aW9uLnByb2R1Y3RDYXRlZ29yeSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwcGx5IG92ZXJyaWRlcyB0byBtYXRjaGluZyBzaGVsdmVzXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5tYXAoKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7c2hlbGYuc2hlbGZUeXBlfSAke3NoZWxmLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBzZWN0aW9uTWFwLmdldChzaGVsZkxhYmVsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnNoZWxmLFxyXG4gICAgICAgICAgem9uZTogb3ZlcnJpZGU/LnpvbmUgfHwgXCJcIixcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IG92ZXJyaWRlPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBvdmVycmlkZT8ucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pID8/IFtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3BlblpvbmVMZXZlbFByb2R1Y3RNb2RhbCh6b25lRGF0YTogYW55LCBsZXZlbDogc3RyaW5nLCBwcm9kdWN0PzogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICB6b25lOiB6b25lRGF0YS56b25lLFxyXG4gICAgICBzaGVsdmVzOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuc2hlbGZDb25maWcuZmlsdGVyKFxyXG4gICAgICAgIChzOiBhbnkpID0+IHMuem9uZSA9PT0gem9uZURhdGEuem9uZSAmJiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiLFxyXG4gICAgICApLFxyXG4gICAgICBoZWF0bWFwOiB6b25lRGF0YS5zZWN0aW9uLmhlYXRtYXAsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKFpvbmVBbmFseXRpY3NDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcIm1lcmNoLWNvbXBsaWFuY2UtbW9kYWxcIixcclxuICAgIH0pO1xyXG5cclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnpvbmVEYXRhID0gZGF0YTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmxldmVsID0gbGV2ZWw7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZWxlY3RlZFByb2R1Y3QgPSBwcm9kdWN0O1xyXG5cclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlLmVtaXQocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaXN0cmlidXRlUm91bmRSb2Jpbihwcm9kdWN0czogYW55LCB0cmF5Um93czogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRyYXlSb3dzIH0sICgpID0+IFtdKTtcclxuXHJcbiAgICBwcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgdHJheUluZGV4ID0gaW5kZXggJSB0cmF5Um93cztcclxuICAgICAgcmVzdWx0W3RyYXlJbmRleF0ucHVzaChwcm9kdWN0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2xvc2UoKSB7XHJcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdChcIlwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tQcm9kdWN0KHByb2R1Y3Q6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJAQCB+IHByb2R1Y3Q6XCIsIHByb2R1Y3QpO1xyXG5cclxuICAgIGlmIChwcm9kdWN0KSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAoczogYW55KSA9PiBzLnNoZWxmTnVtYmVyID09PSBOdW1iZXIocHJvZHVjdD8uc2hlbGZOdW1iZXIgPz8gXCIyXCIpLFxyXG4gICAgICApLnpvbmU7XHJcbiAgICAgIGNvbnN0IHByb2R1Y3Rab25lID0gdGhpcy5zZWN0aW9uQnlab25lcy5maW5kKChzZWMpID0+IHNlYy56b25lID09PSB6b25lKTtcclxuXHJcbiAgICAgIHRoaXMub3BlblpvbmVMZXZlbFByb2R1Y3RNb2RhbChwcm9kdWN0Wm9uZSwgXCJzZWN0aW9uXCIsIHByb2R1Y3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblBvcHVwKHR5cGU6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQW5hbHl0aWNzUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcIm1lcmNoLWNvbXBsaWFuY2UtbW9kYWxcIixcclxuICAgICAgc2l6ZTogXCJsZ1wiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHRoaXMuZW5nYWdlcnNMaXN0O1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMub25DbGlja1Byb2R1Y3QocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiAjYW5hbHl0aWNzRml4dHVyZVJvb3QgaWQ9XCJmaXh0dXJlLWFuYWx5dGljLWRldGFpbHNcIiBjbGFzcz1cInNjYWxlLWRvd25cIiBbY2xhc3MuZC1ub25lXT1cImlzUGFnZUxvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZXJvLWJsb2NrXCI+XHJcbiAgICAgICAgPHN2ZyAoY2xpY2spPVwib25DbGlja0Nsb3NlKClcIiBjbGFzcz1cImNsb3NlLWljb25cIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNkwxOCAxOFwiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZXJvLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZXJvLXJhbmtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFuay1iYWRnZVwiIFtzdHlsZS4tLXJhbmstYmddPVwiZml4dHVyZVJhbmtCYWRnZUNvbG9ycy5iZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLXJhbmstYm9yZGVyXT1cImZpeHR1cmVSYW5rQmFkZ2VDb2xvcnMuYm9yZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tcmFuay1pbm5lci1iZ109XCJmaXh0dXJlUmFua0JhZGdlQ29sb3JzLmlubmVyQmdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1yYW5rLXRleHRdPVwiZml4dHVyZVJhbmtCYWRnZUNvbG9ycy50ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmFuay1oYXNoXCI+Izwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYW5rLW51bVwiPnt7IGZpeHR1cmVEZXRhaWxzPy5mb290ZmFsbFJhbmsgPz8gMCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZXJvLXJhbmstY29weVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDE+UmFuayBiYXNlZCBvbiBGb290ZmFsbDwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVyby1yYW5rLW1ldGFcIj5PdXQgb2Yge3thbGxGaXh0dXJlcy5sZW5ndGh9fSBmaXh0dXJlczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJoZXJvLWNvbXBsaWFuY2UgbS0wXCI+XG4gICAgICAgICAgICAgICAgTWVyY2ggY29tcGxpYW5jZTogPGI+e3tmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlQ29tcGxpYW5jZX19JTwvYj5cbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVyby1tZXRhXCI+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2I+IDxzcGFuPiYjODIyNjs8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICB7e2ZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVDYXRlZ29yeX19IDxzcGFuPiYjODIyNjs8L3NwYW4+XG4gICAgICAgICAgICAgICAge3tmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGgudmFsdWV9fXt7Zml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoLnVuaXR9fTxzcGFuPiYjODIyNjs8L3NwYW4+XG4gICAgICAgICAgICAgICAge3tmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5hY3R1YWxTaGVsdmVzPy5sZW5ndGh9fSBTaGVsdmVzXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBtYi0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+Rm9vdGZhbGw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1iLTFcIj57e2ZpeHR1cmVGb290ZmFsbD8uem9uZVRvdGFsPy5jb3VudH19PC9oMj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIHNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZpeHR1cmVGb290ZmFsbD8uem9uZVRvdGFsPy5QcmV2aW91c1ZhcmlhdGlvbiA/ICd0ZXh0LXN1Y2Nlc3MnIDogJ3RleHQtZGFuZ2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEzIDEzXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpeHR1cmVGb290ZmFsbD8uem9uZVRvdGFsPy5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LnpvbmVUb3RhbD8uUHJldmlvdXNWYXJpYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjMxOTggMy4yMTM4Nkw3LjIzMTE3IDguMzAyNDZMNC41NTI5NiA1LjYyNDI1TDAuNTM1NjQzIDkuNjQxNTdNMTIuMzE5OCAzLjIxMzg2SDkuMTA1OTJNMTIuMzE5OCAzLjIxMzg2VjYuNDI3NzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4yMDUyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7Zml4dHVyZUZvb3RmYWxsPy56b25lVG90YWw/LlByZXZpb3VzRGF0YX19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPnZzIFByZXZpb3VzIGRheTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiICpuZ0lmPVwiZml4dHVyZUZvb3RmYWxsPy5jb252ZXJzaW9uQ291bnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1zZW1pYm9sZFwiPkF2ZyBEd2VsbCBUaW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0xXCI+e3tmaXh0dXJlRm9vdGZhbGw/LmR3ZWxsVGltZT8uY291bnR9fSBtaW5zPC9oMj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyZ2FwLTEgc21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4dHVyZUZvb3RmYWxsPy5kd2VsbFRpbWU/LlByZXZpb3VzVmFyaWF0aW9uID8gJ3RleHQtc3VjY2VzcycgOiAndGV4dC1kYW5nZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZml4dHVyZUZvb3RmYWxsPy5kd2VsbFRpbWU/LlByZXZpb3VzVmFyaWF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi4zMTk4IDMuMjEzODZMNy4yMzExNyA4LjMwMjQ2TDQuNTUyOTYgNS42MjQyNUwwLjUzNTY0MyA5LjY0MTU3TTEyLjMxOTggMy4yMTM4Nkg5LjEwNTkyTTEyLjMxOTggMy4yMTM4NlY2LjQyNzcxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuMjA1MlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVGb290ZmFsbD8uZHdlbGxUaW1lPy5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3tmaXh0dXJlRm9vdGZhbGw/LmR3ZWxsVGltZT8uUHJldmlvdXNEYXRhfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+dnMgUHJldmlvdXMgZGF5PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgKm5nSWY9XCJmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+Rml4dHVyZSBDb252ZXJzaW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0xXCI+e3tmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudD8uY291bnR9fSU8L2gyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgc21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4dHVyZUZvb3RmYWxsPy5jb252ZXJzaW9uQ291bnQ/LlByZXZpb3VzVmFyaWF0aW9uID8gJ3RleHQtc3VjY2VzcycgOiAndGV4dC1kYW5nZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZml4dHVyZUZvb3RmYWxsPy5jb252ZXJzaW9uQ291bnQ/LlByZXZpb3VzVmFyaWF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi4zMTk4IDMuMjEzODZMNy4yMzExNyA4LjMwMjQ2TDQuNTUyOTYgNS42MjQyNUwwLjUzNTY0MyA5LjY0MTU3TTEyLjMxOTggMy4yMTM4Nkg5LjEwNTkyTTEyLjMxOTggMy4yMTM4NlY2LjQyNzcxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuMjA1MlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVGb290ZmFsbD8uY29udmVyc2lvbkNvdW50Py5QcmV2aW91c1ZhcmlhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuMzE5OCAzLjIxMzg2TDcuMjMxMTcgOC4zMDI0Nkw0LjU1Mjk2IDUuNjI0MjVMMC41MzU2NDMgOS42NDE1N00xMi4zMTk4IDMuMjEzODZIOS4xMDU5Mk0xMi4zMTk4IDMuMjEzODZWNi40Mjc3MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjIwNTJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3tmaXh0dXJlRm9vdGZhbGw/LmNvbnZlcnNpb25Db3VudD8uUHJldmlvdXNEYXRhfX0lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+dnMgUHJldmlvdXMgZGF5PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+RW5nYWdlbWVudCBDb252ZXJzaW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpeHR1cmVFbmdhZ2VtZW50ICsgJyUnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgcGUtNVwiIHN0eWxlPVwibWFyZ2luLXRvcDoxNHB4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbY2hlY2tlZF09XCJzaG93Vk1zXCIgWyhuZ01vZGVsKV09XCJzaG93Vk1zXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgLz5cclxuICAgICAgICAgICAgPGxhYmVsIHN0eWxlPVwiY29sb3I6IGJsYWNrOyB3aGl0ZS1zcGFjZTogbm93cmFwXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCIgZm9yPVwic2hvd1ZNc1wiPlxyXG4gICAgICAgICAgICAgICAgU2hvdyBWTVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIiAqbmdJZj1cImVuZ2FnZXJzTGlzdD8uWydUb3AgRW5nYWdlZCddPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXIgYmctaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Ub3AgRW5nYWdlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q291bnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgcHktMiBib3JkZXItYm90dG9tIG14LTAgbGlzdC10aWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRvcCBvZiB0b3BFbmdhZ2VycygpXCIgKGNsaWNrKT1cIm9uQ2xpY2tQcm9kdWN0KHRvcClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRvcD8uaW1hZ2VVcmwgJiYgIXRvcD8uaW1hZ2VMb2FkRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwidG9wLmltYWdlVXJsXCIgYWx0PVwiUHJvZHVjdFwiIGNsYXNzPVwicm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJ0b3AuaW1hZ2VMb2FkRXJyb3IgPSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbWFnZS1wbGFjZWhvbGRlciByb3VuZGVkXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFyayBzbWFsbFwiPnt7dG9wPy5CcmFuZG5hbWUgPz8gJyd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcIj57e3RvcD8ucHJvZHVjdEJyYW5kTmFtZSA/PyAnJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctbWVkaXVtIHRleHQtZGFya1wiPnt7dG9wPy5jb3VudCA/PyAwfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUG9wdXAoJ1RvcCBFbmdhZ2VkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIiAqbmdJZj1cImVuZ2FnZXJzTGlzdD8uWydOb24gRW5nYWdlZCddPy5sZW5ndGggfHwgZW5nYWdlcnNMaXN0Py5bJ0xlYXN0IEVuZ2FnZWQnXT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaGVhZGVyIGJnLWhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TGVhc3QvTm9uIEVuZ2FnZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNvdW50PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIHB5LTIgYm9yZGVyLWJvdHRvbSAgbXgtMCBsaXN0LXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGVhc3Qgb2YgbGVhc3RFbmdhZ2VycygpXCIgKGNsaWNrKT1cIm9uQ2xpY2tQcm9kdWN0KGxlYXN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGVhc3Q/LmltYWdlVXJsICYmICFsZWFzdD8uaW1hZ2VMb2FkRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwibGVhc3QuaW1hZ2VVcmxcIiBhbHQ9XCJQcm9kdWN0XCIgY2xhc3M9XCJyb3VuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImxlYXN0LmltYWdlTG9hZEVycm9yID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW1hZ2UtcGxhY2Vob2xkZXIgcm91bmRlZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LW1lZGl1bSB0ZXh0LWRhcmsgc21hbGxcIj57e2xlYXN0LkJyYW5kbmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiPnt7bGVhc3Q/LnByb2R1Y3RCcmFuZE5hbWUgPz8gJyd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LW1lZGl1bSB0ZXh0LWRhcmtcIj57e2xlYXN0Py5jb3VudCA/PyAwfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUG9wdXAoJ2xlYXN0X05vbl9FbmdhZ2VkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgaWQ9XCJ2bS1wcm9kdWN0cy1zdW1cIiBjbGFzcz1cIndhbGwtdmlld3BvcnQgbXktNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImhlYWRlci1ibG9ja1wiIGNsYXNzPVwiaGVhZGVyLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJib2R5LWJsb2NrLXN1bVwiIGNsYXNzPVwiYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5sZW5ndGhcIiBbbmdDbGFzc109XCJ7J2Qtbm9uZSc6IXNob3dWTXN9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdm0gb2YgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ3ZtJyArIGlcIiBjbGFzcz1cInZtLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJ2bT8udm1JbWFnZVVybDsgZWxzZSBwbGFjZWhvbGRlclwiIFtzcmNdPVwiaW1nQ0ROK3ZtPy52bUltYWdlVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVm0gSW1hZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2bS1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPnt7IHZtPy52bU5hbWUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3Rpb24tbGV2ZWxcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMydcIj5cclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNlY3Rpb25CeVpvbmVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArICRpbmRleFwiIGNsYXNzPVwiYnJhbmQtY2F0ZWdvcnlcIiBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblpvbmVMZXZlbFByb2R1Y3RNb2RhbChpdGVtLCdzZWN0aW9uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGluYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uem9uZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGluYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcGFjaXR5IHt7IGl0ZW0/LnNlY3Rpb24/LmNhcGFjaXR5IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlja3VwcyB7eyBpdGVtPy5zZWN0aW9uPy5waWNrdXBDb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmJyYW5kcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGIgb2YgaXRlbT8uc2VjdGlvbj8uYnJhbmRzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGl0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjIG9mIGl0ZW0/LnNlY3Rpb24/LmNhdGVnb3JpZXM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ3N1bVNoZWxmQ29udGFpbmVyJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uc2hlbGZUeXBlID09PSd0cmF5Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIml0ZW0uc2hlbGZUeXBlICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnRyYXlSb3dzKVwiIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJpdGVtPy5oZWF0bWFwPy5iZ1wiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiaXRlbT8uaGVhdG1hcD8uYm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjc7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwib3BhY2l0eTogMC41O1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgNDAgMTlcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzEuMDUzNiAwLjAwMDEzODUyMkMzMS40NzY3IDAuMDAzMjk1MTQgMzEuODk0MSAwLjA2MzU1MzggMzIuMzA3NSAwLjE4NjY2MkMzMy43MjMzIDAuNjA5NjU1IDM0LjM1NDggMS4zNzM1MyAzNS4xNDI1IDIuMzIwNDVDMzUuMjMzNSAyLjQzMDg2IDM1LjMyNDcgMi41MzgxNCAzNS4zNTczIDIuNTc5MjRMMzkuODQyNiA3LjkyMzk3QzQwLjA4NjYgOC4yMTQzMSA0MC4wNDEzIDguNjQzMDcgMzkuNzQyMSA4Ljg4Mjk1QzM5LjY3MzcgOC45MzY2MSAzOS41OTg1IDguOTc0ODkgMzkuNTIwNCA5LjAwMDE0QzM5LjA4NzQgOS43MDQwMiAzOC4yMDU2IDEwLjUxNTYgMzcuOTc0NSAxMC44NDM5QzM3LjQ2MzUgMTEuNTYwNCAzNy4wMzMzIDEyLjM5NjYgMzYuNjQ5MyAxMy4zMDg3QzM2LjA5MjcgMTQuOTE4NSAzNS40MjIgMTYuMTk5NyAzNC42Mjc4IDE3LjExODNDMzMuODc1OSAxNy45OTI2IDMzLjAxMDUgMTguNTM5MyAzMi4wMjQzIDE4Ljc0MTNDMzEuODk0MSAxOC43NjY2IDMxLjc2NjUgMTguNzk4NiAzMS42Mzk1IDE4LjgxNzVDMjkuOTA0NSAxOS4wOTIxIDI2Ljc1MzkgMTkuMTA3NiAyNS4xMiAxOC40OTUzQzI0LjY0NDggMTguMzE4NSAyNC4yMTIxIDE4LjA0MzcgMjMuODE4MiAxNy43MDkxQzIzLjI2ODEgMTcuMjk1NiAyMi40MTgxIDE1Ljc1OCAyMS43NzA0IDE0LjM3MjJDMjEuMzE4IDEzLjQwNjggMjAuNTI3NSAxMi43OTc4IDIwLjA2NTMgMTIuNzc4NUMxOS41NTQzIDEyLjc1NjQgMTguNzEwNSAxMy4zMjEyIDE4LjIzNTIgMTQuMjkwMkMxNy44NzA3IDE1LjAyNTcgMTcuMzcyOSAxNS43MjY3IDE3LjA3MDIgMTYuMzkyN0MxNi4wNTc5IDE4LjYyMTMgMTMuNTA1NiAxOS4wMDk2IDEwLjg3ODggMTkuMDAwMUMxMC4xNjkyIDE4Ljk5NyA5LjQ2MjY3IDE4LjkzNjcgOC43NDk4OCAxOC44MTM2QzYuMTc4NjEgMTguMzYyMiA1LjQ0NjA4IDE4LjA1OTIgNC4zODE3MSAxNS43OTZDMy4wMzc0MiAxMi45NDg5IDIuODU4NDcgMTEuNDI3IDAuNDEzOTM5IDkuMTcwMDZDMC4zMDMzNCA5LjAzNzU1IDAuMjI0Nzg3IDguOTE0NzQgMC4xNzI3MjggOC43OTc5OUMtMC4wNDg1MzU3IDguNTUxNzcgLTAuMDYwOTYwMiA4LjE4MjAzIDAuMTU3MTAzIDcuOTIwMDZMNC42NDUzOCAyLjU3OTI0QzQuNjgxMiAyLjUzODE4IDQuNzY5MSAyLjQzMDkxIDQuODYwMjMgMi4zMjA0NUM1LjY0NDY1IDEuMzczNTMgNi4yNzk0MyAwLjYwOTY2NyA3LjY5NTE5IDAuMTg2NjYyQzguMTA1MjQgMC4wNjM1ODA5IDguNTI1MzcgMC4wMDMzMTk0NyA4Ljk0NTE5IDAuMDAwMTM4NTIyQzkuMzU4NTEgLTAuMDAzMDE3NTMgOS43Njg4NCAwLjA0NzgyNTYgMTAuMTc1NyAwLjE0NTY0NkMxMC41NTMyIDAuMjM0MDMyIDEwLjc4NDcgMC42MDY4NTQgMTAuNjkwMyAwLjk2OTg2NUMxMC41OTkgMS4zMzU4NSAxMC4yMTQ5IDEuNTU5NDMgOS44NDA3IDEuNDY3OTFDOS41Mzc5OSAxLjM5NTMxIDkuMjQxNzEgMS4zNTczNCA4Ljk1MjAyIDEuMzYwNDlDOC42NzIwOSAxLjM2MzY1IDguMzg4NTQgMS40MDIyMSA4LjEwNTM0IDEuNDg3NDRDNy4xMDMwMSAxLjc4NzM2IDYuNTg4NjUgMi40MDYwMiA1Ljk1Mzk4IDMuMTcyOTlDNS45MDE5MyAzLjIzNjA4IDUuODQ2MTUgMy4zMDIgNS43MzIzIDMuNDM3NjRMMi4yNDMwNCA3LjU5NDg3QzIuMzQzOTUgNy41ODg1NSAyLjQ1MjAzIDcuNTgyNjIgMi41NTk0NSA3LjU3NjMxQzcuMDEyMiA2Ljk5ODc1IDExLjQzNTggNy40MzcxMSAxNS44MyA5LjE5ODM4QzE3LjQ2MDcgOS44NTE3OSAxOS4wNjIxIDExLjA4OTIgMjAuODQyNiAxMC42Mzc4QzIyLjAyMDkgMTAuMzM4IDIzLjc0MjggOS4yMzM1NCAyNS4xNjIgOC43MzE1OEMyOS41MzM2IDcuMTg4IDMzLjQzNjkgNy4xODE4MyAzNy44MjggNy42ODM3M0wzNC4yNjM1IDMuNDM3NjRDMzQuMTQ5NyAzLjMwMjA1IDM0LjA5MzkgMy4yMzYwOSAzNC4wNDE5IDMuMTcyOTlDMzMuNDA3MiAyLjQwNTk3IDMyLjg5MyAxLjc4NzMxIDMxLjg5MDUgMS40ODc0NEMzMS42MDczIDEuNDAyMjIgMzEuMzI3IDEuMzYwNDkgMzEuMDQzOCAxLjM2MDQ5QzMwLjc1NDQgMS4zNTczOCAzMC40NTg1IDEuMzk1NDMgMzAuMTU2MSAxLjQ2NzkxQzI5Ljc3ODcgMS41NTYyNiAyOS4zOTc5IDEuMzM1NzcgMjkuMzA2NSAwLjk2OTg2NUMyOS4yMTU0IDAuNjAzNzU2IDI5LjQ0MjcgMC4yMzQxMDcgMjkuODIwMiAwLjE0NTY0NkMzMC4yMzAyIDAuMDQ3ODI4MiAzMC42NDAzIC0wLjAwMjk3NjI3IDMxLjA1MzYgMC4wMDAxMzg1MjJaTTEwLjc3MTQgOS4wMDZDOC4zMzY2MyA4LjQ1Njc5IDUuMTc1OTkgOC4xMDAyOCA0LjMxMzM1IDkuNjAyNjhDMy42NjU1OSAxMC43Mjk2IDQuMzI5NjQgMTIuNDYgNC42NTUxNSAxMy42NDM3QzQuOTU0NjEgMTQuNjUzNyA1LjM1NTQxIDE1LjQ5NjQgNS44NjMxNiAxNi4xNDY2QzcuNTY1NTQgMTguMzI0NCAxMS42NTk4IDE4LjI3NDMgMTQuMDU1NSAxNy40NjAxQzE1Ljc1MTQgMTcuMDc4MSAxNi43OTY0IDE1Ljc4MDEgMTYuNzQxMSAxMi45NDU1QzE2Ljc4OTcgMTAuMzAwNCAxMi45MzkyIDkuNDk1MjYgMTAuNzcxNCA5LjAwNlpNMzUuNjQwNSA5LjYwMjY4QzM0Ljc3NzggOC4xMDAzMSAzMS42MTcyIDguNDU2NzggMjkuMTgyNSA5LjAwNkMyNy4wMTQ3IDkuNDk1MjYgMjMuMTY0MiAxMC4zMDA0IDIzLjIxMjggMTIuOTQ1NUMyMy4xNTc0IDE1Ljc4MDEgMjQuMjAyNCAxNy4wNzgxIDI1Ljg5ODMgMTcuNDYwMUMyOC4yOTQgMTguMjc0MyAzMi4zODgzIDE4LjMyNDMgMzQuMDkwNyAxNi4xNDY2QzM0LjYwMTcgMTUuNDk2NCAzNC45OTkyIDE0LjY1MzcgMzUuMjk4NyAxMy42NDM3QzM1LjYyNDIgMTIuNDYgMzYuMjg4MyAxMC43Mjk2IDM1LjY0MDUgOS42MDI2OFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjOThBMkIzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoaXRlbS5wcm9kdWN0cy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBpdGVtLmRpc3RyaWJ1dGVkUm93cztsZXQgciA9IGluZGV4XCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiByb3c7bGV0IHAgPSBpbmRleFwiIGNsYXNzPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCInd2hpdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYocHJvZHVjdC5zdGF0dXMgIT0gJ21pc3NpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicHJvZHVjdD8ucHJvZHVjdEltYWdlVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJwcm9kdWN0Py5wcm9kdWN0SW1hZ2VVcmxcIiBhbHQ9XCJQcm9kdWN0IEltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJvcGFjaXR5OiAwLjU7XCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjE5XCIgdmlld0JveD1cIjAgMCA0MCAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMS4wNTM2IDAuMDAwMTM4NTIyQzMxLjQ3NjcgMC4wMDMyOTUxNCAzMS44OTQxIDAuMDYzNTUzOCAzMi4zMDc1IDAuMTg2NjYyQzMzLjcyMzMgMC42MDk2NTUgMzQuMzU0OCAxLjM3MzUzIDM1LjE0MjUgMi4zMjA0NUMzNS4yMzM1IDIuNDMwODYgMzUuMzI0NyAyLjUzODE0IDM1LjM1NzMgMi41NzkyNEwzOS44NDI2IDcuOTIzOTdDNDAuMDg2NiA4LjIxNDMxIDQwLjA0MTMgOC42NDMwNyAzOS43NDIxIDguODgyOTVDMzkuNjczNyA4LjkzNjYxIDM5LjU5ODUgOC45NzQ4OSAzOS41MjA0IDkuMDAwMTRDMzkuMDg3NCA5LjcwNDAyIDM4LjIwNTYgMTAuNTE1NiAzNy45NzQ1IDEwLjg0MzlDMzcuNDYzNSAxMS41NjA0IDM3LjAzMzMgMTIuMzk2NiAzNi42NDkzIDEzLjMwODdDMzYuMDkyNyAxNC45MTg1IDM1LjQyMiAxNi4xOTk3IDM0LjYyNzggMTcuMTE4M0MzMy44NzU5IDE3Ljk5MjYgMzMuMDEwNSAxOC41MzkzIDMyLjAyNDMgMTguNzQxM0MzMS44OTQxIDE4Ljc2NjYgMzEuNzY2NSAxOC43OTg2IDMxLjYzOTUgMTguODE3NUMyOS45MDQ1IDE5LjA5MjEgMjYuNzUzOSAxOS4xMDc2IDI1LjEyIDE4LjQ5NTNDMjQuNjQ0OCAxOC4zMTg1IDI0LjIxMjEgMTguMDQzNyAyMy44MTgyIDE3LjcwOTFDMjMuMjY4MSAxNy4yOTU2IDIyLjQxODEgMTUuNzU4IDIxLjc3MDQgMTQuMzcyMkMyMS4zMTggMTMuNDA2OCAyMC41Mjc1IDEyLjc5NzggMjAuMDY1MyAxMi43Nzg1QzE5LjU1NDMgMTIuNzU2NCAxOC43MTA1IDEzLjMyMTIgMTguMjM1MiAxNC4yOTAyQzE3Ljg3MDcgMTUuMDI1NyAxNy4zNzI5IDE1LjcyNjcgMTcuMDcwMiAxNi4zOTI3QzE2LjA1NzkgMTguNjIxMyAxMy41MDU2IDE5LjAwOTYgMTAuODc4OCAxOS4wMDAxQzEwLjE2OTIgMTguOTk3IDkuNDYyNjcgMTguOTM2NyA4Ljc0OTg4IDE4LjgxMzZDNi4xNzg2MSAxOC4zNjIyIDUuNDQ2MDggMTguMDU5MiA0LjM4MTcxIDE1Ljc5NkMzLjAzNzQyIDEyLjk0ODkgMi44NTg0NyAxMS40MjcgMC40MTM5MzkgOS4xNzAwNkMwLjMwMzM0IDkuMDM3NTUgMC4yMjQ3ODcgOC45MTQ3NCAwLjE3MjcyOCA4Ljc5Nzk5Qy0wLjA0ODUzNTcgOC41NTE3NyAtMC4wNjA5NjAyIDguMTgyMDMgMC4xNTcxMDMgNy45MjAwNkw0LjY0NTM4IDIuNTc5MjRDNC42ODEyIDIuNTM4MTggNC43NjkxIDIuNDMwOTEgNC44NjAyMyAyLjMyMDQ1QzUuNjQ0NjUgMS4zNzM1MyA2LjI3OTQzIDAuNjA5NjY3IDcuNjk1MTkgMC4xODY2NjJDOC4xMDUyNCAwLjA2MzU4MDkgOC41MjUzNyAwLjAwMzMxOTQ3IDguOTQ1MTkgMC4wMDAxMzg1MjJDOS4zNTg1MSAtMC4wMDMwMTc1MyA5Ljc2ODg0IDAuMDQ3ODI1NiAxMC4xNzU3IDAuMTQ1NjQ2QzEwLjU1MzIgMC4yMzQwMzIgMTAuNzg0NyAwLjYwNjg1NCAxMC42OTAzIDAuOTY5ODY1QzEwLjU5OSAxLjMzNTg1IDEwLjIxNDkgMS41NTk0MyA5Ljg0MDcgMS40Njc5MUM5LjUzNzk5IDEuMzk1MzEgOS4yNDE3MSAxLjM1NzM0IDguOTUyMDIgMS4zNjA0OUM4LjY3MjA5IDEuMzYzNjUgOC4zODg1NCAxLjQwMjIxIDguMTA1MzQgMS40ODc0NEM3LjEwMzAxIDEuNzg3MzYgNi41ODg2NSAyLjQwNjAyIDUuOTUzOTggMy4xNzI5OUM1LjkwMTkzIDMuMjM2MDggNS44NDYxNSAzLjMwMiA1LjczMjMgMy40Mzc2NEwyLjI0MzA0IDcuNTk0ODdDMi4zNDM5NSA3LjU4ODU1IDIuNDUyMDMgNy41ODI2MiAyLjU1OTQ1IDcuNTc2MzFDNy4wMTIyIDYuOTk4NzUgMTEuNDM1OCA3LjQzNzExIDE1LjgzIDkuMTk4MzhDMTcuNDYwNyA5Ljg1MTc5IDE5LjA2MjEgMTEuMDg5MiAyMC44NDI2IDEwLjYzNzhDMjIuMDIwOSAxMC4zMzggMjMuNzQyOCA5LjIzMzU0IDI1LjE2MiA4LjczMTU4QzI5LjUzMzYgNy4xODggMzMuNDM2OSA3LjE4MTgzIDM3LjgyOCA3LjY4MzczTDM0LjI2MzUgMy40Mzc2NEMzNC4xNDk3IDMuMzAyMDUgMzQuMDkzOSAzLjIzNjA5IDM0LjA0MTkgMy4xNzI5OUMzMy40MDcyIDIuNDA1OTcgMzIuODkzIDEuNzg3MzEgMzEuODkwNSAxLjQ4NzQ0QzMxLjYwNzMgMS40MDIyMiAzMS4zMjcgMS4zNjA0OSAzMS4wNDM4IDEuMzYwNDlDMzAuNzU0NCAxLjM1NzM4IDMwLjQ1ODUgMS4zOTU0MyAzMC4xNTYxIDEuNDY3OTFDMjkuNzc4NyAxLjU1NjI2IDI5LjM5NzkgMS4zMzU3NyAyOS4zMDY1IDAuOTY5ODY1QzI5LjIxNTQgMC42MDM3NTYgMjkuNDQyNyAwLjIzNDEwNyAyOS44MjAyIDAuMTQ1NjQ2QzMwLjIzMDIgMC4wNDc4MjgyIDMwLjY0MDMgLTAuMDAyOTc2MjcgMzEuMDUzNiAwLjAwMDEzODUyMlpNMTAuNzcxNCA5LjAwNkM4LjMzNjYzIDguNDU2NzkgNS4xNzU5OSA4LjEwMDI4IDQuMzEzMzUgOS42MDI2OEMzLjY2NTU5IDEwLjcyOTYgNC4zMjk2NCAxMi40NiA0LjY1NTE1IDEzLjY0MzdDNC45NTQ2MSAxNC42NTM3IDUuMzU1NDEgMTUuNDk2NCA1Ljg2MzE2IDE2LjE0NjZDNy41NjU1NCAxOC4zMjQ0IDExLjY1OTggMTguMjc0MyAxNC4wNTU1IDE3LjQ2MDFDMTUuNzUxNCAxNy4wNzgxIDE2Ljc5NjQgMTUuNzgwMSAxNi43NDExIDEyLjk0NTVDMTYuNzg5NyAxMC4zMDA0IDEyLjkzOTIgOS40OTUyNiAxMC43NzE0IDkuMDA2Wk0zNS42NDA1IDkuNjAyNjhDMzQuNzc3OCA4LjEwMDMxIDMxLjYxNzIgOC40NTY3OCAyOS4xODI1IDkuMDA2QzI3LjAxNDcgOS40OTUyNiAyMy4xNjQyIDEwLjMwMDQgMjMuMjEyOCAxMi45NDU1QzIzLjE1NzQgMTUuNzgwMSAyNC4yMDI0IDE3LjA3ODEgMjUuODk4MyAxNy40NjAxQzI4LjI5NCAxOC4yNzQzIDMyLjM4ODMgMTguMzI0MyAzNC4wOTA3IDE2LjE0NjZDMzQuNjAxNyAxNS40OTY0IDM0Ljk5OTIgMTQuNjUzNyAzNS4yOTg3IDEzLjY0MzdDMzUuNjI0MiAxMi40NiAzNi4yODgzIDEwLjcyOTYgMzUuNjQwNSA5LjYwMjY4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzk4QTJCM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfUBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS50cmF5Um93cylcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJpdGVtPy5oZWF0bWFwPy5iZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cIml0ZW0/LmhlYXRtYXA/LmJvcmRlclwiIHN0eWxlPVwib3BhY2l0eTogMC43O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIm9wYWNpdHk6IDAuNTtcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiMTlcIiB2aWV3Qm94PVwiMCAwIDQwIDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMxLjA1MzYgMC4wMDAxMzg1MjJDMzEuNDc2NyAwLjAwMzI5NTE0IDMxLjg5NDEgMC4wNjM1NTM4IDMyLjMwNzUgMC4xODY2NjJDMzMuNzIzMyAwLjYwOTY1NSAzNC4zNTQ4IDEuMzczNTMgMzUuMTQyNSAyLjMyMDQ1QzM1LjIzMzUgMi40MzA4NiAzNS4zMjQ3IDIuNTM4MTQgMzUuMzU3MyAyLjU3OTI0TDM5Ljg0MjYgNy45MjM5N0M0MC4wODY2IDguMjE0MzEgNDAuMDQxMyA4LjY0MzA3IDM5Ljc0MjEgOC44ODI5NUMzOS42NzM3IDguOTM2NjEgMzkuNTk4NSA4Ljk3NDg5IDM5LjUyMDQgOS4wMDAxNEMzOS4wODc0IDkuNzA0MDIgMzguMjA1NiAxMC41MTU2IDM3Ljk3NDUgMTAuODQzOUMzNy40NjM1IDExLjU2MDQgMzcuMDMzMyAxMi4zOTY2IDM2LjY0OTMgMTMuMzA4N0MzNi4wOTI3IDE0LjkxODUgMzUuNDIyIDE2LjE5OTcgMzQuNjI3OCAxNy4xMTgzQzMzLjg3NTkgMTcuOTkyNiAzMy4wMTA1IDE4LjUzOTMgMzIuMDI0MyAxOC43NDEzQzMxLjg5NDEgMTguNzY2NiAzMS43NjY1IDE4Ljc5ODYgMzEuNjM5NSAxOC44MTc1QzI5LjkwNDUgMTkuMDkyMSAyNi43NTM5IDE5LjEwNzYgMjUuMTIgMTguNDk1M0MyNC42NDQ4IDE4LjMxODUgMjQuMjEyMSAxOC4wNDM3IDIzLjgxODIgMTcuNzA5MUMyMy4yNjgxIDE3LjI5NTYgMjIuNDE4MSAxNS43NTggMjEuNzcwNCAxNC4zNzIyQzIxLjMxOCAxMy40MDY4IDIwLjUyNzUgMTIuNzk3OCAyMC4wNjUzIDEyLjc3ODVDMTkuNTU0MyAxMi43NTY0IDE4LjcxMDUgMTMuMzIxMiAxOC4yMzUyIDE0LjI5MDJDMTcuODcwNyAxNS4wMjU3IDE3LjM3MjkgMTUuNzI2NyAxNy4wNzAyIDE2LjM5MjdDMTYuMDU3OSAxOC42MjEzIDEzLjUwNTYgMTkuMDA5NiAxMC44Nzg4IDE5LjAwMDFDMTAuMTY5MiAxOC45OTcgOS40NjI2NyAxOC45MzY3IDguNzQ5ODggMTguODEzNkM2LjE3ODYxIDE4LjM2MjIgNS40NDYwOCAxOC4wNTkyIDQuMzgxNzEgMTUuNzk2QzMuMDM3NDIgMTIuOTQ4OSAyLjg1ODQ3IDExLjQyNyAwLjQxMzkzOSA5LjE3MDA2QzAuMzAzMzQgOS4wMzc1NSAwLjIyNDc4NyA4LjkxNDc0IDAuMTcyNzI4IDguNzk3OTlDLTAuMDQ4NTM1NyA4LjU1MTc3IC0wLjA2MDk2MDIgOC4xODIwMyAwLjE1NzEwMyA3LjkyMDA2TDQuNjQ1MzggMi41NzkyNEM0LjY4MTIgMi41MzgxOCA0Ljc2OTEgMi40MzA5MSA0Ljg2MDIzIDIuMzIwNDVDNS42NDQ2NSAxLjM3MzUzIDYuMjc5NDMgMC42MDk2NjcgNy42OTUxOSAwLjE4NjY2MkM4LjEwNTI0IDAuMDYzNTgwOSA4LjUyNTM3IDAuMDAzMzE5NDcgOC45NDUxOSAwLjAwMDEzODUyMkM5LjM1ODUxIC0wLjAwMzAxNzUzIDkuNzY4ODQgMC4wNDc4MjU2IDEwLjE3NTcgMC4xNDU2NDZDMTAuNTUzMiAwLjIzNDAzMiAxMC43ODQ3IDAuNjA2ODU0IDEwLjY5MDMgMC45Njk4NjVDMTAuNTk5IDEuMzM1ODUgMTAuMjE0OSAxLjU1OTQzIDkuODQwNyAxLjQ2NzkxQzkuNTM3OTkgMS4zOTUzMSA5LjI0MTcxIDEuMzU3MzQgOC45NTIwMiAxLjM2MDQ5QzguNjcyMDkgMS4zNjM2NSA4LjM4ODU0IDEuNDAyMjEgOC4xMDUzNCAxLjQ4NzQ0QzcuMTAzMDEgMS43ODczNiA2LjU4ODY1IDIuNDA2MDIgNS45NTM5OCAzLjE3Mjk5QzUuOTAxOTMgMy4yMzYwOCA1Ljg0NjE1IDMuMzAyIDUuNzMyMyAzLjQzNzY0TDIuMjQzMDQgNy41OTQ4N0MyLjM0Mzk1IDcuNTg4NTUgMi40NTIwMyA3LjU4MjYyIDIuNTU5NDUgNy41NzYzMUM3LjAxMjIgNi45OTg3NSAxMS40MzU4IDcuNDM3MTEgMTUuODMgOS4xOTgzOEMxNy40NjA3IDkuODUxNzkgMTkuMDYyMSAxMS4wODkyIDIwLjg0MjYgMTAuNjM3OEMyMi4wMjA5IDEwLjMzOCAyMy43NDI4IDkuMjMzNTQgMjUuMTYyIDguNzMxNThDMjkuNTMzNiA3LjE4OCAzMy40MzY5IDcuMTgxODMgMzcuODI4IDcuNjgzNzNMMzQuMjYzNSAzLjQzNzY0QzM0LjE0OTcgMy4zMDIwNSAzNC4wOTM5IDMuMjM2MDkgMzQuMDQxOSAzLjE3Mjk5QzMzLjQwNzIgMi40MDU5NyAzMi44OTMgMS43ODczMSAzMS44OTA1IDEuNDg3NDRDMzEuNjA3MyAxLjQwMjIyIDMxLjMyNyAxLjM2MDQ5IDMxLjA0MzggMS4zNjA0OUMzMC43NTQ0IDEuMzU3MzggMzAuNDU4NSAxLjM5NTQzIDMwLjE1NjEgMS40Njc5MUMyOS43Nzg3IDEuNTU2MjYgMjkuMzk3OSAxLjMzNTc3IDI5LjMwNjUgMC45Njk4NjVDMjkuMjE1NCAwLjYwMzc1NiAyOS40NDI3IDAuMjM0MTA3IDI5LjgyMDIgMC4xNDU2NDZDMzAuMjMwMiAwLjA0NzgyODIgMzAuNjQwMyAtMC4wMDI5NzYyNyAzMS4wNTM2IDAuMDAwMTM4NTIyWk0xMC43NzE0IDkuMDA2QzguMzM2NjMgOC40NTY3OSA1LjE3NTk5IDguMTAwMjggNC4zMTMzNSA5LjYwMjY4QzMuNjY1NTkgMTAuNzI5NiA0LjMyOTY0IDEyLjQ2IDQuNjU1MTUgMTMuNjQzN0M0Ljk1NDYxIDE0LjY1MzcgNS4zNTU0MSAxNS40OTY0IDUuODYzMTYgMTYuMTQ2NkM3LjU2NTU0IDE4LjMyNDQgMTEuNjU5OCAxOC4yNzQzIDE0LjA1NTUgMTcuNDYwMUMxNS43NTE0IDE3LjA3ODEgMTYuNzk2NCAxNS43ODAxIDE2Ljc0MTEgMTIuOTQ1NUMxNi43ODk3IDEwLjMwMDQgMTIuOTM5MiA5LjQ5NTI2IDEwLjc3MTQgOS4wMDZaTTM1LjY0MDUgOS42MDI2OEMzNC43Nzc4IDguMTAwMzEgMzEuNjE3MiA4LjQ1Njc4IDI5LjE4MjUgOS4wMDZDMjcuMDE0NyA5LjQ5NTI2IDIzLjE2NDIgMTAuMzAwNCAyMy4yMTI4IDEyLjk0NTVDMjMuMTU3NCAxNS43ODAxIDI0LjIwMjQgMTcuMDc4MSAyNS44OTgzIDE3LjQ2MDFDMjguMjk0IDE4LjI3NDMgMzIuMzg4MyAxOC4zMjQzIDM0LjA5MDcgMTYuMTQ2NkMzNC42MDE3IDE1LjQ5NjQgMzQuOTk5MiAxNC42NTM3IDM1LjI5ODcgMTMuNjQzN0MzNS42MjQyIDEyLjQ2IDM2LjI4ODMgMTAuNzI5NiAzNS42NDA1IDkuNjAyNjhaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM5OEEyQjNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiaXRlbS5zaGVsZlR5cGUhICsgKGkgKyAxKVwiIGNsYXNzPVwiYmxvY2sgc2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnZtb25seS1wbGFjZWhvbGRlcl09XCJpdGVtLnNoZWxmVHlwZSA9PT0ndm1vbmx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiaXRlbT8uaGVhdG1hcD8uYmdcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cIml0ZW0/LmhlYXRtYXA/LmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjc7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIm9wYWNpdHk6IDAuNTtcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiMTlcIiB2aWV3Qm94PVwiMCAwIDQwIDE5XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMxLjA1MzYgMC4wMDAxMzg1MjJDMzEuNDc2NyAwLjAwMzI5NTE0IDMxLjg5NDEgMC4wNjM1NTM4IDMyLjMwNzUgMC4xODY2NjJDMzMuNzIzMyAwLjYwOTY1NSAzNC4zNTQ4IDEuMzczNTMgMzUuMTQyNSAyLjMyMDQ1QzM1LjIzMzUgMi40MzA4NiAzNS4zMjQ3IDIuNTM4MTQgMzUuMzU3MyAyLjU3OTI0TDM5Ljg0MjYgNy45MjM5N0M0MC4wODY2IDguMjE0MzEgNDAuMDQxMyA4LjY0MzA3IDM5Ljc0MjEgOC44ODI5NUMzOS42NzM3IDguOTM2NjEgMzkuNTk4NSA4Ljk3NDg5IDM5LjUyMDQgOS4wMDAxNEMzOS4wODc0IDkuNzA0MDIgMzguMjA1NiAxMC41MTU2IDM3Ljk3NDUgMTAuODQzOUMzNy40NjM1IDExLjU2MDQgMzcuMDMzMyAxMi4zOTY2IDM2LjY0OTMgMTMuMzA4N0MzNi4wOTI3IDE0LjkxODUgMzUuNDIyIDE2LjE5OTcgMzQuNjI3OCAxNy4xMTgzQzMzLjg3NTkgMTcuOTkyNiAzMy4wMTA1IDE4LjUzOTMgMzIuMDI0MyAxOC43NDEzQzMxLjg5NDEgMTguNzY2NiAzMS43NjY1IDE4Ljc5ODYgMzEuNjM5NSAxOC44MTc1QzI5LjkwNDUgMTkuMDkyMSAyNi43NTM5IDE5LjEwNzYgMjUuMTIgMTguNDk1M0MyNC42NDQ4IDE4LjMxODUgMjQuMjEyMSAxOC4wNDM3IDIzLjgxODIgMTcuNzA5MUMyMy4yNjgxIDE3LjI5NTYgMjIuNDE4MSAxNS43NTggMjEuNzcwNCAxNC4zNzIyQzIxLjMxOCAxMy40MDY4IDIwLjUyNzUgMTIuNzk3OCAyMC4wNjUzIDEyLjc3ODVDMTkuNTU0MyAxMi43NTY0IDE4LjcxMDUgMTMuMzIxMiAxOC4yMzUyIDE0LjI5MDJDMTcuODcwNyAxNS4wMjU3IDE3LjM3MjkgMTUuNzI2NyAxNy4wNzAyIDE2LjM5MjdDMTYuMDU3OSAxOC42MjEzIDEzLjUwNTYgMTkuMDA5NiAxMC44Nzg4IDE5LjAwMDFDMTAuMTY5MiAxOC45OTcgOS40NjI2NyAxOC45MzY3IDguNzQ5ODggMTguODEzNkM2LjE3ODYxIDE4LjM2MjIgNS40NDYwOCAxOC4wNTkyIDQuMzgxNzEgMTUuNzk2QzMuMDM3NDIgMTIuOTQ4OSAyLjg1ODQ3IDExLjQyNyAwLjQxMzkzOSA5LjE3MDA2QzAuMzAzMzQgOS4wMzc1NSAwLjIyNDc4NyA4LjkxNDc0IDAuMTcyNzI4IDguNzk3OTlDLTAuMDQ4NTM1NyA4LjU1MTc3IC0wLjA2MDk2MDIgOC4xODIwMyAwLjE1NzEwMyA3LjkyMDA2TDQuNjQ1MzggMi41NzkyNEM0LjY4MTIgMi41MzgxOCA0Ljc2OTEgMi40MzA5MSA0Ljg2MDIzIDIuMzIwNDVDNS42NDQ2NSAxLjM3MzUzIDYuMjc5NDMgMC42MDk2NjcgNy42OTUxOSAwLjE4NjY2MkM4LjEwNTI0IDAuMDYzNTgwOSA4LjUyNTM3IDAuMDAzMzE5NDcgOC45NDUxOSAwLjAwMDEzODUyMkM5LjM1ODUxIC0wLjAwMzAxNzUzIDkuNzY4ODQgMC4wNDc4MjU2IDEwLjE3NTcgMC4xNDU2NDZDMTAuNTUzMiAwLjIzNDAzMiAxMC43ODQ3IDAuNjA2ODU0IDEwLjY5MDMgMC45Njk4NjVDMTAuNTk5IDEuMzM1ODUgMTAuMjE0OSAxLjU1OTQzIDkuODQwNyAxLjQ2NzkxQzkuNTM3OTkgMS4zOTUzMSA5LjI0MTcxIDEuMzU3MzQgOC45NTIwMiAxLjM2MDQ5QzguNjcyMDkgMS4zNjM2NSA4LjM4ODU0IDEuNDAyMjEgOC4xMDUzNCAxLjQ4NzQ0QzcuMTAzMDEgMS43ODczNiA2LjU4ODY1IDIuNDA2MDIgNS45NTM5OCAzLjE3Mjk5QzUuOTAxOTMgMy4yMzYwOCA1Ljg0NjE1IDMuMzAyIDUuNzMyMyAzLjQzNzY0TDIuMjQzMDQgNy41OTQ4N0MyLjM0Mzk1IDcuNTg4NTUgMi40NTIwMyA3LjU4MjYyIDIuNTU5NDUgNy41NzYzMUM3LjAxMjIgNi45OTg3NSAxMS40MzU4IDcuNDM3MTEgMTUuODMgOS4xOTgzOEMxNy40NjA3IDkuODUxNzkgMTkuMDYyMSAxMS4wODkyIDIwLjg0MjYgMTAuNjM3OEMyMi4wMjA5IDEwLjMzOCAyMy43NDI4IDkuMjMzNTQgMjUuMTYyIDguNzMxNThDMjkuNTMzNiA3LjE4OCAzMy40MzY5IDcuMTgxODMgMzcuODI4IDcuNjgzNzNMMzQuMjYzNSAzLjQzNzY0QzM0LjE0OTcgMy4zMDIwNSAzNC4wOTM5IDMuMjM2MDkgMzQuMDQxOSAzLjE3Mjk5QzMzLjQwNzIgMi40MDU5NyAzMi44OTMgMS43ODczMSAzMS44OTA1IDEuNDg3NDRDMzEuNjA3MyAxLjQwMjIyIDMxLjMyNyAxLjM2MDQ5IDMxLjA0MzggMS4zNjA0OUMzMC43NTQ0IDEuMzU3MzggMzAuNDU4NSAxLjM5NTQzIDMwLjE1NjEgMS40Njc5MUMyOS43Nzg3IDEuNTU2MjYgMjkuMzk3OSAxLjMzNTc3IDI5LjMwNjUgMC45Njk4NjVDMjkuMjE1NCAwLjYwMzc1NiAyOS40NDI3IDAuMjM0MTA3IDI5LjgyMDIgMC4xNDU2NDZDMzAuMjMwMiAwLjA0NzgyODIgMzAuNjQwMyAtMC4wMDI5NzYyNyAzMS4wNTM2IDAuMDAwMTM4NTIyWk0xMC43NzE0IDkuMDA2QzguMzM2NjMgOC40NTY3OSA1LjE3NTk5IDguMTAwMjggNC4zMTMzNSA5LjYwMjY4QzMuNjY1NTkgMTAuNzI5NiA0LjMyOTY0IDEyLjQ2IDQuNjU1MTUgMTMuNjQzN0M0Ljk1NDYxIDE0LjY1MzcgNS4zNTU0MSAxNS40OTY0IDUuODYzMTYgMTYuMTQ2NkM3LjU2NTU0IDE4LjMyNDQgMTEuNjU5OCAxOC4yNzQzIDE0LjA1NTUgMTcuNDYwMUMxNS43NTE0IDE3LjA3ODEgMTYuNzk2NCAxNS43ODAxIDE2Ljc0MTEgMTIuOTQ1NUMxNi43ODk3IDEwLjMwMDQgMTIuOTM5MiA5LjQ5NTI2IDEwLjc3MTQgOS4wMDZaTTM1LjY0MDUgOS42MDI2OEMzNC43Nzc4IDguMTAwMzEgMzEuNjE3MiA4LjQ1Njc4IDI5LjE4MjUgOS4wMDZDMjcuMDE0NyA5LjQ5NTI2IDIzLjE2NDIgMTAuMzAwNCAyMy4yMTI4IDEyLjk0NTVDMjMuMTU3NCAxNS43ODAxIDI0LjIwMjQgMTcuMDc4MSAyNS44OTgzIDE3LjQ2MDFDMjguMjk0IDE4LjI3NDMgMzIuMzg4MyAxOC4zMjQzIDM0LjA5MDcgMTYuMTQ2NkMzNC42MDE3IDE1LjQ5NjQgMzQuOTk5MiAxNC42NTM3IDM1LjI5ODcgMTMuNjQzN0MzNS42MjQyIDEyLjQ2IDM2LjI4ODMgMTAuNzI5NiAzNS42NDA1IDkuNjAyNjhaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjOThBMkIzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0ucHJvZHVjdHMubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIGl0ZW0ucHJvZHVjdHM7bGV0IHAgPSBpbmRleFwiIGNsYXNzPVwicHJvZHVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIid3aGl0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHByb2R1Y3Quc3RhdHVzICE9ICdtaXNzaW5nJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicHJvZHVjdD8ucHJvZHVjdEltYWdlVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cInByb2R1Y3Q/LnByb2R1Y3RJbWFnZVVybFwiIGFsdD1cIlByb2R1Y3QgSW1hZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJvcGFjaXR5OiAwLjU7XCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjE5XCIgdmlld0JveD1cIjAgMCA0MCAxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMS4wNTM2IDAuMDAwMTM4NTIyQzMxLjQ3NjcgMC4wMDMyOTUxNCAzMS44OTQxIDAuMDYzNTUzOCAzMi4zMDc1IDAuMTg2NjYyQzMzLjcyMzMgMC42MDk2NTUgMzQuMzU0OCAxLjM3MzUzIDM1LjE0MjUgMi4zMjA0NUMzNS4yMzM1IDIuNDMwODYgMzUuMzI0NyAyLjUzODE0IDM1LjM1NzMgMi41NzkyNEwzOS44NDI2IDcuOTIzOTdDNDAuMDg2NiA4LjIxNDMxIDQwLjA0MTMgOC42NDMwNyAzOS43NDIxIDguODgyOTVDMzkuNjczNyA4LjkzNjYxIDM5LjU5ODUgOC45NzQ4OSAzOS41MjA0IDkuMDAwMTRDMzkuMDg3NCA5LjcwNDAyIDM4LjIwNTYgMTAuNTE1NiAzNy45NzQ1IDEwLjg0MzlDMzcuNDYzNSAxMS41NjA0IDM3LjAzMzMgMTIuMzk2NiAzNi42NDkzIDEzLjMwODdDMzYuMDkyNyAxNC45MTg1IDM1LjQyMiAxNi4xOTk3IDM0LjYyNzggMTcuMTE4M0MzMy44NzU5IDE3Ljk5MjYgMzMuMDEwNSAxOC41MzkzIDMyLjAyNDMgMTguNzQxM0MzMS44OTQxIDE4Ljc2NjYgMzEuNzY2NSAxOC43OTg2IDMxLjYzOTUgMTguODE3NUMyOS45MDQ1IDE5LjA5MjEgMjYuNzUzOSAxOS4xMDc2IDI1LjEyIDE4LjQ5NTNDMjQuNjQ0OCAxOC4zMTg1IDI0LjIxMjEgMTguMDQzNyAyMy44MTgyIDE3LjcwOTFDMjMuMjY4MSAxNy4yOTU2IDIyLjQxODEgMTUuNzU4IDIxLjc3MDQgMTQuMzcyMkMyMS4zMTggMTMuNDA2OCAyMC41Mjc1IDEyLjc5NzggMjAuMDY1MyAxMi43Nzg1QzE5LjU1NDMgMTIuNzU2NCAxOC43MTA1IDEzLjMyMTIgMTguMjM1MiAxNC4yOTAyQzE3Ljg3MDcgMTUuMDI1NyAxNy4zNzI5IDE1LjcyNjcgMTcuMDcwMiAxNi4zOTI3QzE2LjA1NzkgMTguNjIxMyAxMy41MDU2IDE5LjAwOTYgMTAuODc4OCAxOS4wMDAxQzEwLjE2OTIgMTguOTk3IDkuNDYyNjcgMTguOTM2NyA4Ljc0OTg4IDE4LjgxMzZDNi4xNzg2MSAxOC4zNjIyIDUuNDQ2MDggMTguMDU5MiA0LjM4MTcxIDE1Ljc5NkMzLjAzNzQyIDEyLjk0ODkgMi44NTg0NyAxMS40MjcgMC40MTM5MzkgOS4xNzAwNkMwLjMwMzM0IDkuMDM3NTUgMC4yMjQ3ODcgOC45MTQ3NCAwLjE3MjcyOCA4Ljc5Nzk5Qy0wLjA0ODUzNTcgOC41NTE3NyAtMC4wNjA5NjAyIDguMTgyMDMgMC4xNTcxMDMgNy45MjAwNkw0LjY0NTM4IDIuNTc5MjRDNC42ODEyIDIuNTM4MTggNC43NjkxIDIuNDMwOTEgNC44NjAyMyAyLjMyMDQ1QzUuNjQ0NjUgMS4zNzM1MyA2LjI3OTQzIDAuNjA5NjY3IDcuNjk1MTkgMC4xODY2NjJDOC4xMDUyNCAwLjA2MzU4MDkgOC41MjUzNyAwLjAwMzMxOTQ3IDguOTQ1MTkgMC4wMDAxMzg1MjJDOS4zNTg1MSAtMC4wMDMwMTc1MyA5Ljc2ODg0IDAuMDQ3ODI1NiAxMC4xNzU3IDAuMTQ1NjQ2QzEwLjU1MzIgMC4yMzQwMzIgMTAuNzg0NyAwLjYwNjg1NCAxMC42OTAzIDAuOTY5ODY1QzEwLjU5OSAxLjMzNTg1IDEwLjIxNDkgMS41NTk0MyA5Ljg0MDcgMS40Njc5MUM5LjUzNzk5IDEuMzk1MzEgOS4yNDE3MSAxLjM1NzM0IDguOTUyMDIgMS4zNjA0OUM4LjY3MjA5IDEuMzYzNjUgOC4zODg1NCAxLjQwMjIxIDguMTA1MzQgMS40ODc0NEM3LjEwMzAxIDEuNzg3MzYgNi41ODg2NSAyLjQwNjAyIDUuOTUzOTggMy4xNzI5OUM1LjkwMTkzIDMuMjM2MDggNS44NDYxNSAzLjMwMiA1LjczMjMgMy40Mzc2NEwyLjI0MzA0IDcuNTk0ODdDMi4zNDM5NSA3LjU4ODU1IDIuNDUyMDMgNy41ODI2MiAyLjU1OTQ1IDcuNTc2MzFDNy4wMTIyIDYuOTk4NzUgMTEuNDM1OCA3LjQzNzExIDE1LjgzIDkuMTk4MzhDMTcuNDYwNyA5Ljg1MTc5IDE5LjA2MjEgMTEuMDg5MiAyMC44NDI2IDEwLjYzNzhDMjIuMDIwOSAxMC4zMzggMjMuNzQyOCA5LjIzMzU0IDI1LjE2MiA4LjczMTU4QzI5LjUzMzYgNy4xODggMzMuNDM2OSA3LjE4MTgzIDM3LjgyOCA3LjY4MzczTDM0LjI2MzUgMy40Mzc2NEMzNC4xNDk3IDMuMzAyMDUgMzQuMDkzOSAzLjIzNjA5IDM0LjA0MTkgMy4xNzI5OUMzMy40MDcyIDIuNDA1OTcgMzIuODkzIDEuNzg3MzEgMzEuODkwNSAxLjQ4NzQ0QzMxLjYwNzMgMS40MDIyMiAzMS4zMjcgMS4zNjA0OSAzMS4wNDM4IDEuMzYwNDlDMzAuNzU0NCAxLjM1NzM4IDMwLjQ1ODUgMS4zOTU0MyAzMC4xNTYxIDEuNDY3OTFDMjkuNzc4NyAxLjU1NjI2IDI5LjM5NzkgMS4zMzU3NyAyOS4zMDY1IDAuOTY5ODY1QzI5LjIxNTQgMC42MDM3NTYgMjkuNDQyNyAwLjIzNDEwNyAyOS44MjAyIDAuMTQ1NjQ2QzMwLjIzMDIgMC4wNDc4MjgyIDMwLjY0MDMgLTAuMDAyOTc2MjcgMzEuMDUzNiAwLjAwMDEzODUyMlpNMTAuNzcxNCA5LjAwNkM4LjMzNjYzIDguNDU2NzkgNS4xNzU5OSA4LjEwMDI4IDQuMzEzMzUgOS42MDI2OEMzLjY2NTU5IDEwLjcyOTYgNC4zMjk2NCAxMi40NiA0LjY1NTE1IDEzLjY0MzdDNC45NTQ2MSAxNC42NTM3IDUuMzU1NDEgMTUuNDk2NCA1Ljg2MzE2IDE2LjE0NjZDNy41NjU1NCAxOC4zMjQ0IDExLjY1OTggMTguMjc0MyAxNC4wNTU1IDE3LjQ2MDFDMTUuNzUxNCAxNy4wNzgxIDE2Ljc5NjQgMTUuNzgwMSAxNi43NDExIDEyLjk0NTVDMTYuNzg5NyAxMC4zMDA0IDEyLjkzOTIgOS40OTUyNiAxMC43NzE0IDkuMDA2Wk0zNS42NDA1IDkuNjAyNjhDMzQuNzc3OCA4LjEwMDMxIDMxLjYxNzIgOC40NTY3OCAyOS4xODI1IDkuMDA2QzI3LjAxNDcgOS40OTUyNiAyMy4xNjQyIDEwLjMwMDQgMjMuMjEyOCAxMi45NDU1QzIzLjE1NzQgMTUuNzgwMSAyNC4yMDI0IDE3LjA3ODEgMjUuODk4MyAxNy40NjAxQzI4LjI5NCAxOC4yNzQzIDMyLjM4ODMgMTguMzI0MyAzNC4wOTA3IDE2LjE0NjZDMzQuNjAxNyAxNS40OTY0IDM0Ljk5OTIgMTQuNjUzNyAzNS4yOTg3IDEzLjY0MzdDMzUuNjI0MiAxMi40NiAzNi4yODgzIDEwLjcyOTYgMzUuNjQwNSA5LjYwMjY4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjOThBMkIzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiaXRlbT8uaGVhdG1hcD8uYmdcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cIml0ZW0/LmhlYXRtYXA/LmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC43O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwib3BhY2l0eTogMC41O1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgNDAgMTlcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzEuMDUzNiAwLjAwMDEzODUyMkMzMS40NzY3IDAuMDAzMjk1MTQgMzEuODk0MSAwLjA2MzU1MzggMzIuMzA3NSAwLjE4NjY2MkMzMy43MjMzIDAuNjA5NjU1IDM0LjM1NDggMS4zNzM1MyAzNS4xNDI1IDIuMzIwNDVDMzUuMjMzNSAyLjQzMDg2IDM1LjMyNDcgMi41MzgxNCAzNS4zNTczIDIuNTc5MjRMMzkuODQyNiA3LjkyMzk3QzQwLjA4NjYgOC4yMTQzMSA0MC4wNDEzIDguNjQzMDcgMzkuNzQyMSA4Ljg4Mjk1QzM5LjY3MzcgOC45MzY2MSAzOS41OTg1IDguOTc0ODkgMzkuNTIwNCA5LjAwMDE0QzM5LjA4NzQgOS43MDQwMiAzOC4yMDU2IDEwLjUxNTYgMzcuOTc0NSAxMC44NDM5QzM3LjQ2MzUgMTEuNTYwNCAzNy4wMzMzIDEyLjM5NjYgMzYuNjQ5MyAxMy4zMDg3QzM2LjA5MjcgMTQuOTE4NSAzNS40MjIgMTYuMTk5NyAzNC42Mjc4IDE3LjExODNDMzMuODc1OSAxNy45OTI2IDMzLjAxMDUgMTguNTM5MyAzMi4wMjQzIDE4Ljc0MTNDMzEuODk0MSAxOC43NjY2IDMxLjc2NjUgMTguNzk4NiAzMS42Mzk1IDE4LjgxNzVDMjkuOTA0NSAxOS4wOTIxIDI2Ljc1MzkgMTkuMTA3NiAyNS4xMiAxOC40OTUzQzI0LjY0NDggMTguMzE4NSAyNC4yMTIxIDE4LjA0MzcgMjMuODE4MiAxNy43MDkxQzIzLjI2ODEgMTcuMjk1NiAyMi40MTgxIDE1Ljc1OCAyMS43NzA0IDE0LjM3MjJDMjEuMzE4IDEzLjQwNjggMjAuNTI3NSAxMi43OTc4IDIwLjA2NTMgMTIuNzc4NUMxOS41NTQzIDEyLjc1NjQgMTguNzEwNSAxMy4zMjEyIDE4LjIzNTIgMTQuMjkwMkMxNy44NzA3IDE1LjAyNTcgMTcuMzcyOSAxNS43MjY3IDE3LjA3MDIgMTYuMzkyN0MxNi4wNTc5IDE4LjYyMTMgMTMuNTA1NiAxOS4wMDk2IDEwLjg3ODggMTkuMDAwMUMxMC4xNjkyIDE4Ljk5NyA5LjQ2MjY3IDE4LjkzNjcgOC43NDk4OCAxOC44MTM2QzYuMTc4NjEgMTguMzYyMiA1LjQ0NjA4IDE4LjA1OTIgNC4zODE3MSAxNS43OTZDMy4wMzc0MiAxMi45NDg5IDIuODU4NDcgMTEuNDI3IDAuNDEzOTM5IDkuMTcwMDZDMC4zMDMzNCA5LjAzNzU1IDAuMjI0Nzg3IDguOTE0NzQgMC4xNzI3MjggOC43OTc5OUMtMC4wNDg1MzU3IDguNTUxNzcgLTAuMDYwOTYwMiA4LjE4MjAzIDAuMTU3MTAzIDcuOTIwMDZMNC42NDUzOCAyLjU3OTI0QzQuNjgxMiAyLjUzODE4IDQuNzY5MSAyLjQzMDkxIDQuODYwMjMgMi4zMjA0NUM1LjY0NDY1IDEuMzczNTMgNi4yNzk0MyAwLjYwOTY2NyA3LjY5NTE5IDAuMTg2NjYyQzguMTA1MjQgMC4wNjM1ODA5IDguNTI1MzcgMC4wMDMzMTk0NyA4Ljk0NTE5IDAuMDAwMTM4NTIyQzkuMzU4NTEgLTAuMDAzMDE3NTMgOS43Njg4NCAwLjA0NzgyNTYgMTAuMTc1NyAwLjE0NTY0NkMxMC41NTMyIDAuMjM0MDMyIDEwLjc4NDcgMC42MDY4NTQgMTAuNjkwMyAwLjk2OTg2NUMxMC41OTkgMS4zMzU4NSAxMC4yMTQ5IDEuNTU5NDMgOS44NDA3IDEuNDY3OTFDOS41Mzc5OSAxLjM5NTMxIDkuMjQxNzEgMS4zNTczNCA4Ljk1MjAyIDEuMzYwNDlDOC42NzIwOSAxLjM2MzY1IDguMzg4NTQgMS40MDIyMSA4LjEwNTM0IDEuNDg3NDRDNy4xMDMwMSAxLjc4NzM2IDYuNTg4NjUgMi40MDYwMiA1Ljk1Mzk4IDMuMTcyOTlDNS45MDE5MyAzLjIzNjA4IDUuODQ2MTUgMy4zMDIgNS43MzIzIDMuNDM3NjRMMi4yNDMwNCA3LjU5NDg3QzIuMzQzOTUgNy41ODg1NSAyLjQ1MjAzIDcuNTgyNjIgMi41NTk0NSA3LjU3NjMxQzcuMDEyMiA2Ljk5ODc1IDExLjQzNTggNy40MzcxMSAxNS44MyA5LjE5ODM4QzE3LjQ2MDcgOS44NTE3OSAxOS4wNjIxIDExLjA4OTIgMjAuODQyNiAxMC42Mzc4QzIyLjAyMDkgMTAuMzM4IDIzLjc0MjggOS4yMzM1NCAyNS4xNjIgOC43MzE1OEMyOS41MzM2IDcuMTg4IDMzLjQzNjkgNy4xODE4MyAzNy44MjggNy42ODM3M0wzNC4yNjM1IDMuNDM3NjRDMzQuMTQ5NyAzLjMwMjA1IDM0LjA5MzkgMy4yMzYwOSAzNC4wNDE5IDMuMTcyOTlDMzMuNDA3MiAyLjQwNTk3IDMyLjg5MyAxLjc4NzMxIDMxLjg5MDUgMS40ODc0NEMzMS42MDczIDEuNDAyMjIgMzEuMzI3IDEuMzYwNDkgMzEuMDQzOCAxLjM2MDQ5QzMwLjc1NDQgMS4zNTczOCAzMC40NTg1IDEuMzk1NDMgMzAuMTU2MSAxLjQ2NzkxQzI5Ljc3ODcgMS41NTYyNiAyOS4zOTc5IDEuMzM1NzcgMjkuMzA2NSAwLjk2OTg2NUMyOS4yMTU0IDAuNjAzNzU2IDI5LjQ0MjcgMC4yMzQxMDcgMjkuODIwMiAwLjE0NTY0NkMzMC4yMzAyIDAuMDQ3ODI4MiAzMC42NDAzIC0wLjAwMjk3NjI3IDMxLjA1MzYgMC4wMDAxMzg1MjJaTTEwLjc3MTQgOS4wMDZDOC4zMzY2MyA4LjQ1Njc5IDUuMTc1OTkgOC4xMDAyOCA0LjMxMzM1IDkuNjAyNjhDMy42NjU1OSAxMC43Mjk2IDQuMzI5NjQgMTIuNDYgNC42NTUxNSAxMy42NDM3QzQuOTU0NjEgMTQuNjUzNyA1LjM1NTQxIDE1LjQ5NjQgNS44NjMxNiAxNi4xNDY2QzcuNTY1NTQgMTguMzI0NCAxMS42NTk4IDE4LjI3NDMgMTQuMDU1NSAxNy40NjAxQzE1Ljc1MTQgMTcuMDc4MSAxNi43OTY0IDE1Ljc4MDEgMTYuNzQxMSAxMi45NDU1QzE2Ljc4OTcgMTAuMzAwNCAxMi45MzkyIDkuNDk1MjYgMTAuNzcxNCA5LjAwNlpNMzUuNjQwNSA5LjYwMjY4QzM0Ljc3NzggOC4xMDAzMSAzMS42MTcyIDguNDU2NzggMjkuMTgyNSA5LjAwNkMyNy4wMTQ3IDkuNDk1MjYgMjMuMTY0MiAxMC4zMDA0IDIzLjIxMjggMTIuOTQ1NUMyMy4xNTc0IDE1Ljc4MDEgMjQuMjAyNCAxNy4wNzgxIDI1Ljg5ODMgMTcuNDYwMUMyOC4yOTQgMTguMjc0MyAzMi4zODgzIDE4LjMyNDMgMzQuMDkwNyAxNi4xNDY2QzM0LjYwMTcgMTUuNDk2NCAzNC45OTkyIDE0LjY1MzcgMzUuMjk4NyAxMy42NDM3QzM1LjYyNDIgMTIuNDYgMzYuMjg4MyAxMC43Mjk2IDM1LjY0MDUgOS42MDI2OFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjOThBMkIzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmb290ZXItYmxvY2tcIiBjbGFzcz1cImZvb3Rlci1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBteS00XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWF0bWFwLXR4dFwiPkhpZ2g8L3NwYW4+XHJcbiAgICAgICAgPHN2ZyBzdHlsZT1cImhlaWdodDogMThweDsgd2lkdGg6IGF1dG87XCIgd2lkdGg9XCI0NTJcIiBoZWlnaHQ9XCIzOVwiIHZpZXdCb3g9XCIwIDAgNDUyIDM5XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDUyXCIgaGVpZ2h0PVwiMzlcIiByeD1cIjZcIiBmaWxsPVwidXJsKCNwYWludDBfbGluZWFyXzY2NzZfMTg1ODcyKVwiIC8+XHJcbiAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicGFpbnQwX2xpbmVhcl82Njc2XzE4NTg3MlwiIHgxPVwiMFwiIHkxPVwiMTkuNVwiIHgyPVwiNDUyXCIgeTI9XCIxOS41XCJcclxuICAgICAgICAgICAgICAgICAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPVwiI0ZDQTVBNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC4yXCIgc3RvcC1jb2xvcj1cIiNGRUNBQ0FcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjAuNFwiIHN0b3AtY29sb3I9XCIjOTNDNUZEXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwLjZcIiBzdG9wLWNvbG9yPVwiI0JBRTZGRFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMC44XCIgc3RvcC1jb2xvcj1cIiM4NkVGQUNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjFcIiBzdG9wLWNvbG9yPVwiI0JCRjdEMFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWF0bWFwLXR4dCB0ZXh0LW5vd3JhcFwiPkxvdyBlbmdhZ2VtZW50IHJhdGU8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPHNlY3Rpb24gaWQ9XCJ0ZW1wbGF0ZS1zdW1tYXJ5LXNrZWxldG9uXCIgW2NsYXNzLmQtbm9uZV09XCIhaXNQYWdlTG9hZGluZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+XG4iXX0=