@po-ui/ng-components 14.1.0 → 14.3.0

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 (63) hide show
  1. package/esm2020/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.mjs +5 -3
  2. package/esm2020/lib/components/po-button/po-button-base.component.mjs +58 -8
  3. package/esm2020/lib/components/po-button/po-button-size.enum.mjs +6 -0
  4. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  5. package/esm2020/lib/components/po-button-group/po-button-group-base.component.mjs +8 -1
  6. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  7. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +12 -12
  8. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox-base.component.mjs +11 -2
  9. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.component.mjs +24 -12
  10. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +14 -20
  11. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.mjs +5 -4
  12. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +74 -43
  13. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +17 -15
  14. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +3 -8
  15. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +2 -1
  16. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +25 -2
  17. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +5 -5
  18. package/esm2020/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +28 -2
  19. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.mjs +28 -2
  20. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +4 -4
  21. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +5 -3
  22. package/esm2020/lib/components/po-field/po-lookup/services/po-lookup-modal.service.mjs +6 -2
  23. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +2 -2
  24. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +9 -9
  25. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +90 -25
  26. package/esm2020/lib/components/po-field/po-upload/po-upload-base.service.mjs +4 -2
  27. package/esm2020/lib/components/po-list-view/po-list-view.component.mjs +3 -3
  28. package/esm2020/lib/components/po-table/po-table-base.component.mjs +21 -2
  29. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +3 -3
  30. package/esm2020/lib/components/po-table/po-table.component.mjs +511 -476
  31. package/esm2020/lib/components/po-widget/po-widget-base.component.mjs +3 -2
  32. package/esm2020/lib/components/po-widget/po-widget.component.mjs +24 -12
  33. package/esm2020/lib/utils/util.mjs +21 -12
  34. package/fesm2015/po-ui-ng-components.mjs +1288 -952
  35. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  36. package/fesm2020/po-ui-ng-components.mjs +1266 -937
  37. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  38. package/lib/components/po-button/po-button-base.component.d.ts +29 -4
  39. package/lib/components/po-button/po-button-size.enum.d.ts +4 -0
  40. package/lib/components/po-button-group/po-button-group-base.component.d.ts +7 -0
  41. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +18 -0
  42. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +2 -1
  43. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +2 -1
  44. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +27 -22
  45. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +13 -1
  46. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +21 -1
  47. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +21 -1
  48. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +4 -0
  49. package/lib/components/po-field/po-select/po-select.component.d.ts +36 -7
  50. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  51. package/lib/components/po-table/po-table.component.d.ts +6 -0
  52. package/lib/components/po-widget/po-widget-base.component.d.ts +1 -0
  53. package/lib/utils/util.d.ts +2 -1
  54. package/package.json +4 -4
  55. package/po-ui-ng-components-14.3.0.tgz +0 -0
  56. package/schematics/ng-add/index.js +1 -1
  57. package/schematics/ng-update/v14/index.js +1 -1
  58. package/schematics/ng-update/v2/index.js +1 -1
  59. package/schematics/ng-update/v3/index.js +1 -1
  60. package/schematics/ng-update/v4/index.js +1 -1
  61. package/schematics/ng-update/v5/index.js +1 -1
  62. package/schematics/ng-update/v6/index.js +1 -1
  63. package/po-ui-ng-components-14.1.0.tgz +0 -0
@@ -348,14 +348,14 @@ PoTableColumnManagerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ typ
348
348
  } if (rf & 2) {
349
349
  let _t;
350
350
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.popover = _t.first);
351
- } }, inputs: { columns: ["p-columns", "columns"], target: ["p-target", "target"], colunsDefault: ["p-columns-default", "colunsDefault"], lastVisibleColumnsSelected: ["p-last-visible-columns-selected", "lastVisibleColumnsSelected"], maxColumns: ["p-max-columns", "maxColumns"] }, outputs: { visibleColumnsChange: "p-visible-columns-change", changeVisibleColumns: "p-change-visible-columns", initialColumns: "p-initial-columns" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["p-position", "bottom-left", 3, "p-target", "p-close", 4, "ngIf"], ["p-position", "bottom-left", 3, "p-target", "p-close"], ["popover", ""], [1, "po-table-column-manager-header"], [1, "po-table-column-manager-header-title"], [1, "po-table-column-manager-header-close"], [1, "po-table-column-manager-header-close-button", "po-clickable", "po-icon", "po-icon-close", 3, "click"], [1, "po-table-column-manager-body"], ["name", "visibleColumns", "p-columns", "1", 3, "ngModel", "p-options", "ngModelChange", "p-change"], [1, "po-container-arrows-columns-manager"], [4, "ngFor", "ngForOf"], [1, "po-table-column-manager-footer"], ["p-small", "", "p-kind", "tertiary", 1, "po-table-column-manager-footer-restore", 3, "p-label", "p-click"], [1, "po-container-icons-arrows-columns-manager"], ["p-tooltip-position", "left", "p-kind", "tertiary", "p-icon", "po-icon po-icon-arrow-up", "p-small", "", 3, "p-tooltip", "p-disabled", "click"], ["p-tooltip-position", "top", "p-kind", "tertiary", "p-icon", "po-icon po-icon-arrow-down", "p-small", "", 3, "p-tooltip", "p-disabled", "click"]], template: function PoTableColumnManagerComponent_Template(rf, ctx) { if (rf & 1) {
351
+ } }, inputs: { columns: ["p-columns", "columns"], target: ["p-target", "target"], colunsDefault: ["p-columns-default", "colunsDefault"], lastVisibleColumnsSelected: ["p-last-visible-columns-selected", "lastVisibleColumnsSelected"], maxColumns: ["p-max-columns", "maxColumns"] }, outputs: { visibleColumnsChange: "p-visible-columns-change", changeVisibleColumns: "p-change-visible-columns", initialColumns: "p-initial-columns" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["p-position", "bottom-left", 3, "p-target", "p-close", 4, "ngIf"], ["p-position", "bottom-left", 3, "p-target", "p-close"], ["popover", ""], [1, "po-table-column-manager-header"], [1, "po-table-column-manager-header-title"], [1, "po-table-column-manager-header-close"], [1, "po-table-column-manager-header-close-button", "po-clickable", "po-icon", "po-icon-close", 3, "click"], [1, "po-table-column-manager-body"], ["name", "visibleColumns", "p-columns", "1", 1, "po-checkbox-group-column-manager", 3, "ngModel", "p-options", "ngModelChange", "p-change"], [1, "po-container-arrows-columns-manager"], [4, "ngFor", "ngForOf"], [1, "po-table-column-manager-footer"], ["p-kind", "tertiary", 1, "po-table-column-manager-footer-restore", 3, "p-label", "p-click"], [1, "po-container-icons-arrows-columns-manager"], ["p-tooltip-position", "left", "p-kind", "tertiary", "p-icon", "po-icon po-icon-arrow-up", 3, "p-tooltip", "p-disabled", "click"], ["p-tooltip-position", "top", "p-kind", "tertiary", "p-icon", "po-icon po-icon-arrow-down", 3, "p-tooltip", "p-disabled", "click"]], template: function PoTableColumnManagerComponent_Template(rf, ctx) { if (rf & 1) {
352
352
  i0.ɵɵtemplate(0, PoTableColumnManagerComponent_po_popover_0_Template, 13, 6, "po-popover", 0);
353
353
  } if (rf & 2) {
354
354
  i0.ɵɵproperty("ngIf", ctx.target);
355
355
  } }, dependencies: [i2.NgForOf, i2.NgIf, i3.NgControlStatus, i3.NgModel, i4.PoButtonComponent, i5.PoCheckboxGroupComponent, i6.PoPopoverComponent, i7.PoTooltipDirective], encapsulation: 2 });
356
356
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoTableColumnManagerComponent, [{
357
357
  type: Component,
358
- args: [{ selector: 'po-table-column-manager', template: "<po-popover #popover *ngIf=\"target\" [p-target]=\"target\" p-position=\"bottom-left\" (p-close)=\"checkChanges([], true)\">\n <div class=\"po-table-column-manager-header\">\n <div class=\"po-table-column-manager-header-title\">{{ literals.columnsManager }}</div>\n\n <div class=\"po-table-column-manager-header-close\">\n <button\n class=\"po-table-column-manager-header-close-button po-clickable po-icon po-icon-close\"\n (click)=\"popover.close()\"\n ></button>\n </div>\n </div>\n\n <div class=\"po-table-column-manager-body\">\n <po-checkbox-group\n name=\"visibleColumns\"\n [(ngModel)]=\"visibleColumns\"\n p-columns=\"1\"\n [p-options]=\"columnsOptions\"\n (p-change)=\"checkChanges($event, false)\"\n >\n </po-checkbox-group>\n\n <div class=\"po-container-arrows-columns-manager\">\n <div *ngFor=\"let option of columnsOptions\">\n <div class=\"po-container-icons-arrows-columns-manager\">\n <po-button\n [p-tooltip]=\"literals.up\"\n p-tooltip-position=\"left\"\n [p-disabled]=\"verifyArrowDisabled(option, 'up')\"\n (click)=\"changePosition(option, 'up'); $event.stopPropagation()\"\n p-kind=\"tertiary\"\n p-icon=\"po-icon po-icon-arrow-up\"\n p-small\n >\n </po-button>\n <po-button\n [p-tooltip]=\"literals.down\"\n p-tooltip-position=\"top\"\n [p-disabled]=\"verifyArrowDisabled(option, 'down')\"\n (click)=\"changePosition(option, 'down'); $event.stopPropagation()\"\n p-kind=\"tertiary\"\n p-icon=\"po-icon po-icon-arrow-down\"\n p-small\n >\n </po-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"po-table-column-manager-footer\">\n <po-button\n class=\"po-table-column-manager-footer-restore\"\n p-small\n p-kind=\"tertiary\"\n [p-label]=\"literals.restoreDefault\"\n (p-click)=\"restore()\"\n >\n </po-button>\n </div>\n</po-popover>\n" }]
358
+ args: [{ selector: 'po-table-column-manager', template: "<po-popover #popover *ngIf=\"target\" [p-target]=\"target\" p-position=\"bottom-left\" (p-close)=\"checkChanges([], true)\">\n <div class=\"po-table-column-manager-header\">\n <div class=\"po-table-column-manager-header-title\">{{ literals.columnsManager }}</div>\n\n <div class=\"po-table-column-manager-header-close\">\n <button\n class=\"po-table-column-manager-header-close-button po-clickable po-icon po-icon-close\"\n (click)=\"popover.close()\"\n ></button>\n </div>\n </div>\n\n <div class=\"po-table-column-manager-body\">\n <po-checkbox-group\n class=\"po-checkbox-group-column-manager\"\n name=\"visibleColumns\"\n [(ngModel)]=\"visibleColumns\"\n p-columns=\"1\"\n [p-options]=\"columnsOptions\"\n (p-change)=\"checkChanges($event, false)\"\n >\n </po-checkbox-group>\n\n <div class=\"po-container-arrows-columns-manager\">\n <div *ngFor=\"let option of columnsOptions\">\n <div class=\"po-container-icons-arrows-columns-manager\">\n <po-button\n [p-tooltip]=\"literals.up\"\n p-tooltip-position=\"left\"\n [p-disabled]=\"verifyArrowDisabled(option, 'up')\"\n (click)=\"changePosition(option, 'up'); $event.stopPropagation()\"\n p-kind=\"tertiary\"\n p-icon=\"po-icon po-icon-arrow-up\"\n >\n </po-button>\n <po-button\n [p-tooltip]=\"literals.down\"\n p-tooltip-position=\"top\"\n [p-disabled]=\"verifyArrowDisabled(option, 'down')\"\n (click)=\"changePosition(option, 'down'); $event.stopPropagation()\"\n p-kind=\"tertiary\"\n p-icon=\"po-icon po-icon-arrow-down\"\n >\n </po-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"po-table-column-manager-footer\">\n <po-button\n class=\"po-table-column-manager-footer-restore\"\n p-kind=\"tertiary\"\n [p-label]=\"literals.restoreDefault\"\n (p-click)=\"restore()\"\n >\n </po-button>\n </div>\n</po-popover>\n" }]
359
359
  }], function () { return [{ type: i0.Renderer2 }, { type: i1.PoLanguageService }]; }, { popover: [{
360
360
  type: ViewChild,
361
361
  args: [PoPopoverComponent]
@@ -384,4 +384,4 @@ PoTableColumnManagerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ typ
384
384
  type: Input,
385
385
  args: ['p-max-columns']
386
386
  }] }); })();
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbWFuYWdlci9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7OztJQ0svRSwyQkFBMkMsY0FBQSxvQkFBQTtJQU1yQyx3UEFBUyxpQ0FBdUIsSUFBSSxDQUFDLFNBQUUsZUFBQSx3QkFBd0IsQ0FBQSxJQUFDO0lBS2xFLGlCQUFZO0lBQ1oscUNBUUM7SUFKQyx3UEFBUyxpQ0FBdUIsTUFBTSxDQUFDLFNBQUUsZUFBQSx3QkFBd0IsQ0FBQSxJQUFDO0lBS3BFLGlCQUFZLEVBQUEsRUFBQTs7OztJQWxCVixlQUF5QjtJQUF6Qiw4Q0FBeUIsMkRBQUE7SUFVekIsZUFBMkI7SUFBM0IsZ0RBQTJCLDZEQUFBOzs7O0lBcEN2Qyx3Q0FBb0g7SUFBbkMseUxBQVcsZUFBQSx3QkFBaUIsSUFBSSxDQUFDLENBQUEsSUFBQztJQUNqSCw4QkFBNEMsYUFBQTtJQUNRLFlBQTZCO0lBQUEsaUJBQU07SUFFckYsOEJBQWtELGdCQUFBO0lBRzlDLDZLQUFTLGVBQUEsV0FBZSxDQUFBLElBQUM7SUFDMUIsaUJBQVMsRUFBQSxFQUFBO0lBSWQsOEJBQTBDLDJCQUFBO0lBR3RDLHNRQUE0Qiw0TEFHaEIsZUFBQSw2QkFBcUIsS0FBSyxDQUFDLENBQUEsSUFIWDtJQUs5QixpQkFBb0I7SUFFcEIsOEJBQWlEO0lBQy9DLDhGQXVCTTtJQUNSLGlCQUFNLEVBQUE7SUFHUixnQ0FBNEMscUJBQUE7SUFNeEMsMExBQVcsZUFBQSxpQkFBUyxDQUFBLElBQUM7SUFFdkIsaUJBQVksRUFBQSxFQUFBOzs7SUExRG9CLHdDQUFtQjtJQUVELGVBQTZCO0lBQTdCLG9EQUE2QjtJQWE3RSxlQUE0QjtJQUE1QiwrQ0FBNEIsb0NBQUE7SUFRSixlQUFpQjtJQUFqQiwrQ0FBaUI7SUFnQ3pDLGVBQW1DO0lBQW5DLHdEQUFtQzs7QURsQ3pDLE1BQU0scUNBQXFDLEdBQUcsS0FBSyxDQUFDO0FBRXBELE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHO0lBQ2pELEVBQUUsRUFBRTtRQUNGLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsY0FBYyxFQUFFLGlCQUFpQjtRQUNqQyxFQUFFLEVBQUUsSUFBSTtRQUNSLElBQUksRUFBRSxNQUFNO0tBQ2I7SUFDRCxFQUFFLEVBQUU7UUFDRixjQUFjLEVBQUUsb0JBQW9CO1FBQ3BDLGNBQWMsRUFBRSx1QkFBdUI7UUFDdkMsRUFBRSxFQUFFLFFBQVE7UUFDWixJQUFJLEVBQUUsT0FBTztLQUNkO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsY0FBYyxFQUFFLHdCQUF3QjtRQUN4QyxjQUFjLEVBQUUsa0JBQWtCO1FBQ2xDLEVBQUUsRUFBRSxPQUFPO1FBQ1gsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELEVBQUUsRUFBRTtRQUNGLGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsY0FBYyxFQUFFLGdCQUFnQjtRQUNoQyxFQUFFLEVBQUUsT0FBTztRQUNYLElBQUksRUFBRSxNQUFNO0tBQ2I7Q0FDRixDQUFDO0FBUUYsTUFBTSxPQUFPLDZCQUE2QjtJQXVDeEMsWUFBb0IsUUFBbUIsRUFBRSxlQUFrQztRQUF2RCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBcENuQixZQUFPLEdBQXlCLEVBQUUsQ0FBQztRQU1iLCtCQUEwQixHQUF5QixFQUFFLENBQUM7UUFFNUQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFcEcsbUdBQW1HO1FBQ25HLGdKQUFnSjtRQUM1Ryx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUVoRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBR2hGLG1CQUFjLEdBQWlDLEVBQUUsQ0FBQztRQUNsRCxtQkFBYyxHQUFrQixFQUFFLENBQUM7UUFHM0IsZ0JBQVcsR0FBVyxxQ0FBcUMsQ0FBQztRQUM1RCxtQkFBYyxHQUF5QixFQUFFLENBQUM7UUFJMUMsZUFBVSxHQUFXLENBQUMsQ0FBQztRQVc3QixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVwRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsR0FBRyxtQ0FBbUMsQ0FBQyxlQUFlLENBQUM7WUFDdkQsR0FBRyxtQ0FBbUMsQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQztJQUNKLENBQUM7SUFmRCxJQUE0QixVQUFVLENBQUMsS0FBYTtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFXRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRWhELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELDRGQUE0RjtJQUM1RixZQUFZLENBQUMsUUFBdUIsRUFBRSxFQUFFLE9BQWdCLEtBQUs7UUFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9CLElBQUksSUFBSSxFQUFFO1lBQ1IsK0JBQStCO1lBQy9CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQW9CO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBWSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQW9CO1FBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGdCQUFnQixJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDNUUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQTJCLEVBQUUsS0FBYSxFQUFFLFNBQW9CLEVBQUUsV0FBb0I7UUFDakgsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3RCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RDtZQUVELElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtnQkFDeEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBb0I7UUFDN0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsbUNBQW1DO1FBQ25DLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxVQUF5QjtRQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUN0QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFN0Usd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU3RSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjthQUFNO1lBQ0wsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVyRSxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRU8sMkJBQTJCLENBQUMscUJBQW9DO1FBQ3RFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRixNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0csTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUU5RSxPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLENBQzVELENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVyxDQUFDLHFCQUFvQyxFQUFFLGtCQUFpQztRQUN6RixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxRQUFRLENBQUMscUJBQW9DLEVBQUUsZ0JBQStCO1FBQ3BGLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBb0IsRUFBRSxNQUFxQjtRQUMvRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsT0FBTyxXQUFXLEtBQUssWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxtR0FBbUc7SUFDM0YscUJBQXFCLENBQUMsVUFBd0MsRUFBRTtRQUN0RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsTUFBTTtZQUNULFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBcUI7UUFDL0MsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsd0VBQXdFO0lBQ2hFLGlCQUFpQixDQUFDLE9BQTZCO1FBQ3JELElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUV4QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUU7Z0JBQ2hELGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFxQixFQUFFLGNBQTZCO1FBQzFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQ3pHLENBQUM7SUFFRCw4RkFBOEY7SUFDdEYsc0JBQXNCLENBQUMsY0FBNkI7UUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXRELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxNQUFNO1lBQ1QsT0FBTyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtTQUM5RSxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFnQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsVUFBZ0MsRUFBRTtRQUN6RSxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDbEMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRTFCLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDbEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztvQkFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDL0MsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2lCQUN4QixDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQW1CO1FBQzVDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxNQUFNO1lBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztTQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBcUI7UUFDM0MsTUFBTSxFQUFFLFlBQVksR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFFekMsa0hBQWtIO1FBQ2xILElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM1RyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztTQUN6QztRQUVELGtIQUFrSDtRQUNsSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxZQUFrQztRQUNyRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFFMUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQTZCO1FBQzdDLGdIQUFnSDtRQUNoSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVDLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssZUFBZSxFQUFFO2dCQUM3QyxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswR0EvVVUsNkJBQTZCO2dGQUE3Qiw2QkFBNkI7dUJBQzdCLGtCQUFrQjs7Ozs7UUN6RC9CLDZGQTREYTs7UUE1RFMsaUNBQVk7O3VGRHdEckIsNkJBQTZCO2NBSnpDLFNBQVM7MkJBQ0UseUJBQXlCOzRGQUlKLE9BQU87a0JBQXJDLFNBQVM7bUJBQUMsa0JBQWtCO1lBRVQsT0FBTztrQkFBMUIsS0FBSzttQkFBQyxXQUFXO1lBRUMsTUFBTTtrQkFBeEIsS0FBSzttQkFBQyxVQUFVO1lBRVcsYUFBYTtrQkFBeEMsS0FBSzttQkFBQyxtQkFBbUI7WUFFZ0IsMEJBQTBCO2tCQUFuRSxLQUFLO21CQUFDLGlDQUFpQztZQUVKLG9CQUFvQjtrQkFBdkQsTUFBTTttQkFBQywwQkFBMEI7WUFJRSxvQkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBRUwsY0FBYztrQkFBMUMsTUFBTTttQkFBQyxtQkFBbUI7WUFjQyxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0NoZWNrYm94R3JvdXBPcHRpb24gfSBmcm9tICcuLi8uLi9wby1maWVsZC9wby1jaGVja2JveC1ncm91cC9pbnRlcmZhY2VzL3BvLWNoZWNrYm94LWdyb3VwLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Qb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG8tcG9wb3Zlci9wby1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5cbmNvbnN0IFBvVGFibGVDb2x1bW5NYW5hZ2VyTWF4Q29sdW1uc0RlZmF1bHQgPSA5OTk5OTtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnQ29sdW1ucyBtYW5hZ2VyJyxcbiAgICByZXN0b3JlRGVmYXVsdDogJ1Jlc3RvcmUgZGVmYXVsdCcsXG4gICAgdXA6ICd1cCcsXG4gICAgZG93bjogJ2Rvd24nXG4gIH0sXG4gIGVzOiB7XG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbnRlIGRlIGNvbHVtbmEnLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAnUmVzdGF1cmFyIHBvciBkZWZlY3RvJyxcbiAgICB1cDogJ2FycmliYScsXG4gICAgZG93bjogJ2FiYWpvJ1xuICB9LFxuICBwdDoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcycsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICdSZXN0YXVyYXIgcGFkcsOjbycsXG4gICAgdXA6ICdhY2ltYScsXG4gICAgZG93bjogJ2FiYWl4bydcbiAgfSxcbiAgcnU6IHtcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAn0YHQsdGA0L7RgSDQvdCw0YHRgtGA0L7QtdC6JyxcbiAgICB1cDogJ9Cy0LLQtdGA0YUnLFxuICAgIGRvd246ICfQstC90LjQtydcbiAgfVxufTtcblxudHlwZSBEaXJlY3Rpb24gPSAndXAnIHwgJ2Rvd24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby10YWJsZS1jb2x1bW4tbWFuYWdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUG9UYWJsZUNvbHVtbk1hbmFnZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoUG9Qb3BvdmVyQ29tcG9uZW50KSBwb3BvdmVyOiBQb1BvcG92ZXJDb21wb25lbnQ7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBJbnB1dCgncC10YXJnZXQnKSB0YXJnZXQ6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMtZGVmYXVsdCcpIGNvbHVuc0RlZmF1bHQ6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuXG4gIEBJbnB1dCgncC1sYXN0LXZpc2libGUtY29sdW1ucy1zZWxlY3RlZCcpIGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBPdXRwdXQoJ3AtdmlzaWJsZS1jb2x1bW5zLWNoYW5nZScpIHZpc2libGVDb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQb1RhYmxlQ29sdW1uPj4oKTtcblxuICAvLyBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAvLyBPIHBvLXRhYmxlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgdmlzw612ZWlzIGF0dWFsaXphZGFzLiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIEBPdXRwdXQoJ3AtaW5pdGlhbC1jb2x1bW5zJykgaW5pdGlhbENvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFN0cmluZz4+KCk7XG5cbiAgbGl0ZXJhbHM7XG4gIGNvbHVtbnNPcHRpb25zOiBBcnJheTxQb0NoZWNrYm94R3JvdXBPcHRpb24+ID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGNvbHVtblVwZGF0ZTtcblxuICBwcml2YXRlIF9tYXhDb2x1bW5zOiBudW1iZXIgPSBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0O1xuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlc3RvcmVEZWZhdWx0RXZlbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRWYWx1ZTogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBtaW5Db2x1bW5zOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgncC1tYXgtY29sdW1ucycpIHNldCBtYXhDb2x1bW5zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhDb2x1bW5zID0gY29udmVydFRvSW50KHZhbHVlLCBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0KTtcbiAgfVxuXG4gIGdldCBtYXhDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhDb2x1bW5zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1RhYmxlQ29sdW1uTWFuYWdlckxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHsgY29sdW1ucywgbWF4Q29sdW1ucywgdGFyZ2V0IH0gPSBjaGFuZ2VzO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpZiAobWF4Q29sdW1ucykge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXModGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gYXF1aSBjaGVnYW0gb3MgZXZlbnRvcyBkbyBjaGVja2JveCBlIGRvIGNsb3NlIGRvIHBvcG92ZXIgcXVlIHRhbWLDqW0gw6kgZGlzcGFyYWRvIG5vIHJlc2l6ZVxuICBjaGVja0NoYW5nZXMoZXZlbnQ6IEFycmF5PHN0cmluZz4gPSBbXSwgZW1pdDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy52ZXJpZnlUb0VtaXRDaGFuZ2UoZXZlbnQpO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIC8vIGNvbnRyb2xhIGVtaXNzw7VlcyBwYXJhIG8gZGV2XG4gICAgICB0aGlzLnZlcmlmeVRvRW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZSgpIHtcbiAgICB0aGlzLnJlc3RvcmVEZWZhdWx0RXZlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmRlZmF1bHRDb2x1bW5zKTtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zLmVtaXQodGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVuc0RlZmF1bHQpKTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyhkZWZhdWx0Q29sdW1ucywgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50KTtcbiAgfVxuXG4gIGNoYW5nZVBvc2l0aW9uKG9wdGlvbiwgZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBjb25zdCBpbmRleENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoZWwgPT4gZWwucHJvcGVydHkgPT09IG9wdGlvbi52YWx1ZSk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gWy4uLnRoaXMuY29sdW1uc107XG5cbiAgICBjb25zdCBoYXNEaXNhYmxlZDogYm9vbGVhbiA9IHRoaXMudmVyaWZ5QXJyb3dEaXNhYmxlZChvcHRpb24sIGRpcmVjdGlvbik7XG5cbiAgICB0aGlzLmNoYW5nZVBvc2l0aW9uQ29sdW1uKG5ld0NvbHVtbiwgaW5kZXhDb2x1bW4sIGRpcmVjdGlvbiwgaGFzRGlzYWJsZWQpO1xuICAgIHRoaXMuY29sdW1ucyA9IG5ld0NvbHVtbjtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIHZlcmlmeUFycm93RGlzYWJsZWQob3B0aW9uLCBkaXJlY3Rpb246IERpcmVjdGlvbikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChlbCA9PiBlbC5wcm9wZXJ0eSA9PT0gb3B0aW9uLnZhbHVlKTtcbiAgICBjb25zdCBleGlzdHNEZXRhaWwgPSB0aGlzLmNvbHVtbnMuc29tZShmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHJldHVybiBlbC5wcm9wZXJ0eSA9PT0gJ2RldGFpbCc7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWVTdWJ0cmFjdGlvbiA9IGV4aXN0c0RldGFpbCA/IDIgOiAxO1xuXG4gICAgaWYgKGluZGV4ID09PSAwICYmIGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB0aGlzLmNvbHVtbnMubGVuZ3RoIC0gdmFsdWVTdWJ0cmFjdGlvbiAmJiBkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VQb3NpdGlvbkNvbHVtbihhcnJheTogQXJyYXk8UG9UYWJsZUNvbHVtbj4sIGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogRGlyZWN0aW9uLCBoYXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmICghaGFzRGlzYWJsZWQpIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBhcnJheS5zcGxpY2UoaW5kZXggLSAxLCAxKVswXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDAsIGFycmF5LnNwbGljZShpbmRleCArIDEsIDEpWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRvRW1pdENoYW5nZShldmVudDogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uZXZlbnRdO1xuICAgIGlmIChuZXdDb2x1bW5zLmxlbmd0aCA+PSAxICYmIHRoaXMuYWxsb3dzQ2hhbmdlVmlzaWJsZUNvbHVtbnMoKSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlc1RvU2VsZWN0ZWRDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgIH1cbiAgICAvLyBEZXNhYmlsaXRhIHVsdGltbyBjaGVja2JveCBhdGl2b1xuICAgIGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY29sdW1uc09wdGlvbnMgPSB0aGlzLm1hcFRhYmxlQ29sdW1uc1RvQ2hlY2tib3hPcHRpb25zKHRoaXMuY29sdW1uVXBkYXRlKTtcbiAgICAgIHRoaXMuY29sdW1uc09wdGlvbnMgPSB0aGlzLmRpc2FibGVkTGFzdENvbHVtbihjb2x1bW5zT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlc1RvU2VsZWN0ZWRDb2x1bW5zKG5ld0NvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gWy4uLm5ld0NvbHVtbnNdO1xuICAgIGNvbnN0IHZpc2libGVUYWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVUYWJsZUNvbHVtbnModGhpcy52aXNpYmxlQ29sdW1ucyk7XG5cbiAgICAvLyBlbWl0ZSBhbHRlcmHDp8OjbyBuYXMgY29sdW5hcyBzZWxlY2lvbmFkYXMsIHBvcsOpbSBuw6NvIGVtaXRlIHBhcmEgbyBkZXYuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc0NoYW5nZS5lbWl0KHZpc2libGVUYWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd3NDaGFuZ2VWaXNpYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICBjb25zdCB2aXNpYmxlVGFibGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKHRoaXMudmlzaWJsZUNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KHZpc2libGVUYWJsZUNvbHVtbnMpICE9PSB0aGlzLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlUb0VtaXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICBpZiAodGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50KSB7XG4gICAgICAvLyB2ZWlvIGRvIHJlc3RvcmUgZGVmYXVsdFxuICAgICAgdGhpcy52ZXJpZnlSZXN0b3JlVmFsdWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvaSBkaXNwYXJhZG8gbm8gY2xvc2UgcG9wb3ZlcjtcbiAgICAgIHRoaXMudmVyaWZ5T25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5UmVzdG9yZVZhbHVlcygpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFsuLi50aGlzLmRlZmF1bHRDb2x1bW5zXTtcbiAgICBjb25zdCBkZWZhdWx0VmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKGRlZmF1bHRDb2x1bW5zKTtcblxuICAgIGlmICh0aGlzLmFsbG93c0NoYW5nZVNlbGVjdGVkQ29sdW1ucyhkZWZhdWx0VmlzaWJsZUNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kZWZhdWx0Q29sdW1ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFsbG93c0NoYW5nZVNlbGVjdGVkQ29sdW1ucyhkZWZhdWx0VmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcblxuICAgIHJldHVybiAhdGhpcy5pc0VxdWFsQXJyYXlzKGRlZmF1bHRWaXNpYmxlQ29sdW1ucywgdmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlPbkNsb3NlKCkge1xuICAgIGlmICh0aGlzLmFsbG93c0VtaXNzaW9uKCkpIHtcbiAgICAgIHRoaXMuZW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gWy4uLnRoaXMudmlzaWJsZUNvbHVtbnNdO1xuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh0aGlzLnZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dzRW1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXBkYXRlZFZpc2libGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucyA/IFsuLi50aGlzLnZpc2libGVDb2x1bW5zXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RFbWl0dGVkVmFsdWUgPSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPyBbLi4udGhpcy5sYXN0RW1pdHRlZFZhbHVlXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkID0gdGhpcy5sYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZCA/IFsuLi50aGlzLmxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMobGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNVcGRhdGUodXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKSB8fFxuICAgICAgdGhpcy5pc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnMsIGxhc3RWaXNpYmxlQ29sdW1ucylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RWaXNpYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0VmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VwZGF0ZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RFbWl0dGVkVmFsdWU6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFcXVhbEFycmF5cyhmaXJzdDogQXJyYXk8c3RyaW5nPiwgc2Vjb25kOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb25lID0gZmlyc3QgPyBbLi4uZmlyc3RdIDogW107XG4gICAgY29uc3QgdHdvID0gc2Vjb25kID8gWy4uLnNlY29uZF0gOiBbXTtcbiAgICBjb25zdCBmaXJzdFNvcnQgPSBvbmUuc2xpY2UoKTtcbiAgICBjb25zdCBzZWNvbmRTb3J0ID0gdHdvLnNsaWNlKCk7XG4gICAgY29uc3QgZmlyc3RTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmaXJzdFNvcnQpO1xuICAgIGNvbnN0IHNlY29uZFN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNlY29uZFNvcnQpO1xuXG4gICAgcmV0dXJuIGZpcnN0U3RyaW5nID09PSBzZWNvbmRTdHJpbmc7XG4gIH1cblxuICAvLyBkZXNhYmlsaXRhcsOhIGFzIGNvbHVuYXMsIHF1ZSBuw6NvIGVzdGl2ZXJlbSBzZWxlY2lvbmFkYXMsIGFww7NzIGV4ZWRlciBvIG51bWVybyBtYXhpbW8gZGUgY29sdW5hcy5cbiAgcHJpdmF0ZSBkaXNhYmxlQ29sdW1uc09wdGlvbnMoY29sdW1uczogQXJyYXk8UG9DaGVja2JveEdyb3VwT3B0aW9uPiA9IFtdKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlQ29sdW1uKGNvbHVtbi52YWx1ZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoY29sdW1uLnByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKiBSZXRvcm5hIHVtIEFycmF5IGRlIGNvbHVtbi5wcm9wZXJ0eSBkYXMgY29sdW5hcyBxdWUgc8OjbyB2aXNpdmVpcy4gKi9cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPik6IEFycmF5PHN0cmluZz4ge1xuICAgIGxldCB2aXNpYmxlQ29sdW1ucyA9IFtdO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVDb2x1bW4oY29sdW1uLCB2aXNpYmxlQ29sdW1ucykpIHtcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMgPSBbLi4udmlzaWJsZUNvbHVtbnMsIGNvbHVtbi5wcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGlzVmlzaWJsZUNvbHVtbihjb2x1bW46IFBvVGFibGVDb2x1bW4sIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSAmJiB2aXNpYmxlQ29sdW1ucy5sZW5ndGggPCB0aGlzLm1heENvbHVtbnMgJiYgY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnO1xuICB9XG5cbiAgLyoqIFJldG9ybmEgdW0gQXJyYXkgUG9UYWJsZUNvbHVtbiBhIHBhcnRpciBkYXMgY29sdW5hcyB2aXNpdmVpcyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLiAqL1xuICBwcml2YXRlIGdldFZpc2libGVUYWJsZUNvbHVtbnModmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxQb1RhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA/IFsuLi50aGlzLmNvbHVtbnNdIDogW107XG5cbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICB2aXNpYmxlOiB2aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJ1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyICYmICF0aGlzLnBvcG92ZXIuaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID49IHRoaXMubWF4Q29sdW1ucyA/ICF0aGlzLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKHByb3BlcnR5KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gW107XG5cbiAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlICE9PSAnZGV0YWlsJykge1xuICAgICAgICBjb2x1bW5zT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLnByb3BlcnR5LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uKSxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVDb2x1bW4oY29sdW1uLnByb3BlcnR5KSxcbiAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4udmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZWRMYXN0Q29sdW1uKGNvbHVtbnM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkaXNhYmxlZDogY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnICYmIGNvbHVtbi52aXNpYmxlID8gdHJ1ZSA6IGZhbHNlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoY29sdW1uczogU2ltcGxlQ2hhbmdlKSB7XG4gICAgY29uc3QgeyBjdXJyZW50VmFsdWUgPSBbXSwgcHJldmlvdXNWYWx1ZSA9IFtdIH0gPSBjb2x1bW5zO1xuICAgIHRoaXMuY29sdW1uVXBkYXRlID0gY29sdW1ucy5jdXJyZW50VmFsdWU7XG5cbiAgICAvLyBhdHVhbGl6YXJhIG8gZGVmYXVsdENvbHVtbnMsIHF1YW5kbyBmb3IgYSBwcmltZWlyYSB2ZXogb3UgcXVhbmRvIG8gZGVmYXVsdENvbHVtbnMgZm9yIGRpZmVyZW50ZSBkbyBjdXJyZW50VmFsdWVcbiAgICBpZiAoIXRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgJiYgdGhpcy5zdHJpbmdpZnkodGhpcy5kZWZhdWx0Q29sdW1ucykgIT09IHRoaXMuc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvbHVtbnMgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZmljYSBzZSBvIHZhbG9yIGFudGVyaW9yIMOpIGRpZmVyZW50ZSBkbyBhdHVhbCBwYXJhIGF0dWFsaXphciBhcyBjb2x1bW5zT3B0aW9ucyBhcGVuYXMgcXVhbmRvIGZvciBuZWNlc3NhcmlvXG4gICAgaWYgKHRoaXMuc3RyaW5naWZ5KHByZXZpb3VzVmFsdWUpICE9PSB0aGlzLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcyhjdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzKGN1cnJlbnRWYWx1ZTogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoY3VycmVudFZhbHVlKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gWy4uLnZpc2libGVDb2x1bW5zXTtcblxuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gdGhpcy5tYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjdXJyZW50VmFsdWUpO1xuICAgIHRoaXMuY29sdW1uc09wdGlvbnMgPSB0aGlzLmRpc2FibGVDb2x1bW5zT3B0aW9ucyhjb2x1bW5zT3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyh2aXNpYmxlQ29sdW1ucywgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPikge1xuICAgIC8vIG7Do28gZmF6IG8gc3RyaW5naWZ5IGRhIHByb3ByaWVkYWRlIGljb24gZSBzZWFyY2hTZXJ2aWNlLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbHVtbnMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicgJiYga2V5ICE9PSAnc2VhcmNoU2VydmljZScpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tcG9wb3ZlciAjcG9wb3ZlciAqbmdJZj1cInRhcmdldFwiIFtwLXRhcmdldF09XCJ0YXJnZXRcIiBwLXBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIiAocC1jbG9zZSk9XCJjaGVja0NoYW5nZXMoW10sIHRydWUpXCI+XG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyLXRpdGxlXCI+e3sgbGl0ZXJhbHMuY29sdW1uc01hbmFnZXIgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2VcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2UtYnV0dG9uIHBvLWNsaWNrYWJsZSBwby1pY29uIHBvLWljb24tY2xvc2VcIlxuICAgICAgICAoY2xpY2spPVwicG9wb3Zlci5jbG9zZSgpXCJcbiAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWJvZHlcIj5cbiAgICA8cG8tY2hlY2tib3gtZ3JvdXBcbiAgICAgIG5hbWU9XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICBbKG5nTW9kZWwpXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgIHAtY29sdW1ucz1cIjFcIlxuICAgICAgW3Atb3B0aW9uc109XCJjb2x1bW5zT3B0aW9uc1wiXG4gICAgICAocC1jaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKCRldmVudCwgZmFsc2UpXCJcbiAgICA+XG4gICAgPC9wby1jaGVja2JveC1ncm91cD5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1jb250YWluZXItYXJyb3dzLWNvbHVtbnMtbWFuYWdlclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbnNPcHRpb25zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1jb250YWluZXItaWNvbnMtYXJyb3dzLWNvbHVtbnMtbWFuYWdlclwiPlxuICAgICAgICAgIDxwby1idXR0b25cbiAgICAgICAgICAgIFtwLXRvb2x0aXBdPVwibGl0ZXJhbHMudXBcIlxuICAgICAgICAgICAgcC10b29sdGlwLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBbcC1kaXNhYmxlZF09XCJ2ZXJpZnlBcnJvd0Rpc2FibGVkKG9wdGlvbiwgJ3VwJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBvc2l0aW9uKG9wdGlvbiwgJ3VwJyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICBwLWtpbmQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICBwLWljb249XCJwby1pY29uIHBvLWljb24tYXJyb3ctdXBcIlxuICAgICAgICAgICAgcC1zbWFsbFxuICAgICAgICAgID5cbiAgICAgICAgICA8L3BvLWJ1dHRvbj5cbiAgICAgICAgICA8cG8tYnV0dG9uXG4gICAgICAgICAgICBbcC10b29sdGlwXT1cImxpdGVyYWxzLmRvd25cIlxuICAgICAgICAgICAgcC10b29sdGlwLXBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cInZlcmlmeUFycm93RGlzYWJsZWQob3B0aW9uLCAnZG93bicpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQb3NpdGlvbihvcHRpb24sICdkb3duJyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICBwLWtpbmQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICBwLWljb249XCJwby1pY29uIHBvLWljb24tYXJyb3ctZG93blwiXG4gICAgICAgICAgICBwLXNtYWxsXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcG8tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItZm9vdGVyXCI+XG4gICAgPHBvLWJ1dHRvblxuICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1mb290ZXItcmVzdG9yZVwiXG4gICAgICBwLXNtYWxsXG4gICAgICBwLWtpbmQ9XCJ0ZXJ0aWFyeVwiXG4gICAgICBbcC1sYWJlbF09XCJsaXRlcmFscy5yZXN0b3JlRGVmYXVsdFwiXG4gICAgICAocC1jbGljayk9XCJyZXN0b3JlKClcIlxuICAgID5cbiAgICA8L3BvLWJ1dHRvbj5cbiAgPC9kaXY+XG48L3BvLXBvcG92ZXI+XG4iXX0=
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbWFuYWdlci9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7OztJQ00vRSwyQkFBMkMsY0FBQSxvQkFBQTtJQU1yQyx3UEFBUyxpQ0FBdUIsSUFBSSxDQUFDLFNBQUUsZUFBQSx3QkFBd0IsQ0FBQSxJQUFDO0lBSWxFLGlCQUFZO0lBQ1oscUNBT0M7SUFIQyx3UEFBUyxpQ0FBdUIsTUFBTSxDQUFDLFNBQUUsZUFBQSx3QkFBd0IsQ0FBQSxJQUFDO0lBSXBFLGlCQUFZLEVBQUEsRUFBQTs7OztJQWhCVixlQUF5QjtJQUF6Qiw4Q0FBeUIsMkRBQUE7SUFTekIsZUFBMkI7SUFBM0IsZ0RBQTJCLDZEQUFBOzs7O0lBcEN2Qyx3Q0FBb0g7SUFBbkMseUxBQVcsZUFBQSx3QkFBaUIsSUFBSSxDQUFDLENBQUEsSUFBQztJ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QUFnSDtRQUNoSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVDLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssZUFBZSxFQUFFO2dCQUM3QyxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswR0EvVVUsNkJBQTZCO2dGQUE3Qiw2QkFBNkI7dUJBQzdCLGtCQUFrQjs7Ozs7UUN6RC9CLDZGQTBEYTs7UUExRFMsaUNBQVk7O3VGRHdEckIsNkJBQTZCO2NBSnpDLFNBQVM7MkJBQ0UseUJBQXlCOzRGQUlKLE9BQU87a0JBQXJDLFNBQVM7bUJBQUMsa0JBQWtCO1lBRVQsT0FBTztrQkFBMUIsS0FBSzttQkFBQyxXQUFXO1lBRUMsTUFBTTtrQkFBeEIsS0FBSzttQkFBQyxVQUFVO1lBRVcsYUFBYTtrQkFBeEMsS0FBSzttQkFBQyxtQkFBbUI7WUFFZ0IsMEJBQTBCO2tCQUFuRSxLQUFLO21CQUFDLGlDQUFpQztZQUVKLG9CQUFvQjtrQkFBdkQsTUFBTTttQkFBQywwQkFBMEI7WUFJRSxvQkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBRUwsY0FBYztrQkFBMUMsTUFBTTttQkFBQyxtQkFBbUI7WUFjQyxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0NoZWNrYm94R3JvdXBPcHRpb24gfSBmcm9tICcuLi8uLi9wby1maWVsZC9wby1jaGVja2JveC1ncm91cC9pbnRlcmZhY2VzL3BvLWNoZWNrYm94LWdyb3VwLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Qb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG8tcG9wb3Zlci9wby1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5cbmNvbnN0IFBvVGFibGVDb2x1bW5NYW5hZ2VyTWF4Q29sdW1uc0RlZmF1bHQgPSA5OTk5OTtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnQ29sdW1ucyBtYW5hZ2VyJyxcbiAgICByZXN0b3JlRGVmYXVsdDogJ1Jlc3RvcmUgZGVmYXVsdCcsXG4gICAgdXA6ICd1cCcsXG4gICAgZG93bjogJ2Rvd24nXG4gIH0sXG4gIGVzOiB7XG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbnRlIGRlIGNvbHVtbmEnLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAnUmVzdGF1cmFyIHBvciBkZWZlY3RvJyxcbiAgICB1cDogJ2FycmliYScsXG4gICAgZG93bjogJ2FiYWpvJ1xuICB9LFxuICBwdDoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcycsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICdSZXN0YXVyYXIgcGFkcsOjbycsXG4gICAgdXA6ICdhY2ltYScsXG4gICAgZG93bjogJ2FiYWl4bydcbiAgfSxcbiAgcnU6IHtcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAn0YHQsdGA0L7RgSDQvdCw0YHRgtGA0L7QtdC6JyxcbiAgICB1cDogJ9Cy0LLQtdGA0YUnLFxuICAgIGRvd246ICfQstC90LjQtydcbiAgfVxufTtcblxudHlwZSBEaXJlY3Rpb24gPSAndXAnIHwgJ2Rvd24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby10YWJsZS1jb2x1bW4tbWFuYWdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUG9UYWJsZUNvbHVtbk1hbmFnZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoUG9Qb3BvdmVyQ29tcG9uZW50KSBwb3BvdmVyOiBQb1BvcG92ZXJDb21wb25lbnQ7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBJbnB1dCgncC10YXJnZXQnKSB0YXJnZXQ6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMtZGVmYXVsdCcpIGNvbHVuc0RlZmF1bHQ6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuXG4gIEBJbnB1dCgncC1sYXN0LXZpc2libGUtY29sdW1ucy1zZWxlY3RlZCcpIGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBPdXRwdXQoJ3AtdmlzaWJsZS1jb2x1bW5zLWNoYW5nZScpIHZpc2libGVDb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQb1RhYmxlQ29sdW1uPj4oKTtcblxuICAvLyBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAvLyBPIHBvLXRhYmxlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgdmlzw612ZWlzIGF0dWFsaXphZGFzLiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIEBPdXRwdXQoJ3AtaW5pdGlhbC1jb2x1bW5zJykgaW5pdGlhbENvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFN0cmluZz4+KCk7XG5cbiAgbGl0ZXJhbHM7XG4gIGNvbHVtbnNPcHRpb25zOiBBcnJheTxQb0NoZWNrYm94R3JvdXBPcHRpb24+ID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGNvbHVtblVwZGF0ZTtcblxuICBwcml2YXRlIF9tYXhDb2x1bW5zOiBudW1iZXIgPSBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0O1xuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlc3RvcmVEZWZhdWx0RXZlbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRWYWx1ZTogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBtaW5Db2x1bW5zOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgncC1tYXgtY29sdW1ucycpIHNldCBtYXhDb2x1bW5zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhDb2x1bW5zID0gY29udmVydFRvSW50KHZhbHVlLCBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0KTtcbiAgfVxuXG4gIGdldCBtYXhDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhDb2x1bW5zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1RhYmxlQ29sdW1uTWFuYWdlckxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHsgY29sdW1ucywgbWF4Q29sdW1ucywgdGFyZ2V0IH0gPSBjaGFuZ2VzO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpZiAobWF4Q29sdW1ucykge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXModGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gYXF1aSBjaGVnYW0gb3MgZXZlbnRvcyBkbyBjaGVja2JveCBlIGRvIGNsb3NlIGRvIHBvcG92ZXIgcXVlIHRhbWLDqW0gw6kgZGlzcGFyYWRvIG5vIHJlc2l6ZVxuICBjaGVja0NoYW5nZXMoZXZlbnQ6IEFycmF5PHN0cmluZz4gPSBbXSwgZW1pdDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy52ZXJpZnlUb0VtaXRDaGFuZ2UoZXZlbnQpO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIC8vIGNvbnRyb2xhIGVtaXNzw7VlcyBwYXJhIG8gZGV2XG4gICAgICB0aGlzLnZlcmlmeVRvRW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZSgpIHtcbiAgICB0aGlzLnJlc3RvcmVEZWZhdWx0RXZlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmRlZmF1bHRDb2x1bW5zKTtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zLmVtaXQodGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVuc0RlZmF1bHQpKTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyhkZWZhdWx0Q29sdW1ucywgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50KTtcbiAgfVxuXG4gIGNoYW5nZVBvc2l0aW9uKG9wdGlvbiwgZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICBjb25zdCBpbmRleENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoZWwgPT4gZWwucHJvcGVydHkgPT09IG9wdGlvbi52YWx1ZSk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gWy4uLnRoaXMuY29sdW1uc107XG5cbiAgICBjb25zdCBoYXNEaXNhYmxlZDogYm9vbGVhbiA9IHRoaXMudmVyaWZ5QXJyb3dEaXNhYmxlZChvcHRpb24sIGRpcmVjdGlvbik7XG5cbiAgICB0aGlzLmNoYW5nZVBvc2l0aW9uQ29sdW1uKG5ld0NvbHVtbiwgaW5kZXhDb2x1bW4sIGRpcmVjdGlvbiwgaGFzRGlzYWJsZWQpO1xuICAgIHRoaXMuY29sdW1ucyA9IG5ld0NvbHVtbjtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIHZlcmlmeUFycm93RGlzYWJsZWQob3B0aW9uLCBkaXJlY3Rpb246IERpcmVjdGlvbikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChlbCA9PiBlbC5wcm9wZXJ0eSA9PT0gb3B0aW9uLnZhbHVlKTtcbiAgICBjb25zdCBleGlzdHNEZXRhaWwgPSB0aGlzLmNvbHVtbnMuc29tZShmdW5jdGlvbiAoZWwpIHtcbiAgICAgIHJldHVybiBlbC5wcm9wZXJ0eSA9PT0gJ2RldGFpbCc7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWVTdWJ0cmFjdGlvbiA9IGV4aXN0c0RldGFpbCA/IDIgOiAxO1xuXG4gICAgaWYgKGluZGV4ID09PSAwICYmIGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSB0aGlzLmNvbHVtbnMubGVuZ3RoIC0gdmFsdWVTdWJ0cmFjdGlvbiAmJiBkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VQb3NpdGlvbkNvbHVtbihhcnJheTogQXJyYXk8UG9UYWJsZUNvbHVtbj4sIGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogRGlyZWN0aW9uLCBoYXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmICghaGFzRGlzYWJsZWQpIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBhcnJheS5zcGxpY2UoaW5kZXggLSAxLCAxKVswXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdkb3duJykge1xuICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDAsIGFycmF5LnNwbGljZShpbmRleCArIDEsIDEpWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRvRW1pdENoYW5nZShldmVudDogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uZXZlbnRdO1xuICAgIGlmIChuZXdDb2x1bW5zLmxlbmd0aCA+PSAxICYmIHRoaXMuYWxsb3dzQ2hhbmdlVmlzaWJsZUNvbHVtbnMoKSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlc1RvU2VsZWN0ZWRDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgIH1cbiAgICAvLyBEZXNhYmlsaXRhIHVsdGltbyBjaGVja2JveCBhdGl2b1xuICAgIGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY29sdW1uc09wdGlvbnMgPSB0aGlzLm1hcFRhYmxlQ29sdW1uc1RvQ2hlY2tib3hPcHRpb25zKHRoaXMuY29sdW1uVXBkYXRlKTtcbiAgICAgIHRoaXMuY29sdW1uc09wdGlvbnMgPSB0aGlzLmRpc2FibGVkTGFzdENvbHVtbihjb2x1bW5zT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlc1RvU2VsZWN0ZWRDb2x1bW5zKG5ld0NvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gWy4uLm5ld0NvbHVtbnNdO1xuICAgIGNvbnN0IHZpc2libGVUYWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVUYWJsZUNvbHVtbnModGhpcy52aXNpYmxlQ29sdW1ucyk7XG5cbiAgICAvLyBlbWl0ZSBhbHRlcmHDp8OjbyBuYXMgY29sdW5hcyBzZWxlY2lvbmFkYXMsIHBvcsOpbSBuw6NvIGVtaXRlIHBhcmEgbyBkZXYuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc0NoYW5nZS5lbWl0KHZpc2libGVUYWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd3NDaGFuZ2VWaXNpYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICBjb25zdCB2aXNpYmxlVGFibGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKHRoaXMudmlzaWJsZUNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KHZpc2libGVUYWJsZUNvbHVtbnMpICE9PSB0aGlzLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlUb0VtaXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICBpZiAodGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50KSB7XG4gICAgICAvLyB2ZWlvIGRvIHJlc3RvcmUgZGVmYXVsdFxuICAgICAgdGhpcy52ZXJpZnlSZXN0b3JlVmFsdWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvaSBkaXNwYXJhZG8gbm8gY2xvc2UgcG9wb3ZlcjtcbiAgICAgIHRoaXMudmVyaWZ5T25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5UmVzdG9yZVZhbHVlcygpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFsuLi50aGlzLmRlZmF1bHRDb2x1bW5zXTtcbiAgICBjb25zdCBkZWZhdWx0VmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKGRlZmF1bHRDb2x1bW5zKTtcblxuICAgIGlmICh0aGlzLmFsbG93c0NoYW5nZVNlbGVjdGVkQ29sdW1ucyhkZWZhdWx0VmlzaWJsZUNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodGhpcy5kZWZhdWx0Q29sdW1ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFsbG93c0NoYW5nZVNlbGVjdGVkQ29sdW1ucyhkZWZhdWx0VmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcblxuICAgIHJldHVybiAhdGhpcy5pc0VxdWFsQXJyYXlzKGRlZmF1bHRWaXNpYmxlQ29sdW1ucywgdmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlPbkNsb3NlKCkge1xuICAgIGlmICh0aGlzLmFsbG93c0VtaXNzaW9uKCkpIHtcbiAgICAgIHRoaXMuZW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gWy4uLnRoaXMudmlzaWJsZUNvbHVtbnNdO1xuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh0aGlzLnZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dzRW1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXBkYXRlZFZpc2libGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucyA/IFsuLi50aGlzLnZpc2libGVDb2x1bW5zXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RFbWl0dGVkVmFsdWUgPSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPyBbLi4udGhpcy5sYXN0RW1pdHRlZFZhbHVlXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkID0gdGhpcy5sYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZCA/IFsuLi50aGlzLmxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMobGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNVcGRhdGUodXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKSB8fFxuICAgICAgdGhpcy5pc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnMsIGxhc3RWaXNpYmxlQ29sdW1ucylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RWaXNpYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0VmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VwZGF0ZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RFbWl0dGVkVmFsdWU6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFcXVhbEFycmF5cyhmaXJzdDogQXJyYXk8c3RyaW5nPiwgc2Vjb25kOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb25lID0gZmlyc3QgPyBbLi4uZmlyc3RdIDogW107XG4gICAgY29uc3QgdHdvID0gc2Vjb25kID8gWy4uLnNlY29uZF0gOiBbXTtcbiAgICBjb25zdCBmaXJzdFNvcnQgPSBvbmUuc2xpY2UoKTtcbiAgICBjb25zdCBzZWNvbmRTb3J0ID0gdHdvLnNsaWNlKCk7XG4gICAgY29uc3QgZmlyc3RTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmaXJzdFNvcnQpO1xuICAgIGNvbnN0IHNlY29uZFN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNlY29uZFNvcnQpO1xuXG4gICAgcmV0dXJuIGZpcnN0U3RyaW5nID09PSBzZWNvbmRTdHJpbmc7XG4gIH1cblxuICAvLyBkZXNhYmlsaXRhcsOhIGFzIGNvbHVuYXMsIHF1ZSBuw6NvIGVzdGl2ZXJlbSBzZWxlY2lvbmFkYXMsIGFww7NzIGV4ZWRlciBvIG51bWVybyBtYXhpbW8gZGUgY29sdW5hcy5cbiAgcHJpdmF0ZSBkaXNhYmxlQ29sdW1uc09wdGlvbnMoY29sdW1uczogQXJyYXk8UG9DaGVja2JveEdyb3VwT3B0aW9uPiA9IFtdKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlQ29sdW1uKGNvbHVtbi52YWx1ZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoY29sdW1uLnByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKiBSZXRvcm5hIHVtIEFycmF5IGRlIGNvbHVtbi5wcm9wZXJ0eSBkYXMgY29sdW5hcyBxdWUgc8OjbyB2aXNpdmVpcy4gKi9cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPik6IEFycmF5PHN0cmluZz4ge1xuICAgIGxldCB2aXNpYmxlQ29sdW1ucyA9IFtdO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVDb2x1bW4oY29sdW1uLCB2aXNpYmxlQ29sdW1ucykpIHtcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMgPSBbLi4udmlzaWJsZUNvbHVtbnMsIGNvbHVtbi5wcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGlzVmlzaWJsZUNvbHVtbihjb2x1bW46IFBvVGFibGVDb2x1bW4sIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSAmJiB2aXNpYmxlQ29sdW1ucy5sZW5ndGggPCB0aGlzLm1heENvbHVtbnMgJiYgY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnO1xuICB9XG5cbiAgLyoqIFJldG9ybmEgdW0gQXJyYXkgUG9UYWJsZUNvbHVtbiBhIHBhcnRpciBkYXMgY29sdW5hcyB2aXNpdmVpcyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLiAqL1xuICBwcml2YXRlIGdldFZpc2libGVUYWJsZUNvbHVtbnModmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxQb1RhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA/IFsuLi50aGlzLmNvbHVtbnNdIDogW107XG5cbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICB2aXNpYmxlOiB2aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJ1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyICYmICF0aGlzLnBvcG92ZXIuaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID49IHRoaXMubWF4Q29sdW1ucyA/ICF0aGlzLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKHByb3BlcnR5KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gW107XG5cbiAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlICE9PSAnZGV0YWlsJykge1xuICAgICAgICBjb2x1bW5zT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLnByb3BlcnR5LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uKSxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVDb2x1bW4oY29sdW1uLnByb3BlcnR5KSxcbiAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4udmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZWRMYXN0Q29sdW1uKGNvbHVtbnM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkaXNhYmxlZDogY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnICYmIGNvbHVtbi52aXNpYmxlID8gdHJ1ZSA6IGZhbHNlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoY29sdW1uczogU2ltcGxlQ2hhbmdlKSB7XG4gICAgY29uc3QgeyBjdXJyZW50VmFsdWUgPSBbXSwgcHJldmlvdXNWYWx1ZSA9IFtdIH0gPSBjb2x1bW5zO1xuICAgIHRoaXMuY29sdW1uVXBkYXRlID0gY29sdW1ucy5jdXJyZW50VmFsdWU7XG5cbiAgICAvLyBhdHVhbGl6YXJhIG8gZGVmYXVsdENvbHVtbnMsIHF1YW5kbyBmb3IgYSBwcmltZWlyYSB2ZXogb3UgcXVhbmRvIG8gZGVmYXVsdENvbHVtbnMgZm9yIGRpZmVyZW50ZSBkbyBjdXJyZW50VmFsdWVcbiAgICBpZiAoIXRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgJiYgdGhpcy5zdHJpbmdpZnkodGhpcy5kZWZhdWx0Q29sdW1ucykgIT09IHRoaXMuc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvbHVtbnMgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZmljYSBzZSBvIHZhbG9yIGFudGVyaW9yIMOpIGRpZmVyZW50ZSBkbyBhdHVhbCBwYXJhIGF0dWFsaXphciBhcyBjb2x1bW5zT3B0aW9ucyBhcGVuYXMgcXVhbmRvIGZvciBuZWNlc3NhcmlvXG4gICAgaWYgKHRoaXMuc3RyaW5naWZ5KHByZXZpb3VzVmFsdWUpICE9PSB0aGlzLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcyhjdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzKGN1cnJlbnRWYWx1ZTogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoY3VycmVudFZhbHVlKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gWy4uLnZpc2libGVDb2x1bW5zXTtcblxuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gdGhpcy5tYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjdXJyZW50VmFsdWUpO1xuICAgIHRoaXMuY29sdW1uc09wdGlvbnMgPSB0aGlzLmRpc2FibGVDb2x1bW5zT3B0aW9ucyhjb2x1bW5zT3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyh2aXNpYmxlQ29sdW1ucywgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPikge1xuICAgIC8vIG7Do28gZmF6IG8gc3RyaW5naWZ5IGRhIHByb3ByaWVkYWRlIGljb24gZSBzZWFyY2hTZXJ2aWNlLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbHVtbnMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicgJiYga2V5ICE9PSAnc2VhcmNoU2VydmljZScpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tcG9wb3ZlciAjcG9wb3ZlciAqbmdJZj1cInRhcmdldFwiIFtwLXRhcmdldF09XCJ0YXJnZXRcIiBwLXBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIiAocC1jbG9zZSk9XCJjaGVja0NoYW5nZXMoW10sIHRydWUpXCI+XG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyLXRpdGxlXCI+e3sgbGl0ZXJhbHMuY29sdW1uc01hbmFnZXIgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2VcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2UtYnV0dG9uIHBvLWNsaWNrYWJsZSBwby1pY29uIHBvLWljb24tY2xvc2VcIlxuICAgICAgICAoY2xpY2spPVwicG9wb3Zlci5jbG9zZSgpXCJcbiAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWJvZHlcIj5cbiAgICA8cG8tY2hlY2tib3gtZ3JvdXBcbiAgICAgIGNsYXNzPVwicG8tY2hlY2tib3gtZ3JvdXAtY29sdW1uLW1hbmFnZXJcIlxuICAgICAgbmFtZT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgIFsobmdNb2RlbCldPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgcC1jb2x1bW5zPVwiMVwiXG4gICAgICBbcC1vcHRpb25zXT1cImNvbHVtbnNPcHRpb25zXCJcbiAgICAgIChwLWNoYW5nZSk9XCJjaGVja0NoYW5nZXMoJGV2ZW50LCBmYWxzZSlcIlxuICAgID5cbiAgICA8L3BvLWNoZWNrYm94LWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWNvbnRhaW5lci1hcnJvd3MtY29sdW1ucy1tYW5hZ2VyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uc09wdGlvbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWNvbnRhaW5lci1pY29ucy1hcnJvd3MtY29sdW1ucy1tYW5hZ2VyXCI+XG4gICAgICAgICAgPHBvLWJ1dHRvblxuICAgICAgICAgICAgW3AtdG9vbHRpcF09XCJsaXRlcmFscy51cFwiXG4gICAgICAgICAgICBwLXRvb2x0aXAtcG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgIFtwLWRpc2FibGVkXT1cInZlcmlmeUFycm93RGlzYWJsZWQob3B0aW9uLCAndXAnKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUG9zaXRpb24ob3B0aW9uLCAndXAnKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIHAta2luZD1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgIHAtaWNvbj1cInBvLWljb24gcG8taWNvbi1hcnJvdy11cFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcG8tYnV0dG9uPlxuICAgICAgICAgIDxwby1idXR0b25cbiAgICAgICAgICAgIFtwLXRvb2x0aXBdPVwibGl0ZXJhbHMuZG93blwiXG4gICAgICAgICAgICBwLXRvb2x0aXAtcG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgW3AtZGlzYWJsZWRdPVwidmVyaWZ5QXJyb3dEaXNhYmxlZChvcHRpb24sICdkb3duJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBvc2l0aW9uKG9wdGlvbiwgJ2Rvd24nKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIHAta2luZD1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgIHAtaWNvbj1cInBvLWljb24gcG8taWNvbi1hcnJvdy1kb3duXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9wby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1mb290ZXJcIj5cbiAgICA8cG8tYnV0dG9uXG4gICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWZvb3Rlci1yZXN0b3JlXCJcbiAgICAgIHAta2luZD1cInRlcnRpYXJ5XCJcbiAgICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLnJlc3RvcmVEZWZhdWx0XCJcbiAgICAgIChwLWNsaWNrKT1cInJlc3RvcmUoKVwiXG4gICAgPlxuICAgIDwvcG8tYnV0dG9uPlxuICA8L2Rpdj5cbjwvcG8tcG9wb3Zlcj5cbiJdfQ==