tango-app-ui-store-builder 1.2.16 → 1.2.17

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 (31) hide show
  1. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +18 -7
  2. package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
  3. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
  4. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -3
  5. package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
  6. package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
  7. package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
  8. package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
  9. package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
  10. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
  11. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
  12. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +4 -3
  13. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
  14. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
  15. package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
  16. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
  17. package/esm2022/lib/services/store-builder.service.mjs +10 -1
  18. package/esm2022/lib/tango-store-builder-routing.module.mjs +25 -55
  19. package/esm2022/lib/tango-store-builder.module.mjs +10 -1
  20. package/fesm2022/tango-app-ui-store-builder.mjs +5620 -390
  21. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  22. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  23. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  24. package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
  25. package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
  26. package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
  27. package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
  28. package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
  29. package/lib/services/store-builder.service.d.ts +10 -0
  30. package/lib/tango-store-builder.module.d.ts +61 -58
  31. package/package.json +1 -1
@@ -8,6 +8,7 @@ import * as i1 from "tango-app-ui-global";
8
8
  import * as i2 from "@angular/common";
9
9
  import * as i3 from "tango-app-ui-shared";
10
10
  import * as i4 from "@angular/forms";
11
+ import * as i5 from "../tool-page-header/tool-page-header.component";
11
12
  export class CadRenderComponent {
12
13
  gs;
13
14
  titleCase;
@@ -1519,11 +1520,11 @@ export class CadRenderComponent {
1519
1520
  this.destroy$.complete();
1520
1521
  }
1521
1522
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadRenderComponent, deps: [{ token: i1.GlobalStateService }, { token: i2.TitleCasePipe }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
1522
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CadRenderComponent, selector: "cad-render", host: { listeners: { "window:resize": "onResize()" } }, providers: [TitleCasePipe], viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["canvasContainer"], descendants: true }], ngImport: i0, template: "<section id=\"cad-render\">\r\n <div class=\"app-layout\">\r\n\r\n <!-- LEFT TOOLBAR -->\r\n <div class=\"sidebar\">\r\n <div class=\"p-3\">\r\n <textarea class=\"form-control\" [(ngModel)]=\"rawCADDetails\" placeholder=\"Paste the CAD extracted data\"\r\n rows=\"25\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CANVAS PANEL -->\r\n <div class=\"canvas-wrapper\" #canvasContainer>\r\n\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n\r\n <div class=\"form-check form-switch\">\r\n <input [checked]=\"isAutoAlignMode\" [(ngModel)]=\"isAutoAlignMode\"\r\n [ngModelOptions]=\"{ standalone: true }\" style=\"cursor: pointer\" class=\"form-check-input\"\r\n type=\"checkbox\" [disabled]=\"!floorData\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Auto Position Fixtures\r\n </label>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex gap-2\">\r\n <input type=\"checkbox\" class=\"form-check\" name=\"includeBG\" id=\"includeBG\"\r\n [(ngModel)]=\"includeFixtures\" [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"!floorData\">\r\n <label for=\"includeBG\">Include Fixtures</label>\r\n </div> -->\r\n\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onClickRenderPlano()\">\r\n Render\r\n </button>\r\n\r\n <div class=\"ms-auto d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\"> {{wallCount}} - Walls |</h4>\r\n <h4 class=\"m-0\"> {{wFixturesCount}} - Wall Fixtures |</h4>\r\n <h4 class=\"m-0\"> {{cFixturesCount}} - Center Fixtures</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Canvas -->\r\n <div class=\"canvas-area\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</section>", styles: ["html,body{height:100%;margin:0}#cad-render .app-layout{display:flex;height:calc(100vh - 260px);overflow:hidden}#cad-render .sidebar{width:350px;min-width:350px;border-right:1px solid #ddd;background:#fafafa;overflow-y:auto}#cad-render .canvas-wrapper{flex:1;display:flex;flex-direction:column;background:#fff;padding:0;overflow:hidden}#cad-render .toolbar{flex-shrink:0;display:flex;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid #e6e6e6;background:#fafafa}#cad-render .toggle-fixtures{display:flex;align-items:center;gap:6px;font-size:14px;-webkit-user-select:none;user-select:none}#cad-render .icon-btn{border:none;background:#f1f3f4;width:34px;height:34px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s;padding:0}#cad-render .icon-btn:hover{background:#e2e5e7}#cad-render .icon-btn:active{background:#d1d4d6}#cad-render .icon{width:18px;height:18px;stroke:#3c3f42;stroke-width:2;fill:none}#cad-render .canvas-area{position:relative;flex:1;overflow:hidden}#cad-render .canvas-area canvas{display:block}#cad-render .id-tile{display:flex;align-items:center;padding:8px 12px;border-radius:6px}#cad-render .id-tile p{margin:0}#cad-render .id-tile.active{background-color:#ffecec;border:1px solid #ffb5b5}#cad-render .store-list{max-height:65vh;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
1523
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CadRenderComponent, selector: "cad-render", host: { listeners: { "window:resize": "onResize()" } }, providers: [TitleCasePipe], viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["canvasContainer"], descendants: true }], ngImport: i0, template: "<section id=\"cad-render\">\r\n <lib-tool-page-header\r\n title=\"Check CAD Output\"\r\n description=\"Paste CAD data and preview the parsed layout.\"\r\n ></lib-tool-page-header>\r\n <div class=\"app-layout\">\r\n\r\n <!-- LEFT TOOLBAR -->\r\n <div class=\"sidebar\">\r\n <div class=\"p-3\">\r\n <textarea class=\"form-control\" [(ngModel)]=\"rawCADDetails\" placeholder=\"Paste the CAD extracted data\"\r\n rows=\"25\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CANVAS PANEL -->\r\n <div class=\"canvas-wrapper\" #canvasContainer>\r\n\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n\r\n <div class=\"form-check form-switch\">\r\n <input [checked]=\"isAutoAlignMode\" [(ngModel)]=\"isAutoAlignMode\"\r\n [ngModelOptions]=\"{ standalone: true }\" style=\"cursor: pointer\" class=\"form-check-input\"\r\n type=\"checkbox\" [disabled]=\"!floorData\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Auto Position Fixtures\r\n </label>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex gap-2\">\r\n <input type=\"checkbox\" class=\"form-check\" name=\"includeBG\" id=\"includeBG\"\r\n [(ngModel)]=\"includeFixtures\" [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"!floorData\">\r\n <label for=\"includeBG\">Include Fixtures</label>\r\n </div> -->\r\n\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onClickRenderPlano()\">\r\n Render\r\n </button>\r\n\r\n <div class=\"ms-auto d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\"> {{wallCount}} - Walls |</h4>\r\n <h4 class=\"m-0\"> {{wFixturesCount}} - Wall Fixtures |</h4>\r\n <h4 class=\"m-0\"> {{cFixturesCount}} - Center Fixtures</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Canvas -->\r\n <div class=\"canvas-area\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</section>", styles: ["html,body{height:100%;margin:0}#cad-render .app-layout{display:flex;height:calc(100vh - 260px);overflow:hidden}#cad-render .sidebar{width:350px;min-width:350px;border-right:1px solid #ddd;background:#fafafa;overflow-y:auto}#cad-render .canvas-wrapper{flex:1;display:flex;flex-direction:column;background:#fff;padding:0;overflow:hidden}#cad-render .toolbar{flex-shrink:0;display:flex;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid #e6e6e6;background:#fafafa}#cad-render .toggle-fixtures{display:flex;align-items:center;gap:6px;font-size:14px;-webkit-user-select:none;user-select:none}#cad-render .icon-btn{border:none;background:#f1f3f4;width:34px;height:34px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s;padding:0}#cad-render .icon-btn:hover{background:#e2e5e7}#cad-render .icon-btn:active{background:#d1d4d6}#cad-render .icon{width:18px;height:18px;stroke:#3c3f42;stroke-width:2;fill:none}#cad-render .canvas-area{position:relative;flex:1;overflow:hidden}#cad-render .canvas-area canvas{display:block}#cad-render .id-tile{display:flex;align-items:center;padding:8px 12px;border-radius:6px}#cad-render .id-tile p{margin:0}#cad-render .id-tile.active{background-color:#ffecec;border:1px solid #ffb5b5}#cad-render .store-list{max-height:65vh;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }] });
1523
1524
  }
1524
1525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadRenderComponent, decorators: [{
1525
1526
  type: Component,
1526
- args: [{ selector: "cad-render", providers: [TitleCasePipe], template: "<section id=\"cad-render\">\r\n <div class=\"app-layout\">\r\n\r\n <!-- LEFT TOOLBAR -->\r\n <div class=\"sidebar\">\r\n <div class=\"p-3\">\r\n <textarea class=\"form-control\" [(ngModel)]=\"rawCADDetails\" placeholder=\"Paste the CAD extracted data\"\r\n rows=\"25\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CANVAS PANEL -->\r\n <div class=\"canvas-wrapper\" #canvasContainer>\r\n\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n\r\n <div class=\"form-check form-switch\">\r\n <input [checked]=\"isAutoAlignMode\" [(ngModel)]=\"isAutoAlignMode\"\r\n [ngModelOptions]=\"{ standalone: true }\" style=\"cursor: pointer\" class=\"form-check-input\"\r\n type=\"checkbox\" [disabled]=\"!floorData\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Auto Position Fixtures\r\n </label>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex gap-2\">\r\n <input type=\"checkbox\" class=\"form-check\" name=\"includeBG\" id=\"includeBG\"\r\n [(ngModel)]=\"includeFixtures\" [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"!floorData\">\r\n <label for=\"includeBG\">Include Fixtures</label>\r\n </div> -->\r\n\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onClickRenderPlano()\">\r\n Render\r\n </button>\r\n\r\n <div class=\"ms-auto d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\"> {{wallCount}} - Walls |</h4>\r\n <h4 class=\"m-0\"> {{wFixturesCount}} - Wall Fixtures |</h4>\r\n <h4 class=\"m-0\"> {{cFixturesCount}} - Center Fixtures</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Canvas -->\r\n <div class=\"canvas-area\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</section>", styles: ["html,body{height:100%;margin:0}#cad-render .app-layout{display:flex;height:calc(100vh - 260px);overflow:hidden}#cad-render .sidebar{width:350px;min-width:350px;border-right:1px solid #ddd;background:#fafafa;overflow-y:auto}#cad-render .canvas-wrapper{flex:1;display:flex;flex-direction:column;background:#fff;padding:0;overflow:hidden}#cad-render .toolbar{flex-shrink:0;display:flex;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid #e6e6e6;background:#fafafa}#cad-render .toggle-fixtures{display:flex;align-items:center;gap:6px;font-size:14px;-webkit-user-select:none;user-select:none}#cad-render .icon-btn{border:none;background:#f1f3f4;width:34px;height:34px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s;padding:0}#cad-render .icon-btn:hover{background:#e2e5e7}#cad-render .icon-btn:active{background:#d1d4d6}#cad-render .icon{width:18px;height:18px;stroke:#3c3f42;stroke-width:2;fill:none}#cad-render .canvas-area{position:relative;flex:1;overflow:hidden}#cad-render .canvas-area canvas{display:block}#cad-render .id-tile{display:flex;align-items:center;padding:8px 12px;border-radius:6px}#cad-render .id-tile p{margin:0}#cad-render .id-tile.active{background-color:#ffecec;border:1px solid #ffb5b5}#cad-render .store-list{max-height:65vh;overflow:auto}\n"] }]
1527
+ args: [{ selector: "cad-render", providers: [TitleCasePipe], template: "<section id=\"cad-render\">\r\n <lib-tool-page-header\r\n title=\"Check CAD Output\"\r\n description=\"Paste CAD data and preview the parsed layout.\"\r\n ></lib-tool-page-header>\r\n <div class=\"app-layout\">\r\n\r\n <!-- LEFT TOOLBAR -->\r\n <div class=\"sidebar\">\r\n <div class=\"p-3\">\r\n <textarea class=\"form-control\" [(ngModel)]=\"rawCADDetails\" placeholder=\"Paste the CAD extracted data\"\r\n rows=\"25\"></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CANVAS PANEL -->\r\n <div class=\"canvas-wrapper\" #canvasContainer>\r\n\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n\r\n <div class=\"form-check form-switch\">\r\n <input [checked]=\"isAutoAlignMode\" [(ngModel)]=\"isAutoAlignMode\"\r\n [ngModelOptions]=\"{ standalone: true }\" style=\"cursor: pointer\" class=\"form-check-input\"\r\n type=\"checkbox\" [disabled]=\"!floorData\" />\r\n <label style=\"color: black; white-space: nowrap\" class=\"form-check-label sub ms-2\" for=\"showVMs\">\r\n Auto Position Fixtures\r\n </label>\r\n </div>\r\n\r\n <!-- <div class=\"d-flex gap-2\">\r\n <input type=\"checkbox\" class=\"form-check\" name=\"includeBG\" id=\"includeBG\"\r\n [(ngModel)]=\"includeFixtures\" [ngModelOptions]=\"{ standalone: true }\" [disabled]=\"!floorData\">\r\n <label for=\"includeBG\">Include Fixtures</label>\r\n </div> -->\r\n\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onClickRenderPlano()\">\r\n Render\r\n </button>\r\n\r\n <div class=\"ms-auto d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\"> {{wallCount}} - Walls |</h4>\r\n <h4 class=\"m-0\"> {{wFixturesCount}} - Wall Fixtures |</h4>\r\n <h4 class=\"m-0\"> {{cFixturesCount}} - Center Fixtures</h4>\r\n </div>\r\n </div>\r\n\r\n <!-- Canvas -->\r\n <div class=\"canvas-area\">\r\n <canvas #canvas></canvas>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n</section>", styles: ["html,body{height:100%;margin:0}#cad-render .app-layout{display:flex;height:calc(100vh - 260px);overflow:hidden}#cad-render .sidebar{width:350px;min-width:350px;border-right:1px solid #ddd;background:#fafafa;overflow-y:auto}#cad-render .canvas-wrapper{flex:1;display:flex;flex-direction:column;background:#fff;padding:0;overflow:hidden}#cad-render .toolbar{flex-shrink:0;display:flex;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid #e6e6e6;background:#fafafa}#cad-render .toggle-fixtures{display:flex;align-items:center;gap:6px;font-size:14px;-webkit-user-select:none;user-select:none}#cad-render .icon-btn{border:none;background:#f1f3f4;width:34px;height:34px;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s;padding:0}#cad-render .icon-btn:hover{background:#e2e5e7}#cad-render .icon-btn:active{background:#d1d4d6}#cad-render .icon{width:18px;height:18px;stroke:#3c3f42;stroke-width:2;fill:none}#cad-render .canvas-area{position:relative;flex:1;overflow:hidden}#cad-render .canvas-area canvas{display:block}#cad-render .id-tile{display:flex;align-items:center;padding:8px 12px;border-radius:6px}#cad-render .id-tile p{margin:0}#cad-render .id-tile.active{background-color:#ffecec;border:1px solid #ffb5b5}#cad-render .store-list{max-height:65vh;overflow:auto}\n"] }]
1527
1528
  }], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i2.TitleCasePipe }, { type: i3.ToastService }], propDecorators: { canvasRef: [{
1528
1529
  type: ViewChild,
1529
1530
  args: ["canvas"]
@@ -1534,4 +1535,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1534
1535
  type: HostListener,
1535
1536
  args: ["window:resize"]
1536
1537
  }] } });
1537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLXJlbmRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby10b29scy9jYWQtcmVuZGVyL2NhZC1yZW5kZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLXJlbmRlci9jYWQtcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUdaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7OztBQVExRSxNQUFNLE9BQU8sa0JBQWtCO0lBMEJuQjtJQUNBO0lBQ0E7SUEzQlcsU0FBUyxDQUFpQztJQUNqQyxZQUFZLENBQThCO0lBR3hFLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBUztJQUVqQixNQUFNLENBQWlCO0lBQ3ZCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNuQixjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsWUFBWSxDQUFNO0lBRWxCLFNB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cG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuXHJcbmltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IGdldEZpeHR1cmVDYW52YXNMYWJlbCB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNhZC1yZW5kZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2NhZC1yZW5kZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2NhZC1yZW5kZXIuY29tcG9uZW50LnNjc3NcIixcclxuICBwcm92aWRlcnM6IFtUaXRsZUNhc2VQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENhZFJlbmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwiY2FudmFzXCIpIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNDb250YWluZXJcIikgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgb25SZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gIH1cclxuXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuICB6b29tTGV2ZWw6IG51bWJlciA9IDE7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGxheW91dEJvdW5kczogYW55O1xyXG5cclxuICBmbG9vckRhdGE6IGFueTtcclxuICByYXdDQUREZXRhaWxzOiBhbnk7XHJcblxyXG4gIGluY2x1ZGVGaXh0dXJlczogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNBdXRvQWxpZ25Nb2RlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRDYW52YXMoKTtcclxuICB9XHJcblxyXG4gIGdldCB3YWxsQ291bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdMID0gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGU6IGFueSkgPT4gZT8uZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuICAgIHJldHVybiB3TD8ubGVuZ3RoID8/IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgd0ZpeHR1cmVzQ291bnQoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi4odGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZsYXRNYXAoXHJcbiAgICAgICAgKGU6IGFueSkgPT4gZT8uZml4dHVyZXMgPz8gW10sXHJcbiAgICAgICkgPz8gW10pLFxyXG4gICAgXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgY0ZpeHR1cmVzQ291bnQoKSB7XHJcbiAgICByZXR1cm4gWy4uLih0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSldLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhbnZhcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG4gICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplQ2FudmFzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuY2FudmFzLnNldERpbWVuc2lvbnMoe1xyXG4gICAgICB3aWR0aDogY29udGFpbmVyLmNsaWVudFdpZHRoIC0gOCxcclxuICAgICAgaGVpZ2h0OiBjb250YWluZXIuY2xpZW50SGVpZ2h0IC0gNzUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHNldHVwWm9vbUhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuXHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgLy8gdGhpcy5pc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb20sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgbGFzdFBvc1ggPSAwO1xyXG4gICAgbGV0IGxhc3RQb3NZID0gMDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHBpeGVscyA9ICh2YWx1ZSAvIDI1LjQpICogZHBpO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgcGl4ZWxzID0gdmFsdWUgKiAxMiAqIGRwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIocGl4ZWxzLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgZnJvbVBpeGVscyhwaXhlbHM6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgLy8gcGl4ZWxzID0gcGl4ZWxzID49IHRoaXMud2FsbFRoaWNrbmVzcyA/IHBpeGVscyAtIHRoaXMud2FsbFRoaWNrbmVzcyA6IHRoaXMud2FsbFRoaWNrbmVzcztcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHZhbHVlID0gKHBpeGVscyAvIGRwaSkgKiAyNS40O1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgdmFsdWUgPSBwaXhlbHMgLyAoMTIgKiBkcGkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZS50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tSZW5kZXJQbGFubygpIHtcclxuICAgIGNvbnN0IHJhd0pzb24gPSBKU09OLnBhcnNlKHRoaXMucmF3Q0FERGV0YWlscyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIkBAIH4gcmF3SnNvbjpcIiwgcmF3SnNvbik7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEgPSB0aGlzLnByb2Nlc3NSYXdDQUREZXRhaWxzKHJhd0pzb24pO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiQEAgfiBmbG9vckRhdGE6XCIsIHRoaXMuZmxvb3JEYXRhKTtcclxuXHJcbiAgICB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1Jhd0NBRERldGFpbHMocmF3SnNvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZmxvb3I7XHJcblxyXG4gICAgICBpZiAoIXJhd0pzb24/LmRhdGE/LmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwibGF5b3V0UG9seWdvbiBub3QgZm91bmQgaW4gQ0FEIGRhdGFcIik7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZsb29yID0ge1xyXG4gICAgICAgIGxheW91dFBvbHlnb246IHRyYW5zZm9ybVdhbGxEYXRhKHJhd0pzb24uZGF0YS5sYXlvdXRQb2x5Z29uKSxcclxuICAgICAgICBzdG9yZU5hbWU6IFwiQ0FEIFN0b3JlXCIsXHJcbiAgICAgICAgc3RvcmVJZDogXCJDQUQgU3RvcmVcIixcclxuICAgICAgICBmbG9vck5hbWU6IFwiRmxvb3IgMVwiLFxyXG4gICAgICAgIGZsb29yTnVtYmVyOiAxLFxyXG4gICAgICAgIHBsYW5vUHJvZ3Jlc3M6IDAsXHJcbiAgICAgICAgaXNFZGl0ZWQ6IGZhbHNlLFxyXG4gICAgICAgIGNhZExheW91dDogdHJ1ZSxcclxuICAgICAgICBpc1BsYW5vQXBwcm92ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHN0YXR1czogXCJkcmFmdFwiLFxyXG4gICAgICAgIGNlbnRlckZpeHR1cmU6IHJhd0pzb24uZGF0YT8uY2VudGVyRml4dHVyZT8ubWFwKChmOiBhbnkpID0+XHJcbiAgICAgICAgICB0cmFuc2Zvcm1GaXh0dXJlRGF0YShmKSxcclxuICAgICAgICApLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIGZsb29yO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IHByb2Nlc3NSYXdDQUREZXRhaWxzIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVdhbGxEYXRhKGNhZFJlczogYW55KSB7XHJcbiAgICAgIHJldHVybiBjYWRSZXMubWFwKCh3OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZWxlbWVudFR5cGU6IHc/LmVsZW1lbnRUeXBlID8/IFwid2FsbFwiLFxyXG4gICAgICAgICAgZGlzdGFuY2U6IHc/LmRpc3RhbmNlID8/IDE2LFxyXG4gICAgICAgICAgZWxlbWVudE51bWJlcjogdz8uZWxlbWVudE51bWJlciA/PyAwLFxyXG4gICAgICAgICAgdW5pdDogdz8udW5pdCA/PyBcImZ0XCIsXHJcbiAgICAgICAgICBkaXJlY3Rpb246IHc/LmRpcmVjdGlvbiA/PyBcInJpZ2h0XCIsXHJcbiAgICAgICAgICBhbmdsZTogdz8uYW5nbGUgPz8gMCxcclxuICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb246IHc/LnJlbGF0aXZlUG9zaXRpb24sXHJcbiAgICAgICAgICBmaXh0dXJlczogdy5maXh0dXJlcz8ubWFwKChmOiBhbnkpID0+IHRyYW5zZm9ybUZpeHR1cmVEYXRhKGYpKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1GaXh0dXJlRGF0YShkYXRhOiBhbnkpIHtcclxuICAgICAgY29uc3QgZiA9IGRhdGE7XHJcblxyXG4gICAgICBmdW5jdGlvbiBub3JtYWxpemVDYWRUZXh0KHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL15cXFxcW147XSs7LywgXCJcIikudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpeHR1cmVOYW1lOiBub3JtYWxpemVDYWRUZXh0KGY/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIiksXHJcbiAgICAgICAgcmVsYXRpdmVQb3NpdGlvbjogZj8ucmVsYXRpdmVQb3NpdGlvbixcclxuICAgICAgICBmaXh0dXJlVHlwZTogZj8uYXNzb2NpYXRlZEVsZW1lbnRUeXBlLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgLi4uZj8uaGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IG5vcm1hbGl6ZUNhZFRleHQoZj8uaGVhZGVyPy5sYWJlbCA/PyBcIlwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZvb3RlcjogZj8uZm9vdGVyLFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aDogZj8uZml4dHVyZVdpZHRoLFxyXG4gICAgICAgIGZpeHR1cmVMZW5ndGg6IGY/LmZpeHR1cmVMZW5ndGgsXHJcbiAgICAgICAgZml4dHVyZU51bWJlcjogZj8uZml4dHVyZU51bWJlcixcclxuICAgICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogZj8udGVtcGxhdGVHcm91cE5hbWUgPz8gZj8uaGVhZGVyPy5sYWJlbCxcclxuICAgICAgICBmaXh0dXJlQ2F0ZWdvcnk6IGY/LmZpeHR1cmVDYXRlZ29yeSxcclxuICAgICAgICBmaXh0dXJlQ2FwYWNpdHk6IGY/LmZpeHR1cmVDYXBhY2l0eSxcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogZGF0YT8ud2FsbE51bWJlcixcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI6IGRhdGEuZml4dHVyZU51bWJlcixcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6XHJcbiAgICAgICAgICBmPy5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwid2FsbFwiID8gXCJ3YWxsXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTogQXJyYXkuaXNBcnJheShmPy5wcm9kdWN0QnJhbmROYW1lKVxyXG4gICAgICAgICAgPyBmPy5wcm9kdWN0QnJhbmROYW1lPy5tYXAobm9ybWFsaXplQ2FkVGV4dClcclxuICAgICAgICAgIDogbm9ybWFsaXplQ2FkVGV4dChmPy5wcm9kdWN0QnJhbmROYW1lKSxcclxuICAgICAgICBzaGVsZkNvbmZpZzogZj8uc2hlbGZDb25maWcgPz8gW10sXHJcbiAgICAgICAgZml4dHVyZUhlaWdodDoge1xyXG4gICAgICAgICAgdmFsdWU6IDAsXHJcbiAgICAgICAgICB1bml0OiBcIm1tXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaXh0dXJlU3RhdGljTGVuZ3RoOiB7XHJcbiAgICAgICAgICB2YWx1ZTogMTUyNCxcclxuICAgICAgICAgIHVuaXQ6IFwibW1cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgICAgdmFsdWU6IDEyMjAsXHJcbiAgICAgICAgICB1bml0OiBcIm1tXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBcIkwzXCIsXHJcbiAgICAgICAgaXNCb2R5RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBpc01lcmNoRWRpdGVkOiBmYWxzZSxcclxuICAgICAgICBpc1ZtRWRpdGVkOiBmYWxzZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdJbml0aWFsQ29udGVudCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5jbGVhcigpO1xyXG4gICAgdGhpcy5yZW9yZGVyRml4dHVyZSh0aGlzLmZsb29yRGF0YSk7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdMYXlvdXRFbGVtZW50cygpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgLy8gV2FsbHNcclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IGVsZW1lbnQuZWxlbWVudE51bWJlcjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2VudGVyIGZsb29yIGZpeHR1cmVzXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVsbExheW91dEJvdW5kcygpIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIW9iamVjdHMubGVuZ3RoKSByZXR1cm4geyBsZWZ0OiAwLCB0b3A6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcclxuXHJcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LFxyXG4gICAgICBtaW5ZID0gSW5maW5pdHksXHJcbiAgICAgIG1heFggPSAtSW5maW5pdHksXHJcbiAgICAgIG1heFkgPSAtSW5maW5pdHk7XHJcblxyXG4gICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xyXG4gICAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcmVjdC5sZWZ0KTtcclxuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHJlY3QudG9wKTtcclxuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHJlY3QubGVmdCArIHJlY3Qud2lkdGgpO1xyXG4gICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcmVjdC50b3AgKyByZWN0LmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGVmdDogbWluWCxcclxuICAgICAgdG9wOiBtaW5ZLFxyXG4gICAgICB3aWR0aDogbWF4WCAtIG1pblgsXHJcbiAgICAgIGhlaWdodDogbWF4WSAtIG1pblksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaXRDYW52YXNUb0xheW91dEFuaW1hdGVkKGR1cmF0aW9uID0gNDAwKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBpZiAoIWJvdW5kcy53aWR0aCB8fCAhYm91bmRzLmhlaWdodCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1cgPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpO1xyXG5cclxuICAgIC8vIEZpbmFsIHpvb20gdG8gZml0ICh3aXRoIHBhZGRpbmcpXHJcbiAgICBjb25zdCBzY2FsZVggPSBjYW52YXNXIC8gYm91bmRzLndpZHRoO1xyXG4gICAgY29uc3Qgc2NhbGVZID0gY2FudmFzSCAvIGJvdW5kcy5oZWlnaHQ7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpICogMC45OyAvLyBwYWRkaW5nIDEwJVxyXG5cclxuICAgIC8vIERlc2lyZWQgdmlld3BvcnQgb2Zmc2V0IHRvIGNlbnRlciBsYXlvdXRcclxuICAgIGNvbnN0IHRhcmdldFZwdCA9IFtcclxuICAgICAgLi4uKHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIHx8IFsxLCAwLCAwLCAxLCAwLCAwXSksXHJcbiAgICBdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgdGFyZ2V0VnB0WzBdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVYXHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tOyAvLyBzY2FsZVlcclxuXHJcbiAgICBjb25zdCBleHRyYVRvcFBhZGRpbmdQeCA9IDI0O1xyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207IC8vIGNlbnRlciBYXHJcbiAgICB0YXJnZXRWcHRbNV0gPVxyXG4gICAgICBjYW52YXNIIC8gMiAtXHJcbiAgICAgIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbSArXHJcbiAgICAgIGV4dHJhVG9wUGFkZGluZ1B4OyAvLyBjZW50ZXIgWSArIGV4dHJhIHRvcCBwYWRkaW5nXHJcblxyXG4gICAgLy8gQ3VycmVudCB2aWV3cG9ydCAoc3RhcnRpbmcgcG9pbnQgb2YgYW5pbWF0aW9uKVxyXG4gICAgY29uc3Qgc3RhcnRWcHQgPSBbLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb24sXHJcbiAgICAgIGVhc2luZzogZmFicmljLnV0aWwuZWFzZS5lYXNlT3V0Q3ViaWMsXHJcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuXHJcbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgbWF0cml4IHZhbHVlc1xyXG4gICAgICAgIHZwdFswXSA9IHN0YXJ0VnB0WzBdICsgKHRhcmdldFZwdFswXSAtIHN0YXJ0VnB0WzBdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFszXSA9IHN0YXJ0VnB0WzNdICsgKHRhcmdldFZwdFszXSAtIHN0YXJ0VnB0WzNdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs0XSA9IHN0YXJ0VnB0WzRdICsgKHRhcmdldFZwdFs0XSAtIHN0YXJ0VnB0WzRdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs1XSA9IHN0YXJ0VnB0WzVdICsgKHRhcmdldFZwdFs1XSAtIHN0YXJ0VnB0WzVdKSAqIHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cygpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICBpZiAod2lkdGggPCBoZWlnaHQpIHdpZHRoID0gdGhpcy53YWxsVGhpY2tuZXNzICsgMTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyYXdXYWxsKHRoaXMuY2FudmFzLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICBjb25zdCBhcnJvd1dpZHRoID0gODA7XHJcbiAgICAgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3NTtcclxuICAgICAgICBjb25zdCBhcnJvd0Jhc2UgPSA0MDtcclxuICAgICAgICB0aGlzLmRyYXdFbnRyYW5jZShcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBhcnJvd1dpZHRoLFxyXG4gICAgICAgICAgYXJyb3dIZWlnaHQsXHJcbiAgICAgICAgICBhcnJvd0Jhc2UsXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgY2FkIGxheW91dHMgb25seS5cclxuICAgIHRoaXMubGF5b3V0Qm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBvdmVycmlkZSB0aGUgZml4dHVyZSBwb3NpdGlvbiBmb3IgaW5pdGlhbCBjYWQgbGF5b3V0cy5cclxuICAgICAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNhZExheW91dCAmJiB0aGlzLmlzQXV0b0FsaWduTW9kZSkge1xyXG4gICAgICAgICAgY29uc3QgYmFzZVggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJhc2VZID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHN0YXJ0QnVmZmVyID0gNDA7XHJcbiAgICAgICAgICBjb25zdCBzcGFjaW5nID0gMTM2O1xyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRCdWZmZXIgKyBzcGFjaW5nICogajtcclxuXHJcbiAgICAgICAgICBjb25zdCBhbmdsZVJhZCA9IGZhYnJpYy51dGlsLmRlZ3JlZXNUb1JhZGlhbnMoZWxlbWVudC5hbmdsZSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGlyWCA9IE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICAgIGNvbnN0IGRpclkgPSBNYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm9ybWFsT2Zmc2V0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAgIGNvbnN0IG5vcm1YID0gTWF0aC5jb3MoYW5nbGVSYWQgKyBNYXRoLlBJIC8gMikgKiBub3JtYWxPZmZzZXQ7XHJcbiAgICAgICAgICBjb25zdCBub3JtWSA9IE1hdGguc2luKGFuZ2xlUmFkICsgTWF0aC5QSSAvIDIpICogbm9ybWFsT2Zmc2V0O1xyXG5cclxuICAgICAgICAgIHggPSBiYXNlWCArIGRpclggKiBvZmZzZXQgKyBub3JtWDtcclxuICAgICAgICAgIHkgPSBiYXNlWSArIGRpclkgKiBvZmZzZXQgKyBub3JtWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYSxcclxuICAgICAgICAgIHcsXHJcbiAgICAgICAgICBoLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0lmIENBRCBsYXlvdXRcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mbG9vckRhdGE/LmNhZExheW91dCAmJlxyXG4gICAgICB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMuaXNBdXRvQWxpZ25Nb2RlXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgZml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgICAgY29uc3QgbGF5b3V0UG9seWdvbiA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcbiAgICAgIGNvbnN0IG9jY3VwaWVkUmVjdHMgPSB0aGlzLmdldE9jY3VwaWVkUmVjdHMoKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlc1swXS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVzWzBdLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgdG90YWwgPSBmaXh0dXJlcy5sZW5ndGg7XHJcblxyXG4gICAgICBjb25zdCBtYXhSb3dzID0gMjtcclxuICAgICAgY29uc3Qgcm93cyA9IE1hdGgubWluKG1heFJvd3MsIHRvdGFsKTtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IE1hdGguY2VpbCh0b3RhbCAvIHJvd3MpO1xyXG5cclxuICAgICAgY29uc3QgZ3JpZFdpZHRoID0gY29sdW1ucyAqIGZpeHR1cmVXaWR0aFB4O1xyXG4gICAgICBjb25zdCBncmlkSGVpZ2h0ID0gcm93cyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgY29uc3QgaXNJbnNpZGVQb2x5Z29uID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeDogeCArIGdyaWRXaWR0aCwgeSB9LCBsYXlvdXRQb2x5Z29uKSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbih7IHgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgICAgICAgICB7IHg6IHggKyBncmlkV2lkdGgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sXHJcbiAgICAgICAgICAgIGxheW91dFBvbHlnb24sXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IG92ZXJsYXBzT2NjdXBpZWQgPSAoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qgb2NjIG9mIG9jY3VwaWVkUmVjdHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnJlY3RzT3ZlcmxhcChncmlkUmVjdCwgb2NjKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGZpbmRCZXN0UG9zaXRpb24gPSAobW9kZTogXCJzdHJpY3RcIiB8IFwicmVsYXhlZFwiKSA9PiB7XHJcbiAgICAgICAgbGV0IGJlc3RTY29yZSA9IC1JbmZpbml0eTtcclxuICAgICAgICBsZXQgYmVzdFBvczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSBmaXh0dXJlV2lkdGhQeCAvIDI7XHJcblxyXG4gICAgICAgIGZvciAoXHJcbiAgICAgICAgICBsZXQgeSA9IGJvdW5kcy50b3A7XHJcbiAgICAgICAgICB5IDw9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gZ3JpZEhlaWdodDtcclxuICAgICAgICAgIHkgKz0gc3RlcFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IHggPSBib3VuZHMubGVmdDtcclxuICAgICAgICAgICAgeCA8PSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIGdyaWRXaWR0aDtcclxuICAgICAgICAgICAgeCArPSBzdGVwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKCFpc0luc2lkZVBvbHlnb24oeCwgeSkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZGUgPT09IFwic3RyaWN0XCIgJiYgb3ZlcmxhcHNPY2N1cGllZCh4LCB5KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbXB0eU1hcmdpbiA9IHRoaXMuY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgICAgICAgICAgIGdyaWRSZWN0LFxyXG4gICAgICAgICAgICAgIGJvdW5kcyxcclxuICAgICAgICAgICAgICBvY2N1cGllZFJlY3RzLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZHggPSBjZW50ZXJYIC0gKHggKyBncmlkV2lkdGggLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgZHkgPSBjZW50ZXJZIC0gKHkgKyBncmlkSGVpZ2h0IC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclBlbmFsdHkgPSBkeCAqIGR4ICsgZHkgKiBkeTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gZW1wdHlNYXJnaW4gKiAxMDAwIC0gY2VudGVyUGVuYWx0eSAqIDAuMDAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XHJcbiAgICAgICAgICAgICAgYmVzdFNjb3JlID0gc2NvcmU7XHJcbiAgICAgICAgICAgICAgYmVzdFBvcyA9IHsgeCwgeSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYmVzdFBvcztcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBiZXN0UG9zID0gZmluZEJlc3RQb3NpdGlvbihcInN0cmljdFwiKTtcclxuXHJcbiAgICAgIGlmICghYmVzdFBvcykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlN0cmljdCBwbGFjZW1lbnQgZmFpbGVkLiBUcnlpbmcgcmVsYXhlZCBtb2RlLi4uXCIpO1xyXG4gICAgICAgIGJlc3RQb3MgPSBmaW5kQmVzdFBvc2l0aW9uKFwicmVsYXhlZFwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFiZXN0UG9zKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiUmVsYXhlZCBwbGFjZW1lbnQgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gY2VudGVyLlwiKTtcclxuICAgICAgICBiZXN0UG9zID0ge1xyXG4gICAgICAgICAgeDogY2VudGVyWCAtIGdyaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB5OiBjZW50ZXJZIC0gZ3JpZEhlaWdodCAvIDIsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgLy8gTi1zaGFwZSB0cmF2ZXJzYWw6IGNvbCBmaWxscyBsZWZ0LXRvLXJpZ2h0LCBlYWNoIGNvbHVtbiBmaWxscyBib3R0b20gcm93IGZpcnN0IHRoZW4gdG9wIHJvd1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IE1hdGguZmxvb3IoaW5kZXggLyAyKTtcclxuICAgICAgICBjb25zdCByb3cgPSBpbmRleCAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IGJlc3RQb3MhLnggKyBjb2wgKiBmaXh0dXJlV2lkdGhQeDtcclxuICAgICAgICBjb25zdCB5ID0gYmVzdFBvcyEueSArIHJvdyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoeCwgXCJmdFwiKTtcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMuZnJvbVBpeGVscyh5LCBcImZ0XCIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtpXTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aCxcclxuICAgICAgICBmaXh0dXJlLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKHRoaXMuY2FudmFzLCB4LCB5LCBhLCB3LCBoLCBvdGhlckVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZExheW91dFBvbHlnb25Gcm9tV2FsbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAuZmlsdGVyKCh3OiBhbnkpID0+IHcuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKVxyXG4gICAgICAubWFwKCh3OiBhbnkpID0+ICh7XHJcbiAgICAgICAgeDogdGhpcy50b1BpeGVscyh3LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKSxcclxuICAgICAgICB5OiB0aGlzLnRvUGl4ZWxzKHcucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpLFxyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgcG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSxcclxuICAgIHBvbHlnb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdLFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gcG9seWdvbi5sZW5ndGggLSAxOyBpIDwgcG9seWdvbi5sZW5ndGg7IGogPSBpKyspIHtcclxuICAgICAgY29uc3QgeGkgPSBwb2x5Z29uW2ldLngsXHJcbiAgICAgICAgeWkgPSBwb2x5Z29uW2ldLnk7XHJcbiAgICAgIGNvbnN0IHhqID0gcG9seWdvbltqXS54LFxyXG4gICAgICAgIHlqID0gcG9seWdvbltqXS55O1xyXG5cclxuICAgICAgY29uc3QgaW50ZXJzZWN0ID1cclxuICAgICAgICB5aSA+IHBvaW50LnkgIT09IHlqID4gcG9pbnQueSAmJlxyXG4gICAgICAgIHBvaW50LnggPCAoKHhqIC0geGkpICogKHBvaW50LnkgLSB5aSkpIC8gKHlqIC0geWkpICsgeGk7XHJcblxyXG4gICAgICBpZiAoaW50ZXJzZWN0KSBpbnNpZGUgPSAhaW5zaWRlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbnNpZGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9jY3VwaWVkUmVjdHMoKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfVtdIHtcclxuICAgIHJldHVybiB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubWFwKChvYmopID0+IHtcclxuICAgICAgY29uc3QgciA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiByLmxlZnQsXHJcbiAgICAgICAgeTogci50b3AsXHJcbiAgICAgICAgdzogci53aWR0aCxcclxuICAgICAgICBoOiByLmhlaWdodCxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWN0c092ZXJsYXAoXHJcbiAgICBhOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlciB9LFxyXG4gICAgYjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcclxuICApOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhKFxyXG4gICAgICBhLnggKyBhLncgPD0gYi54IHx8XHJcbiAgICAgIGEueCA+PSBiLnggKyBiLncgfHxcclxuICAgICAgYS55ICsgYS5oIDw9IGIueSB8fFxyXG4gICAgICBhLnkgPj0gYi55ICsgYi5oXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRW1wdHlNYXJnaW4oXHJcbiAgICBncmlkUmVjdDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcclxuICAgIGJvdW5kczogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxyXG4gICAgb2NjdXBpZWRSZWN0czogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfVtdLFxyXG4gICk6IG51bWJlciB7XHJcbiAgICBsZXQgbWluTWFyZ2luID0gSW5maW5pdHk7XHJcblxyXG4gICAgLy8gZGlzdGFuY2UgdG8gbGF5b3V0IGJvdW5kc1xyXG4gICAgbWluTWFyZ2luID0gTWF0aC5taW4oXHJcbiAgICAgIG1pbk1hcmdpbixcclxuICAgICAgZ3JpZFJlY3QueCAtIGJvdW5kcy5sZWZ0LFxyXG4gICAgICBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIChncmlkUmVjdC54ICsgZ3JpZFJlY3QudyksXHJcbiAgICAgIGdyaWRSZWN0LnkgLSBib3VuZHMudG9wLFxyXG4gICAgICBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIChncmlkUmVjdC55ICsgZ3JpZFJlY3QuaCksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGRpc3RhbmNlIHRvIG90aGVyIG9iamVjdHNcclxuICAgIGZvciAoY29uc3Qgb2NjIG9mIG9jY3VwaWVkUmVjdHMpIHtcclxuICAgICAgLy8gaG9yaXpvbnRhbCBnYXBcclxuICAgICAgaWYgKG9jYy55IDwgZ3JpZFJlY3QueSArIGdyaWRSZWN0LmggJiYgb2NjLnkgKyBvY2MuaCA+IGdyaWRSZWN0LnkpIHtcclxuICAgICAgICBpZiAob2NjLnggKyBvY2MudyA8PSBncmlkUmVjdC54KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIGdyaWRSZWN0LnggLSAob2NjLnggKyBvY2MudykpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2NjLnggPj0gZ3JpZFJlY3QueCArIGdyaWRSZWN0LncpIHtcclxuICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgb2NjLnggLSAoZ3JpZFJlY3QueCArIGdyaWRSZWN0LncpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHZlcnRpY2FsIGdhcFxyXG4gICAgICBpZiAob2NjLnggPCBncmlkUmVjdC54ICsgZ3JpZFJlY3QudyAmJiBvY2MueCArIG9jYy53ID4gZ3JpZFJlY3QueCkge1xyXG4gICAgICAgIGlmIChvY2MueSArIG9jYy5oIDw9IGdyaWRSZWN0LnkpIHtcclxuICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgZ3JpZFJlY3QueSAtIChvY2MueSArIG9jYy5oKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvY2MueSA+PSBncmlkUmVjdC55ICsgZ3JpZFJlY3QuaCkge1xyXG4gICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBvY2MueSAtIChncmlkUmVjdC55ICsgZ3JpZFJlY3QuaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtaW5NYXJnaW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhbGxCeU51bWJlcihlbGVtZW50TnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maW5kKFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnROdW1iZXIsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZHJhd0ZpeHR1cmVSb3dMYWJlbCh0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGxhYmVsKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdXYWxsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7XHJcbiAgICAgIGVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHdhbGwgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIGZpbGw6IGZpbGxDb2xvcixcclxuICAgICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBzdHJva2VVbmlmb3JtOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IGhlaWdodCA+IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICBmb250U2l6ZTogMTAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGlzVmVydGljYWwgPyAtOTAgOiAwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFycm93SGVhZCA9IDU7XHJcbiAgICBjb25zdCBlbGVtZW50czogZmFicmljLk9iamVjdFtdID0gW3dhbGwsIGxhYmVsXTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCB0b3BBcnJvd1kgPSA1O1xyXG4gICAgICBjb25zdCB0b3BBcnJvd0VuZFkgPSBjZW50ZXJZIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAodG9wQXJyb3dFbmRZID4gdG9wQXJyb3dZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbY2VudGVyWCwgdG9wQXJyb3dZLCBjZW50ZXJYLCB0b3BBcnJvd0VuZFldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiB0b3BBcnJvd1ksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBib3R0b21BcnJvd0VuZFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMTgwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd1N0YXJ0WCA9IDU7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd0VuZFggPSBjZW50ZXJYIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAobGVmdEFycm93RW5kWCA+IGxlZnRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2xlZnRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgbGVmdEFycm93RW5kWCwgY2VudGVyWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0QXJyb3dTdGFydFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogcmlnaHRBcnJvd0VuZFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiA5MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1vZENlbnRlclggPSB4O1xyXG4gICAgbGV0IG1vZENlbnRlclkgPSB5O1xyXG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGVsZW1lbnRzLCB7XHJcbiAgICAgIGxlZnQ6IG1vZENlbnRlclgsXHJcbiAgICAgIHRvcDogbW9kQ2VudGVyWSxcclxuICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogaXNWZXJ0aWNhbCxcclxuICAgICAgbG9ja1NjYWxpbmdZOiAhaXNWZXJ0aWNhbCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3Rml4dHVyZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGZpeHR1cmVEYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhY3R1YWxTaGVsdmVzID1cclxuICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKSA/P1xyXG4gICAgICBbXTtcclxuXHJcbiAgICBsZXQgZml4dHVyZUNvbG9yOiBhbnk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICB0b3A6IHRvcFksXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BGaWVsZFRleHQgPVxyXG4gICAgICAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiXHJcbiAgICAgICAgPyBgV2FsbC0ke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyfSAtIGBcclxuICAgICAgICA6IFwiRmxvb3IgLSBcIikgK1xyXG4gICAgICBgRml4dHVyZSAke1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgICAgPyBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgK1xyXG4gICAgICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA/IFwiIC0gRlgtXCIgKyBmaXh0dXJlRGF0YS5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgOiBcIlwiKVxyXG4gICAgICAgICAgOiBcIm5ld1wiXHJcbiAgICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3godG9wRmllbGRUZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgIH0gXHJcbiAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBnZXRGaXh0dXJlQ2FudmFzTGFiZWwoZml4dHVyZURhdGEpO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVEYXRhLmlzc3VlID8gXCIjZmZmXCIgOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2hlbHZlcyA9IFtdO1xyXG4gICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAvLyBzdHJva2U6ICcjNTFDMUZGJyxcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPVxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSBlbGxpcHNpcyBhZ2FpbnN0IGZ1bGwgc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgZml4dHVyZURhdGEuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGFydEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aCB8fFxyXG4gICAgICAgICAgZW5kSW5kZXggPiBmaXh0dXJlRGF0YT8uc2hlbGZDb25maWcubGVuZ3RoXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgIGxldCB5OiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHggPSBtaWRYO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodm0udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgYCR7dm0udm1JbWFnZVVybH0/dj0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8udm1GaWxsID8/IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgICBsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0ZFRTRFMlwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGAke2ZpeHR1cmVEYXRhPy5mb290ZXI/LmxhYmVsID8gZml4dHVyZURhdGEuZm9vdGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGxhc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHthY3R1YWxTaGVsdmVzLmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke1xyXG4gICAgICAgIGZpeHR1cmVEYXRhPy5maXh0dXJlQ2FwYWNpdHkgPz8gMFxyXG4gICAgICB9IC4gVk0gLSAke2ZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoID8/IDB9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3R0b21ZICsgYm90dG9tSGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGFuZ2xlID0gZml4dHVyZURhdGE/LnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlO1xyXG5cclxuICAgIGlmICh0aGlzLmZsb29yRGF0YS5jYWRMYXlvdXQgJiYgZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGFuZ2xlRGVnID0gd2FsbERhdGE/LmFuZ2xlIHx8IDA7XHJcbiAgICAgIGFuZ2xlID0gYW5nbGVEZWc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChcclxuICAgICAgW1xyXG4gICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgdG9wQ29udGFpbmVyLFxyXG4gICAgICAgIGlubmVyVG9wQm94LFxyXG4gICAgICAgIHRvcFRleHQsXHJcbiAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgYm90dG9tVGV4dCxcclxuICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgbGFzdEJveCxcclxuICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgIF0sXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgICAgfSxcclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiB0YXJnZXQ6XCIsIHRhcmdldCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC53YWxsSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUlkID0gZml4dHVyZURhdGEuX2lkO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlID0gZml4dHVyZURhdGEuaXNzdWU7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWVEYXRhID0gZml4dHVyZURhdGEuaXNzdWVEYXRhO1xyXG4gICAgZml4dHVyZUdyb3VwLnRhc2tUeXBlID0gZml4dHVyZURhdGEudGFza1R5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAudm1Db25maWcgPSBmaXh0dXJlRGF0YS52bUNvbmZpZztcclxuICAgIGZpeHR1cmVHcm91cC5vYmpUeXBlID0gXCJmaXh0dXJlXCI7XHJcblxyXG4gICAgY2FudmFzLmFkZChmaXh0dXJlR3JvdXApO1xyXG5cclxuICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgfVxyXG5cclxuICBkcmF3RW50cmFuY2UoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBhcnJvd1dpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgYm9keVdpZHRoID0gd2lkdGggLSBhcnJvd1dpZHRoO1xyXG4gICAgY29uc3QgYW5nbGUgPSBlbGVtZW50RGF0YS5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nRmxpcDogdHJ1ZSxcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBhOiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgaWYgKChlbGVtZW50IGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50IGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0JnKCkge1xyXG4gICAgY29uc3Qgd2FsbDEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMSAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyh3YWxsMS5kaXN0YW5jZSwgd2FsbDEudW5pdCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKHdhbGwyLmRpc3RhbmNlLCB3YWxsMi51bml0KTtcclxuXHJcbiAgICBjb25zdCBiZyA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgdG9wOiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVtb3ZlKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwiY2FkLXJlbmRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFwcC1sYXlvdXRcIj5cclxuXHJcbiAgICAgICAgPCEtLSBMRUZUIFRPT0xCQVIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJyYXdDQUREZXRhaWxzXCIgcGxhY2Vob2xkZXI9XCJQYXN0ZSB0aGUgQ0FEIGV4dHJhY3RlZCBkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICByb3dzPVwiMjVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBSSUdIVCBDQU5WQVMgUEFORUwgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy13cmFwcGVyXCIgI2NhbnZhc0NvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVG9vbGJhciAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbY2hlY2tlZF09XCJpc0F1dG9BbGlnbk1vZGVcIiBbKG5nTW9kZWwpXT1cImlzQXV0b0FsaWduTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cIiFmbG9vckRhdGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWIgbXMtMlwiIGZvcj1cInNob3dWTXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQXV0byBQb3NpdGlvbiBGaXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrXCIgbmFtZT1cImluY2x1ZGVCR1wiIGlkPVwiaW5jbHVkZUJHXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbmNsdWRlRml4dHVyZXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiBbZGlzYWJsZWRdPVwiIWZsb29yRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpbmNsdWRlQkdcIj5JbmNsdWRlIEZpeHR1cmVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsaWNrUmVuZGVyUGxhbm8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFJlbmRlclxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm0tMFwiPiB7e3dhbGxDb3VudH19IC0gV2FsbHMgfDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibS0wXCI+IHt7d0ZpeHR1cmVzQ291bnR9fSAtIFdhbGwgRml4dHVyZXMgfDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibS0wXCI+IHt7Y0ZpeHR1cmVzQ291bnR9fSAtIENlbnRlciBGaXh0dXJlczwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENhbnZhcyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1hcmVhXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2FudmFzICNjYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=
1538
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLXJlbmRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby10b29scy9jYWQtcmVuZGVyL2NhZC1yZW5kZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLXJlbmRlci9jYWQtcmVuZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUdaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLGtCQUFrQjtJQTBCbkI7SUFDQTtJQUNBO0lBM0JXLFNBQVMsQ0FBaUM7SUFDakMsWUFBWSxDQUE4QjtJQUd4RSxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRLENBQVM7SUFFakIsTUFBTSxDQUFpQjtJQUN2QixTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsY0FBYyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELFlBQVksQ0FBTTtJQUVsQixT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aUI7WUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRTtnQkFDakUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDL0IsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvRDtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFO29CQUMzQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2FBQ0Y7WUFFRCxlQUFlO1lBQ2YsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRTtnQkFDakUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDL0IsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvRDtxQkFBTSxJQUFJLEdBQUcsQ0FB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bXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuXHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5pbXBvcnQgeyBUaXRsZUNhc2VQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5pbXBvcnQgeyBnZXRGaXh0dXJlQ2FudmFzTGFiZWwgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjYWQtcmVuZGVyXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9jYWQtcmVuZGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9jYWQtcmVuZGVyLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWRSZW5kZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImNhbnZhc1wiKSBjYW52YXNSZWYhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKFwiY2FudmFzQ29udGFpbmVyXCIpIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICB9XHJcblxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgem9vbUxldmVsOiBudW1iZXIgPSAxO1xyXG4gIHdhbGxUaGlja25lc3MgPSAzMDtcclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICBsYXlvdXRCb3VuZHM6IGFueTtcclxuXHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgcmF3Q0FERGV0YWlsczogYW55O1xyXG5cclxuICBpbmNsdWRlRml4dHVyZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzQXV0b0FsaWduTW9kZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRpdGxlQ2FzZTogVGl0bGVDYXNlUGlwZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Q2FudmFzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2FsbENvdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbikge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB3TCA9IHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maWx0ZXIoXHJcbiAgICAgIChlOiBhbnkpID0+IGU/LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICByZXR1cm4gd0w/Lmxlbmd0aCA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdGaXh0dXJlc0NvdW50KCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mbGF0TWFwKFxyXG4gICAgICAgIChlOiBhbnkpID0+IGU/LmZpeHR1cmVzID8/IFtdLFxyXG4gICAgICApID8/IFtdKSxcclxuICAgIF0ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNGaXh0dXJlc0NvdW50KCkge1xyXG4gICAgcmV0dXJuIFsuLi4odGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDYW52YXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnMoKTtcclxuICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUNhbnZhcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIDgsXHJcbiAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIDc1LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKHpvb20sIDUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGZyb21QaXhlbHMocGl4ZWxzOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KTogbnVtYmVyIHtcclxuICAgIGxldCB2YWx1ZTogbnVtYmVyO1xyXG5cclxuICAgIC8vIHBpeGVscyA9IHBpeGVscyA+PSB0aGlzLndhbGxUaGlja25lc3MgPyBwaXhlbHMgLSB0aGlzLndhbGxUaGlja25lc3MgOiB0aGlzLndhbGxUaGlja25lc3M7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICB2YWx1ZSA9IChwaXhlbHMgLyBkcGkpICogMjUuNDtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHZhbHVlID0gcGl4ZWxzIC8gKDEyICogZHBpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrUmVuZGVyUGxhbm8oKSB7XHJcbiAgICBjb25zdCByYXdKc29uID0gSlNPTi5wYXJzZSh0aGlzLnJhd0NBRERldGFpbHMpO1xyXG4gICAgY29uc29sZS5sb2coXCJAQCB+IHJhd0pzb246XCIsIHJhd0pzb24pO1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhID0gdGhpcy5wcm9jZXNzUmF3Q0FERGV0YWlscyhyYXdKc29uKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIkBAIH4gZmxvb3JEYXRhOlwiLCB0aGlzLmZsb29yRGF0YSk7XHJcblxyXG4gICAgdGhpcy5kcmF3SW5pdGlhbENvbnRlbnQoKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NSYXdDQUREZXRhaWxzKHJhd0pzb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGZsb29yO1xyXG5cclxuICAgICAgaWYgKCFyYXdKc29uPy5kYXRhPy5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcImxheW91dFBvbHlnb24gbm90IGZvdW5kIGluIENBRCBkYXRhXCIpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmbG9vciA9IHtcclxuICAgICAgICBsYXlvdXRQb2x5Z29uOiB0cmFuc2Zvcm1XYWxsRGF0YShyYXdKc29uLmRhdGEubGF5b3V0UG9seWdvbiksXHJcbiAgICAgICAgc3RvcmVOYW1lOiBcIkNBRCBTdG9yZVwiLFxyXG4gICAgICAgIHN0b3JlSWQ6IFwiQ0FEIFN0b3JlXCIsXHJcbiAgICAgICAgZmxvb3JOYW1lOiBcIkZsb29yIDFcIixcclxuICAgICAgICBmbG9vck51bWJlcjogMSxcclxuICAgICAgICBwbGFub1Byb2dyZXNzOiAwLFxyXG4gICAgICAgIGlzRWRpdGVkOiBmYWxzZSxcclxuICAgICAgICBjYWRMYXlvdXQ6IHRydWUsXHJcbiAgICAgICAgaXNQbGFub0FwcHJvdmVkOiBmYWxzZSxcclxuICAgICAgICBzdGF0dXM6IFwiZHJhZnRcIixcclxuICAgICAgICBjZW50ZXJGaXh0dXJlOiByYXdKc29uLmRhdGE/LmNlbnRlckZpeHR1cmU/Lm1hcCgoZjogYW55KSA9PlxyXG4gICAgICAgICAgdHJhbnNmb3JtRml4dHVyZURhdGEoZiksXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBmbG9vcjtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBwcm9jZXNzUmF3Q0FERGV0YWlscyBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1XYWxsRGF0YShjYWRSZXM6IGFueSkge1xyXG4gICAgICByZXR1cm4gY2FkUmVzLm1hcCgodzogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGVsZW1lbnRUeXBlOiB3Py5lbGVtZW50VHlwZSA/PyBcIndhbGxcIixcclxuICAgICAgICAgIGRpc3RhbmNlOiB3Py5kaXN0YW5jZSA/PyAxNixcclxuICAgICAgICAgIGVsZW1lbnROdW1iZXI6IHc/LmVsZW1lbnROdW1iZXIgPz8gMCxcclxuICAgICAgICAgIHVuaXQ6IHc/LnVuaXQgPz8gXCJmdFwiLFxyXG4gICAgICAgICAgZGlyZWN0aW9uOiB3Py5kaXJlY3Rpb24gPz8gXCJyaWdodFwiLFxyXG4gICAgICAgICAgYW5nbGU6IHc/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiB3Py5yZWxhdGl2ZVBvc2l0aW9uLFxyXG4gICAgICAgICAgZml4dHVyZXM6IHcuZml4dHVyZXM/Lm1hcCgoZjogYW55KSA9PiB0cmFuc2Zvcm1GaXh0dXJlRGF0YShmKSksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtRml4dHVyZURhdGEoZGF0YTogYW55KSB7XHJcbiAgICAgIGNvbnN0IGYgPSBkYXRhO1xyXG5cclxuICAgICAgZnVuY3Rpb24gbm9ybWFsaXplQ2FkVGV4dCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9eXFxcXFteO10rOy8sIFwiXCIpLnRyaW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmaXh0dXJlTmFtZTogbm9ybWFsaXplQ2FkVGV4dChmPy5oZWFkZXI/LmxhYmVsID8/IFwiXCIpLFxyXG4gICAgICAgIHJlbGF0aXZlUG9zaXRpb246IGY/LnJlbGF0aXZlUG9zaXRpb24sXHJcbiAgICAgICAgZml4dHVyZVR5cGU6IGY/LmFzc29jaWF0ZWRFbGVtZW50VHlwZSxcclxuICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgIC4uLmY/LmhlYWRlcixcclxuICAgICAgICAgIGxhYmVsOiBub3JtYWxpemVDYWRUZXh0KGY/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmb290ZXI6IGY/LmZvb3RlcixcclxuICAgICAgICBmaXh0dXJlV2lkdGg6IGY/LmZpeHR1cmVXaWR0aCxcclxuICAgICAgICBmaXh0dXJlTGVuZ3RoOiBmPy5maXh0dXJlTGVuZ3RoLFxyXG4gICAgICAgIGZpeHR1cmVOdW1iZXI6IGY/LmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgICAgdGVtcGxhdGVHcm91cE5hbWU6IGY/LnRlbXBsYXRlR3JvdXBOYW1lID8/IGY/LmhlYWRlcj8ubGFiZWwsXHJcbiAgICAgICAgZml4dHVyZUNhdGVnb3J5OiBmPy5maXh0dXJlQ2F0ZWdvcnksXHJcbiAgICAgICAgZml4dHVyZUNhcGFjaXR5OiBmPy5maXh0dXJlQ2FwYWNpdHksXHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IGRhdGE/LndhbGxOdW1iZXIsXHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOiBkYXRhLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOlxyXG4gICAgICAgICAgZj8uYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcIndhbGxcIiA/IFwid2FsbFwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IEFycmF5LmlzQXJyYXkoZj8ucHJvZHVjdEJyYW5kTmFtZSlcclxuICAgICAgICAgID8gZj8ucHJvZHVjdEJyYW5kTmFtZT8ubWFwKG5vcm1hbGl6ZUNhZFRleHQpXHJcbiAgICAgICAgICA6IG5vcm1hbGl6ZUNhZFRleHQoZj8ucHJvZHVjdEJyYW5kTmFtZSksXHJcbiAgICAgICAgc2hlbGZDb25maWc6IGY/LnNoZWxmQ29uZmlnID8/IFtdLFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHQ6IHtcclxuICAgICAgICAgIHZhbHVlOiAwLFxyXG4gICAgICAgICAgdW5pdDogXCJtbVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZml4dHVyZVN0YXRpY0xlbmd0aDoge1xyXG4gICAgICAgICAgdmFsdWU6IDE1MjQsXHJcbiAgICAgICAgICB1bml0OiBcIm1tXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaXh0dXJlU3RhdGljV2lkdGg6IHtcclxuICAgICAgICAgIHZhbHVlOiAxMjIwLFxyXG4gICAgICAgICAgdW5pdDogXCJtbVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJvZHVjdFJlc29sdXRpb25MZXZlbDogXCJMM1wiLFxyXG4gICAgICAgIGlzQm9keUVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgaXNNZXJjaEVkaXRlZDogZmFsc2UsXHJcbiAgICAgICAgaXNWbUVkaXRlZDogZmFsc2UsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3SW5pdGlhbENvbnRlbnQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JEYXRhKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5kcmF3TGF5b3V0RWxlbWVudHMoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmUoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIC8vIFdhbGxzXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG5cclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSBlbGVtZW50LmVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENlbnRlciBmbG9vciBmaXh0dXJlc1xyXG4gICAgbGV0IGZsb29yQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgIGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gZmxvb3JBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcblxyXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSxcclxuICAgICAgbWluWSA9IEluZmluaXR5LFxyXG4gICAgICBtYXhYID0gLUluZmluaXR5LFxyXG4gICAgICBtYXhZID0gLUluZmluaXR5O1xyXG5cclxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHJlY3QubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IG1pblgsXHJcbiAgICAgIHRvcDogbWluWSxcclxuICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxyXG4gICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChkdXJhdGlvbiA9IDQwMCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgaWYgKCFib3VuZHMud2lkdGggfHwgIWJvdW5kcy5oZWlnaHQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjYW52YXNXID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGNvbnN0IGNhbnZhc0ggPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAvLyBGaW5hbCB6b29tIHRvIGZpdCAod2l0aCBwYWRkaW5nKVxyXG4gICAgY29uc3Qgc2NhbGVYID0gY2FudmFzVyAvIGJvdW5kcy53aWR0aDtcclxuICAgIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0ggLyBib3VuZHMuaGVpZ2h0O1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSAqIDAuOTsgLy8gcGFkZGluZyAxMCVcclxuXHJcbiAgICAvLyBEZXNpcmVkIHZpZXdwb3J0IG9mZnNldCB0byBjZW50ZXIgbGF5b3V0XHJcbiAgICBjb25zdCB0YXJnZXRWcHQgPSBbXHJcbiAgICAgIC4uLih0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSB8fCBbMSwgMCwgMCwgMSwgMCwgMF0pLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWFxyXG4gICAgdGFyZ2V0VnB0WzNdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVZXHJcblxyXG4gICAgY29uc3QgZXh0cmFUb3BQYWRkaW5nUHggPSAyNDtcclxuICAgIHRhcmdldFZwdFs0XSA9IGNhbnZhc1cgLyAyIC0gKGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMikgKiB0YXJnZXRab29tOyAvLyBjZW50ZXIgWFxyXG4gICAgdGFyZ2V0VnB0WzVdID1cclxuICAgICAgY2FudmFzSCAvIDIgLVxyXG4gICAgICAoYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyKSAqIHRhcmdldFpvb20gK1xyXG4gICAgICBleHRyYVRvcFBhZGRpbmdQeDsgLy8gY2VudGVyIFkgKyBleHRyYSB0b3AgcGFkZGluZ1xyXG5cclxuICAgIC8vIEN1cnJlbnQgdmlld3BvcnQgKHN0YXJ0aW5nIHBvaW50IG9mIGFuaW1hdGlvbilcclxuICAgIGNvbnN0IHN0YXJ0VnB0ID0gWy4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIV0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICBmYWJyaWMudXRpbC5hbmltYXRlKHtcclxuICAgICAgc3RhcnRWYWx1ZTogMCxcclxuICAgICAgZW5kVmFsdWU6IDEsXHJcbiAgICAgIGR1cmF0aW9uLFxyXG4gICAgICBlYXNpbmc6IGZhYnJpYy51dGlsLmVhc2UuZWFzZU91dEN1YmljLFxyXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSE7XHJcblxyXG4gICAgICAgIC8vIEludGVycG9sYXRlIG1hdHJpeCB2YWx1ZXNcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3TGF5b3V0RWxlbWVudHMoKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG5cclxuICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uID8/PSB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQuZGlzdGFuY2UsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgICAgaWYgKHdpZHRoIDwgaGVpZ2h0KSB3aWR0aCA9IHRoaXMud2FsbFRoaWNrbmVzcyArIDE7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcmF3V2FsbCh0aGlzLmNhbnZhcywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgY29uc3QgYXJyb3dXaWR0aCA9IDgwO1xyXG4gICAgICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gNzU7XHJcbiAgICAgICAgY29uc3QgYXJyb3dCYXNlID0gNDA7XHJcbiAgICAgICAgdGhpcy5kcmF3RW50cmFuY2UoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYXJyb3dXaWR0aCxcclxuICAgICAgICAgIGFycm93SGVpZ2h0LFxyXG4gICAgICAgICAgYXJyb3dCYXNlLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9yIGNhZCBsYXlvdXRzIG9ubHkuXHJcbiAgICB0aGlzLmxheW91dEJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIikgY29udGludWU7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gb3ZlcnJpZGUgdGhlIGZpeHR1cmUgcG9zaXRpb24gZm9yIGluaXRpYWwgY2FkIGxheW91dHMuXHJcbiAgICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQgJiYgdGhpcy5pc0F1dG9BbGlnbk1vZGUpIHtcclxuICAgICAgICAgIGNvbnN0IGJhc2VYID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBiYXNlWSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBzdGFydEJ1ZmZlciA9IDQwO1xyXG4gICAgICAgICAgY29uc3Qgc3BhY2luZyA9IDEzNjtcclxuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHN0YXJ0QnVmZmVyICsgc3BhY2luZyAqIGo7XHJcblxyXG4gICAgICAgICAgY29uc3QgYW5nbGVSYWQgPSBmYWJyaWMudXRpbC5kZWdyZWVzVG9SYWRpYW5zKGVsZW1lbnQuYW5nbGUpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRpclggPSBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgICBjb25zdCBkaXJZID0gTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IG5vcm1hbE9mZnNldCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuXHJcbiAgICAgICAgICBjb25zdCBub3JtWCA9IE1hdGguY29zKGFuZ2xlUmFkICsgTWF0aC5QSSAvIDIpICogbm9ybWFsT2Zmc2V0O1xyXG4gICAgICAgICAgY29uc3Qgbm9ybVkgPSBNYXRoLnNpbihhbmdsZVJhZCArIE1hdGguUEkgLyAyKSAqIG5vcm1hbE9mZnNldDtcclxuXHJcbiAgICAgICAgICB4ID0gYmFzZVggKyBkaXJYICogb2Zmc2V0ICsgbm9ybVg7XHJcbiAgICAgICAgICB5ID0gYmFzZVkgKyBkaXJZICogb2Zmc2V0ICsgbm9ybVk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgICAgZml4dHVyZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cHMucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudD8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSBlbGVtZW50Lm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGEsXHJcbiAgICAgICAgICB3LFxyXG4gICAgICAgICAgaCxcclxuICAgICAgICAgIG90aGVyRWxlbWVudCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9JZiBDQUQgbGF5b3V0XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQgJiZcclxuICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmlzQXV0b0FsaWduTW9kZVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgIGNvbnN0IGxheW91dFBvbHlnb24gPSB0aGlzLmJ1aWxkTGF5b3V0UG9seWdvbkZyb21XYWxscygpO1xyXG4gICAgICBjb25zdCBvY2N1cGllZFJlY3RzID0gdGhpcy5nZXRPY2N1cGllZFJlY3RzKCk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVzWzBdLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlc1swXS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVzWzBdLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHRvdGFsID0gZml4dHVyZXMubGVuZ3RoO1xyXG5cclxuICAgICAgY29uc3QgbWF4Um93cyA9IDI7XHJcbiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLm1pbihtYXhSb3dzLCB0b3RhbCk7XHJcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBNYXRoLmNlaWwodG90YWwgLyByb3dzKTtcclxuXHJcbiAgICAgIGNvbnN0IGdyaWRXaWR0aCA9IGNvbHVtbnMgKiBmaXh0dXJlV2lkdGhQeDtcclxuICAgICAgY29uc3QgZ3JpZEhlaWdodCA9IHJvd3MgKiBmaXh0dXJlSGVpZ2h0UHg7XHJcblxyXG4gICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgICAgY29uc3QgY2VudGVyWCA9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMjtcclxuICAgICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgIGNvbnN0IGlzSW5zaWRlUG9seWdvbiA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeCwgeSB9LCBsYXlvdXRQb2x5Z29uKSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbih7IHg6IHggKyBncmlkV2lkdGgsIHkgfSwgbGF5b3V0UG9seWdvbikgJiZcclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5OiB5ICsgZ3JpZEhlaWdodCB9LCBsYXlvdXRQb2x5Z29uKSAmJlxyXG4gICAgICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbihcclxuICAgICAgICAgICAgeyB4OiB4ICsgZ3JpZFdpZHRoLCB5OiB5ICsgZ3JpZEhlaWdodCB9LFxyXG4gICAgICAgICAgICBsYXlvdXRQb2x5Z29uLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBvdmVybGFwc09jY3VwaWVkID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JpZFJlY3QgPSB7IHgsIHksIHc6IGdyaWRXaWR0aCwgaDogZ3JpZEhlaWdodCB9O1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG9jYyBvZiBvY2N1cGllZFJlY3RzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZWN0c092ZXJsYXAoZ3JpZFJlY3QsIG9jYykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBmaW5kQmVzdFBvc2l0aW9uID0gKG1vZGU6IFwic3RyaWN0XCIgfCBcInJlbGF4ZWRcIikgPT4ge1xyXG4gICAgICAgIGxldCBiZXN0U2NvcmUgPSAtSW5maW5pdHk7XHJcbiAgICAgICAgbGV0IGJlc3RQb3M6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBzdGVwID0gZml4dHVyZVdpZHRoUHggLyAyO1xyXG5cclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgbGV0IHkgPSBib3VuZHMudG9wO1xyXG4gICAgICAgICAgeSA8PSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIGdyaWRIZWlnaHQ7XHJcbiAgICAgICAgICB5ICs9IHN0ZXBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgIGxldCB4ID0gYm91bmRzLmxlZnQ7XHJcbiAgICAgICAgICAgIHggPD0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSBncmlkV2lkdGg7XHJcbiAgICAgICAgICAgIHggKz0gc3RlcFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNJbnNpZGVQb2x5Z29uKHgsIHkpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtb2RlID09PSBcInN0cmljdFwiICYmIG92ZXJsYXBzT2NjdXBpZWQoeCwgeSkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JpZFJlY3QgPSB7IHgsIHksIHc6IGdyaWRXaWR0aCwgaDogZ3JpZEhlaWdodCB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZW1wdHlNYXJnaW4gPSB0aGlzLmNvbXB1dGVFbXB0eU1hcmdpbihcclxuICAgICAgICAgICAgICBncmlkUmVjdCxcclxuICAgICAgICAgICAgICBib3VuZHMsXHJcbiAgICAgICAgICAgICAgb2NjdXBpZWRSZWN0cyxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gY2VudGVyWCAtICh4ICsgZ3JpZFdpZHRoIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gY2VudGVyWSAtICh5ICsgZ3JpZEhlaWdodCAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQZW5hbHR5ID0gZHggKiBkeCArIGR5ICogZHk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzY29yZSA9IGVtcHR5TWFyZ2luICogMTAwMCAtIGNlbnRlclBlbmFsdHkgKiAwLjAwMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzY29yZSA+IGJlc3RTY29yZSkge1xyXG4gICAgICAgICAgICAgIGJlc3RTY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgICAgIGJlc3RQb3MgPSB7IHgsIHkgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJlc3RQb3M7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBsZXQgYmVzdFBvcyA9IGZpbmRCZXN0UG9zaXRpb24oXCJzdHJpY3RcIik7XHJcblxyXG4gICAgICBpZiAoIWJlc3RQb3MpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJTdHJpY3QgcGxhY2VtZW50IGZhaWxlZC4gVHJ5aW5nIHJlbGF4ZWQgbW9kZS4uLlwiKTtcclxuICAgICAgICBiZXN0UG9zID0gZmluZEJlc3RQb3NpdGlvbihcInJlbGF4ZWRcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghYmVzdFBvcykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlJlbGF4ZWQgcGxhY2VtZW50IGZhaWxlZC4gRmFsbGluZyBiYWNrIHRvIGNlbnRlci5cIik7XHJcbiAgICAgICAgYmVzdFBvcyA9IHtcclxuICAgICAgICAgIHg6IGNlbnRlclggLSBncmlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgeTogY2VudGVyWSAtIGdyaWRIZWlnaHQgLyAyLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIC8vIE4tc2hhcGUgdHJhdmVyc2FsOiBjb2wgZmlsbHMgbGVmdC10by1yaWdodCwgZWFjaCBjb2x1bW4gZmlsbHMgYm90dG9tIHJvdyBmaXJzdCB0aGVuIHRvcCByb3dcclxuICAgICAgICBjb25zdCBjb2wgPSBNYXRoLmZsb29yKGluZGV4IC8gMik7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gaW5kZXggJSAyID09PSAwID8gMSA6IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSBiZXN0UG9zIS54ICsgY29sICogZml4dHVyZVdpZHRoUHg7XHJcbiAgICAgICAgY29uc3QgeSA9IGJlc3RQb3MhLnkgKyByb3cgKiBmaXh0dXJlSGVpZ2h0UHg7XHJcblxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5mcm9tUGl4ZWxzKHgsIFwiZnRcIik7XHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoeSwgXCJmdFwiKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgZml4dHVyZSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbCh0aGlzLmNhbnZhcywgeCwgeSwgYSwgdywgaCwgb3RoZXJFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgLmZpbHRlcigodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIilcclxuICAgICAgLm1hcCgodzogYW55KSA9PiAoe1xyXG4gICAgICAgIHg6IHRoaXMudG9QaXhlbHMody5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy50b1BpeGVscyh3LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1BvaW50SW5zaWRlUG9seWdvbihcclxuICAgIHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXHJcbiAgICBwb2x5Z29uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSxcclxuICApOiBib29sZWFuIHtcclxuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IHBvbHlnb24ubGVuZ3RoIC0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBqID0gaSsrKSB7XHJcbiAgICAgIGNvbnN0IHhpID0gcG9seWdvbltpXS54LFxyXG4gICAgICAgIHlpID0gcG9seWdvbltpXS55O1xyXG4gICAgICBjb25zdCB4aiA9IHBvbHlnb25bal0ueCxcclxuICAgICAgICB5aiA9IHBvbHlnb25bal0ueTtcclxuXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdCA9XHJcbiAgICAgICAgeWkgPiBwb2ludC55ICE9PSB5aiA+IHBvaW50LnkgJiZcclxuICAgICAgICBwb2ludC54IDwgKCh4aiAtIHhpKSAqIChwb2ludC55IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xyXG5cclxuICAgICAgaWYgKGludGVyc2VjdCkgaW5zaWRlID0gIWluc2lkZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zaWRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPY2N1cGllZFJlY3RzKCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgIGNvbnN0IHIgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogci5sZWZ0LFxyXG4gICAgICAgIHk6IHIudG9wLFxyXG4gICAgICAgIHc6IHIud2lkdGgsXHJcbiAgICAgICAgaDogci5oZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjdHNPdmVybGFwKFxyXG4gICAgYTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcclxuICAgIGI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShcclxuICAgICAgYS54ICsgYS53IDw9IGIueCB8fFxyXG4gICAgICBhLnggPj0gYi54ICsgYi53IHx8XHJcbiAgICAgIGEueSArIGEuaCA8PSBiLnkgfHxcclxuICAgICAgYS55ID49IGIueSArIGIuaFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgZ3JpZFJlY3Q6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgICBib3VuZHM6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcclxuICAgIG9jY3VwaWVkUmVjdHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSxcclxuICApOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk1hcmdpbiA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIGRpc3RhbmNlIHRvIGxheW91dCBib3VuZHNcclxuICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKFxyXG4gICAgICBtaW5NYXJnaW4sXHJcbiAgICAgIGdyaWRSZWN0LnggLSBib3VuZHMubGVmdCxcclxuICAgICAgYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSAoZ3JpZFJlY3QueCArIGdyaWRSZWN0LncpLFxyXG4gICAgICBncmlkUmVjdC55IC0gYm91bmRzLnRvcCxcclxuICAgICAgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBkaXN0YW5jZSB0byBvdGhlciBvYmplY3RzXHJcbiAgICBmb3IgKGNvbnN0IG9jYyBvZiBvY2N1cGllZFJlY3RzKSB7XHJcbiAgICAgIC8vIGhvcml6b250YWwgZ2FwXHJcbiAgICAgIGlmIChvY2MueSA8IGdyaWRSZWN0LnkgKyBncmlkUmVjdC5oICYmIG9jYy55ICsgb2NjLmggPiBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgaWYgKG9jYy54ICsgb2NjLncgPD0gZ3JpZFJlY3QueCkge1xyXG4gICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBncmlkUmVjdC54IC0gKG9jYy54ICsgb2NjLncpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9jYy54ID49IGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIG9jYy54IC0gKGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB2ZXJ0aWNhbCBnYXBcclxuICAgICAgaWYgKG9jYy54IDwgZ3JpZFJlY3QueCArIGdyaWRSZWN0LncgJiYgb2NjLnggKyBvY2MudyA+IGdyaWRSZWN0LngpIHtcclxuICAgICAgICBpZiAob2NjLnkgKyBvY2MuaCA8PSBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIGdyaWRSZWN0LnkgLSAob2NjLnkgKyBvY2MuaCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2NjLnkgPj0gZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpIHtcclxuICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgb2NjLnkgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWluTWFyZ2luO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXYWxsQnlOdW1iZXIoZWxlbWVudE51bWJlcjogbnVtYmVyKTogYW55IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmluZChcclxuICAgICAgKHc6IGFueSkgPT4gdy5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgdy5lbGVtZW50TnVtYmVyID09PSBlbGVtZW50TnVtYmVyLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRyYXdGaXh0dXJlUm93TGFiZWwodGV4dDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgbGFiZWwgPSBuZXcgZmFicmljLlRleHQodGV4dCwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGZvbnRTaXplOiAxNCxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChsYWJlbCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgZmlsbENvbG9yID0gXCIjRjZGQ0ZGXCI7XHJcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IFwiI0QwRDVERFwiO1xyXG4gICAgY29uc3QgbGFiZWxDb2xvciA9IFwiIzAwOUJGM1wiO1xyXG4gICAgbGV0IHRleHQgPSBgJHt0aGlzLnRpdGxlQ2FzZS50cmFuc2Zvcm0oZWxlbWVudERhdGEuZWxlbWVudFR5cGUpfSAke1xyXG4gICAgICBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dTdGFydFkgPSBjZW50ZXJZICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93RW5kWSA9IGhlaWdodCAtIDU7XHJcblxyXG4gICAgICBpZiAoYm90dG9tQXJyb3dFbmRZID4gYm90dG9tQXJyb3dTdGFydFkgKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbY2VudGVyWCwgYm90dG9tQXJyb3dTdGFydFksIGNlbnRlclgsIGJvdHRvbUFycm93RW5kWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tQXJyb3dFbmRZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDE4MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dTdGFydFggPSBjZW50ZXJYICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dFbmRYID0gd2lkdGggLSA1O1xyXG5cclxuICAgICAgaWYgKHJpZ2h0QXJyb3dFbmRYID4gcmlnaHRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtyaWdodEFycm93U3RhcnRYLCBjZW50ZXJZLCByaWdodEFycm93RW5kWCwgY2VudGVyWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHJpZ2h0QXJyb3dFbmRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBtb2RDZW50ZXJYID0geDtcclxuICAgIGxldCBtb2RDZW50ZXJZID0geTtcclxuICAgIGxldCBhbmdsZSA9IGVsZW1lbnREYXRhLmFuZ2xlO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChlbGVtZW50cywge1xyXG4gICAgICBsZWZ0OiBtb2RDZW50ZXJYLFxyXG4gICAgICB0b3A6IG1vZENlbnRlclksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IGlzVmVydGljYWwsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogIWlzVmVydGljYWwsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgYWN0dWFsU2hlbHZlcyA9XHJcbiAgICAgIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5zaGVsZlR5cGUgIT0gXCJ2bW9ubHlcIikgPz9cclxuICAgICAgW107XHJcblxyXG4gICAgbGV0IGZpeHR1cmVDb2xvcjogYW55O1xyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgdG9wQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlubmVyVG9wQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFl9ICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdG9wRmllbGRUZXh0ID1cclxuICAgICAgKGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIlxyXG4gICAgICAgID8gYFdhbGwtJHtmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcn0gLSBgXHJcbiAgICAgICAgOiBcIkZsb29yIC0gXCIpICtcclxuICAgICAgYEZpeHR1cmUgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAgICAgKGZpeHR1cmVEYXRhPy5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgPyBcIiAtIEZYLVwiICsgZml4dHVyZURhdGEuZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgIDogXCJcIilcclxuICAgICAgICAgIDogXCJuZXdcIlxyXG4gICAgICB9YDtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHRvcEZpZWxkVGV4dCwge1xyXG4gICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICB9IFxyXG4gICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBcIiMzNDQwNTRcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgIGxldCBib3R0b21UZXh0O1xyXG5cclxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gZ2V0Rml4dHVyZUNhbnZhc0xhYmVsKGZpeHR1cmVEYXRhKTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVCb3R0b21UZXh0ID0gKGZzOiBhbnkpID0+XHJcbiAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBib3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgIH0gd2hpbGUgKGJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgICAgICBmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgICAgICB9IFxyXG4gICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBmaXh0dXJlRGF0YS5pc3N1ZSA/IFwiI2ZmZlwiIDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IGZpeHR1cmVEYXRhPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgdmVydGljYWwgc3BhY2VcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgZWxsaXBzaXMgYWdhaW5zdCBmdWxsIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmIG9mIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwcy5wdXNoKHsgem9uZSwgc2hlbHZlczogW3NoZWxmXSB9KTtcclxuICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHNbc2VxdWVudGlhbEdyb3Vwcy5sZW5ndGggLSAxXS5zaGVsdmVzLnB1c2goc2hlbGYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGN1cnJlbnRTaGVsZkluZGV4ID0gMDtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgc3RhcnRJbmRleCA+IGZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZy5sZW5ndGggfHxcclxuICAgICAgICAgIGVuZEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aFxyXG4gICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgIGAke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBzY2FsZVg6IHdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZtQm94ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LnZtRmlsbCA/PyBcIiM2OTM4RUZcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgIEwgJHttaWRYICsgcmFkaXVzfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgICB9IFxyXG4gICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNGRUU0RTJcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uZm9vdGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7YWN0dWFsU2hlbHZlcy5sZW5ndGh9IC4gUHJvZHVjdHMgLSAgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YT8uZml4dHVyZUNhcGFjaXR5ID8/IDBcclxuICAgICAgfSAuIFZNIC0gJHtmaXh0dXJlRGF0YT8udm1Db25maWc/Lmxlbmd0aCA/PyAwfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBhbmdsZSA9IGZpeHR1cmVEYXRhPy5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZTtcclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0ICYmIGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhPy5hbmdsZSB8fCAwO1xyXG4gICAgICBhbmdsZSA9IGFuZ2xlRGVnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgIFtcclxuICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgIHRvcENvbnRhaW5lcixcclxuICAgICAgICBpbm5lclRvcEJveCxcclxuICAgICAgICB0b3BUZXh0LFxyXG4gICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgIGJvdHRvbVRleHQsXHJcbiAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICBdLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogeCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICBhbmdsZTogYW5nbGUsXHJcbiAgICAgIH0sXHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gdGFyZ2V0OlwiLCB0YXJnZXQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuICAgIGNvbnN0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgcGF0aERhdGEgPSBbXHJcbiAgICAgIGBNIDAgMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7LWhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHt3aWR0aH0gJHtoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodCArIGhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBMIDAgJHtoZWlnaHR9YCxcclxuICAgICAgYFpgLFxyXG4gICAgXS5qb2luKFwiIFwiKTtcclxuXHJcbiAgICBjb25zdCBhcnJvdyA9IG5ldyBmYWJyaWMuUGF0aChwYXRoRGF0YSwge1xyXG4gICAgICBmaWxsOiBcIiMwM0E5RjRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGhlaWdodCAtIDY7XHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0KFwiRW50cmFuY2VcIiwge1xyXG4gICAgICBmb250RmFtaWx5OiBcIkFyaWFsXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGxlZnQ6IDE1LFxyXG4gICAgICB0b3A6IGhlaWdodCAvIDIsXHJcbiAgICAgIGZvbnRTaXplOiAyMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gbWF4VGV4dEhlaWdodCAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3csIHRleHRdLCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ0ZsaXA6IHRydWUsXHJcbiAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55LFxyXG4gICk6IGZhYnJpYy5Hcm91cCB7XHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IDIsXHJcbiAgICAgIHJ5OiAyLFxyXG4gICAgICBmaWxsOiBcIiNEQUYxRkZcIixcclxuICAgICAgc3Ryb2tlOiBcIiM2QkNBRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGVsZW1lbnQuZml4dHVyZU5hbWUsIHtcclxuICAgICAgd2lkdGg6IHdpZHRoIC0gOCxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcclxuICAgICAgc3BsaXRCeUdyYXBoZW1lOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gaGVpZ2h0IC0gOCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IChoZWlnaHQgLSA4KSAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBhbmdsZTogYSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdCZygpIHtcclxuICAgIGNvbnN0IHdhbGwxID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZTogYW55KSA9PiBlLmVsZW1lbnROdW1iZXIgPT09IDEgJiYgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIsXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2FsbDIgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMiAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMod2FsbDEuZGlzdGFuY2UsIHdhbGwxLnVuaXQpO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyh3YWxsMi5kaXN0YW5jZSwgd2FsbDIudW5pdCk7XHJcblxyXG4gICAgY29uc3QgYmcgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHRvcDogdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICBmaWxsOiBcIiNlYWVjZjBcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZShiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5pbnNlcnRBdCgwLCBiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImNhZC1yZW5kZXJcIj5cclxuICAgIDxsaWItdG9vbC1wYWdlLWhlYWRlclxyXG4gICAgICB0aXRsZT1cIkNoZWNrIENBRCBPdXRwdXRcIlxyXG4gICAgICBkZXNjcmlwdGlvbj1cIlBhc3RlIENBRCBkYXRhIGFuZCBwcmV2aWV3IHRoZSBwYXJzZWQgbGF5b3V0LlwiXHJcbiAgICA+PC9saWItdG9vbC1wYWdlLWhlYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcHAtbGF5b3V0XCI+XHJcblxyXG4gICAgICAgIDwhLS0gTEVGVCBUT09MQkFSIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwicmF3Q0FERGV0YWlsc1wiIHBsYWNlaG9sZGVyPVwiUGFzdGUgdGhlIENBRCBleHRyYWN0ZWQgZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm93cz1cIjI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUklHSFQgQ0FOVkFTIFBBTkVMIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtd3JhcHBlclwiICNjYW52YXNDb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwiaXNBdXRvQWxpZ25Nb2RlXCIgWyhuZ01vZGVsKV09XCJpc0F1dG9BbGlnbk1vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFtkaXNhYmxlZF09XCIhZmxvb3JEYXRhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJjb2xvcjogYmxhY2s7IHdoaXRlLXNwYWNlOiBub3dyYXBcIiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgc3ViIG1zLTJcIiBmb3I9XCJzaG93Vk1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1dG8gUG9zaXRpb24gRml4dHVyZXNcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVja1wiIG5hbWU9XCJpbmNsdWRlQkdcIiBpZD1cImluY2x1ZGVCR1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5jbHVkZUZpeHR1cmVzXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgW2Rpc2FibGVkXT1cIiFmbG9vckRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW5jbHVkZUJHXCI+SW5jbHVkZSBGaXh0dXJlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja1JlbmRlclBsYW5vKClcIj5cclxuICAgICAgICAgICAgICAgICAgICBSZW5kZXJcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtLTBcIj4ge3t3YWxsQ291bnR9fSAtIFdhbGxzIHw8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm0tMFwiPiB7e3dGaXh0dXJlc0NvdW50fX0gLSBXYWxsIEZpeHR1cmVzIHw8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm0tMFwiPiB7e2NGaXh0dXJlc0NvdW50fX0gLSBDZW50ZXIgRml4dHVyZXM8L2g0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDYW52YXMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgPGNhbnZhcyAjY2FudmFzPjwvY2FudmFzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19