tango-app-ui-store-builder 1.0.73 → 1.0.75

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.
@@ -82,6 +82,7 @@ export class IvmLogicExplorerComponent {
82
82
  ];
83
83
  processedData = [];
84
84
  userJourney = { value: 0, premium: 0 };
85
+ firstType = null;
85
86
  ngOnChanges(changes) {
86
87
  if (changes['fixtures'] || changes['selectedFixture']) {
87
88
  this.processFixtures();
@@ -98,6 +99,8 @@ export class IvmLogicExplorerComponent {
98
99
  const seenFixtures = new Set();
99
100
  let valueCount = 0;
100
101
  let premiumCount = 0;
102
+ let firstValueFixtureNumber = null;
103
+ let firstPremiumFixtureNumber = null;
101
104
  fixturesToProcess.forEach((fixture) => {
102
105
  const templateGroup = fixture?.templateGroupName?.trim();
103
106
  if (!templateGroup)
@@ -111,11 +114,18 @@ export class IvmLogicExplorerComponent {
111
114
  return;
112
115
  }
113
116
  seenFixtures.add(fixtureId);
117
+ const fixtureNumber = fixture.fixtureNumber || fixture.associatedElementFixtureNumber || Infinity;
114
118
  if (valueGroups.includes(templateGroup)) {
115
119
  valueCount++;
120
+ if (firstValueFixtureNumber === null || fixtureNumber < firstValueFixtureNumber) {
121
+ firstValueFixtureNumber = fixtureNumber;
122
+ }
116
123
  }
117
124
  else if (premiumGroups.includes(templateGroup)) {
118
125
  premiumCount++;
126
+ if (firstPremiumFixtureNumber === null || fixtureNumber < firstPremiumFixtureNumber) {
127
+ firstPremiumFixtureNumber = fixtureNumber;
128
+ }
119
129
  }
120
130
  if (!groupedFixtures[templateGroup]) {
121
131
  groupedFixtures[templateGroup] = {
@@ -164,6 +174,19 @@ export class IvmLogicExplorerComponent {
164
174
  }
165
175
  });
166
176
  this.userJourney = { value: valueCount, premium: premiumCount };
177
+ // Determine which type appears first based on fixture numbering
178
+ if (firstValueFixtureNumber !== null && firstPremiumFixtureNumber !== null) {
179
+ this.firstType = firstValueFixtureNumber < firstPremiumFixtureNumber ? 'value' : 'premium';
180
+ }
181
+ else if (firstValueFixtureNumber !== null) {
182
+ this.firstType = 'value';
183
+ }
184
+ else if (firstPremiumFixtureNumber !== null) {
185
+ this.firstType = 'premium';
186
+ }
187
+ else {
188
+ this.firstType = null;
189
+ }
167
190
  this.processedData = Object.values(groupedFixtures).map((group) => {
168
191
  return {
169
192
  ...group,
@@ -194,14 +217,14 @@ export class IvmLogicExplorerComponent {
194
217
  return `#${toHex(newR)}${toHex(newG)}${toHex(newB)}`;
195
218
  }
196
219
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IvmLogicExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
197
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: IvmLogicExplorerComponent, isStandalone: true, selector: "ivm-logic-explorer", inputs: { fixtures: "fixtures", selectedFixture: "selectedFixture" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"ivm-logic-explorer\">\r\n <div class=\"d-flex justify-content-between align-items-center my-5\">\r\n <h1>\r\n Allocation Logic Applied\r\n </h1>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center bg-white\" (click)=\"onClickViewSheet()\">\r\n <svg class=\"me-2\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M0.833984 7.50163C0.833984 7.50163 4.16732 0.834961 10.0007 0.834961C15.834 0.834961 19.1673 7.50163 19.1673 7.50163C19.1673 7.50163 15.834 14.1683 10.0007 14.1683C4.16732 14.1683 0.833984 7.50163 0.833984 7.50163Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 10.0016C11.3814 10.0016 12.5007 8.88234 12.5007 7.50163C12.5007 6.12092 11.3814 5.00163 10.0007 5.00163C8.61994 5.00163 7.50065 6.12092 7.50065 7.50163C7.50065 8.88234 8.61994 10.0016 10.0007 10.0016Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>View logic sheet</span>\r\n \r\n </button>\r\n </div>\r\n\r\n <div class=\"explorer-body\">\r\n\r\n <h2>User Journey:</h2>\r\n\r\n <div class=\"d-flex align-items-center mb-7\">\r\n <div class=\"badge block\">Entrance</div>\r\n <svg width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n\r\n </div>\r\n\r\n <ng-container *ngFor=\"let group of processedData\">\r\n <div class=\"mb-7\" *ngIf=\"group.fixtures.length > 0\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h2>If {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's have' : ' has' }} {{ group.templateGroupName }}</h2>\r\n <div class=\"badge\" [ngClass]=\"group.type\"> {{ group.type === 'value' ? 'Value' : 'Premium' }} ({{ group.fixtures.length }}) </div>\r\n </div>\r\n\r\n <p>{{ group.type === 'value' ? 'Value' : 'Premium' }} logic for {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's' : '' }} with {{ group.templateGroupName }} is below:</p>\r\n\r\n <div class=\"d-flex gap-3 overflow-x-auto mt-5\">\r\n <div class=\"fixture-block\" *ngFor=\"let fixture of group.fixtures\" \r\n [style.background-color]=\"fixture.headerColor\">\r\n <h3 class=\"header\">{{ fixture.header?.label || group.header }}</h3>\r\n\r\n <div class=\"divider\" [style.border-color]=\"fixture.dividerColor\"></div>\r\n\r\n <ng-container>\r\n <p *ngFor=\"let shelfGroup of (fixture.groupedShelves || [])\">{{ shelfGroup.brand }}</p>\r\n <p *ngIf=\"!fixture.groupedShelves || fixture.groupedShelves.length === 0\">No products assigned</p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"processedData.length === 0\" class=\"text-center py-5\">\r\n <p>No allocation data available</p>\r\n </div>\r\n\r\n </div>\r\n\r\n</section>", styles: ["#ivm-logic-explorer h1{font-weight:600;font-size:16px;line-height:24px;color:#1d2939;margin:0}#ivm-logic-explorer .explorer-body{background:#f9fafb;padding:12px 16px}#ivm-logic-explorer .explorer-body h2{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#1d2939;margin-bottom:6px}#ivm-logic-explorer .explorer-body p{margin:0;font-weight:500;font-size:12px;line-height:18px;color:#475467}#ivm-logic-explorer .explorer-body .badge{font-weight:500;font-size:14px;line-height:20px;text-align:center;color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.block{color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.value{background:#eaf8ff;color:#009bf3}#ivm-logic-explorer .explorer-body .badge.premium{background:#f4f3ff;color:#5925dc}#ivm-logic-explorer .explorer-body .overflow-x-auto{overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}#ivm-logic-explorer .explorer-body .overflow-x-auto::-webkit-scrollbar{display:none}#ivm-logic-explorer .explorer-body .fixture-block{padding:12px;background-color:#f2f4f7;min-width:120px;flex-shrink:0;border-radius:5px}#ivm-logic-explorer .explorer-body .fixture-block .header{font-weight:600;font-size:12px;line-height:18px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block p{font-family:Inter;font-weight:400;font-size:10px;line-height:18px;letter-spacing:0%;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block .divider{border-top:1px solid #344054;margin-bottom:6px}#ivm-logic-explorer .explorer-body .fixture-block.trending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.trending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.innovation{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.innovation .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.shades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.shades .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.kids{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.kids .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades .divider{border-color:#99daff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
220
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: IvmLogicExplorerComponent, isStandalone: true, selector: "ivm-logic-explorer", inputs: { fixtures: "fixtures", selectedFixture: "selectedFixture" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"ivm-logic-explorer\">\r\n <div class=\"d-flex justify-content-between align-items-center my-5\">\r\n <h1>\r\n Allocation Logic Applied\r\n </h1>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center bg-white\" (click)=\"onClickViewSheet()\">\r\n <svg class=\"me-2\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M0.833984 7.50163C0.833984 7.50163 4.16732 0.834961 10.0007 0.834961C15.834 0.834961 19.1673 7.50163 19.1673 7.50163C19.1673 7.50163 15.834 14.1683 10.0007 14.1683C4.16732 14.1683 0.833984 7.50163 0.833984 7.50163Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 10.0016C11.3814 10.0016 12.5007 8.88234 12.5007 7.50163C12.5007 6.12092 11.3814 5.00163 10.0007 5.00163C8.61994 5.00163 7.50065 6.12092 7.50065 7.50163C7.50065 8.88234 8.61994 10.0016 10.0007 10.0016Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>View logic sheet</span>\r\n \r\n </button>\r\n </div>\r\n\r\n <div class=\"explorer-body\">\r\n\r\n <h2>User Journey:</h2>\r\n\r\n <div class=\"d-flex align-items-center mb-7\">\r\n <div class=\"badge block\">Entrance</div>\r\n <svg width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n \r\n <!-- Show Value first if it appears first in numbering -->\r\n <ng-container *ngIf=\"firstType === 'value' || (firstType === null && userJourney.value > 0)\">\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n </ng-container>\r\n \r\n <!-- Show Premium first if it appears first in numbering -->\r\n <ng-container *ngIf=\"firstType === 'premium'\">\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <ng-container *ngFor=\"let group of processedData\">\r\n <div class=\"mb-7\" *ngIf=\"group.fixtures.length > 0\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h2>If {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's have' : ' has' }} {{ group.templateGroupName }}</h2>\r\n <div class=\"badge\" [ngClass]=\"group.type\"> {{ group.type === 'value' ? 'Value' : 'Premium' }} ({{ group.fixtures.length }}) </div>\r\n </div>\r\n\r\n <p>{{ group.type === 'value' ? 'Value' : 'Premium' }} logic for {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's' : '' }} with {{ group.templateGroupName }} is below:</p>\r\n\r\n <div class=\"d-flex gap-3 overflow-x-auto mt-5\">\r\n <div class=\"fixture-block\" *ngFor=\"let fixture of group.fixtures\" \r\n [style.background-color]=\"fixture.headerColor\">\r\n <h3 class=\"header\">{{ fixture.header?.label || group.header }}</h3>\r\n\r\n <div class=\"divider\" [style.border-color]=\"fixture.dividerColor\"></div>\r\n\r\n <ng-container>\r\n <p *ngFor=\"let shelfGroup of (fixture.groupedShelves || [])\">{{ shelfGroup.brand }}</p>\r\n <p *ngIf=\"!fixture.groupedShelves || fixture.groupedShelves.length === 0\">No products assigned</p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"processedData.length === 0\" class=\"text-center py-5\">\r\n <p>No allocation data available</p>\r\n </div>\r\n\r\n </div>\r\n\r\n</section>", styles: ["#ivm-logic-explorer h1{font-weight:600;font-size:16px;line-height:24px;color:#1d2939;margin:0}#ivm-logic-explorer .explorer-body{background:#f9fafb;padding:12px 16px}#ivm-logic-explorer .explorer-body h2{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#1d2939;margin-bottom:6px}#ivm-logic-explorer .explorer-body p{margin:0;font-weight:500;font-size:12px;line-height:18px;color:#475467}#ivm-logic-explorer .explorer-body .badge{font-weight:500;font-size:14px;line-height:20px;text-align:center;color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.block{color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.value{background:#eaf8ff;color:#009bf3}#ivm-logic-explorer .explorer-body .badge.premium{background:#f4f3ff;color:#5925dc}#ivm-logic-explorer .explorer-body .overflow-x-auto{overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}#ivm-logic-explorer .explorer-body .overflow-x-auto::-webkit-scrollbar{display:none}#ivm-logic-explorer .explorer-body .fixture-block{padding:12px;background-color:#f2f4f7;min-width:120px;flex-shrink:0;border-radius:5px}#ivm-logic-explorer .explorer-body .fixture-block .header{font-weight:600;font-size:12px;line-height:18px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block p{font-family:Inter;font-weight:400;font-size:10px;line-height:18px;letter-spacing:0%;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block .divider{border-top:1px solid #344054;margin-bottom:6px}#ivm-logic-explorer .explorer-body .fixture-block.trending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.trending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.innovation{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.innovation .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.shades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.shades .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.kids{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.kids .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades .divider{border-color:#99daff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
198
221
  }
199
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IvmLogicExplorerComponent, decorators: [{
200
223
  type: Component,
201
- args: [{ selector: "ivm-logic-explorer", standalone: true, imports: [CommonModule], template: "<section id=\"ivm-logic-explorer\">\r\n <div class=\"d-flex justify-content-between align-items-center my-5\">\r\n <h1>\r\n Allocation Logic Applied\r\n </h1>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center bg-white\" (click)=\"onClickViewSheet()\">\r\n <svg class=\"me-2\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M0.833984 7.50163C0.833984 7.50163 4.16732 0.834961 10.0007 0.834961C15.834 0.834961 19.1673 7.50163 19.1673 7.50163C19.1673 7.50163 15.834 14.1683 10.0007 14.1683C4.16732 14.1683 0.833984 7.50163 0.833984 7.50163Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 10.0016C11.3814 10.0016 12.5007 8.88234 12.5007 7.50163C12.5007 6.12092 11.3814 5.00163 10.0007 5.00163C8.61994 5.00163 7.50065 6.12092 7.50065 7.50163C7.50065 8.88234 8.61994 10.0016 10.0007 10.0016Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>View logic sheet</span>\r\n \r\n </button>\r\n </div>\r\n\r\n <div class=\"explorer-body\">\r\n\r\n <h2>User Journey:</h2>\r\n\r\n <div class=\"d-flex align-items-center mb-7\">\r\n <div class=\"badge block\">Entrance</div>\r\n <svg width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n\r\n </div>\r\n\r\n <ng-container *ngFor=\"let group of processedData\">\r\n <div class=\"mb-7\" *ngIf=\"group.fixtures.length > 0\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h2>If {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's have' : ' has' }} {{ group.templateGroupName }}</h2>\r\n <div class=\"badge\" [ngClass]=\"group.type\"> {{ group.type === 'value' ? 'Value' : 'Premium' }} ({{ group.fixtures.length }}) </div>\r\n </div>\r\n\r\n <p>{{ group.type === 'value' ? 'Value' : 'Premium' }} logic for {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's' : '' }} with {{ group.templateGroupName }} is below:</p>\r\n\r\n <div class=\"d-flex gap-3 overflow-x-auto mt-5\">\r\n <div class=\"fixture-block\" *ngFor=\"let fixture of group.fixtures\" \r\n [style.background-color]=\"fixture.headerColor\">\r\n <h3 class=\"header\">{{ fixture.header?.label || group.header }}</h3>\r\n\r\n <div class=\"divider\" [style.border-color]=\"fixture.dividerColor\"></div>\r\n\r\n <ng-container>\r\n <p *ngFor=\"let shelfGroup of (fixture.groupedShelves || [])\">{{ shelfGroup.brand }}</p>\r\n <p *ngIf=\"!fixture.groupedShelves || fixture.groupedShelves.length === 0\">No products assigned</p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"processedData.length === 0\" class=\"text-center py-5\">\r\n <p>No allocation data available</p>\r\n </div>\r\n\r\n </div>\r\n\r\n</section>", styles: ["#ivm-logic-explorer h1{font-weight:600;font-size:16px;line-height:24px;color:#1d2939;margin:0}#ivm-logic-explorer .explorer-body{background:#f9fafb;padding:12px 16px}#ivm-logic-explorer .explorer-body h2{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#1d2939;margin-bottom:6px}#ivm-logic-explorer .explorer-body p{margin:0;font-weight:500;font-size:12px;line-height:18px;color:#475467}#ivm-logic-explorer .explorer-body .badge{font-weight:500;font-size:14px;line-height:20px;text-align:center;color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.block{color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.value{background:#eaf8ff;color:#009bf3}#ivm-logic-explorer .explorer-body .badge.premium{background:#f4f3ff;color:#5925dc}#ivm-logic-explorer .explorer-body .overflow-x-auto{overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}#ivm-logic-explorer .explorer-body .overflow-x-auto::-webkit-scrollbar{display:none}#ivm-logic-explorer .explorer-body .fixture-block{padding:12px;background-color:#f2f4f7;min-width:120px;flex-shrink:0;border-radius:5px}#ivm-logic-explorer .explorer-body .fixture-block .header{font-weight:600;font-size:12px;line-height:18px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block p{font-family:Inter;font-weight:400;font-size:10px;line-height:18px;letter-spacing:0%;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block .divider{border-top:1px solid #344054;margin-bottom:6px}#ivm-logic-explorer .explorer-body .fixture-block.trending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.trending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.innovation{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.innovation .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.shades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.shades .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.kids{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.kids .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades .divider{border-color:#99daff}\n"] }]
224
+ args: [{ selector: "ivm-logic-explorer", standalone: true, imports: [CommonModule], template: "<section id=\"ivm-logic-explorer\">\r\n <div class=\"d-flex justify-content-between align-items-center my-5\">\r\n <h1>\r\n Allocation Logic Applied\r\n </h1>\r\n\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center bg-white\" (click)=\"onClickViewSheet()\">\r\n <svg class=\"me-2\" width=\"20\" height=\"15\" viewBox=\"0 0 20 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M0.833984 7.50163C0.833984 7.50163 4.16732 0.834961 10.0007 0.834961C15.834 0.834961 19.1673 7.50163 19.1673 7.50163C19.1673 7.50163 15.834 14.1683 10.0007 14.1683C4.16732 14.1683 0.833984 7.50163 0.833984 7.50163Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.0007 10.0016C11.3814 10.0016 12.5007 8.88234 12.5007 7.50163C12.5007 6.12092 11.3814 5.00163 10.0007 5.00163C8.61994 5.00163 7.50065 6.12092 7.50065 7.50163C7.50065 8.88234 8.61994 10.0016 10.0007 10.0016Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>View logic sheet</span>\r\n \r\n </button>\r\n </div>\r\n\r\n <div class=\"explorer-body\">\r\n\r\n <h2>User Journey:</h2>\r\n\r\n <div class=\"d-flex align-items-center mb-7\">\r\n <div class=\"badge block\">Entrance</div>\r\n <svg width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n \r\n <!-- Show Value first if it appears first in numbering -->\r\n <ng-container *ngIf=\"firstType === 'value' || (firstType === null && userJourney.value > 0)\">\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n </ng-container>\r\n \r\n <!-- Show Premium first if it appears first in numbering -->\r\n <ng-container *ngIf=\"firstType === 'premium'\">\r\n <div class=\"badge premium\" *ngIf=\"userJourney.premium > 0\">Premium ({{ userJourney.premium }})</div>\r\n <svg *ngIf=\"userJourney.value > 0 && userJourney.premium > 0\" width=\"15\" height=\"8\" viewBox=\"0 0 15 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M14.3536 4.03568C14.5488 3.84042 14.5488 3.52384 14.3536 3.32858L11.1716 0.146595C10.9763 -0.0486672 10.6597 -0.0486672 10.4645 0.146595C10.2692 0.341857 10.2692 0.65844 10.4645 0.853702L13.2929 3.68213L10.4645 6.51056C10.2692 6.70582 10.2692 7.0224 10.4645 7.21766C10.6597 7.41293 10.9763 7.41293 11.1716 7.21766L14.3536 4.03568ZM0 3.68213V4.18213H14V3.68213V3.18213H0V3.68213Z\"\r\n fill=\"#344054\" />\r\n </svg>\r\n <div class=\"badge value\" *ngIf=\"userJourney.value > 0\">Value ({{ userJourney.value }})</div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <ng-container *ngFor=\"let group of processedData\">\r\n <div class=\"mb-7\" *ngIf=\"group.fixtures.length > 0\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h2>If {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's have' : ' has' }} {{ group.templateGroupName }}</h2>\r\n <div class=\"badge\" [ngClass]=\"group.type\"> {{ group.type === 'value' ? 'Value' : 'Premium' }} ({{ group.fixtures.length }}) </div>\r\n </div>\r\n\r\n <p>{{ group.type === 'value' ? 'Value' : 'Premium' }} logic for {{ group.fixtures.length }} fixture{{ group.fixtures.length > 1 ? 's' : '' }} with {{ group.templateGroupName }} is below:</p>\r\n\r\n <div class=\"d-flex gap-3 overflow-x-auto mt-5\">\r\n <div class=\"fixture-block\" *ngFor=\"let fixture of group.fixtures\" \r\n [style.background-color]=\"fixture.headerColor\">\r\n <h3 class=\"header\">{{ fixture.header?.label || group.header }}</h3>\r\n\r\n <div class=\"divider\" [style.border-color]=\"fixture.dividerColor\"></div>\r\n\r\n <ng-container>\r\n <p *ngFor=\"let shelfGroup of (fixture.groupedShelves || [])\">{{ shelfGroup.brand }}</p>\r\n <p *ngIf=\"!fixture.groupedShelves || fixture.groupedShelves.length === 0\">No products assigned</p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div *ngIf=\"processedData.length === 0\" class=\"text-center py-5\">\r\n <p>No allocation data available</p>\r\n </div>\r\n\r\n </div>\r\n\r\n</section>", styles: ["#ivm-logic-explorer h1{font-weight:600;font-size:16px;line-height:24px;color:#1d2939;margin:0}#ivm-logic-explorer .explorer-body{background:#f9fafb;padding:12px 16px}#ivm-logic-explorer .explorer-body h2{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#1d2939;margin-bottom:6px}#ivm-logic-explorer .explorer-body p{margin:0;font-weight:500;font-size:12px;line-height:18px;color:#475467}#ivm-logic-explorer .explorer-body .badge{font-weight:500;font-size:14px;line-height:20px;text-align:center;color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.block{color:#344054;background:#f2f4f7}#ivm-logic-explorer .explorer-body .badge.value{background:#eaf8ff;color:#009bf3}#ivm-logic-explorer .explorer-body .badge.premium{background:#f4f3ff;color:#5925dc}#ivm-logic-explorer .explorer-body .overflow-x-auto{overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}#ivm-logic-explorer .explorer-body .overflow-x-auto::-webkit-scrollbar{display:none}#ivm-logic-explorer .explorer-body .fixture-block{padding:12px;background-color:#f2f4f7;min-width:120px;flex-shrink:0;border-radius:5px}#ivm-logic-explorer .explorer-body .fixture-block .header{font-weight:600;font-size:12px;line-height:18px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block p{font-family:Inter;font-weight:400;font-size:10px;line-height:18px;letter-spacing:0%;vertical-align:middle;color:#000}#ivm-logic-explorer .explorer-body .fixture-block .divider{border-top:1px solid #344054;margin-bottom:6px}#ivm-logic-explorer .explorer-body .fixture-block.trending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.trending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.innovation{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.innovation .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.workessentials .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.shades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.shades .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.kids{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.kids .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.tentpole .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.hustlr .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumtrending .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumwork .divider{border-color:#99daff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades{background-color:#eaf8ff}#ivm-logic-explorer .explorer-body .fixture-block.premiumshades .divider{border-color:#99daff}\n"] }]
202
225
  }], propDecorators: { fixtures: [{
203
226
  type: Input
204
227
  }], selectedFixture: [{
205
228
  type: Input
206
229
  }] } });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXZtLWxvZ2ljLWV4cGxvcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2l2bS1sb2dpYy1leHBsb3Jlci9pdm0tbG9naWMtZXhwbG9yZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvaXZtLWxvZ2ljLWV4cGxvcmVyL2l2bS1sb2dpYy1leHBsb3Jlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUMzQixRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQ3JCLGVBQWUsR0FBUSxJQUFJLENBQUM7SUFFckMsZUFBZSxHQUFHO1FBQ2hCO1lBQ0UsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ3hDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7YUFDOUM7WUFDRCxJQUFJLEVBQUUsT0FBTztTQUNkO1FBQ0Q7WUFDRSxpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTthQUNyQztZQUNELElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFDRDtZQUNF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QUFFLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQixPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkQsQ0FBQzt3R0E3TlUseUJBQXlCOzRGQUF6Qix5QkFBeUIseUtDVnRDLCs1SUF3RVUsZzZHRGhFRSxZQUFZOzs0RkFFWCx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBR2xCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzs4QkFHZCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJpdm0tbG9naWMtZXhwbG9yZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2l2bS1sb2dpYy1leHBsb3Jlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vaXZtLWxvZ2ljLWV4cGxvcmVyLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEl2bUxvZ2ljRXhwbG9yZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkRml4dHVyZTogYW55ID0gbnVsbDtcclxuXHJcbiAgYWxsb2NhdGlvbkxvZ2ljID0gW1xyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ1ZDIEV5ZSAvIExLIEFpcicsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1RyZW5kaW5nJywgY29sb3I6ICcjRUFGOEZGJyB9LFxyXG4gICAgICAgIHsgbmFtZTogJ0lubm92YXRpb24nLCBjb2xvcjogJyNGRkZBRUInIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnV29yayBFc3NlbnRpYWxzJywgY29sb3I6ICcjRUNGREYzJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IFwidmFsdWVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGVtcGxhdGVHcm91cE5hbWU6ICdWQyBTdW4nLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdTaGFkZXMnLCBjb2xvcjogJyNGRUYzQzcnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJ2YWx1ZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ0hvb3BlcicsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ0tpZHMnLCBjb2xvcjogJyNGQ0U3RjMnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJ2YWx1ZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ1RlbnRwb2xlJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnVGVudHBvbGUnLCBjb2xvcjogJyNEMUZBRTUnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJ2YWx1ZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ0h1c3RscicsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ0h1c3RscicsIGNvbG9yOiAnI0UwRTdGRicgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInZhbHVlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnSkogRXllICsgT0QnLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdQcmVtaXVtIFRyZW5kaW5nJywgY29sb3I6ICcjRjRGM0ZGJyB9LFxyXG4gICAgICAgIHsgbmFtZTogJ1ByZW1pdW0gV29yaycsIGNvbG9yOiAnI0Q5RDZGRScgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInByZW1pdW1cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGVtcGxhdGVHcm91cE5hbWU6ICdKSiBTdW4nLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdQcmVtaXVtIFNoYWRlcycsIGNvbG9yOiAnI0ZERjJGOCcgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInByZW1pdW1cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGVtcGxhdGVHcm91cE5hbWU6ICdMUEwnLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdQcmVtaXVtIFRyZW5kaW5nJywgY29sb3I6ICcjRjRGM0ZGJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IFwicHJlbWl1bVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ0Zvc3NpbCcsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1ByZW1pdW0gVHJlbmRpbmcnLCBjb2xvcjogJyNGNEYzRkYnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJwcmVtaXVtXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnTWVsbGVyJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnUHJlbWl1bSBTaGFkZXMnLCBjb2xvcjogJyNGREYyRjgnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJwcmVtaXVtXCJcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgcHJvY2Vzc2VkRGF0YTogYW55W10gPSBbXTtcclxuICB1c2VySm91cm5leTogeyB2YWx1ZTogbnVtYmVyOyBwcmVtaXVtOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAsIHByZW1pdW06IDAgfTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2ZpeHR1cmVzJ10gfHwgY2hhbmdlc1snc2VsZWN0ZWRGaXh0dXJlJ10pIHtcclxuICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlcygpIHtcclxuICAgIC8vIGNvbnN0IGZpeHR1cmVzVG9Qcm9jZXNzID0gdGhpcy5zZWxlY3RlZEZpeHR1cmUgXHJcbiAgICAvLyAgID8gW3RoaXMuc2VsZWN0ZWRGaXh0dXJlXSBcclxuICAgIC8vICAgOiAodGhpcy5maXh0dXJlcyB8fCBbXSk7XHJcbiAgICBcclxuICAgIGNvbnN0IGZpeHR1cmVzVG9Qcm9jZXNzID0gdGhpcy5maXh0dXJlcyB8fCBbXVxyXG5cclxuICAgIGNvbnN0IHZhbHVlR3JvdXBzID0gW1wiVkMgRXllIC8gTEsgQWlyXCIsIFwiVkMgU3VuXCIsIFwiSG9vcGVyXCIsIFwiVGVudHBvbGVcIiwgXCJIdXN0bHJcIl07XHJcbiAgICBjb25zdCBwcmVtaXVtR3JvdXBzID0gW1wiSkogRXllICsgT0RcIiwgXCJKSiBTdW5cIiwgXCJMUExcIiwgXCJGb3NzaWxcIiwgXCJNZWxsZXJcIl07XHJcblxyXG4gICAgY29uc3QgZ3JvdXBlZEZpeHR1cmVzOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IHNlZW5GaXh0dXJlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgbGV0IHZhbHVlQ291bnQgPSAwO1xyXG4gICAgbGV0IHByZW1pdW1Db3VudCA9IDA7XHJcblxyXG4gICAgZml4dHVyZXNUb1Byb2Nlc3MuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlR3JvdXAgPSBmaXh0dXJlPy50ZW1wbGF0ZUdyb3VwTmFtZT8udHJpbSgpO1xyXG5cclxuICAgICAgaWYgKCF0ZW1wbGF0ZUdyb3VwKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBsb2dpY0l0ZW0gPSB0aGlzLmFsbG9jYXRpb25Mb2dpYy5maW5kKFxyXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnRlbXBsYXRlR3JvdXBOYW1lID09PSB0ZW1wbGF0ZUdyb3VwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAobG9naWNJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUlkID0gZml4dHVyZS5faWQgfHwgXHJcbiAgICAgICAgICBmaXh0dXJlLmlkIHx8IFxyXG4gICAgICAgICAgYCR7Zml4dHVyZS5maXh0dXJlTnVtYmVyIHx8IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyIHx8ICcnfV8ke3RlbXBsYXRlR3JvdXB9XyR7Zml4dHVyZT8uaGVhZGVyPy5sYWJlbCB8fCAnJ31gO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChzZWVuRml4dHVyZXMuaGFzKGZpeHR1cmVJZCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2VlbkZpeHR1cmVzLmFkZChmaXh0dXJlSWQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh2YWx1ZUdyb3Vwcy5pbmNsdWRlcyh0ZW1wbGF0ZUdyb3VwKSkge1xyXG4gICAgICAgICAgdmFsdWVDb3VudCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJlbWl1bUdyb3Vwcy5pbmNsdWRlcyh0ZW1wbGF0ZUdyb3VwKSkge1xyXG4gICAgICAgICAgcHJlbWl1bUNvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghZ3JvdXBlZEZpeHR1cmVzW3RlbXBsYXRlR3JvdXBdKSB7XHJcbiAgICAgICAgICBncm91cGVkRml4dHVyZXNbdGVtcGxhdGVHcm91cF0gPSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiB0ZW1wbGF0ZUdyb3VwLFxyXG4gICAgICAgICAgICB0eXBlOiBsb2dpY0l0ZW0udHlwZSxcclxuICAgICAgICAgICAgZml4dHVyZXM6IFtdXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzaGVsZkNvbmZpZyA9IGZpeHR1cmUuc2hlbGZDb25maWcgfHwgW107XHJcbiAgICAgICAgY29uc3Qgem9uZUJyYW5kR3JvdXBzOiBhbnkgPSB7fTtcclxuICAgICAgICBcclxuICAgICAgICBzaGVsZkNvbmZpZy5mb3JFYWNoKChzaGVsZjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCAnVW5rbm93bic7XHJcbiAgICAgICAgICBjb25zdCBicmFuZCA9IHNoZWxmLnByb2R1Y3RCcmFuZE5hbWUgfHwgJ04vQSc7XHJcbiAgICAgICAgICBjb25zdCB6b25lQnJhbmRLZXkgPSBgJHt6b25lfV8ke2JyYW5kfWA7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICghem9uZUJyYW5kR3JvdXBzW3pvbmVCcmFuZEtleV0pIHtcclxuICAgICAgICAgICAgem9uZUJyYW5kR3JvdXBzW3pvbmVCcmFuZEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICAgICAgICBicmFuZDogYnJhbmRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBoZWFkZXJMYWJlbCA9IGZpeHR1cmU/LmhlYWRlcj8ubGFiZWw/LnRyaW0oKTtcclxuICAgICAgICBsZXQgaGVhZGVyQ29sb3IgPSAnI0YyRjRGNyc7XHJcbiAgICAgICAgbGV0IGRpdmlkZXJDb2xvciA9ICcjRDBENUREJztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoaGVhZGVyTGFiZWwpIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckNvbmZpZyA9IGxvZ2ljSXRlbS5oZWFkZXIuZmluZCgoaDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaCA9PT0gaGVhZGVyTGFiZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGgubmFtZSA9PT0gaGVhZGVyTGFiZWw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGhlYWRlckNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGhlYWRlckNvbmZpZyA9PT0gJ29iamVjdCcgJiYgaGVhZGVyQ29uZmlnLmNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyQ29sb3IgPSBoZWFkZXJDb25maWcuY29sb3I7XHJcbiAgICAgICAgICAgICAgZGl2aWRlckNvbG9yID0gdGhpcy5kYXJrZW5Db2xvcihoZWFkZXJDb25maWcuY29sb3IsIDAuMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkRml4dHVyZSA9IHtcclxuICAgICAgICAgIC4uLmZpeHR1cmUsXHJcbiAgICAgICAgICBncm91cGVkU2hlbHZlczogT2JqZWN0LnZhbHVlcyh6b25lQnJhbmRHcm91cHMpLFxyXG4gICAgICAgICAgaGVhZGVyQ29sb3I6IGhlYWRlckNvbG9yLFxyXG4gICAgICAgICAgZGl2aWRlckNvbG9yOiBkaXZpZGVyQ29sb3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGdyb3VwZWRGaXh0dXJlc1t0ZW1wbGF0ZUdyb3VwXS5maXh0dXJlcy5wdXNoKHByb2Nlc3NlZEZpeHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVzZXJKb3VybmV5ID0geyB2YWx1ZTogdmFsdWVDb3VudCwgcHJlbWl1bTogcHJlbWl1bUNvdW50IH07XHJcblxyXG4gICAgdGhpcy5wcm9jZXNzZWREYXRhID0gT2JqZWN0LnZhbHVlcyhncm91cGVkRml4dHVyZXMpLm1hcCgoZ3JvdXA6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIGZpeHR1cmVzOiBncm91cC5maXh0dXJlcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYU51bSA9IGEuZml4dHVyZU51bWJlciB8fCBhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciB8fCAwO1xyXG4gICAgICAgICAgY29uc3QgYk51bSA9IGIuZml4dHVyZU51bWJlciB8fCBiLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciB8fCAwO1xyXG4gICAgICAgICAgcmV0dXJuIGFOdW0gLSBiTnVtO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tWaWV3U2hlZXQoKSB7XHJcbiAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUFGaTN3UW4zd2xfUkNzdF9UUGFtcXhGNXVfSmJGbG5KY0RaQlJKd0dCRzQvZWRpdD9naWQ9MTEwNDUxNDk5NCNnaWQ9MTEwNDUxNDk5NCc7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIGRhcmtlbkNvbG9yKGNvbG9yOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGhleCA9IGNvbG9yLnJlcGxhY2UoJyMnLCAnJyk7XHJcbiAgICBcclxuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuICAgIFxyXG4gICAgY29uc3QgbmV3UiA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IociAqICgxIC0gYW1vdW50KSkpO1xyXG4gICAgY29uc3QgbmV3RyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoZyAqICgxIC0gYW1vdW50KSkpO1xyXG4gICAgY29uc3QgbmV3QiA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoYiAqICgxIC0gYW1vdW50KSkpO1xyXG4gICAgXHJcbiAgICBjb25zdCB0b0hleCA9IChuOiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgaGV4ID0gbi50b1N0cmluZygxNik7XHJcbiAgICAgIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gJzAnICsgaGV4IDogaGV4O1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGAjJHt0b0hleChuZXdSKX0ke3RvSGV4KG5ld0cpfSR7dG9IZXgobmV3Qil9YDtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gaWQ9XCJpdm0tbG9naWMtZXhwbG9yZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBteS01XCI+XHJcbiAgICA8aDE+XHJcbiAgICAgIEFsbG9jYXRpb24gTG9naWMgQXBwbGllZFxyXG4gICAgPC9oMT5cclxuXHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGJnLXdoaXRlXCIgKGNsaWNrKT1cIm9uQ2xpY2tWaWV3U2hlZXQoKVwiPlxyXG4gICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjAgMTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0wLjgzMzk4NCA3LjUwMTYzQzAuODMzOTg0IDcuNTAxNjMgNC4xNjczMiAwLjgzNDk2MSAxMC4wMDA3IDAuODM0OTYxQzE1LjgzNCAwLjgzNDk2MSAxOS4xNjczIDcuNTAxNjMgMTkuMTY3MyA3LjUwMTYzQzE5LjE2NzMgNy41MDE2MyAxNS44MzQgMTQuMTY4MyAxMC4wMDA3IDE0LjE2ODNDNC4xNjczMiAxNC4xNjgzIDAuODMzOTg0IDcuNTAxNjMgMC44MzM5ODQgNy41MDE2M1pcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTEwLjAwMDcgMTAuMDAxNkMxMS4zODE0IDEwLjAwMTYgMTIuNTAwNyA4Ljg4MjM0IDEyLjUwMDcgNy41MDE2M0MxMi41MDA3IDYuMTIwOTIgMTEuMzgxNCA1LjAwMTYzIDEwLjAwMDcgNS4wMDE2M0M4LjYxOTk0IDUuMDAxNjMgNy41MDA2NSA2LjEyMDkyIDcuNTAwNjUgNy41MDE2M0M3LjUwMDY1IDguODgyMzQgOC42MTk5NCAxMC4wMDE2IDEwLjAwMDcgMTAuMDAxNlpcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHNwYW4+VmlldyBsb2dpYyBzaGVldDwvc3Bhbj5cclxuICAgICAgXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImV4cGxvcmVyLWJvZHlcIj5cclxuXHJcbiAgICA8aDI+VXNlciBKb3VybmV5OjwvaDI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItN1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYmxvY2tcIj5FbnRyYW5jZTwvZGl2PlxyXG4gICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxNSA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTQuMzUzNiA0LjAzNTY4QzE0LjU0ODggMy44NDA0MiAxNC41NDg4IDMuNTIzODQgMTQuMzUzNiAzLjMyODU4TDExLjE3MTYgMC4xNDY1OTVDMTAuOTc2MyAtMC4wNDg2NjcyIDEwLjY1OTcgLTAuMDQ4NjY3MiAxMC40NjQ1IDAuMTQ2NTk1QzEwLjI2OTIgMC4zNDE4NTcgMTAuMjY5MiAwLjY1ODQ0IDEwLjQ2NDUgMC44NTM3MDJMMTMuMjkyOSAzLjY4MjEzTDEwLjQ2NDUgNi41MTA1NkMxMC4yNjkyIDYuNzA1ODIgMTAuMjY5MiA3LjAyMjQgMTAuNDY0NSA3LjIxNzY2QzEwLjY1OTcgNy40MTI5MyAxMC45NzYzIDcuNDEyOTMgMTEuMTcxNiA3LjIxNzY2TDE0LjM1MzYgNC4wMzU2OFpNMCAzLjY4MjEzVjQuMTgyMTNIMTRWMy42ODIxM1YzLjE4MjEzSDBWMy42ODIxM1pcIlxyXG4gICAgICAgICAgZmlsbD1cIiMzNDQwNTRcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIHZhbHVlXCIgKm5nSWY9XCJ1c2VySm91cm5leS52YWx1ZSA+IDBcIj5WYWx1ZSAoe3sgdXNlckpvdXJuZXkudmFsdWUgfX0pPC9kaXY+XHJcbiAgICAgIDxzdmcgKm5nSWY9XCJ1c2VySm91cm5leS52YWx1ZSA+IDAgJiYgdXNlckpvdXJuZXkucHJlbWl1bSA+IDBcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTUgOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE0LjM1MzYgNC4wMzU2OEMxNC41NDg4IDMuODQwNDIgMTQuNTQ4OCAzLjUyMzg0IDE0LjM1MzYgMy4zMjg1OEwxMS4xNzE2IDAuMTQ2NTk1QzEwLjk3NjMgLTAuMDQ4NjY3MiAxMC42NTk3IC0wLjA0ODY2NzIgMTAuNDY0NSAwLjE0NjU5NUMxMC4yNjkyIDAuMzQxODU3IDEwLjI2OTIgMC42NTg0NCAxMC40NjQ1IDAuODUzNzAyTDEzLjI5MjkgMy42ODIxM0wxMC40NjQ1IDYuNTEwNTZDMTAuMjY5MiA2LjcwNTgyIDEwLjI2OTIgNy4wMjI0IDEwLjQ2NDUgNy4yMTc2NkMxMC42NTk3IDcuNDEyOTMgMTAuOTc2MyA3LjQxMjkzIDExLjE3MTYgNy4yMTc2NkwxNC4zNTM2IDQuMDM1NjhaTTAgMy42ODIxM1Y0LjE4MjEzSDE0VjMuNjgyMTNWMy4xODIxM0gwVjMuNjgyMTNaXCJcclxuICAgICAgICAgIGZpbGw9XCIjMzQ0MDU0XCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBwcmVtaXVtXCIgKm5nSWY9XCJ1c2VySm91cm5leS5wcmVtaXVtID4gMFwiPlByZW1pdW0gKHt7IHVzZXJKb3VybmV5LnByZW1pdW0gfX0pPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgcHJvY2Vzc2VkRGF0YVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItN1wiICpuZ0lmPVwiZ3JvdXAuZml4dHVyZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICA8aDI+SWYge3sgZ3JvdXAuZml4dHVyZXMubGVuZ3RoIH19IGZpeHR1cmV7eyBncm91cC5maXh0dXJlcy5sZW5ndGggPiAxID8gJ3MgaGF2ZScgOiAnIGhhcycgfX0ge3sgZ3JvdXAudGVtcGxhdGVHcm91cE5hbWUgfX08L2gyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCIgW25nQ2xhc3NdPVwiZ3JvdXAudHlwZVwiPiB7eyBncm91cC50eXBlID09PSAndmFsdWUnID8gJ1ZhbHVlJyA6ICdQcmVtaXVtJyB9fSAoe3sgZ3JvdXAuZml4dHVyZXMubGVuZ3RoIH19KSA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHA+e3sgZ3JvdXAudHlwZSA9PT0gJ3ZhbHVlJyA/ICdWYWx1ZScgOiAnUHJlbWl1bScgfX0gbG9naWMgZm9yIHt7IGdyb3VwLmZpeHR1cmVzLmxlbmd0aCB9fSBmaXh0dXJle3sgZ3JvdXAuZml4dHVyZXMubGVuZ3RoID4gMSA/ICdzJyA6ICcnIH19IHdpdGgge3sgZ3JvdXAudGVtcGxhdGVHcm91cE5hbWUgfX0gaXMgYmVsb3c6PC9wPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIG92ZXJmbG93LXgtYXV0byBtdC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS1ibG9ja1wiICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdyb3VwLmZpeHR1cmVzXCIgXHJcbiAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZpeHR1cmUuaGVhZGVyQ29sb3JcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGVyXCI+e3sgZml4dHVyZS5oZWFkZXI/LmxhYmVsIHx8IGdyb3VwLmhlYWRlciB9fTwvaDM+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiZml4dHVyZS5kaXZpZGVyQ29sb3JcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPHAgKm5nRm9yPVwibGV0IHNoZWxmR3JvdXAgb2YgKGZpeHR1cmUuZ3JvdXBlZFNoZWx2ZXMgfHwgW10pXCI+e3sgc2hlbGZHcm91cC5icmFuZCB9fTwvcD5cclxuICAgICAgICAgICAgICA8cCAqbmdJZj1cIiFmaXh0dXJlLmdyb3VwZWRTaGVsdmVzIHx8IGZpeHR1cmUuZ3JvdXBlZFNoZWx2ZXMubGVuZ3RoID09PSAwXCI+Tm8gcHJvZHVjdHMgYXNzaWduZWQ8L3A+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInByb2Nlc3NlZERhdGEubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XHJcbiAgICAgIDxwPk5vIGFsbG9jYXRpb24gZGF0YSBhdmFpbGFibGU8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+Il19
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXZtLWxvZ2ljLWV4cGxvcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2l2bS1sb2dpYy1leHBsb3Jlci9pdm0tbG9naWMtZXhwbG9yZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvaXZtLWxvZ2ljLWV4cGxvcmVyL2l2bS1sb2dpYy1leHBsb3Jlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUMzQixRQUFRLEdBQVUsRUFBRSxDQUFDO0lBQ3JCLGVBQWUsR0FBUSxJQUFJLENBQUM7SUFFckMsZUFBZSxHQUFHO1FBQ2hCO1lBQ0UsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ3hDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7YUFDOUM7WUFDRCxJQUFJLEVBQUUsT0FBTztTQUNkO1FBQ0Q7WUFDRSxpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTthQUNyQztZQUNELElBQUksRUFBRSxPQUFPO1NBQ2Q7UUFDRDtZQUNF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QUdkLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcIml2bS1sb2dpYy1leHBsb3JlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaXZtLWxvZ2ljLWV4cGxvcmVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9pdm0tbG9naWMtZXhwbG9yZXIuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXZtTG9naWNFeHBsb3JlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgZml4dHVyZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRGaXh0dXJlOiBhbnkgPSBudWxsO1xyXG5cclxuICBhbGxvY2F0aW9uTG9naWMgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnVkMgRXllIC8gTEsgQWlyJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnVHJlbmRpbmcnLCBjb2xvcjogJyNFQUY4RkYnIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnSW5ub3ZhdGlvbicsIGNvbG9yOiAnI0ZGRkFFQicgfSxcclxuICAgICAgICB7IG5hbWU6ICdXb3JrIEVzc2VudGlhbHMnLCBjb2xvcjogJyNFQ0ZERjMnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJ2YWx1ZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ1ZDIFN1bicsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1NoYWRlcycsIGNvbG9yOiAnI0ZFRjNDNycgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInZhbHVlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnSG9vcGVyJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnS2lkcycsIGNvbG9yOiAnI0ZDRTdGMycgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInZhbHVlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnVGVudHBvbGUnLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdUZW50cG9sZScsIGNvbG9yOiAnI0QxRkFFNScgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInZhbHVlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnSHVzdGxyJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnSHVzdGxyJywgY29sb3I6ICcjRTBFN0ZGJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IFwidmFsdWVcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGVtcGxhdGVHcm91cE5hbWU6ICdKSiBFeWUgKyBPRCcsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1ByZW1pdW0gVHJlbmRpbmcnLCBjb2xvcjogJyNGNEYzRkYnIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnUHJlbWl1bSBXb3JrJywgY29sb3I6ICcjRDlENkZFJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IFwicHJlbWl1bVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ0pKIFN1bicsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1ByZW1pdW0gU2hhZGVzJywgY29sb3I6ICcjRkRGMkY4JyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHR5cGU6IFwicHJlbWl1bVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogJ0xQTCcsXHJcbiAgICAgIGhlYWRlcjogW1xyXG4gICAgICAgIHsgbmFtZTogJ1ByZW1pdW0gVHJlbmRpbmcnLCBjb2xvcjogJyNGNEYzRkYnIH1cclxuICAgICAgXSxcclxuICAgICAgdHlwZTogXCJwcmVtaXVtXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiAnRm9zc2lsJyxcclxuICAgICAgaGVhZGVyOiBbXHJcbiAgICAgICAgeyBuYW1lOiAnUHJlbWl1bSBUcmVuZGluZycsIGNvbG9yOiAnI0Y0RjNGRicgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInByZW1pdW1cIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGVtcGxhdGVHcm91cE5hbWU6ICdNZWxsZXInLFxyXG4gICAgICBoZWFkZXI6IFtcclxuICAgICAgICB7IG5hbWU6ICdQcmVtaXVtIFNoYWRlcycsIGNvbG9yOiAnI0ZERjJGOCcgfVxyXG4gICAgICBdLFxyXG4gICAgICB0eXBlOiBcInByZW1pdW1cIlxyXG4gICAgfSxcclxuICBdO1xyXG5cclxuICBwcm9jZXNzZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIHVzZXJKb3VybmV5OiB7IHZhbHVlOiBudW1iZXI7IHByZW1pdW06IG51bWJlciB9ID0geyB2YWx1ZTogMCwgcHJlbWl1bTogMCB9O1xyXG4gIGZpcnN0VHlwZTogJ3ZhbHVlJyB8ICdwcmVtaXVtJyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snZml4dHVyZXMnXSB8fCBjaGFuZ2VzWydzZWxlY3RlZEZpeHR1cmUnXSkge1xyXG4gICAgICB0aGlzLnByb2Nlc3NGaXh0dXJlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0ZpeHR1cmVzKCkge1xyXG4gICAgLy8gY29uc3QgZml4dHVyZXNUb1Byb2Nlc3MgPSB0aGlzLnNlbGVjdGVkRml4dHVyZSBcclxuICAgIC8vICAgPyBbdGhpcy5zZWxlY3RlZEZpeHR1cmVdIFxyXG4gICAgLy8gICA6ICh0aGlzLmZpeHR1cmVzIHx8IFtdKTtcclxuICAgIFxyXG4gICAgY29uc3QgZml4dHVyZXNUb1Byb2Nlc3MgPSB0aGlzLmZpeHR1cmVzIHx8IFtdXHJcblxyXG4gICAgY29uc3QgdmFsdWVHcm91cHMgPSBbXCJWQyBFeWUgLyBMSyBBaXJcIiwgXCJWQyBTdW5cIiwgXCJIb29wZXJcIiwgXCJUZW50cG9sZVwiLCBcIkh1c3RsclwiXTtcclxuICAgIGNvbnN0IHByZW1pdW1Hcm91cHMgPSBbXCJKSiBFeWUgKyBPRFwiLCBcIkpKIFN1blwiLCBcIkxQTFwiLCBcIkZvc3NpbFwiLCBcIk1lbGxlclwiXTtcclxuXHJcbiAgICBjb25zdCBncm91cGVkRml4dHVyZXM6IGFueSA9IHt9O1xyXG4gICAgY29uc3Qgc2VlbkZpeHR1cmVzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBsZXQgdmFsdWVDb3VudCA9IDA7XHJcbiAgICBsZXQgcHJlbWl1bUNvdW50ID0gMDtcclxuICAgIGxldCBmaXJzdFZhbHVlRml4dHVyZU51bWJlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZXQgZmlyc3RQcmVtaXVtRml4dHVyZU51bWJlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZml4dHVyZXNUb1Byb2Nlc3MuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlR3JvdXAgPSBmaXh0dXJlPy50ZW1wbGF0ZUdyb3VwTmFtZT8udHJpbSgpO1xyXG5cclxuICAgICAgaWYgKCF0ZW1wbGF0ZUdyb3VwKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBsb2dpY0l0ZW0gPSB0aGlzLmFsbG9jYXRpb25Mb2dpYy5maW5kKFxyXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnRlbXBsYXRlR3JvdXBOYW1lID09PSB0ZW1wbGF0ZUdyb3VwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAobG9naWNJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUlkID0gZml4dHVyZS5faWQgfHwgXHJcbiAgICAgICAgICBmaXh0dXJlLmlkIHx8IFxyXG4gICAgICAgICAgYCR7Zml4dHVyZS5maXh0dXJlTnVtYmVyIHx8IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyIHx8ICcnfV8ke3RlbXBsYXRlR3JvdXB9XyR7Zml4dHVyZT8uaGVhZGVyPy5sYWJlbCB8fCAnJ31gO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChzZWVuRml4dHVyZXMuaGFzKGZpeHR1cmVJZCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2VlbkZpeHR1cmVzLmFkZChmaXh0dXJlSWQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgfHwgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgfHwgSW5maW5pdHk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHZhbHVlR3JvdXBzLmluY2x1ZGVzKHRlbXBsYXRlR3JvdXApKSB7XHJcbiAgICAgICAgICB2YWx1ZUNvdW50Kys7XHJcbiAgICAgICAgICBpZiAoZmlyc3RWYWx1ZUZpeHR1cmVOdW1iZXIgPT09IG51bGwgfHwgZml4dHVyZU51bWJlciA8IGZpcnN0VmFsdWVGaXh0dXJlTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGZpcnN0VmFsdWVGaXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHByZW1pdW1Hcm91cHMuaW5jbHVkZXModGVtcGxhdGVHcm91cCkpIHtcclxuICAgICAgICAgIHByZW1pdW1Db3VudCsrO1xyXG4gICAgICAgICAgaWYgKGZpcnN0UHJlbWl1bUZpeHR1cmVOdW1iZXIgPT09IG51bGwgfHwgZml4dHVyZU51bWJlciA8IGZpcnN0UHJlbWl1bUZpeHR1cmVOdW1iZXIpIHtcclxuICAgICAgICAgICAgZmlyc3RQcmVtaXVtRml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghZ3JvdXBlZEZpeHR1cmVzW3RlbXBsYXRlR3JvdXBdKSB7XHJcbiAgICAgICAgICBncm91cGVkRml4dHVyZXNbdGVtcGxhdGVHcm91cF0gPSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiB0ZW1wbGF0ZUdyb3VwLFxyXG4gICAgICAgICAgICB0eXBlOiBsb2dpY0l0ZW0udHlwZSxcclxuICAgICAgICAgICAgZml4dHVyZXM6IFtdXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzaGVsZkNvbmZpZyA9IGZpeHR1cmUuc2hlbGZDb25maWcgfHwgW107XHJcbiAgICAgICAgY29uc3Qgem9uZUJyYW5kR3JvdXBzOiBhbnkgPSB7fTtcclxuICAgICAgICBcclxuICAgICAgICBzaGVsZkNvbmZpZy5mb3JFYWNoKChzaGVsZjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCAnVW5rbm93bic7XHJcbiAgICAgICAgICBjb25zdCBicmFuZCA9IHNoZWxmLnByb2R1Y3RCcmFuZE5hbWUgfHwgJ04vQSc7XHJcbiAgICAgICAgICBjb25zdCB6b25lQnJhbmRLZXkgPSBgJHt6b25lfV8ke2JyYW5kfWA7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICghem9uZUJyYW5kR3JvdXBzW3pvbmVCcmFuZEtleV0pIHtcclxuICAgICAgICAgICAgem9uZUJyYW5kR3JvdXBzW3pvbmVCcmFuZEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgem9uZTogem9uZSxcclxuICAgICAgICAgICAgICBicmFuZDogYnJhbmRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBoZWFkZXJMYWJlbCA9IGZpeHR1cmU/LmhlYWRlcj8ubGFiZWw/LnRyaW0oKTtcclxuICAgICAgICBsZXQgaGVhZGVyQ29sb3IgPSAnI0YyRjRGNyc7XHJcbiAgICAgICAgbGV0IGRpdmlkZXJDb2xvciA9ICcjRDBENUREJztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoaGVhZGVyTGFiZWwpIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckNvbmZpZyA9IGxvZ2ljSXRlbS5oZWFkZXIuZmluZCgoaDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaCA9PT0gaGVhZGVyTGFiZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGgubmFtZSA9PT0gaGVhZGVyTGFiZWw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKGhlYWRlckNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGhlYWRlckNvbmZpZyA9PT0gJ29iamVjdCcgJiYgaGVhZGVyQ29uZmlnLmNvbG9yKSB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyQ29sb3IgPSBoZWFkZXJDb25maWcuY29sb3I7XHJcbiAgICAgICAgICAgICAgZGl2aWRlckNvbG9yID0gdGhpcy5kYXJrZW5Db2xvcihoZWFkZXJDb25maWcuY29sb3IsIDAuMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkRml4dHVyZSA9IHtcclxuICAgICAgICAgIC4uLmZpeHR1cmUsXHJcbiAgICAgICAgICBncm91cGVkU2hlbHZlczogT2JqZWN0LnZhbHVlcyh6b25lQnJhbmRHcm91cHMpLFxyXG4gICAgICAgICAgaGVhZGVyQ29sb3I6IGhlYWRlckNvbG9yLFxyXG4gICAgICAgICAgZGl2aWRlckNvbG9yOiBkaXZpZGVyQ29sb3JcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGdyb3VwZWRGaXh0dXJlc1t0ZW1wbGF0ZUdyb3VwXS5maXh0dXJlcy5wdXNoKHByb2Nlc3NlZEZpeHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVzZXJKb3VybmV5ID0geyB2YWx1ZTogdmFsdWVDb3VudCwgcHJlbWl1bTogcHJlbWl1bUNvdW50IH07XHJcbiAgICBcclxuICAgIC8vIERldGVybWluZSB3aGljaCB0eXBlIGFwcGVhcnMgZmlyc3QgYmFzZWQgb24gZml4dHVyZSBudW1iZXJpbmdcclxuICAgIGlmIChmaXJzdFZhbHVlRml4dHVyZU51bWJlciAhPT0gbnVsbCAmJiBmaXJzdFByZW1pdW1GaXh0dXJlTnVtYmVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmlyc3RUeXBlID0gZmlyc3RWYWx1ZUZpeHR1cmVOdW1iZXIgPCBmaXJzdFByZW1pdW1GaXh0dXJlTnVtYmVyID8gJ3ZhbHVlJyA6ICdwcmVtaXVtJztcclxuICAgIH0gZWxzZSBpZiAoZmlyc3RWYWx1ZUZpeHR1cmVOdW1iZXIgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5maXJzdFR5cGUgPSAndmFsdWUnO1xyXG4gICAgfSBlbHNlIGlmIChmaXJzdFByZW1pdW1GaXh0dXJlTnVtYmVyICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZmlyc3RUeXBlID0gJ3ByZW1pdW0nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maXJzdFR5cGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvY2Vzc2VkRGF0YSA9IE9iamVjdC52YWx1ZXMoZ3JvdXBlZEZpeHR1cmVzKS5tYXAoKGdyb3VwOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICBmaXh0dXJlczogZ3JvdXAuZml4dHVyZXMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGFOdW0gPSBhLmZpeHR1cmVOdW1iZXIgfHwgYS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgfHwgMDtcclxuICAgICAgICAgIGNvbnN0IGJOdW0gPSBiLmZpeHR1cmVOdW1iZXIgfHwgYi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgfHwgMDtcclxuICAgICAgICAgIHJldHVybiBhTnVtIC0gYk51bTtcclxuICAgICAgICB9KVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrVmlld1NoZWV0KCkge1xyXG4gICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFBRmkzd1FuM3dsX1JDc3RfVFBhbXF4RjV1X0piRmxuSmNEWkJSSndHQkc0L2VkaXQ/Z2lkPTExMDQ1MTQ5OTQjZ2lkPTExMDQ1MTQ5OTQnO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICBkYXJrZW5Db2xvcihjb2xvcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBoZXggPSBjb2xvci5yZXBsYWNlKCcjJywgJycpO1xyXG4gICAgXHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcbiAgICBcclxuICAgIGNvbnN0IG5ld1IgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHIgKiAoMSAtIGFtb3VudCkpKTtcclxuICAgIGNvbnN0IG5ld0cgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGcgKiAoMSAtIGFtb3VudCkpKTtcclxuICAgIGNvbnN0IG5ld0IgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGIgKiAoMSAtIGFtb3VudCkpKTtcclxuICAgIFxyXG4gICAgY29uc3QgdG9IZXggPSAobjogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhleCA9IG4udG9TdHJpbmcoMTYpO1xyXG4gICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcclxuICAgIH07XHJcbiAgICBcclxuICAgIHJldHVybiBgIyR7dG9IZXgobmV3Uil9JHt0b0hleChuZXdHKX0ke3RvSGV4KG5ld0IpfWA7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwiaXZtLWxvZ2ljLWV4cGxvcmVyXCI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNVwiPlxyXG4gICAgPGgxPlxyXG4gICAgICBBbGxvY2F0aW9uIExvZ2ljIEFwcGxpZWRcclxuICAgIDwvaDE+XHJcblxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBiZy13aGl0ZVwiIChjbGljayk9XCJvbkNsaWNrVmlld1NoZWV0KClcIj5cclxuICAgICAgPHN2ZyBjbGFzcz1cIm1lLTJcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDIwIDE1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMC44MzM5ODQgNy41MDE2M0MwLjgzMzk4NCA3LjUwMTYzIDQuMTY3MzIgMC44MzQ5NjEgMTAuMDAwNyAwLjgzNDk2MUMxNS44MzQgMC44MzQ5NjEgMTkuMTY3MyA3LjUwMTYzIDE5LjE2NzMgNy41MDE2M0MxOS4xNjczIDcuNTAxNjMgMTUuODM0IDE0LjE2ODMgMTAuMDAwNyAxNC4xNjgzQzQuMTY3MzIgMTQuMTY4MyAwLjgzMzk4NCA3LjUwMTYzIDAuODMzOTg0IDcuNTAxNjNaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xMC4wMDA3IDEwLjAwMTZDMTEuMzgxNCAxMC4wMDE2IDEyLjUwMDcgOC44ODIzNCAxMi41MDA3IDcuNTAxNjNDMTIuNTAwNyA2LjEyMDkyIDExLjM4MTQgNS4wMDE2MyAxMC4wMDA3IDUuMDAxNjNDOC42MTk5NCA1LjAwMTYzIDcuNTAwNjUgNi4xMjA5MiA3LjUwMDY1IDcuNTAxNjNDNy41MDA2NSA4Ljg4MjM0IDguNjE5OTQgMTAuMDAxNiAxMC4wMDA3IDEwLjAwMTZaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxzcGFuPlZpZXcgbG9naWMgc2hlZXQ8L3NwYW4+XHJcbiAgICAgIFxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJleHBsb3Jlci1ib2R5XCI+XHJcblxyXG4gICAgPGgyPlVzZXIgSm91cm5leTo8L2gyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIGJsb2NrXCI+RW50cmFuY2U8L2Rpdj5cclxuICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTUgOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE0LjM1MzYgNC4wMzU2OEMxNC41NDg4IDMuODQwNDIgMTQuNTQ4OCAzLjUyMzg0IDE0LjM1MzYgMy4zMjg1OEwxMS4xNzE2IDAuMTQ2NTk1QzEwLjk3NjMgLTAuMDQ4NjY3MiAxMC42NTk3IC0wLjA0ODY2NzIgMTAuNDY0NSAwLjE0NjU5NUMxMC4yNjkyIDAuMzQxODU3IDEwLjI2OTIgMC42NTg0NCAxMC40NjQ1IDAuODUzNzAyTDEzLjI5MjkgMy42ODIxM0wxMC40NjQ1IDYuNTEwNTZDMTAuMjY5MiA2LjcwNTgyIDEwLjI2OTIgNy4wMjI0IDEwLjQ2NDUgNy4yMTc2NkMxMC42NTk3IDcuNDEyOTMgMTAuOTc2MyA3LjQxMjkzIDExLjE3MTYgNy4yMTc2NkwxNC4zNTM2IDQuMDM1NjhaTTAgMy42ODIxM1Y0LjE4MjEzSDE0VjMuNjgyMTNWMy4xODIxM0gwVjMuNjgyMTNaXCJcclxuICAgICAgICAgIGZpbGw9XCIjMzQ0MDU0XCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIFxyXG4gICAgICA8IS0tIFNob3cgVmFsdWUgZmlyc3QgaWYgaXQgYXBwZWFycyBmaXJzdCBpbiBudW1iZXJpbmcgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaXJzdFR5cGUgPT09ICd2YWx1ZScgfHwgKGZpcnN0VHlwZSA9PT0gbnVsbCAmJiB1c2VySm91cm5leS52YWx1ZSA+IDApXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIHZhbHVlXCIgKm5nSWY9XCJ1c2VySm91cm5leS52YWx1ZSA+IDBcIj5WYWx1ZSAoe3sgdXNlckpvdXJuZXkudmFsdWUgfX0pPC9kaXY+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInVzZXJKb3VybmV5LnZhbHVlID4gMCAmJiB1c2VySm91cm5leS5wcmVtaXVtID4gMFwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxNSA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE0LjM1MzYgNC4wMzU2OEMxNC41NDg4IDMuODQwNDIgMTQuNTQ4OCAzLjUyMzg0IDE0LjM1MzYgMy4zMjg1OEwxMS4xNzE2IDAuMTQ2NTk1QzEwLjk3NjMgLTAuMDQ4NjY3MiAxMC42NTk3IC0wLjA0ODY2NzIgMTAuNDY0NSAwLjE0NjU5NUMxMC4yNjkyIDAuMzQxODU3IDEwLjI2OTIgMC42NTg0NCAxMC40NjQ1IDAuODUzNzAyTDEzLjI5MjkgMy42ODIxM0wxMC40NjQ1IDYuNTEwNTZDMTAuMjY5MiA2LjcwNTgyIDEwLjI2OTIgNy4wMjI0IDEwLjQ2NDUgNy4yMTc2NkMxMC42NTk3IDcuNDEyOTMgMTAuOTc2MyA3LjQxMjkzIDExLjE3MTYgNy4yMTc2NkwxNC4zNTM2IDQuMDM1NjhaTTAgMy42ODIxM1Y0LjE4MjEzSDE0VjMuNjgyMTNWMy4xODIxM0gwVjMuNjgyMTNaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiMzNDQwNTRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBwcmVtaXVtXCIgKm5nSWY9XCJ1c2VySm91cm5leS5wcmVtaXVtID4gMFwiPlByZW1pdW0gKHt7IHVzZXJKb3VybmV5LnByZW1pdW0gfX0pPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgPCEtLSBTaG93IFByZW1pdW0gZmlyc3QgaWYgaXQgYXBwZWFycyBmaXJzdCBpbiBudW1iZXJpbmcgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaXJzdFR5cGUgPT09ICdwcmVtaXVtJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBwcmVtaXVtXCIgKm5nSWY9XCJ1c2VySm91cm5leS5wcmVtaXVtID4gMFwiPlByZW1pdW0gKHt7IHVzZXJKb3VybmV5LnByZW1pdW0gfX0pPC9kaXY+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInVzZXJKb3VybmV5LnZhbHVlID4gMCAmJiB1c2VySm91cm5leS5wcmVtaXVtID4gMFwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxNSA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE0LjM1MzYgNC4wMzU2OEMxNC41NDg4IDMuODQwNDIgMTQuNTQ4OCAzLjUyMzg0IDE0LjM1MzYgMy4zMjg1OEwxMS4xNzE2IDAuMTQ2NTk1QzEwLjk3NjMgLTAuMDQ4NjY3MiAxMC42NTk3IC0wLjA0ODY2NzIgMTAuNDY0NSAwLjE0NjU5NUMxMC4yNjkyIDAuMzQxODU3IDEwLjI2OTIgMC42NTg0NCAxMC40NjQ1IDAuODUzNzAyTDEzLjI5MjkgMy42ODIxM0wxMC40NjQ1IDYuNTEwNTZDMTAuMjY5MiA2LjcwNTgyIDEwLjI2OTIgNy4wMjI0IDEwLjQ2NDUgNy4yMTc2NkMxMC42NTk3IDcuNDEyOTMgMTAuOTc2MyA3LjQxMjkzIDExLjE3MTYgNy4yMTc2NkwxNC4zNTM2IDQuMDM1NjhaTTAgMy42ODIxM1Y0LjE4MjEzSDE0VjMuNjgyMTNWMy4xODIxM0gwVjMuNjgyMTNaXCJcclxuICAgICAgICAgICAgZmlsbD1cIiMzNDQwNTRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSB2YWx1ZVwiICpuZ0lmPVwidXNlckpvdXJuZXkudmFsdWUgPiAwXCI+VmFsdWUgKHt7IHVzZXJKb3VybmV5LnZhbHVlIH19KTwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBwcm9jZXNzZWREYXRhXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi03XCIgKm5nSWY9XCJncm91cC5maXh0dXJlcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgIDxoMj5JZiB7eyBncm91cC5maXh0dXJlcy5sZW5ndGggfX0gZml4dHVyZXt7IGdyb3VwLmZpeHR1cmVzLmxlbmd0aCA+IDEgPyAncyBoYXZlJyA6ICcgaGFzJyB9fSB7eyBncm91cC50ZW1wbGF0ZUdyb3VwTmFtZSB9fTwvaDI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJncm91cC50eXBlXCI+IHt7IGdyb3VwLnR5cGUgPT09ICd2YWx1ZScgPyAnVmFsdWUnIDogJ1ByZW1pdW0nIH19ICh7eyBncm91cC5maXh0dXJlcy5sZW5ndGggfX0pIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cD57eyBncm91cC50eXBlID09PSAndmFsdWUnID8gJ1ZhbHVlJyA6ICdQcmVtaXVtJyB9fSBsb2dpYyBmb3Ige3sgZ3JvdXAuZml4dHVyZXMubGVuZ3RoIH19IGZpeHR1cmV7eyBncm91cC5maXh0dXJlcy5sZW5ndGggPiAxID8gJ3MnIDogJycgfX0gd2l0aCB7eyBncm91cC50ZW1wbGF0ZUdyb3VwTmFtZSB9fSBpcyBiZWxvdzo8L3A+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgb3ZlcmZsb3cteC1hdXRvIG10LTVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLWJsb2NrXCIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ3JvdXAuZml4dHVyZXNcIiBcclxuICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZml4dHVyZS5oZWFkZXJDb2xvclwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJoZWFkZXJcIj57eyBmaXh0dXJlLmhlYWRlcj8ubGFiZWwgfHwgZ3JvdXAuaGVhZGVyIH19PC9oMz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJmaXh0dXJlLmRpdmlkZXJDb2xvclwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgc2hlbGZHcm91cCBvZiAoZml4dHVyZS5ncm91cGVkU2hlbHZlcyB8fCBbXSlcIj57eyBzaGVsZkdyb3VwLmJyYW5kIH19PC9wPlxyXG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWZpeHR1cmUuZ3JvdXBlZFNoZWx2ZXMgfHwgZml4dHVyZS5ncm91cGVkU2hlbHZlcy5sZW5ndGggPT09IDBcIj5ObyBwcm9kdWN0cyBhc3NpZ25lZDwvcD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwicHJvY2Vzc2VkRGF0YS5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgPHA+Tm8gYWxsb2NhdGlvbiBkYXRhIGF2YWlsYWJsZTwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj4iXX0=