tango-app-ui-store-builder 1.0.74 → 1.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/esm2022/lib/components/ivm-logic-explorer/ivm-logic-explorer.component.mjs +26 -3
  2. package/esm2022/lib/components/manage-plano/onboard-table/onboard-table.component.mjs +4 -2
  3. package/esm2022/lib/components/manage-plano/rollout-table/rollout-table.component.mjs +3 -3
  4. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +5 -6
  5. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +26 -8
  6. package/esm2022/lib/components/manage-store-plano/popups/schedule-task-popup/schedule-task-popup.component.mjs +64 -33
  7. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +3 -3
  8. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +17 -17
  9. package/esm2022/lib/components/onboard-store-plano/create-planogram/create-planogram.component.mjs +23 -4
  10. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +9 -11
  11. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +1538 -0
  12. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +13 -6
  13. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
  14. package/esm2022/lib/services/store-builder.service.mjs +4 -1
  15. package/esm2022/lib/tango-store-builder-routing.module.mjs +6 -1
  16. package/esm2022/lib/tango-store-builder.module.mjs +4 -1
  17. package/fesm2022/tango-app-ui-store-builder.mjs +1874 -239
  18. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  19. package/lib/components/ivm-logic-explorer/ivm-logic-explorer.component.d.ts +1 -0
  20. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
  21. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
  22. package/lib/components/manage-store-plano/popups/schedule-task-popup/schedule-task-popup.component.d.ts +4 -1
  23. package/lib/components/onboard-store-plano/create-planogram/create-planogram.component.d.ts +1 -0
  24. package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +0 -1
  25. package/lib/components/plano-tools/cad-render/cad-render.component.d.ts +84 -0
  26. package/lib/services/store-builder.service.d.ts +1 -0
  27. package/lib/tango-store-builder.module.d.ts +46 -45
  28. package/package.json +1 -1
@@ -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=
@@ -174,11 +174,13 @@ export class PlanoOnboardTableComponent {
174
174
  const modelRef = this.ngbModal.open(BulkUploadPlanogramComponent);
175
175
  }
176
176
  onClickCreatePlanogram() {
177
- const modelRef = this.ngbModal.open(CreatePlanogramComponent, {
177
+ let modelRef;
178
+ modelRef = this.ngbModal.open(CreatePlanogramComponent, {
178
179
  size: "md",
179
180
  windowClass: "create-planogram-modal",
180
181
  centered: true,
181
182
  backdrop: "static",
183
+ beforeDismiss: () => !modelRef.componentInstance?.isModalBusy,
182
184
  });
183
185
  modelRef.componentInstance.clientId = this.clientId;
184
186
  modelRef.result.then((result) => {
@@ -436,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
436
438
  type: ViewChild,
437
439
  args: ["planoFilterRef"]
438
440
  }] } });
439
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vb25ib2FyZC10YWJsZS9vbmJvYXJkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1wbGFuby9vbmJvYXJkLXRhYmxlL29uYm9hcmQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixPQUFPLEVBRVAsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDL0csT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7Ozs7OztBQVFqSCxNQUFNLE9BQU8sMEJBQTBCO0lBb0QzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4RG1CLGNBQWMsQ0FBd0I7SUFFbkUsUUFBUSxDQUFTO0lBRWpCLFFBQVEsQ0FBTTtJQUNkLGNBQWMsR0FBZ0IsRUFBRSxDQUFDO0lBRWpDLGlCQUFpQixHQUFXLEtBQUssQ0FBQztJQUVsQyxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFFdEIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4QixLQUFLLEdBQVcsRUFB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LENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQzt3R0E1ZFUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUxDM0J2Qyxtd29CQWtYQTs7NEZEdlZhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUI7Z09BS04sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgZmlsdGVyLFxyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFBsYW5vTGlzdCB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL3BsYW5vZ3JhbS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnVsa1VwbG9hZFBsYW5vZ3JhbUNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvYnVsay11cGxvYWQtcGxhbm9ncmFtL2J1bGstdXBsb2FkLXBsYW5vZ3JhbS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtcclxuICBnZXRRdWVyeVBhcmFtTnVtYmVyLFxyXG4gIGdldFF1ZXJ5UGFyYW1TdHJpbmcsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvblwiO1xyXG5pbXBvcnQgeyBDcmVhdGVQbGFub2dyYW1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vb25ib2FyZC1zdG9yZS1wbGFuby9jcmVhdGUtcGxhbm9ncmFtL2NyZWF0ZS1wbGFub2dyYW0uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQbGFub0ZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9wbGFub2dyYW0vcGxhbm8tdGFibGUvcGxhbm8tZmlsdGVyL3BsYW5vLWZpbHRlci5jb21wb25lbnRcIjtcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItcGxhbm8tb25ib2FyZC10YWJsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vb25ib2FyZC10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vb25ib2FyZC10YWJsZS5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxhbm9PbmJvYXJkVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoXCJwbGFub0ZpbHRlclJlZlwiKSBwbGFub0ZpbHRlclJlZj86IFBsYW5vRmlsdGVyQ29tcG9uZW50O1xuXG4gIGNsaWVudElkOiBzdHJpbmc7XG5cclxuICBjYXJkSW5mbzogYW55O1xyXG4gIHBsYW5vZ3JhbXNMaXN0OiBQbGFub0xpc3RbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZEZpbHRlclRhYjogc3RyaW5nID0gXCJhbGxcIjtcclxuXHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNvcnRPcmRlcjogbnVtYmVyID0gMTtcclxuXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgbGltaXQ6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xyXG4gIHBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuXHJcbiAgZmlsdGVyT2JqZWN0ID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogXCJTdGF0dXNcIixcclxuICAgICAgdHlwZTogXCJtdWx0aVwiLFxyXG4gICAgICBpc09wZW5lZDogZmFsc2UsXHJcbiAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICB7IG5hbWU6IFwiRHJhZnRcIiwgdmFsdWU6IFwiZHJhZnRcIiwgY2hlY2tlZDogZmFsc2UgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIkFsbG9jYXRpb24gcGVuZGluZ1wiLFxyXG4gICAgICAgICAgdmFsdWU6IFwiYWxsb2NhdGlvblBlbmRpbmdcIixcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGFwcGxpZWRGaWx0ZXJzOiBhbnkgPSB7XHJcbiAgICBjb3VudHJ5OiBbXSxcclxuICAgIGNpdHk6IFtdLFxyXG4gICAgc3RhdHVzOiBbXSxcclxuICB9O1xyXG5cclxuICBpc0ZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNCdXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHBsYW5vU3ViPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIC8vIFN1YnNjcmlwdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSwgLy8gRmlsdGVyaW5nIG51bGwvdW5kZWZpbmVkLlxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIC8vIEVtaXR0aW5nIG9ubHkgZGlmZmVyZW50IHZhbHVlcy4gKElnbm9yZXMgc2FtZSBjbGllbnRJZCkuXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcFxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IGdldFF1ZXJ5UGFyYW1TdHJpbmcoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcInNlYXJjaFwiLFxyXG4gICAgICAgICAgICAgICAgZmFsbGJhY2s6IFwiXCIsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSB0aGlzLnNlYXJjaFRlcm0gPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWIgPSBnZXRRdWVyeVBhcmFtU3RyaW5nKHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGtleTogXCJ0YWJcIixcclxuICAgICAgICAgICAgICAgIGZhbGxiYWNrOiBcImFsbFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnN0YXR1cyA9IFt0aGlzLnNlbGVjdGVkRmlsdGVyVGFiXTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5saW1pdCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcImxpbWl0XCIsXHJcbiAgICAgICAgICAgICAgICBmYWxsYmFjazogMTAsXHJcbiAgICAgICAgICAgICAgICBtaW46IDEsXHJcbiAgICAgICAgICAgICAgICBtYXg6IDMwLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcIm9mZnNldFwiLFxyXG4gICAgICAgICAgICAgICAgZmFsbGJhY2s6IDEsXHJcbiAgICAgICAgICAgICAgICBtaW46IDEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UGxhbm9UYWJsZUxpc3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJNYW5hZ2UgUGxhbm9ncmFtXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJQbGFub2dyYW1cIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRQbGFub1RhYmxlTGlzdCgpIHtcclxuICAgIHRoaXMucGxhbm9TdWI/LnVuc3Vic2NyaWJlKCk7IC8vIENhbmNlbCBwcmV2aW91cyByZXF1ZXN0XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGxhbm9ncmFtc0xpc3QgPSBbXTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgZmlsdGVyOiB0aGlzLmFwcGxpZWRGaWx0ZXJzLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAvLyBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAvLyBlbXB0eURvd25sb2FkOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBsYW5vU3ViID0gdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRPbmJvYXJkUGxhbm9MaXN0KHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgdGhpcy5wbGFub2dyYW1zTGlzdCA9IHJlcz8uZGF0YT8uZGF0YSA/PyBbXTtcclxuICAgICAgICAgICAgdGhpcy5jYXJkSW5mbyA9IHJlcz8uZGF0YT8uY2FyZEluZm8/LlswXSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5wbGFub2dyYW1zTGlzdC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvcGVuQnVsa1VwbG9hZE1vZGFsKCkge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQnVsa1VwbG9hZFBsYW5vZ3JhbUNvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ3JlYXRlUGxhbm9ncmFtKCkge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ3JlYXRlUGxhbm9ncmFtQ29tcG9uZW50LCB7XHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3JlYXRlLXBsYW5vZ3JhbS1tb2RhbFwiLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3BsYW5vZ3JhbS9vbmJvYXJkLXBsYW5vZ3JhbVwiXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcGxhbm9JZDogcmVzdWx0Py5wbGFub0lkLCBmbG9vcklkOiByZXN1bHQ/LmZsb29ySWQgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIHRoaXMuc29ydGVkQ29sdW1uID0gXCJcIjtcclxuICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuXHJcbiAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9IHRoaXMuc2VhcmNoVGVybSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIG9uU29ydFRhYmxlKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZ2V0UGxhbm9UYWJsZUxpc3QoKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclRhYmxlKGRhdGE6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsdGVyVGFiICE9PSBkYXRhKSB7XG4gICAgICB0aGlzLnBsYW5vRmlsdGVyUmVmPy5vblJlc2V0RmlsdGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWIgPSBkYXRhO1xuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IHtcbiAgICAgICAgY291bnRyeTogW10sXG4gICAgICAgIGNpdHk6IFtdLFxuICAgICAgICBzdGF0dXM6IFt0aGlzLnNlbGVjdGVkRmlsdGVyVGFiXSxcbiAgICAgIH07XG4gICAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9IGZhbHNlO1xuICAgICAgdGhpcy5vZmZzZXQgPSAxO1xuICAgICAgdGhpcy5saW1pdCA9IDEwO1xuICAgICAgdGhpcy5zZWFyY2hUZXJtID0gXCJcIjtcbiAgICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcbiAgICB9XG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgIGV2ZW50LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBrZXkgPSBlbGUudGl0bGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKGtleSA9PT0gXCJzdG9yZSBjYXRlZ29yeVwiKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc1tcInBsYW5vU3RyYXRlZ3lcIl0gPSBlbGUuc2VsZWN0ZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc1tlbGUudGl0bGUudG9Mb3dlckNhc2UoKV0gPSBlbGUuc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMuZ2V0UGxhbm9UYWJsZUxpc3QoKTtcclxuICB9XHJcblxyXG4gIHBhZ2luYXRpb25TaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbEl0ZW1zIDwgMTAgPyB0aGlzLnRvdGFsSXRlbXMgOiB0aGlzLmxpbWl0O1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2VPZmZzZXQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5vZmZzZXQgPSBOdW1iZXIocGFnZU9mZnNldCk7XHJcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgcGxhbm9GbG9vckRldGFpbHMoZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YS5sYXlvdXREZXRhaWxzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IGNvbXBsZXRlQ291bnQgPSBkYXRhPy50YXNrRGV0YWlscz8uY29tcGxldGVMYXlvdXQgfHwgMDtcclxuICAgICAgcmV0dXJuIGNvbXBsZXRlQ291bnQgKyBcIi9cIiArIGRhdGEubGF5b3V0RGV0YWlscy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGdldFRhc2tTdGF0dXMoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcpIHtcclxuICAvLyAgIGNvbnN0IHN0YXR1c01hcDogYW55ID0ge1xyXG4gIC8vICAgICBsYXlvdXQ6IGRhdGEudGFza0RldGFpbHM/LmxheW91dFN0YXR1cyxcclxuICAvLyAgICAgZml4dHVyZTogZGF0YS50YXNrRGV0YWlscz8uZml4dHVyZVN0YXR1cyxcclxuICAvLyAgICAgdm06IGRhdGEudGFza0RldGFpbHM/LmZpeHR1cmVTdGF0dXMsXHJcbiAgLy8gICB9O1xyXG4gIC8vICAgaWYgKHR5cGUgPT0gXCJ2bVwiKSB7XHJcbiAgLy8gICAgIHR5cGUgPSBcImZpeHR1cmVcIjtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c01hcFt0eXBlXTtcclxuXHJcbiAgLy8gICBjb25zdCB0YXNrRGV0YWlscyA9IGRhdGE/LnBsYW5vVGFzaz8uWzBdPy50YXNrU3RhdHVzPy5maW5kKFxyXG4gIC8vICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHR5cGUsXHJcbiAgLy8gICApO1xyXG5cclxuICAvLyAgIGlmICh0eXBlID09IFwiZml4dHVyZVwiKSB7XHJcbiAgLy8gICAgIGxldCB0YXNrSW5mbyA9IGRhdGE/LnBsYW5vVGFzaz8uWzBdPy50YXNrU3RhdHVzPy5maWx0ZXIoXHJcbiAgLy8gICAgICAgKGVsZTogYW55KSA9PiBlbGUuc3RhdHVzICYmIGVsZS50eXBlID09IFwiZml4dHVyZVwiLFxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJlxyXG4gIC8vICAgICAgIHRhc2tJbmZvPy5zb21lKCh0YXNrOiBhbnkpID0+IHRhc2suc3RhdHVzID09IFwic3VibWl0XCIpXHJcbiAgLy8gICAgIClcclxuICAvLyAgICAgICByZXR1cm4gXCJyZXZpZXdQZW5kaW5nXCI7XHJcbiAgLy8gICAgIGlmICh0YXNrSW5mbz8ubGVuZ3RoICE9IGRhdGEubGF5b3V0Q291bnQpIHtcclxuICAvLyAgICAgICByZXR1cm4gXCJ5ZXRUb0Fzc2lnblwiO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGlmICh0YXNrSW5mby5pbmNsdWRlcyhcIm9wZW5cIikgfHwgdGFza0luZm8uaW5jbHVkZXMoXCJpbnByb2dyZXNzXCIpKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIFwidGFza0Fzc2lnbmVkXCI7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBpZiAoXHJcbiAgLy8gICAgICF0YXNrRGV0YWlscyB8fFxyXG4gIC8vICAgICAodGFza0RldGFpbHMuc3RhdHVzID09IFwic3VibWl0XCIgJiYgc3RhdHVzID09PSBcImRpc2FncmVlXCIpXHJcbiAgLy8gICApXHJcbiAgLy8gICAgIHJldHVybiBcInlldFRvQXNzaWduXCI7XHJcblxyXG4gIC8vICAgaWYgKHRhc2tEZXRhaWxzLnN0YXR1cyAhPT0gXCJzdWJtaXRcIikgcmV0dXJuIFwidGFza0Fzc2lnbmVkXCI7XHJcblxyXG4gIC8vICAgaWYgKHN0YXR1cyA9PT0gXCJjb21wbGV0ZVwiKSByZXR1cm4gXCJjb21wbGV0ZWRcIjtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFRhc2tUb29sdGlwKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XHJcbiAgLy8gICBjb25zdCBzdGF0dXNNYXA6IGFueSA9IHtcclxuICAvLyAgICAgbGF5b3V0OiBkYXRhLnRhc2tEZXRhaWxzPy5sYXlvdXRTdGF0dXMsXHJcbiAgLy8gICAgIGZpeHR1cmU6IGRhdGEudGFza0RldGFpbHM/LmZpeHR1cmVTdGF0dXMsXHJcbiAgLy8gICAgIHZtOiBkYXRhLnRhc2tEZXRhaWxzPy5maXh0dXJlU3RhdHVzLFxyXG4gIC8vICAgfTtcclxuICAvLyAgIGlmICh0eXBlID09IFwidm1cIikge1xyXG4gIC8vICAgICB0eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCB0YXNrRGV0YWlscyA9IGRhdGE/LnBsYW5vVGFzaz8uWzBdPy50YXNrU3RhdHVzPy5maW5kKFxyXG4gIC8vICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHR5cGUsXHJcbiAgLy8gICApO1xyXG5cclxuICAvLyAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c01hcFt0eXBlXTtcclxuXHJcbiAgLy8gICBpZiAodHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gIC8vICAgICBsZXQgdGFza0luZm8gPSBkYXRhPy5wbGFub1Rhc2s/LlswXT8udGFza1N0YXR1cz8uZmlsdGVyKFxyXG4gIC8vICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnN0YXR1cyAmJiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIixcclxuICAvLyAgICAgKTtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgIHN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiZcclxuICAvLyAgICAgICB0YXNrSW5mbz8uc29tZSgodGFzazogYW55KSA9PiB0YXNrLnN0YXR1cyA9PSBcInN1Ym1pdFwiKVxyXG4gIC8vICAgICApXHJcbiAgLy8gICAgICAgcmV0dXJuIFwiUmV2aWV3IFBlbmRpbmdcIjtcclxuICAvLyAgICAgaWYgKHRhc2tJbmZvPy5sZW5ndGggIT0gZGF0YS5sYXlvdXRDb3VudCkge1xyXG4gIC8vICAgICAgIHJldHVybiBcIllldCB0byBBc3NpZ25cIjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAodGFza0luZm8uaW5jbHVkZXMoXCJvcGVuXCIpIHx8IHRhc2tJbmZvLmluY2x1ZGVzKFwiaW5wcm9ncmVzc1wiKSkge1xyXG4gIC8vICAgICAgIHJldHVybiBcIlRhc2sgQXNzaWduZWRcIjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGlmIChcclxuICAvLyAgICAgIXRhc2tEZXRhaWxzIHx8XHJcbiAgLy8gICAgICh0YXNrRGV0YWlscy5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBzdGF0dXMgPT09IFwiZGlzYWdyZWVcIilcclxuICAvLyAgIClcclxuICAvLyAgICAgcmV0dXJuIFwiWWV0IHRvIEFzc2lnblwiO1xyXG5cclxuICAvLyAgIGlmICh0YXNrRGV0YWlscy5zdGF0dXMgIT09IFwic3VibWl0XCIpIHJldHVybiBcIlRhc2sgQXNzaWduZWRcIjtcclxuXHJcbiAgLy8gICBpZiAoc3RhdHVzID09PSBcImNvbXBsZXRlXCIpIHJldHVybiBcIkNvbXBsZXRlZFwiO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0UHJvZ3Jlc3NWYWx1ZShwbGFubzogYW55KSB7XHJcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmdldFN0YXR1c0JhZGdlKHBsYW5vKTtcclxuXHJcbiAgICBpZiAoc3RhdHVzID09PSBcImFsbG9jYXRpb25QZW5kaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIDI1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXMocGxhbm86IGFueSkge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5nZXRTdGF0dXNCYWRnZShwbGFubyk7XHJcblxyXG4gICAgaWYgKHN0YXR1cyA9PT0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBcIkFsbG9jYXRpb24gcGVuZGluZ1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiRHJhZnRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0YXR1c0JhZGdlKHBsYW5vOiBhbnkpIHtcclxuICAgIGNvbnN0IGZsb29yID0gdGhpcy5nZXRQcmlvcml0eUZsb29yKHBsYW5vKTtcclxuICAgIHJldHVybiBmbG9vcj8uc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJpb3JpdHlGbG9vcihwbGFubzogYW55KSB7XHJcbiAgICBsZXQgcHJpb3JpdHlGbG9vciA9IHBsYW5vPy5sYXlvdXREZXRhaWxzPy5maW5kKFxyXG4gICAgICAoZjogYW55KSA9PiBmLnN0YXR1cyA9PT0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIXByaW9yaXR5Rmxvb3IpIHtcclxuICAgICAgcHJpb3JpdHlGbG9vciA9IHBsYW5vPy5sYXlvdXREZXRhaWxzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcmlvcml0eUZsb29yO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3VibWl0KGRhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc3RhdHVzTWFwOiBhbnkgPSB7XHJcbiAgICAgIGxheW91dDogZGF0YS50YXNrRGV0YWlscz8ubGF5b3V0U3RhdHVzLFxyXG4gICAgICBmaXh0dXJlOiBkYXRhLnRhc2tEZXRhaWxzPy5maXh0dXJlU3RhdHVzLFxyXG4gICAgICB2bTogZGF0YS50YXNrRGV0YWlscz8udm1TdGF0dXMsXHJcbiAgICB9O1xyXG4gICAgbGV0IHN1Ym1pdFRhc2sgPSBkYXRhPy5wbGFub1Rhc2s/LlswXT8udGFza1N0YXR1cy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBzdGF0dXNNYXBbZWxlLnR5cGVdID09IFwicGVuZGluZ1wiLFxyXG4gICAgKTtcclxuICAgIGlmIChzdWJtaXRUYXNrKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUXVlcnlQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgIHRhYjogdGhpcy5zZWxlY3RlZEZpbHRlclRhYixcclxuICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcclxuICAgICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgICB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCIsXHJcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZGlyZWN0U3RvcmUoc3RvcmVJZDogYW55KSB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYG1hbmFnZS9zdG9yZXMvcGxhbm8/c3RvcmVJZD0ke3N0b3JlSWR9YCk7XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCgpIHtcclxuICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IHRoaXMudG90YWxJdGVtcyxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICBzb3J0Q29sdW1uTmFtZTogdGhpcy5zb3J0ZWRDb2x1bW4sXHJcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0T3JkZXIsXHJcbiAgICAgIGZpbHRlcjogdGhpcy5hcHBsaWVkRmlsdGVycyxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldE9uYm9hcmRQbGFub0xpc3RFeHBvcnQocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShcclxuICAgICAgICAgICAgICByZXMsXHJcbiAgICAgICAgICAgICAgXCJPbmJvYXJkaW5nIFBsYW5vIExpc3RcIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVyciwgXCJlcnJcIik7XHJcbiAgICAgICAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMucGxhbm9TdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbXgtMCBteS01IGdhcC0yXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCIgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogc2VsZWN0ZWRGaWx0ZXJUYWIgPT09ICdhbGwnIH1cIiAoY2xpY2spPVwiZmlsdGVyVGFibGUoJ2FsbCcpXCI+XHJcbiAgICA8aDM+e3sgY2FyZEluZm8/LmFsbFN0b3JlcyA/PyAwIH19PC9oMz5cclxuICAgIDxwPkFsbCBzdG9yZXM8L3A+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCIgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogc2VsZWN0ZWRGaWx0ZXJUYWIgPT09ICdhbGxvY2F0aW9uUGVuZGluZycgfVwiXHJcbiAgICAoY2xpY2spPVwiZmlsdGVyVGFibGUoJ2FsbG9jYXRpb25QZW5kaW5nJylcIj5cclxuICAgIDxoMz57eyBjYXJkSW5mbz8uYWxsb2NhdGlvblBlbmRpbmdTdG9yZXMgPz8gMCB9fTwvaDM+XHJcbiAgICA8cD5BbGxvY2F0aW9uIHBlbmRpbmc8L3A+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCIgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogc2VsZWN0ZWRGaWx0ZXJUYWIgPT09ICdkcmFmdCcgfVwiIChjbGljayk9XCJmaWx0ZXJUYWJsZSgnZHJhZnQnKVwiPlxyXG4gICAgPGgzPnt7IGNhcmRJbmZvPy5kcmFmdFN0b3JlcyA/PyAwIH19PC9oMz5cclxuICAgIDxwPkRyYWZ0PC9wPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cclxuICA8ZGl2IFtjbGFzcy5yZXN0cmljdC1pbnRlcmFjdGlvbl09XCJpc0J1dHRvbkxvYWRpbmdcIj5cclxuICAgIDwhLS0gTWFuYWdlIFBsYW5vZ3JhbSB2aWV3IGhlYWRlciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTVcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aDQ+T25ib2FyZCBzdG9yZXM8L2g0PlxyXG4gICAgICAgIDxzcGFuPnt7IHRvdGFsSXRlbXMgfX0gLSBUb3RhbCBzdG9yZXM8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIiAoY2hhbmdlKT1cIm9uU2VhcmNoKClcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogM3JlbTsgcGFkZGluZy1yaWdodDogM3JlbVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgLz5cclxuXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaC1pY29uXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgICAgICAgICAgIDxsaW5lIHgxPVwiMTNcIiB5MT1cIjEzXCIgeDI9XCIxNlwiIHkyPVwiMTZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hUZXJtXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJzZWFyY2hUZXJtID0gJyc7IG9uU2VhcmNoKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImNsZWFyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNjRweFwiIGhlaWdodD1cIjY0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgOUwxNSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDlMOSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkJ1bGtVcGxvYWRNb2RhbCgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICBCdWxrIFVwbG9hZFxyXG4gICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNNSAxMEgxNU0yLjUgNUgxNy41TTcuNSAxNUgxMi41XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIEZpbHRlclxyXG4gICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgQGlmKHNlbGVjdGVkRmlsdGVyVGFiID09PSAnYWxsJyl7XG4gICAgICAgICAgPHBsYW5vLWZpbHRlciAjcGxhbm9GaWx0ZXJSZWYgW2NsaWVudElkXT1cImNsaWVudElkXCIgW2RhdGFdPVwiZmlsdGVyT2JqZWN0XCIgKGFwcGx5RmlsdGVycyk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgKHJlc2V0RmlsdGVycyk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7ICdNZXJjaGFuZGlzZSBjb21wbGlhbmNlJzogZmFsc2UsICdTdG9yZSBjYXRlZ29yeSc6IGZhbHNlIH1cIj48L3BsYW5vLWZpbHRlcj5cbiAgICAgICAgfVxuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIiBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGxhbm9ncmFtc0xpc3QubGVuZ3RoXCI+XHJcblxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc0J1dHRvbkxvYWRpbmdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNCdXR0b25Mb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyXCIgdmlld0JveD1cIjAgMCA1MCA1MFwiPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj4gRXhwb3J0PC9zcGFuPlxyXG5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2tDcmVhdGVQbGFub2dyYW0oKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMSA0LjE2NjYzVjE1LjgzMzNNNC4xNjY3NSA5Ljk5OTk2SDE1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+Q3JlYXRlIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCJcclxuICAgICAgKm5nSWY9XCIhaXNQYWdlTG9hZGluZyAmJiBwbGFub2dyYW1zTGlzdC5sZW5ndGggPT09IDBcIj5cclxuICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3Igb25ib2FyZCBwbGFub2dyYW0gdGFibGU8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gT25ib2FyZCBQbGFub2dyYW0gbGlzdCB2aWV3IC0tPlxyXG4gICAgPHNlY3Rpb24gaWQ9XCJsaXN0LXZpZXdcIiAqbmdJZj1cIiFpc1BhZ2VMb2FkaW5nICYmIHBsYW5vZ3JhbXNMaXN0Lmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgnc3RvcmVOYW1lJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIFN0b3JlIE5hbWVcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ2xheW91dE5hbWUnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgUGxhbm8gTmFtZVxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2xheW91dE5hbWUnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2xheW91dE5hbWUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgQ291bnRyeVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgQ2l0eVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIENvbXBsZXRpb24gJVxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCIlIG9mIG92ZXJhbGwgcGxhbm9ncmFtIGNvbXBsZXRpb25cIiBjbGFzcz1cIm1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzg0NF8xNzUzOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDA2NSAxMC42NjYzVjcuOTk5NjdNOC4wMDA2NSA1LjMzMzAxSDguMDA3MzJNMTQuNjY3MyA3Ljk5OTY3QzE0LjY2NzMgMTEuNjgxNiAxMS42ODI2IDE0LjY2NjMgOC4wMDA2NSAxNC42NjYzQzQuMzE4NzUgMTQuNjY2MyAxLjMzMzk4IDExLjY4MTYgMS4zMzM5OCA3Ljk5OTY3QzEuMzMzOTggNC4zMTc3OCA0LjMxODc1IDEuMzMzMDEgOC4wMDA2NSAxLjMzMzAxQzExLjY4MjYgMS4zMzMwMSAxNC42NjczIDQuMzE3NzggMTQuNjY3MyA3Ljk5OTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzg0NF8xNzUzOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uU29ydFRhYmxlKCdsYXlvdXRDb3VudCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICBMYXlvdXRcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdsYXlvdXRDb3VudCcgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnbGF5b3V0Q291bnQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgnZml4dHVyZUNvdW50JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICNGaXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2ZpeHR1cmVDb3VudCcgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnZml4dHVyZUNvdW50JyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNj5Ub3RhbCBzdG9yZSBjYXBhY2l0eTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+IENvbWJpbmluZyBwcm9kdWN0IGNhcGFjaXR5IG9mIGFsbCBmaXh0dXJlcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgnZml4dHVyZUNhcGFjaXR5JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgQ2FwYWNpdHlcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdmaXh0dXJlQ2FwYWNpdHknID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2ZpeHR1cmVDYXBhY2l0eScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidG9vbHRpcFwiIGNsYXNzPVwibXMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfODQ0XzE3NTM4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDY1IDEwLjY2NjNWNy45OTk2N004LjAwMDY1IDUuMzMzMDFIOC4wMDczMk0xNC42NjczIDcuOTk5NjdDMTQuNjY3MyAxMS42ODE2IDExLjY4MjYgMTQuNjY2MyA4LjAwMDY1IDE0LjY2NjNDNC4zMTg3NSAxNC42NjYzIDEuMzMzOTggMTEuNjgxNiAxLjMzMzk4IDcuOTk5NjdDMS4zMzM5OCA0LjMxNzc4IDQuMzE4NzUgMS4zMzMwMSA4LjAwMDY1IDEuMzMzMDFDMTEuNjgyNiAxLjMzMzAxIDE0LjY2NzMgNC4zMTc3OCAxNC42NjczIDcuOTk5NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfODQ0XzE3NTM4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uU29ydFRhYmxlKCdsYXN0VXBkYXRlJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlXHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnbGFzdFVwZGF0ZScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnbGFzdFVwZGF0ZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICBTdGF0dXNcclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBwbGFubyBvZiBwbGFub2dyYW1zTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJyZWRpcmVjdFN0b3JlKHBsYW5vLnN0b3JlSWQpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcGxhbm8uc3RvcmVOYW1lIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvcGxhbm9ncmFtL29uYm9hcmQtcGxhbm9ncmFtJ11cIlxyXG4gICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyBwbGFub0lkOiBwbGFuby5faWQsIGZsb29ySWQ6IGdldFByaW9yaXR5Rmxvb3IocGxhbm8pPy5pZCB9XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHBsYW5vLmxheW91dE5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIHt7cGxhbm8/LmNvdW50cnl9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAge3twbGFubz8uY2l0eX19XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cImhlaWdodDogNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWzI1LCA1MF0uaW5jbHVkZXMoZ2V0UHJvZ3Jlc3NWYWx1ZShwbGFubykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy13YXJuaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctc3VjY2VzcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIiAgKHBsYW5vKSA/ICd3aWR0aDogJyArIGdldFByb2dyZXNzVmFsdWUocGxhbm8pICsgJyUnIDogJ3dpZHRoOjI1JSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cImdldFByb2dyZXNzVmFsdWUocGxhbm8pXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj57eyBnZXRQcm9ncmVzc1ZhbHVlKHBsYW5vKSB9fSU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYocGxhbm8/LmxheW91dENvdW50ID09PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2dldFByaW9yaXR5Rmxvb3IocGxhbm8pPy5mbG9vck51bWJlcj8/MH19L3t7cGxhbm8/LmxheW91dENvdW50Pz8wfX1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIEBpZihnZXRTdGF0dXNCYWRnZShwbGFubykgPT09ICdhbGxvY2F0aW9uUGVuZGluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgcng9XCI3XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuOTcyODQgNC4zMTA5N0w1Ljc5NjE3IDguMzQxOEw0LjY4Nzg0IDcuMTU3NjNDNC40ODM2NyA2Ljk2NTEzIDQuMTYyODQgNi45NTM0NyAzLjkyOTUgNy4xMTY4QzMuNzAyIDcuMjg1OTcgMy42Mzc4NCA3LjU4MzQ3IDMuNzc3ODQgNy44MjI2M0w1LjA5MDM0IDkuOTU3NjNDNS4yMTg2NyAxMC4xNTYgNS40NDAzNCAxMC4yNzg1IDUuNjkxMTcgMTAuMjc4NUM1LjkzMDM0IDEwLjI3ODUgNi4xNTc4NCAxMC4xNTYgNi4yODYxNyA5Ljk1NzYzQzYuNDk2MTcgOS42ODM0NyAxMC41MDM3IDQuOTA1OTcgMTAuNTAzNyA0LjkwNTk3QzExLjAyODcgNC4zNjkzIDEwLjM5MjggMy44OTY4IDkuOTcyODQgNC4zMDUxM1Y0LjMxMDk3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHJ4PVwiN1wiIGZpbGw9XCIjRjJGNEY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05Ljk3Mjg0IDQuMzEwOTdMNS43OTYxNyA4LjM0MThMNC42ODc4NCA3LjE1NzYzQzQuNDgzNjcgNi45NjUxMyA0LjE2Mjg0IDYuOTUzNDcgMy45Mjk1IDcuMTE2OEMzLjcwMiA3LjI4NTk3IDMuNjM3ODQgNy41ODM0NyAzLjc3Nzg0IDcuODIyNjNMNS4wOTAzNCA5Ljk1NzYzQzUuMjE4NjcgMTAuMTU2IDUuNDQwMzQgMTAuMjc4NSA1LjY5MTE3IDEwLjI3ODVDNS45MzAzNCAxMC4yNzg1IDYuMTU3ODQgMTAuMTU2IDYuMjg2MTcgOS45NTc2M0M2LjQ5NjE3IDkuNjgzNDcgMTAuNTAzNyA0LjkwNTk3IDEwLjUwMzcgNC45MDU5N0MxMS4wMjg3IDQuMzY5MyAxMC4zOTI4IDMuODk2OCA5Ljk3Mjg0IDQuMzA1MTNWNC4zMTA5N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzY2NzA4NVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcGxhbm8/LmZpeHR1cmVDb3VudCA/PyAwIH19XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGdldFN0YXR1c0JhZGdlKHBsYW5vKSA9PT0gJ2FsbG9jYXRpb25QZW5kaW5nJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgcng9XCI3XCIgZmlsbD1cIiNGRkZBRUJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05Ljk3Mjg0IDQuMzEwOTdMNS43OTYxNyA4LjM0MThMNC42ODc4NCA3LjE1NzYzQzQuNDgzNjcgNi45NjUxMyA0LjE2Mjg0IDYuOTUzNDcgMy45Mjk1IDcuMTE2OEMzLjcwMiA3LjI4NTk3IDMuNjM3ODQgNy41ODM0NyAzLjc3Nzg0IDcuODIyNjNMNS4wOTAzNCA5Ljk1NzYzQzUuMjE4NjcgMTAuMTU2IDUuNDQwMzQgMTAuMjc4NSA1LjY5MTE3IDEwLjI3ODVDNS45MzAzNCAxMC4yNzg1IDYuMTU3ODQgMTAuMTU2IDYuMjg2MTcgOS45NTc2M0M2LjQ5NjE3IDkuNjgzNDcgMTAuNTAzNyA0LjkwNTk3IDEwLjUwMzcgNC45MDU5N0MxMS4wMjg3IDQuMzY5MyAxMC4zOTI4IDMuODk2OCA5Ljk3Mjg0IDQuMzA1MTNWNC4zMTA5N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQjU0NzA4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfUBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHJ4PVwiN1wiIGZpbGw9XCIjRjJGNEY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45NzI4NCA0LjMxMDk3TDUuNzk2MTcgOC4zNDE4TDQuNjg3ODQgNy4xNTc2M0M0LjQ4MzY3IDYuOTY1MTMgNC4xNjI4NCA2Ljk1MzQ3IDMuOTI5NSA3LjExNjhDMy43MDIgNy4yODU5NyAzLjYzNzg0IDcuNTgzNDcgMy43Nzc4NCA3LjgyMjYzTDUuMDkwMzQgOS45NTc2M0M1LjIxODY3IDEwLjE1NiA1LjQ0MDM0IDEwLjI3ODUgNS42OTExNyAxMC4yNzg1QzUuOTMwMzQgMTAuMjc4NSA2LjE1Nzg0IDEwLjE1NiA2LjI4NjE3IDkuOTU3NjNDNi40OTYxNyA5LjY4MzQ3IDEwLjUwMzcgNC45MDU5NyAxMC41MDM3IDQuOTA1OTdDMTEuMDI4NyA0LjM2OTMgMTAuMzkyOCAzLjg5NjggOS45NzI4NCA0LjMwNTEzVjQuMzEwOTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzY2NzA4NVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBwbGFubz8uZml4dHVyZUNhcGFjaXR5ID8/IDAgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW25nYlRvb2x0aXBdPVwicGxhbm8/Lmxhc3RVcGRhdGUgfCBkYXRlIDogJ21lZGl1bSdcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcGxhbm8/Lmxhc3RVcGRhdGUgfCBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJnZXRTdGF0dXNCYWRnZShwbGFubylcIj5cclxuICAgICAgICAgICAgICAgICAge3sgZ2V0U3RhdHVzKHBsYW5vKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgPCEtLSBQYWdpbmF0aW9uIC0tPlxyXG4gICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwibGltaXRcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCIgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25TaXplKClcIiAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIiAqbmdJZj1cIiFpc1BhZ2VMb2FkaW5nICYmIHBsYW5vZ3JhbXNMaXN0Lmxlbmd0aCAhPT0gMFwiPlxyXG4gICAgPC9saWItcGFnaW5hdGlvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XG4iXX0=
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtcGxhbm8vb25ib2FyZC10YWJsZS9vbmJvYXJkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1wbGFuby9vbmJvYXJkLXRhYmxlL29uYm9hcmQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixPQUFPLEVBRVAsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBSWQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDL0csT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsR0FDcEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7Ozs7OztBQVFqSCxNQUFNLE9BQU8sMEJBQTBCO0lBb0QzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4RG1CLGNBQWMsQ0FBd0I7SUFFbkUsUUFBUSxDQUFTO0lBRWpCLFFBQVEsQ0FBTTtJQUNkLGNBQWMsR0FBZ0IsRUFBRSxDQUFDO0lBRWpDLGlCQUFpQixHQUFXLEtBQUssQ0FBQztJQUVsQyxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFFdEIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4QixLQUFLLEdBQVcsRUFB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QUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUMvQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7d0dBL2RVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLGlMQzNCdkMsbXdvQkFrWEE7OzRGRHZWYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCO2dPQUtOLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgZmlsdGVyLFxyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFBsYW5vTGlzdCB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL3BsYW5vZ3JhbS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnVsa1VwbG9hZFBsYW5vZ3JhbUNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvYnVsay11cGxvYWQtcGxhbm9ncmFtL2J1bGstdXBsb2FkLXBsYW5vZ3JhbS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtcclxuICBnZXRRdWVyeVBhcmFtTnVtYmVyLFxyXG4gIGdldFF1ZXJ5UGFyYW1TdHJpbmcsXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvblwiO1xyXG5pbXBvcnQgeyBDcmVhdGVQbGFub2dyYW1Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vb25ib2FyZC1zdG9yZS1wbGFuby9jcmVhdGUtcGxhbm9ncmFtL2NyZWF0ZS1wbGFub2dyYW0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFBsYW5vRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3BsYW5vZ3JhbS9wbGFuby10YWJsZS9wbGFuby1maWx0ZXIvcGxhbm8tZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXBsYW5vLW9uYm9hcmQtdGFibGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL29uYm9hcmQtdGFibGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL29uYm9hcmQtdGFibGUuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYW5vT25ib2FyZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJwbGFub0ZpbHRlclJlZlwiKSBwbGFub0ZpbHRlclJlZj86IFBsYW5vRmlsdGVyQ29tcG9uZW50O1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBjYXJkSW5mbzogYW55O1xyXG4gIHBsYW5vZ3JhbXNMaXN0OiBQbGFub0xpc3RbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZEZpbHRlclRhYjogc3RyaW5nID0gXCJhbGxcIjtcclxuXHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNvcnRPcmRlcjogbnVtYmVyID0gMTtcclxuXHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgbGltaXQ6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xyXG4gIHBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuXHJcbiAgZmlsdGVyT2JqZWN0ID0gW1xyXG4gICAge1xyXG4gICAgICB0aXRsZTogXCJTdGF0dXNcIixcclxuICAgICAgdHlwZTogXCJtdWx0aVwiLFxyXG4gICAgICBpc09wZW5lZDogZmFsc2UsXHJcbiAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICB7IG5hbWU6IFwiRHJhZnRcIiwgdmFsdWU6IFwiZHJhZnRcIiwgY2hlY2tlZDogZmFsc2UgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIkFsbG9jYXRpb24gcGVuZGluZ1wiLFxyXG4gICAgICAgICAgdmFsdWU6IFwiYWxsb2NhdGlvblBlbmRpbmdcIixcclxuICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGFwcGxpZWRGaWx0ZXJzOiBhbnkgPSB7XHJcbiAgICBjb3VudHJ5OiBbXSxcclxuICAgIGNpdHk6IFtdLFxyXG4gICAgc3RhdHVzOiBbXSxcclxuICB9O1xyXG5cclxuICBpc0ZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNCdXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHBsYW5vU3ViPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIC8vIFN1YnNjcmlwdGlvbiB3aWxsIGJlIGNhbmNlbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveS5cclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSwgLy8gRmlsdGVyaW5nIG51bGwvdW5kZWZpbmVkLlxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIC8vIEVtaXR0aW5nIG9ubHkgZGlmZmVyZW50IHZhbHVlcy4gKElnbm9yZXMgc2FtZSBjbGllbnRJZCkuXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcFxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IGdldFF1ZXJ5UGFyYW1TdHJpbmcoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcInNlYXJjaFwiLFxyXG4gICAgICAgICAgICAgICAgZmFsbGJhY2s6IFwiXCIsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSB0aGlzLnNlYXJjaFRlcm0gPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWIgPSBnZXRRdWVyeVBhcmFtU3RyaW5nKHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGtleTogXCJ0YWJcIixcclxuICAgICAgICAgICAgICAgIGZhbGxiYWNrOiBcImFsbFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzLnN0YXR1cyA9IFt0aGlzLnNlbGVjdGVkRmlsdGVyVGFiXTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5saW1pdCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcImxpbWl0XCIsXHJcbiAgICAgICAgICAgICAgICBmYWxsYmFjazogMTAsXHJcbiAgICAgICAgICAgICAgICBtaW46IDEsXHJcbiAgICAgICAgICAgICAgICBtYXg6IDMwLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9mZnNldCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcIm9mZnNldFwiLFxyXG4gICAgICAgICAgICAgICAgZmFsbGJhY2s6IDEsXHJcbiAgICAgICAgICAgICAgICBtaW46IDEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UGxhbm9UYWJsZUxpc3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJNYW5hZ2UgUGxhbm9ncmFtXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJQbGFub2dyYW1cIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBnZXRQbGFub1RhYmxlTGlzdCgpIHtcclxuICAgIHRoaXMucGxhbm9TdWI/LnVuc3Vic2NyaWJlKCk7IC8vIENhbmNlbCBwcmV2aW91cyByZXF1ZXN0XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGxhbm9ncmFtc0xpc3QgPSBbXTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgZmlsdGVyOiB0aGlzLmFwcGxpZWRGaWx0ZXJzLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAvLyBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAvLyBlbXB0eURvd25sb2FkOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBsYW5vU3ViID0gdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRPbmJvYXJkUGxhbm9MaXN0KHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgdGhpcy5wbGFub2dyYW1zTGlzdCA9IHJlcz8uZGF0YT8uZGF0YSA/PyBbXTtcclxuICAgICAgICAgICAgdGhpcy5jYXJkSW5mbyA9IHJlcz8uZGF0YT8uY2FyZEluZm8/LlswXSB8fCBbXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5wbGFub2dyYW1zTGlzdC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBvcGVuQnVsa1VwbG9hZE1vZGFsKCkge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQnVsa1VwbG9hZFBsYW5vZ3JhbUNvbXBvbmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ3JlYXRlUGxhbm9ncmFtKCkge1xyXG4gICAgbGV0IG1vZGVsUmVmOiBhbnk7XHJcblxyXG4gICAgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ3JlYXRlUGxhbm9ncmFtQ29tcG9uZW50LCB7XHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3JlYXRlLXBsYW5vZ3JhbS1tb2RhbFwiLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIGJlZm9yZURpc21pc3M6ICgpID0+ICFtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZT8uaXNNb2RhbEJ1c3ksXHJcbiAgICB9KTtcclxuXHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OmFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9wbGFub2dyYW0vb25ib2FyZC1wbGFub2dyYW1cIl0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBsYW5vSWQ6IHJlc3VsdD8ucGxhbm9JZCwgZmxvb3JJZDogcmVzdWx0Py5mbG9vcklkIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9IFwiXCI7XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcblxyXG4gICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSB0aGlzLnNlYXJjaFRlcm0gPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBvblNvcnRUYWJsZShjb2x1bW46IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFBsYW5vVGFibGVMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJUYWJsZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsdGVyVGFiICE9PSBkYXRhKSB7XHJcbiAgICAgIHRoaXMucGxhbm9GaWx0ZXJSZWY/Lm9uUmVzZXRGaWx0ZXIoZmFsc2UpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVGFiID0gZGF0YTtcclxuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IHtcclxuICAgICAgICBjb3VudHJ5OiBbXSxcclxuICAgICAgICBjaXR5OiBbXSxcclxuICAgICAgICBzdGF0dXM6IFt0aGlzLnNlbGVjdGVkRmlsdGVyVGFiXSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSA9IFwiXCI7XHJcbiAgICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycyhldmVudDogYW55KSB7XHJcbiAgICBldmVudC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBsZXQga2V5ID0gZWxlLnRpdGxlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChrZXkgPT09IFwic3RvcmUgY2F0ZWdvcnlcIikge1xyXG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNbXCJwbGFub1N0cmF0ZWd5XCJdID0gZWxlLnNlbGVjdGVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNbZWxlLnRpdGxlLnRvTG93ZXJDYXNlKCldID0gZWxlLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmdldFBsYW5vVGFibGVMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0aW9uU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxJdGVtcyA8IDEwID8gdGhpcy50b3RhbEl0ZW1zIDogdGhpcy5saW1pdDtcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gTnVtYmVyKHBhZ2VPZmZzZXQpO1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIHBsYW5vRmxvb3JEZXRhaWxzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEubGF5b3V0RGV0YWlscy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBjb21wbGV0ZUNvdW50ID0gZGF0YT8udGFza0RldGFpbHM/LmNvbXBsZXRlTGF5b3V0IHx8IDA7XHJcbiAgICAgIHJldHVybiBjb21wbGV0ZUNvdW50ICsgXCIvXCIgKyBkYXRhLmxheW91dERldGFpbHMubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXRUYXNrU3RhdHVzKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XHJcbiAgLy8gICBjb25zdCBzdGF0dXNNYXA6IGFueSA9IHtcclxuICAvLyAgICAgbGF5b3V0OiBkYXRhLnRhc2tEZXRhaWxzPy5sYXlvdXRTdGF0dXMsXHJcbiAgLy8gICAgIGZpeHR1cmU6IGRhdGEudGFza0RldGFpbHM/LmZpeHR1cmVTdGF0dXMsXHJcbiAgLy8gICAgIHZtOiBkYXRhLnRhc2tEZXRhaWxzPy5maXh0dXJlU3RhdHVzLFxyXG4gIC8vICAgfTtcclxuICAvLyAgIGlmICh0eXBlID09IFwidm1cIikge1xyXG4gIC8vICAgICB0eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25zdCBzdGF0dXMgPSBzdGF0dXNNYXBbdHlwZV07XHJcblxyXG4gIC8vICAgY29uc3QgdGFza0RldGFpbHMgPSBkYXRhPy5wbGFub1Rhc2s/LlswXT8udGFza1N0YXR1cz8uZmluZChcclxuICAvLyAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSB0eXBlLFxyXG4gIC8vICAgKTtcclxuXHJcbiAgLy8gICBpZiAodHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gIC8vICAgICBsZXQgdGFza0luZm8gPSBkYXRhPy5wbGFub1Rhc2s/LlswXT8udGFza1N0YXR1cz8uZmlsdGVyKFxyXG4gIC8vICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnN0YXR1cyAmJiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIixcclxuICAvLyAgICAgKTtcclxuICAvLyAgICAgaWYgKFxyXG4gIC8vICAgICAgIHN0YXR1cyA9PT0gXCJwZW5kaW5nXCIgJiZcclxuICAvLyAgICAgICB0YXNrSW5mbz8uc29tZSgodGFzazogYW55KSA9PiB0YXNrLnN0YXR1cyA9PSBcInN1Ym1pdFwiKVxyXG4gIC8vICAgICApXHJcbiAgLy8gICAgICAgcmV0dXJuIFwicmV2aWV3UGVuZGluZ1wiO1xyXG4gIC8vICAgICBpZiAodGFza0luZm8/Lmxlbmd0aCAhPSBkYXRhLmxheW91dENvdW50KSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIFwieWV0VG9Bc3NpZ25cIjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBpZiAodGFza0luZm8uaW5jbHVkZXMoXCJvcGVuXCIpIHx8IHRhc2tJbmZvLmluY2x1ZGVzKFwiaW5wcm9ncmVzc1wiKSkge1xyXG4gIC8vICAgICAgIHJldHVybiBcInRhc2tBc3NpZ25lZFwiO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgaWYgKFxyXG4gIC8vICAgICAhdGFza0RldGFpbHMgfHxcclxuICAvLyAgICAgKHRhc2tEZXRhaWxzLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIHN0YXR1cyA9PT0gXCJkaXNhZ3JlZVwiKVxyXG4gIC8vICAgKVxyXG4gIC8vICAgICByZXR1cm4gXCJ5ZXRUb0Fzc2lnblwiO1xyXG5cclxuICAvLyAgIGlmICh0YXNrRGV0YWlscy5zdGF0dXMgIT09IFwic3VibWl0XCIpIHJldHVybiBcInRhc2tBc3NpZ25lZFwiO1xyXG5cclxuICAvLyAgIGlmIChzdGF0dXMgPT09IFwiY29tcGxldGVcIikgcmV0dXJuIFwiY29tcGxldGVkXCI7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRUYXNrVG9vbHRpcChkYXRhOiBhbnksIHR5cGU6IHN0cmluZykge1xyXG4gIC8vICAgY29uc3Qgc3RhdHVzTWFwOiBhbnkgPSB7XHJcbiAgLy8gICAgIGxheW91dDogZGF0YS50YXNrRGV0YWlscz8ubGF5b3V0U3RhdHVzLFxyXG4gIC8vICAgICBmaXh0dXJlOiBkYXRhLnRhc2tEZXRhaWxzPy5maXh0dXJlU3RhdHVzLFxyXG4gIC8vICAgICB2bTogZGF0YS50YXNrRGV0YWlscz8uZml4dHVyZVN0YXR1cyxcclxuICAvLyAgIH07XHJcbiAgLy8gICBpZiAodHlwZSA9PSBcInZtXCIpIHtcclxuICAvLyAgICAgdHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY29uc3QgdGFza0RldGFpbHMgPSBkYXRhPy5wbGFub1Rhc2s/LlswXT8udGFza1N0YXR1cz8uZmluZChcclxuICAvLyAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSB0eXBlLFxyXG4gIC8vICAgKTtcclxuXHJcbiAgLy8gICBjb25zdCBzdGF0dXMgPSBzdGF0dXNNYXBbdHlwZV07XHJcblxyXG4gIC8vICAgaWYgKHR5cGUgPT0gXCJmaXh0dXJlXCIpIHtcclxuICAvLyAgICAgbGV0IHRhc2tJbmZvID0gZGF0YT8ucGxhbm9UYXNrPy5bMF0/LnRhc2tTdGF0dXM/LmZpbHRlcihcclxuICAvLyAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5zdGF0dXMgJiYgZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIsXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBzdGF0dXMgPT09IFwicGVuZGluZ1wiICYmXHJcbiAgLy8gICAgICAgdGFza0luZm8/LnNvbWUoKHRhc2s6IGFueSkgPT4gdGFzay5zdGF0dXMgPT0gXCJzdWJtaXRcIilcclxuICAvLyAgICAgKVxyXG4gIC8vICAgICAgIHJldHVybiBcIlJldmlldyBQZW5kaW5nXCI7XHJcbiAgLy8gICAgIGlmICh0YXNrSW5mbz8ubGVuZ3RoICE9IGRhdGEubGF5b3V0Q291bnQpIHtcclxuICAvLyAgICAgICByZXR1cm4gXCJZZXQgdG8gQXNzaWduXCI7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgaWYgKHRhc2tJbmZvLmluY2x1ZGVzKFwib3BlblwiKSB8fCB0YXNrSW5mby5pbmNsdWRlcyhcImlucHJvZ3Jlc3NcIikpIHtcclxuICAvLyAgICAgICByZXR1cm4gXCJUYXNrIEFzc2lnbmVkXCI7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBpZiAoXHJcbiAgLy8gICAgICF0YXNrRGV0YWlscyB8fFxyXG4gIC8vICAgICAodGFza0RldGFpbHMuc3RhdHVzID09IFwic3VibWl0XCIgJiYgc3RhdHVzID09PSBcImRpc2FncmVlXCIpXHJcbiAgLy8gICApXHJcbiAgLy8gICAgIHJldHVybiBcIllldCB0byBBc3NpZ25cIjtcclxuXHJcbiAgLy8gICBpZiAodGFza0RldGFpbHMuc3RhdHVzICE9PSBcInN1Ym1pdFwiKSByZXR1cm4gXCJUYXNrIEFzc2lnbmVkXCI7XHJcblxyXG4gIC8vICAgaWYgKHN0YXR1cyA9PT0gXCJjb21wbGV0ZVwiKSByZXR1cm4gXCJDb21wbGV0ZWRcIjtcclxuICAvLyB9XHJcblxyXG4gIGdldFByb2dyZXNzVmFsdWUocGxhbm86IGFueSkge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5nZXRTdGF0dXNCYWRnZShwbGFubyk7XHJcblxyXG4gICAgaWYgKHN0YXR1cyA9PT0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiKSB7XHJcbiAgICAgIHJldHVybiAyNTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzKHBsYW5vOiBhbnkpIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzQmFkZ2UocGxhbm8pO1xyXG5cclxuICAgIGlmIChzdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIikge1xyXG4gICAgICByZXR1cm4gXCJBbGxvY2F0aW9uIHBlbmRpbmdcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIkRyYWZ0XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0dXNCYWRnZShwbGFubzogYW55KSB7XHJcbiAgICBjb25zdCBmbG9vciA9IHRoaXMuZ2V0UHJpb3JpdHlGbG9vcihwbGFubyk7XHJcbiAgICByZXR1cm4gZmxvb3I/LnN0YXR1cztcclxuICB9XHJcblxyXG4gIGdldFByaW9yaXR5Rmxvb3IocGxhbm86IGFueSkge1xyXG4gICAgbGV0IHByaW9yaXR5Rmxvb3IgPSBwbGFubz8ubGF5b3V0RGV0YWlscz8uZmluZChcclxuICAgICAgKGY6IGFueSkgPT4gZi5zdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIixcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFwcmlvcml0eUZsb29yKSB7XHJcbiAgICAgIHByaW9yaXR5Rmxvb3IgPSBwbGFubz8ubGF5b3V0RGV0YWlsc1swXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJpb3JpdHlGbG9vcjtcclxuICB9XHJcblxyXG4gIGdldFN1Ym1pdChkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IHN0YXR1c01hcDogYW55ID0ge1xyXG4gICAgICBsYXlvdXQ6IGRhdGEudGFza0RldGFpbHM/LmxheW91dFN0YXR1cyxcclxuICAgICAgZml4dHVyZTogZGF0YS50YXNrRGV0YWlscz8uZml4dHVyZVN0YXR1cyxcclxuICAgICAgdm06IGRhdGEudGFza0RldGFpbHM/LnZtU3RhdHVzLFxyXG4gICAgfTtcclxuICAgIGxldCBzdWJtaXRUYXNrID0gZGF0YT8ucGxhbm9UYXNrPy5bMF0/LnRhc2tTdGF0dXMuZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuc3RhdHVzID09IFwic3VibWl0XCIgJiYgc3RhdHVzTWFwW2VsZS50eXBlXSA9PSBcInBlbmRpbmdcIixcclxuICAgICk7XHJcbiAgICBpZiAoc3VibWl0VGFzaykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICB0YWI6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJUYWIsXHJcbiAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiLFxyXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFN0b3JlKHN0b3JlSWQ6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgIGRhdGEuc3RvcmUgPSBzdG9yZUlkO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBtYW5hZ2Uvc3RvcmVzL3BsYW5vP3N0b3JlSWQ9JHtzdG9yZUlkfWApO1xyXG4gIH1cclxuXHJcbiAgb25FeHBvcnQoKSB7XHJcbiAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIGxpbWl0OiB0aGlzLnRvdGFsSXRlbXMsXHJcbiAgICAgIG9mZnNldDogMSxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydE9yZGVyLFxyXG4gICAgICBmaWx0ZXI6IHRoaXMuYXBwbGllZEZpbHRlcnMsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFRlcm0sXHJcbiAgICAgIGV4cG9ydDogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRPbmJvYXJkUGxhbm9MaXN0RXhwb3J0KHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5zYXZlQXNFeGNlbEZpbGUoXHJcbiAgICAgICAgICAgICAgcmVzLFxyXG4gICAgICAgICAgICAgIFwiT25ib2FyZGluZyBQbGFubyBMaXN0XCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnIsIFwiZXJyXCIpO1xyXG4gICAgICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnBsYW5vU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93IG14LTAgbXktNSBnYXAtMlwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkRmlsdGVyVGFiID09PSAnYWxsJyB9XCIgKGNsaWNrKT1cImZpbHRlclRhYmxlKCdhbGwnKVwiPlxyXG4gICAgPGgzPnt7IGNhcmRJbmZvPy5hbGxTdG9yZXMgPz8gMCB9fTwvaDM+XHJcbiAgICA8cD5BbGwgc3RvcmVzPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkRmlsdGVyVGFiID09PSAnYWxsb2NhdGlvblBlbmRpbmcnIH1cIlxyXG4gICAgKGNsaWNrKT1cImZpbHRlclRhYmxlKCdhbGxvY2F0aW9uUGVuZGluZycpXCI+XHJcbiAgICA8aDM+e3sgY2FyZEluZm8/LmFsbG9jYXRpb25QZW5kaW5nU3RvcmVzID8/IDAgfX08L2gzPlxyXG4gICAgPHA+QWxsb2NhdGlvbiBwZW5kaW5nPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHNlbGVjdGVkRmlsdGVyVGFiID09PSAnZHJhZnQnIH1cIiAoY2xpY2spPVwiZmlsdGVyVGFibGUoJ2RyYWZ0JylcIj5cclxuICAgIDxoMz57eyBjYXJkSW5mbz8uZHJhZnRTdG9yZXMgPz8gMCB9fTwvaDM+XHJcbiAgICA8cD5EcmFmdDwvcD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+XHJcbiAgPGRpdiBbY2xhc3MucmVzdHJpY3QtaW50ZXJhY3Rpb25dPVwiaXNCdXR0b25Mb2FkaW5nXCI+XHJcbiAgICA8IS0tIE1hbmFnZSBQbGFub2dyYW0gdmlldyBoZWFkZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi01XCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGg0Pk9uYm9hcmQgc3RvcmVzPC9oND5cclxuICAgICAgICA8c3Bhbj57eyB0b3RhbEl0ZW1zIH19IC0gVG90YWwgc3RvcmVzPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCIgKGNoYW5nZSk9XCJvblNlYXJjaCgpXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNyZW07IHBhZGRpbmctcmlnaHQ6IDNyZW1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJzZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIC8+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaWNvblwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgICAgICAgICAgICA8bGluZSB4MT1cIjEzXCIgeTE9XCIxM1wiIHgyPVwiMTZcIiB5Mj1cIjE2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoVGVybVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwic2VhcmNoVGVybSA9ICcnOyBvblNlYXJjaCgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjY0cHhcIiBoZWlnaHQ9XCI2NHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDlMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSA5TDkgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCI5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5CdWxrVXBsb2FkTW9kYWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgQnVsayBVcGxvYWRcclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTUgMTBIMTVNMi41IDVIMTcuNU03LjUgMTVIMTIuNVwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICBGaWx0ZXJcclxuICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgIEBpZihzZWxlY3RlZEZpbHRlclRhYiA9PT0gJ2FsbCcpe1xuICAgICAgICAgIDxwbGFuby1maWx0ZXIgI3BsYW5vRmlsdGVyUmVmIFtjbGllbnRJZF09XCJjbGllbnRJZFwiIFtkYXRhXT1cImZpbHRlck9iamVjdFwiIChhcHBseUZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIlxuICAgICAgICAgIChyZXNldEZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIlxuICAgICAgICAgIFtjb25maWddPVwieyAnTWVyY2hhbmRpc2UgY29tcGxpYW5jZSc6IGZhbHNlLCAnU3RvcmUgY2F0ZWdvcnknOiBmYWxzZSB9XCI+PC9wbGFuby1maWx0ZXI+XG4gICAgICAgIH1cblxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydCgpXCIgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXBsYW5vZ3JhbXNMaXN0Lmxlbmd0aFwiPlxyXG5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNCdXR0b25Mb2FkaW5nXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInBhdGhcIiBjeD1cIjI1XCIgY3k9XCIyNVwiIHI9XCIyMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiNFwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yXCI+IEV4cG9ydDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsaWNrQ3JlYXRlUGxhbm9ncmFtKClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgdGV4dC13aGl0ZVwiPkNyZWF0ZSA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiXHJcbiAgICAgICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmcgJiYgcGxhbm9ncmFtc0xpc3QubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIG9uYm9hcmQgcGxhbm9ncmFtIHRhYmxlPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE9uYm9hcmQgUGxhbm9ncmFtIGxpc3QgdmlldyAtLT5cclxuICAgIDxzZWN0aW9uIGlkPVwibGlzdC12aWV3XCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZyAmJiBwbGFub2dyYW1zTGlzdC5sZW5ndGggIT09IDBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3N0b3JlTmFtZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICBTdG9yZSBOYW1lXHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnc3RvcmVOYW1lJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uU29ydFRhYmxlKCdsYXlvdXROYW1lJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBsYW5vIE5hbWVcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdsYXlvdXROYW1lJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdsYXlvdXROYW1lJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgIENvdW50cnlcclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgIENpdHlcclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICBDb21wbGV0aW9uICVcclxuICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiJSBvZiBvdmVyYWxsIHBsYW5vZ3JhbSBjb21wbGV0aW9uXCIgY2xhc3M9XCJtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF84NDRfMTc1MzgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwNjUgMTAuNjY2M1Y3Ljk5OTY3TTguMDAwNjUgNS4zMzMwMUg4LjAwNzMyTTE0LjY2NzMgNy45OTk2N0MxNC42NjczIDExLjY4MTYgMTEuNjgyNiAxNC42NjYzIDguMDAwNjUgMTQuNjY2M0M0LjMxODc1IDE0LjY2NjMgMS4zMzM5OCAxMS42ODE2IDEuMzMzOTggNy45OTk2N0MxLjMzMzk4IDQuMzE3NzggNC4zMTg3NSAxLjMzMzAxIDguMDAwNjUgMS4zMzMwMUMxMS42ODI2IDEuMzMzMDEgMTQuNjY3MyA0LjMxNzc4IDE0LjY2NzMgNy45OTk2N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF84NDRfMTc1MzhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgnbGF5b3V0Q291bnQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgTGF5b3V0XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnbGF5b3V0Q291bnQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2xheW91dENvdW50JyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ2ZpeHR1cmVDb3VudCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAjRml4dHVyZXNcclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBtcy0xIG10LTFcIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICdmaXh0dXJlQ291bnQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2ZpeHR1cmVDb3VudCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDY+VG90YWwgc3RvcmUgY2FwYWNpdHk8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiBDb21iaW5pbmcgcHJvZHVjdCBjYXBhY2l0eSBvZiBhbGwgZml4dHVyZXMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ2ZpeHR1cmVDYXBhY2l0eScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhcGFjaXR5XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCIgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnZml4dHVyZUNhcGFjaXR5JyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICdmaXh0dXJlQ2FwYWNpdHknID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBcIiBjbGFzcz1cIm1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzg0NF8xNzUzOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDA2NSAxMC42NjYzVjcuOTk5NjdNOC4wMDA2NSA1LjMzMzAxSDguMDA3MzJNMTQuNjY3MyA3Ljk5OTY3QzE0LjY2NzMgMTEuNjgxNiAxMS42ODI2IDE0LjY2NjMgOC4wMDA2NSAxNC42NjYzQzQuMzE4NzUgMTQuNjY2MyAxLjMzMzk4IDExLjY4MTYgMS4zMzM5OCA3Ljk5OTY3QzEuMzMzOTggNC4zMTc3OCA0LjMxODc1IDEuMzMzMDEgOC4wMDA2NSAxLjMzMzAxQzExLjY4MjYgMS4zMzMwMSAxNC42NjczIDQuMzE3NzggMTQuNjY3MyA3Ljk5OTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzg0NF8xNzUzOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgnbGFzdFVwZGF0ZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICBMYXN0IHVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIG1zLTEgbXQtMVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2xhc3RVcGRhdGUnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2xhc3RVcGRhdGUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgU3RhdHVzXHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcGxhbm8gb2YgcGxhbm9ncmFtc0xpc3RcIj5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmVkaXJlY3RTdG9yZShwbGFuby5zdG9yZUlkKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHBsYW5vLnN0b3JlTmFtZSB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3BsYW5vZ3JhbS9vbmJvYXJkLXBsYW5vZ3JhbSddXCJcclxuICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgcGxhbm9JZDogcGxhbm8uX2lkLCBmbG9vcklkOiBnZXRQcmlvcml0eUZsb29yKHBsYW5vKT8uaWQgfVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBwbGFuby5sYXlvdXROYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICB7e3BsYW5vPy5jb3VudHJ5fX1cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIHt7cGxhbm8/LmNpdHl9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCIgc3R5bGU9XCJoZWlnaHQ6IDRweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsyNSwgNTBdLmluY2x1ZGVzKGdldFByb2dyZXNzVmFsdWUocGxhbm8pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctd2FybmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXN1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHJvbGU9XCJwcm9ncmVzc2JhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCIgIChwbGFubykgPyAnd2lkdGg6ICcgKyBnZXRQcm9ncmVzc1ZhbHVlKHBsYW5vKSArICclJyA6ICd3aWR0aDoyNSUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJnZXRQcm9ncmVzc1ZhbHVlKHBsYW5vKVwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+e3sgZ2V0UHJvZ3Jlc3NWYWx1ZShwbGFubykgfX0lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKHBsYW5vPy5sYXlvdXRDb3VudCA9PT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgfUBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAge3tnZXRQcmlvcml0eUZsb29yKHBsYW5vKT8uZmxvb3JOdW1iZXI/PzB9fS97e3BsYW5vPy5sYXlvdXRDb3VudD8/MH19XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICBAaWYoZ2V0U3RhdHVzQmFkZ2UocGxhbm8pID09PSAnYWxsb2NhdGlvblBlbmRpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHJ4PVwiN1wiIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05Ljk3Mjg0IDQuMzEwOTdMNS43OTYxNyA4LjM0MThMNC42ODc4NCA3LjE1NzYzQzQuNDgzNjcgNi45NjUxMyA0LjE2Mjg0IDYuOTUzNDcgMy45Mjk1IDcuMTE2OEMzLjcwMiA3LjI4NTk3IDMuNjM3ODQgNy41ODM0NyAzLjc3Nzg0IDcuODIyNjNMNS4wOTAzNCA5Ljk1NzYzQzUuMjE4NjcgMTAuMTU2IDUuNDQwMzQgMTAuMjc4NSA1LjY5MTE3IDEwLjI3ODVDNS45MzAzNCAxMC4yNzg1IDYuMTU3ODQgMTAuMTU2IDYuMjg2MTcgOS45NTc2M0M2LjQ5NjE3IDkuNjgzNDcgMTAuNTAzNyA0LjkwNTk3IDEwLjUwMzcgNC45MDU5N0MxMS4wMjg3IDQuMzY5MyAxMC4zOTI4IDMuODk2OCA5Ljk3Mjg0IDQuMzA1MTNWNC4zMTA5N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICB9QGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiByeD1cIjdcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45NzI4NCA0LjMxMDk3TDUuNzk2MTcgOC4zNDE4TDQuNjg3ODQgNy4xNTc2M0M0LjQ4MzY3IDYuOTY1MTMgNC4xNjI4NCA2Ljk1MzQ3IDMuOTI5NSA3LjExNjhDMy43MDIgNy4yODU5NyAzLjYzNzg0IDcuNTgzNDcgMy43Nzc4NCA3LjgyMjYzTDUuMDkwMzQgOS45NTc2M0M1LjIxODY3IDEwLjE1NiA1LjQ0MDM0IDEwLjI3ODUgNS42OTExNyAxMC4yNzg1QzUuOTMwMzQgMTAuMjc4NSA2LjE1Nzg0IDEwLjE1NiA2LjI4NjE3IDkuOTU3NjNDNi40OTYxNyA5LjY4MzQ3IDEwLjUwMzcgNC45MDU5NyAxMC41MDM3IDQuOTA1OTdDMTEuMDI4NyA0LjM2OTMgMTAuMzkyOCAzLjg5NjggOS45NzI4NCA0LjMwNTEzVjQuMzEwOTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHBsYW5vPy5maXh0dXJlQ291bnQgPz8gMCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihnZXRTdGF0dXNCYWRnZShwbGFubykgPT09ICdhbGxvY2F0aW9uUGVuZGluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHJ4PVwiN1wiIGZpbGw9XCIjRkZGQUVCXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45NzI4NCA0LjMxMDk3TDUuNzk2MTcgOC4zNDE4TDQuNjg3ODQgNy4xNTc2M0M0LjQ4MzY3IDYuOTY1MTMgNC4xNjI4NCA2Ljk1MzQ3IDMuOTI5NSA3LjExNjhDMy43MDIgNy4yODU5NyAzLjYzNzg0IDcuNTgzNDcgMy43Nzc4NCA3LjgyMjYzTDUuMDkwMzQgOS45NTc2M0M1LjIxODY3IDEwLjE1NiA1LjQ0MDM0IDEwLjI3ODUgNS42OTExNyAxMC4yNzg1QzUuOTMwMzQgMTAuMjc4NSA2LjE1Nzg0IDEwLjE1NiA2LjI4NjE3IDkuOTU3NjNDNi40OTYxNyA5LjY4MzQ3IDEwLjUwMzcgNC45MDU5NyAxMC41MDM3IDQuOTA1OTdDMTEuMDI4NyA0LjM2OTMgMTAuMzkyOCAzLjg5NjggOS45NzI4NCA0LjMwNTEzVjQuMzEwOTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0I1NDcwOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiByeD1cIjdcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuOTcyODQgNC4zMTA5N0w1Ljc5NjE3IDguMzQxOEw0LjY4Nzg0IDcuMTU3NjNDNC40ODM2NyA2Ljk2NTEzIDQuMTYyODQgNi45NTM0NyAzLjkyOTUgNy4xMTY4QzMuNzAyIDcuMjg1OTcgMy42Mzc4NCA3LjU4MzQ3IDMuNzc3ODQgNy44MjI2M0w1LjA5MDM0IDkuOTU3NjNDNS4yMTg2NyAxMC4xNTYgNS40NDAzNCAxMC4yNzg1IDUuNjkxMTcgMTAuMjc4NUM1LjkzMDM0IDEwLjI3ODUgNi4xNTc4NCAxMC4xNTYgNi4yODYxNyA5Ljk1NzYzQzYuNDk2MTcgOS42ODM0NyAxMC41MDM3IDQuOTA1OTcgMTAuNTAzNyA0LjkwNTk3QzExLjAyODcgNC4zNjkzIDEwLjM5MjggMy44OTY4IDkuOTcyODQgNC4zMDUxM1Y0LjMxMDk3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcGxhbm8/LmZpeHR1cmVDYXBhY2l0eSA/PyAwIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ2JUb29sdGlwXT1cInBsYW5vPy5sYXN0VXBkYXRlIHwgZGF0ZSA6ICdtZWRpdW0nXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHBsYW5vPy5sYXN0VXBkYXRlIHwgZGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQmFkZ2UocGxhbm8pXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFN0YXR1cyhwbGFubykgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG5cclxuICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cclxuICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cImxpbWl0XCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uU2l6ZSgpXCIgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZyAmJiBwbGFub2dyYW1zTGlzdC5sZW5ndGggIT09IDBcIj5cclxuICAgIDwvbGliLXBhZ2luYXRpb24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxuIl19