@quadrel-enterprise-ui/framework 18.31.4 → 18.32.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 (36) hide show
  1. package/esm2022/lib/comments/add-comment/add-comment-dialog.component.mjs +3 -4
  2. package/esm2022/lib/forms/checkbox-chips/checkbox-chips.component.mjs +3 -3
  3. package/esm2022/lib/forms/checkboxes/checkboxes.component.mjs +3 -3
  4. package/esm2022/lib/forms/datepicker/datepicker.component.mjs +3 -3
  5. package/esm2022/lib/forms/dropdown/dropdown.component.mjs +3 -3
  6. package/esm2022/lib/forms/file-upload/file-upload.component.mjs +3 -3
  7. package/esm2022/lib/forms/input/input.component.mjs +3 -3
  8. package/esm2022/lib/forms/multi-input/multi-input.component.mjs +3 -3
  9. package/esm2022/lib/forms/pin-code/pin-code.component.mjs +3 -3
  10. package/esm2022/lib/forms/radio-buttons/radio-buttons.component.mjs +3 -3
  11. package/esm2022/lib/forms/richtext/richtext.component.mjs +3 -3
  12. package/esm2022/lib/forms/switches/switches.component.mjs +3 -3
  13. package/esm2022/lib/forms/textarea/textarea.component.mjs +3 -3
  14. package/esm2022/lib/page/object-header/page-object-header.component.mjs +8 -4
  15. package/esm2022/lib/page/page.component.mjs +8 -2
  16. package/esm2022/lib/page/shared/services/form-group-manager.service.mjs +59 -14
  17. package/esm2022/lib/page/shared/services/page-submit-action.service.mjs +4 -2
  18. package/esm2022/lib/quick-edit/quick-edit.component.mjs +2 -2
  19. package/esm2022/lib/table/store/table.reducer.mjs +1 -1
  20. package/fesm2022/quadrel-enterprise-ui-framework.mjs +103 -47
  21. package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
  22. package/lib/comments/add-comment/add-comment-dialog.component.d.ts +0 -4
  23. package/lib/comments/add-comment/add-comment-dialog.component.d.ts.map +1 -1
  24. package/lib/page/object-header/page-object-header.component.d.ts.map +1 -1
  25. package/lib/page/page.component.d.ts +1 -0
  26. package/lib/page/page.component.d.ts.map +1 -1
  27. package/lib/page/shared/services/form-group-manager.service.d.ts +10 -0
  28. package/lib/page/shared/services/form-group-manager.service.d.ts.map +1 -1
  29. package/lib/page/shared/services/page-submit-action.service.d.ts +1 -0
  30. package/lib/page/shared/services/page-submit-action.service.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/esm2022/index.mjs +0 -74
  33. package/esm2022/lib/table/__mocks__/mock-secondary-actions.service.mjs +0 -26
  34. package/index.d.ts.map +0 -1
  35. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts +0 -14
  36. package/lib/table/__mocks__/mock-secondary-actions.service.d.ts.map +0 -1
@@ -434,7 +434,7 @@ export class QdMultiInputComponent {
434
434
  },
435
435
  QdMultiInputService,
436
436
  QdFormsActionEmitterService
437
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }, { propertyName: "multiInputMenu", first: true, predicate: i0.forwardRef(() => QdMultiInputMenuComponent), descendants: true }, { propertyName: "popoverOnClickDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }, { propertyName: "errorTooltips", predicate: ["errorTooltips"], descendants: true }, { propertyName: "dropdownOptions", predicate: ["dropdownOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"formArray\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div\n *ngIf=\"!readonly && !viewonly\"\n class=\"qd-multi-input__input-chip-box\"\n (click)=\"focus()\"\n (opened)=\"open = true\"\n (closed)=\"open = false\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverDisabled]=\"options.length === 0\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverBackgroundColor]=\"'transparent'\"\n [positionStrategy]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: -2\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n weight: 0.8,\n offsetX: -2\n }\n ]\"\n>\n <div [ngClass]=\"hasItems() ? 'qd-multi-input__chip-margin' : ''\">\n <qd-multi-input-chip\n *ngFor=\"let element of getIterableElements(); let index = index\"\n [close]=\"!disabled && !readonly && !viewonly\"\n [itemControl]=\"formArray ? element : undefined\"\n [value]=\"formArray ? undefined : getTranslation(element)\"\n (closeClickEmitter)=\"close(index)\"\n (click)=\"handleChipClick($event)\"\n >\n </qd-multi-input-chip>\n </div>\n\n <div class=\"qd-multi-input__wrapper\">\n <input\n #input\n type=\"text\"\n class=\"qd-multi-input__box\"\n *ngIf=\"!readonly && !viewonly\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"filterOptions\"\n (ngModelChange)=\"changeValue()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"hasFocus = true\"\n (blur)=\"handleBlur()\"\n [ngClass]=\"open ? 'qd-multi-input__box--open' : ''\"\n [attr.data-test-id]=\"testId + '-input'\"\n />\n\n <div class=\"qd-multi-input__box qd-multi-input__box--readonly\" *ngIf=\"readonly && !hasItems()\">&nbsp;</div>\n\n <div class=\"qd-multi-input__box qd-multi-input__box--viewonly\" *ngIf=\"viewonly && !hasItems()\">&nbsp;</div>\n\n <ng-template #menu>\n <qd-multi-input-menu\n [optionsListForView]=\"optionsListForView\"\n [id]=\"id\"\n [data-test-id]=\"testId\"\n (itemClick)=\"handleClick($event)\"\n ></qd-multi-input-menu>\n </ng-template>\n </div>\n</div>\n\n<ng-container *ngIf=\"config && !readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"formArray\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"getValues()\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"getValues()\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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: "directive", type: i7.QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: i8.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i9.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i10.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i11.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: i12.QdMultiInputChipComponent, selector: "qd-multi-input-chip", inputs: ["itemControl", "value", "close", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: i13.QdMultiInputMenuComponent, selector: "qd-multi-input-menu", inputs: ["id", "optionsListForView", "data-test-id"], outputs: ["itemClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
437
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }, { propertyName: "multiInputMenu", first: true, predicate: i0.forwardRef(() => QdMultiInputMenuComponent), descendants: true }, { propertyName: "popoverOnClickDirective", first: true, predicate: QdPopoverOnClickDirective, descendants: true }, { propertyName: "errorTooltips", predicate: ["errorTooltips"], descendants: true }, { propertyName: "dropdownOptions", predicate: ["dropdownOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"formArray\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div\n *ngIf=\"!readonly && !viewonly\"\n class=\"qd-multi-input__input-chip-box\"\n (click)=\"focus()\"\n (opened)=\"open = true\"\n (closed)=\"open = false\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverDisabled]=\"options.length === 0\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverBackgroundColor]=\"'transparent'\"\n [positionStrategy]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: -2\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n weight: 0.8,\n offsetX: -2\n }\n ]\"\n>\n <div [ngClass]=\"hasItems() ? 'qd-multi-input__chip-margin' : ''\">\n <qd-multi-input-chip\n *ngFor=\"let element of getIterableElements(); let index = index\"\n [close]=\"!disabled && !readonly && !viewonly\"\n [itemControl]=\"formArray ? element : undefined\"\n [value]=\"formArray ? undefined : getTranslation(element)\"\n (closeClickEmitter)=\"close(index)\"\n (click)=\"handleChipClick($event)\"\n >\n </qd-multi-input-chip>\n </div>\n\n <div class=\"qd-multi-input__wrapper\">\n <input\n #input\n type=\"text\"\n class=\"qd-multi-input__box\"\n *ngIf=\"!readonly && !viewonly\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"filterOptions\"\n (ngModelChange)=\"changeValue()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"hasFocus = true\"\n (blur)=\"handleBlur()\"\n [ngClass]=\"open ? 'qd-multi-input__box--open' : ''\"\n [attr.data-test-id]=\"testId + '-input'\"\n />\n\n <div class=\"qd-multi-input__box qd-multi-input__box--readonly\" *ngIf=\"readonly && !hasItems()\">&nbsp;</div>\n\n <div class=\"qd-multi-input__box qd-multi-input__box--viewonly\" *ngIf=\"viewonly && !hasItems()\">&nbsp;</div>\n\n <ng-template #menu>\n <qd-multi-input-menu\n [optionsListForView]=\"optionsListForView\"\n [id]=\"id\"\n [data-test-id]=\"testId\"\n (itemClick)=\"handleClick($event)\"\n ></qd-multi-input-menu>\n </ng-template>\n </div>\n</div>\n\n<qd-form-hint\n *ngIf=\"config && !readonly && !viewonly && (hasHint || hasError)\"\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"formArray\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"getValues()\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"getValues()\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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: "directive", type: i7.QdPopoverOnClickDirective, selector: "[qdPopoverOnClick]", inputs: ["qdPopoverOnClick", "positionStrategy", "qdPopoverCloseStrategy", "qdPopoverDisabled", "qdPopoverStopPropagation", "qdPopoverBackgroundColor", "qdPopoverMaxHeight", "qdPopoverMinWidth", "qdPopoverMaxWidth", "qdPopoverAutoSize", "qdPopoverEnableKeyControl"], outputs: ["opened", "closed"], exportAs: ["qdPopoverOnClick"] }, { kind: "component", type: i8.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i9.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i10.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i11.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }, { kind: "component", type: i12.QdMultiInputChipComponent, selector: "qd-multi-input-chip", inputs: ["itemControl", "value", "close", "data-test-id"], outputs: ["closeClickEmitter"] }, { kind: "component", type: i13.QdMultiInputMenuComponent, selector: "qd-multi-input-menu", inputs: ["id", "optionsListForView", "data-test-id"], outputs: ["itemClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
438
438
  }
439
439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdMultiInputComponent, decorators: [{
440
440
  type: Component,
@@ -446,7 +446,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
446
446
  },
447
447
  QdMultiInputService,
448
448
  QdFormsActionEmitterService
449
- ], host: { class: 'qd-multi-input' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"formArray\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div\n *ngIf=\"!readonly && !viewonly\"\n class=\"qd-multi-input__input-chip-box\"\n (click)=\"focus()\"\n (opened)=\"open = true\"\n (closed)=\"open = false\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverDisabled]=\"options.length === 0\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverBackgroundColor]=\"'transparent'\"\n [positionStrategy]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: -2\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n weight: 0.8,\n offsetX: -2\n }\n ]\"\n>\n <div [ngClass]=\"hasItems() ? 'qd-multi-input__chip-margin' : ''\">\n <qd-multi-input-chip\n *ngFor=\"let element of getIterableElements(); let index = index\"\n [close]=\"!disabled && !readonly && !viewonly\"\n [itemControl]=\"formArray ? element : undefined\"\n [value]=\"formArray ? undefined : getTranslation(element)\"\n (closeClickEmitter)=\"close(index)\"\n (click)=\"handleChipClick($event)\"\n >\n </qd-multi-input-chip>\n </div>\n\n <div class=\"qd-multi-input__wrapper\">\n <input\n #input\n type=\"text\"\n class=\"qd-multi-input__box\"\n *ngIf=\"!readonly && !viewonly\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"filterOptions\"\n (ngModelChange)=\"changeValue()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"hasFocus = true\"\n (blur)=\"handleBlur()\"\n [ngClass]=\"open ? 'qd-multi-input__box--open' : ''\"\n [attr.data-test-id]=\"testId + '-input'\"\n />\n\n <div class=\"qd-multi-input__box qd-multi-input__box--readonly\" *ngIf=\"readonly && !hasItems()\">&nbsp;</div>\n\n <div class=\"qd-multi-input__box qd-multi-input__box--viewonly\" *ngIf=\"viewonly && !hasItems()\">&nbsp;</div>\n\n <ng-template #menu>\n <qd-multi-input-menu\n [optionsListForView]=\"optionsListForView\"\n [id]=\"id\"\n [data-test-id]=\"testId\"\n (itemClick)=\"handleClick($event)\"\n ></qd-multi-input-menu>\n </ng-template>\n </div>\n</div>\n\n<ng-container *ngIf=\"config && !readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"formArray\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"getValues()\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"getValues()\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}\n"] }]
449
+ ], host: { class: 'qd-multi-input' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"formArray\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<div\n *ngIf=\"!readonly && !viewonly\"\n class=\"qd-multi-input__input-chip-box\"\n (click)=\"focus()\"\n (opened)=\"open = true\"\n (closed)=\"open = false\"\n [qdPopoverOnClick]=\"menu\"\n [qdPopoverCloseStrategy]=\"'onOutsideClick'\"\n [qdPopoverDisabled]=\"options.length === 0\"\n [qdPopoverAutoSize]=\"{ width: true }\"\n [qdPopoverBackgroundColor]=\"'transparent'\"\n [positionStrategy]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: -2\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n weight: 0.8,\n offsetX: -2\n }\n ]\"\n>\n <div [ngClass]=\"hasItems() ? 'qd-multi-input__chip-margin' : ''\">\n <qd-multi-input-chip\n *ngFor=\"let element of getIterableElements(); let index = index\"\n [close]=\"!disabled && !readonly && !viewonly\"\n [itemControl]=\"formArray ? element : undefined\"\n [value]=\"formArray ? undefined : getTranslation(element)\"\n (closeClickEmitter)=\"close(index)\"\n (click)=\"handleChipClick($event)\"\n >\n </qd-multi-input-chip>\n </div>\n\n <div class=\"qd-multi-input__wrapper\">\n <input\n #input\n type=\"text\"\n class=\"qd-multi-input__box\"\n *ngIf=\"!readonly && !viewonly\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"filterOptions\"\n (ngModelChange)=\"changeValue()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"hasFocus = true\"\n (blur)=\"handleBlur()\"\n [ngClass]=\"open ? 'qd-multi-input__box--open' : ''\"\n [attr.data-test-id]=\"testId + '-input'\"\n />\n\n <div class=\"qd-multi-input__box qd-multi-input__box--readonly\" *ngIf=\"readonly && !hasItems()\">&nbsp;</div>\n\n <div class=\"qd-multi-input__box qd-multi-input__box--viewonly\" *ngIf=\"viewonly && !hasItems()\">&nbsp;</div>\n\n <ng-template #menu>\n <qd-multi-input-menu\n [optionsListForView]=\"optionsListForView\"\n [id]=\"id\"\n [data-test-id]=\"testId\"\n (itemClick)=\"handleClick($event)\"\n ></qd-multi-input-menu>\n </ng-template>\n </div>\n</div>\n\n<qd-form-hint\n *ngIf=\"config && !readonly && !viewonly && (hasHint || hasError)\"\n [hint]=\"hasHint ? config.hint.i18n : ''\"\n [control]=\"formArray\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"getValues()\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"getValues()\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;margin-bottom:.75rem}.qd-multi-input__input-chip-box{margin-bottom:.5rem;background-color:#fff;outline:solid .0625rem rgb(180,180,180)}:host.qd-multi-input-readonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-viewonly .qd-multi-input__input-chip-box{background:none!important;color:#979797;outline:none!important}:host.qd-multi-input-disabled .qd-multi-input__input-chip-box{background:#f5f5f5;color:#979797;outline:.0625rem solid rgb(180,180,180)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box{outline:.125rem solid rgb(0,102,153)}:host.qd-multi-input-focus .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-focus .qd-multi-input__input-chip-box:active{outline:.125rem solid rgb(0,102,153)}.qd-multi-input__input-chip-box:active,.qd-multi-input__input-chip-box:hover{outline:.125rem solid rgb(23,23,23)}.qd-multi-input__chip-margin{padding:0 .3125rem .3125rem 0}:host.qd-multi-input-readonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}:host.qd-multi-input-viewonly .qd-multi-input__chip-margin{padding:0 0 .3125rem}.qd-multi-input__wrapper{position:relative}.qd-multi-input__wrapper .qd-multi-input__box{display:flex;overflow:hidden;width:100%;height:2.25rem;justify-content:space-between;padding:0 .75rem;border:.0625rem solid rgb(255,255,255);background:#fff;font-size:.875rem;font-weight:400;line-height:2.25rem;text-overflow:ellipsis;white-space:nowrap}.qd-multi-input__wrapper .qd-multi-input__box:focus,.qd-multi-input__wrapper .qd-multi-input__box:active,.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{padding:0 .8125rem;border:none;color:#171717;line-height:2.125rem;outline:none}.qd-multi-input__wrapper .qd-multi-input__box:hover:after{border-top-color:#b4b4b4}.qd-multi-input__wrapper .qd-multi-input__box.qd-multi-input__box--open{border-color:#069}:host.qd-multi-input-disabled .qd-multi-input__wrapper .qd-multi-input__box{border:none;background:#f5f5f5;color:#979797}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-readonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box{height:inherit;padding:0;border:none;line-height:2.25rem}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:focus,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:hover,:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:active{color:inherit}:host.qd-multi-input-viewonly .qd-multi-input__wrapper .qd-multi-input__box:after{display:none}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly{color:#069;cursor:pointer}:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:hover,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:active,:host.qd-multi-input--readonly-action .qd-multi-input__box.qd-multi-input__box--readonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly{color:#069;cursor:pointer}:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:hover,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:active,:host.qd-multi-input--viewonly-action .qd-multi-input__box.qd-multi-input__box--viewonly:focus{color:#069;text-decoration:underline}:host.qd-multi-input-error .qd-multi-input__input-chip-box{outline:.0625rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box:focus,:host.qd-multi-input-error .qd-multi-input__input-chip-box:hover,:host.qd-multi-input-error .qd-multi-input__input-chip-box:active,:host.qd-multi-input-error .qd-multi-input__input-chip-box.qd-multi-input__box--open{outline:.125rem solid rgb(199,0,35)}:host.qd-multi-input-error .qd-multi-input__input-chip-box .qd-error-icon{color:#c70023}\n"] }]
450
450
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.QdMultiInputService }, { type: i0.ChangeDetectorRef }, { type: i2.QdFormsActionEmitterService }, { type: i3.QdFormArrayFactoryService }, { type: i4.ControlContainer, decorators: [{
451
451
  type: Optional
452
452
  }, {
@@ -537,4 +537,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
537
537
  type: HostListener,
538
538
  args: ['document:click', ['$event']]
539
539
  }] } });
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL211bHRpLWlucHV0L211bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9tdWx0aS1pbnB1dC9tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLElBQUksRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFLTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBR2hCLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2xCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0s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Vzt1QkFBQyw0QkFBNEI7Z0JBS3JDLFFBQVE7c0JBRlgsV0FBVzt1QkFBQyxxQkFBcUI7O3NCQUNqQyxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLRyxZQUFZO3NCQUF2RCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLXN0cmljdC1pZ25vcmVcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3QsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ0l0ZXJhYmxlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFVudHlwZWRGb3JtQ29udHJvbFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgUWRGb3JtTXVsdGlJbnB1dENvbmZpZ3VyYXRpb24sIFFkTXVsdGlJbnB1dE9wdGlvbiB9IGZyb20gJy4uL21vZGVsL2Zvcm1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1BcnJheSB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tYXJyYXknO1xuaW1wb3J0IHsgUWRGb3JtQXJyYXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tYXJyYXktZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldERpc2FibGVkLFxuICBnZXRIaW50QWN0aW9uLFxuICBnZXRMYWJlbCxcbiAgZ2V0TXVsdGlJbnB1dE9wdGlvbnMsXG4gIGdldFJlYWRvbmx5LFxuICBnZXRSZWFkb25seUFjdGlvbixcbiAgZ2V0Vmlld29ubHksXG4gIGdldFZpZXdvbmx5QWN0aW9uXG59IGZyb20gJy4uL3NoYXJlZC9oZWxwZXJzL2Zvcm1zLmhlbHBlcnMnO1xuaW1wb3J0IHsgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL2FjdGlvbi1lbWl0dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRNdWx0aUlucHV0U2VydmljZSB9IGZyb20gJy4vbXVsdGktaW5wdXQtc2VydmljZS9tdWx0aS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb3JlL3BvcG92ZXIvcG9wb3Zlci1vbi1jbGljay9wb3BvdmVyLW9uLWNsaWNrLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZE11bHRpSW5wdXRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS1pbnB1dC1tZW51L211bHRpLWlucHV0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5cbi8qKlxuICogVGhlICoqUWRNdWx0aUlucHV0KiogaXMgYSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBhIHVzZXIgaW50ZXJmYWNlIGZvciBlbnRlcmluZyBtdWx0aXBsZSBpbnB1dHMuPGJyIC8+XG4gKiBJdCBpcyBkZXNpZ25lZCB0byBlbmhhbmNlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgaW5wdXRzIGFuZCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyMqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgbXVsdGlJbnB1dDogbmV3IFFkRm9ybUFycmF5KClcbiAqIH0pO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgPHFkLW11bHRpLWlucHV0IFtmb3JtQXJyYXlOYW1lXT1cIm11bHRpSW5wdXRcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiAjIyMjKipVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmcqKlxuICogYGBgdHNcbiAqIHZhbHVlcztcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLW11bHRpLWlucHV0IFsodmFsdWVzKV09XCJ2YWx1ZXNcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtbXVsdGktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUWRNdWx0aUlucHV0U2VydmljZSxcbiAgICBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2VcbiAgXSxcbiAgaG9zdDogeyBjbGFzczogJ3FkLW11bHRpLWlucHV0JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBRZE11bHRpSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEhlcmUgYW4gaWQgY2FuIGJlIGFzc2lnbmVkLCB3aXRoIHdoaWNoIGEgdmFsdWUgY2FuIGJlIGxpbmtlZCB0byBhIGNvcnJlc3BvbmRpbmcgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKSBpZDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZm9ybSBpdGVtIHZhbHVlcywgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLW11bHRpLWlucHV0IFsodmFsdWVzKV09XCJ2YWx1ZXNcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWVzKHZhbHVlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gIH1cblxuICBnZXQgdmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqICogQGRlcHJlY2F0ZWRcbiAgICogVE9ETyByZW1vdmUgbG9naWMgZm9yIHN1cHBvcnQgb2YgW2Zvcm1Db250cm9sTmFtZV0gZGlyZWN0aXZlIGFuZCBGb3JtQ29udHJvbCB3aXRoIGFuZ3VsYXIgMTQgdXBkYXRlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZm9ybUNvbnRyb2xOYW1lKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1FELVVJIHwgUWRNdWx0aUlucHV0Q29tcG9uZW50IC0gUGxlYXNlIHVzZSB0aGUgTXVsdGlJbnB1dCB3aXRoIHRoZSBRZEZvcm1BcnJheSBmb3JtIGNvbnRyb2wgYW5kIHRoZSBbZm9ybUFycmF5TmFtZV0gZGlyZWN0aXZlISdcbiAgICApO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sTmFtZSA9IGZvcm1Db250cm9sTmFtZTtcbiAgfVxuXG4gIGdldCBmb3JtQ29udHJvbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2xOYW1lO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1BcnJheU5hbWUoZm9ybUFycmF5TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZm9ybUFycmF5TmFtZSA9IGZvcm1BcnJheU5hbWU7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXlOYW1lIHx8IHRoaXMuZm9ybUNvbnRyb2xOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgbGFiZWw6IHsgaTE4bjogJ215LWxhYmVsJyB9LFxuICAgKiAgIGhpbnQ6IHsgaTE4bjogJ215LWhpbnQnIH0sXG4gICAqICAgb3B0aW9uczogW1xuICAgKiAgICAgeyBpMThuOiAnaTE4bi5xZC5leGFtcGxlRm9ybUZpZWxkLmdvb2RzRGVjbGFyYXRpb24uaW1wb3J0JywgdmFsdWU6ICdpbXBvcnQnIH0sXG4gICAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5leHBvcnQnLCB2YWx1ZTogJ2V4cG9ydCcgfSxcbiAgICogICAgIHsgaTE4bjogJ2kxOG4ucWQuZXhhbXBsZUZvcm1GaWVsZC5nb29kc0RlY2xhcmF0aW9uLnRyYW5zaXQnLCB2YWx1ZTogJ3RyYW5zaXQnIH1cbiAgICogICBdXG4gICAqIH07XG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IFFkRm9ybU11bHRpSW5wdXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZCA9ICdtdWx0aS1pbnB1dCc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZhbHVlcyBjaGFuZ2UuIFJldHVybiB2YWx1ZXMgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWVzLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGhpbnQgaXMgY2xpY2tlZC90YXBwZWQuIGBoaW50QWN0aW9uYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tIaW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIGEgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gYSB2aWV3b25seSB2YWx1ZSBpcyBjbGlja2VkL3RhcHBlZC4gYGNsaWNrVmlld29ubHkgYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tWaWV3b25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0RmllbGQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBRZE11bHRpSW5wdXRNZW51Q29tcG9uZW50KSkgbXVsdGlJbnB1dE1lbnU6IFFkTXVsdGlJbnB1dE1lbnVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoUWRQb3BvdmVyT25DbGlja0RpcmVjdGl2ZSkgcG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmU6IFFkUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGRyZW4oJ2Vycm9yVG9vbHRpcHMnKSBlcnJvclRvb2x0aXBzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Ryb3Bkb3duT3B0aW9uJykgZHJvcGRvd25PcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC1yZWFkb25seScpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtY2hpcC1yZWFkb25seScpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC0tcmVhZG9ubHktYWN0aW9uJylcbiAgcmVhZG9ubHlBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LXZpZXdvbmx5JylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC1jaGlwLXZpZXdvbmx5JylcbiAgdmlld29ubHkgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LS12aWV3b25seS1hY3Rpb24nKVxuICB2aWV3b25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1oaW50LWFjdGlvbicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtLWhpbnQtYWN0aW9uJylcbiAgaGludEFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1kaXNhYmxlZCcpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZGlzYWJsZWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LWNoaXAtZGlzYWJsZWQnKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZm9jdXMnKVxuICBoYXNGb2N1cyA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZXJyb3InKVxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5ID8gdGhpcy5mb3JtQXJyYXkudG91Y2hlZCAmJiB0aGlzLmZvcm1BcnJheS5pbnZhbGlkIDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIGNsaWNrT3V0c2lkZSgkZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgJGV2ZW50LnRhcmdldC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAhJGV2ZW50LnRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoJ3FkLW11bHRpLWlucHV0JykgJiZcbiAgICAgIHRoaXMub3BlblxuICAgICkge1xuICAgICAgdGhpcy5fb25Ub3VjaCgpO1xuICAgICAgaWYgKCRldmVudD8ucG9pbnRlcklkICE9PSAtMSkgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICB9XG4gIH1cblxuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBRZE11bHRpSW5wdXRPcHRpb25bXTtcbiAgb3BlbiA9IGZhbHNlO1xuICBvcHRpb25zTGlzdEZvclZpZXc6IFFkTXVsdGlJbnB1dE9wdGlvbltdO1xuICBmaWx0ZXJPcHRpb25zOiBzdHJpbmc7XG4gIGZvcm1BcnJheTogUWRGb3JtQXJyYXk8c3RyaW5nPjtcblxuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9mb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9ybUFycmF5TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9vbkRpc2FibGVkQ2hhbmdlO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGhhc0hpbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmhpbnQgJiYgdGhpcy5jb25maWcuaGludC5pMThuICYmICF0aGlzLmNvbmZpZy5oaW50LmRpc2FibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG11bHRpSW5wdXRTZXJ2aWNlOiBRZE11bHRpSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHFkRm9ybUFycmF5RmFjdG9yeVNlcnZpY2U6IFFkRm9ybUFycmF5RmFjdG9yeVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5pZCkgdGhpcy5pZCA9IHV1aWQoKTtcblxuICAgIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uub3B0aW9uc0xpc3RGb3JWaWV3JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUobGlzdCA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNMaXN0Rm9yVmlldyA9IGxpc3Q7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcblxuICAgIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uuc2V0T3B0aW9uc0xpc3QodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy52YWx1ZXMpO1xuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcblxuICAgIGlmICghdGhpcy5jb250cm9sQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mb3JtQXJyYXlOYW1lKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5nZXQodGhpcy5mb3JtQXJyYXlOYW1lKTtcblxuICAgICAgLy8gVXBkYXRpbmcgZm9ybSBhcnJheSBwcm9ncmFtbWF0aWNhbGx5IGZyb20gb3V0c2lkZVxuICAgICAgdGhpcy5fc3Vicy5hZGQoXG4gICAgICAgIGZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIFFkRm9ybUFycmF5KSB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5ID0gZm9ybUFycmF5O1xuICAgICAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETyByZW1vdmUgbG9naWMgZm9yIHN1cHBvcnQgb2YgQW5ndWxhciBGb3JtQ29udHJvbCB3aXRoIGFuZ3VsYXIgMTkgdXBkYXRlXG4gICAgICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5xZEZvcm1BcnJheUZhY3RvcnlTZXJ2aWNlLmNyZWF0ZVFkRm9ybUFycmF5RnJvbUZvcm1Db250cm9sKFxuICAgICAgICAgIGZvcm1BcnJheSBhcyBVbnR5cGVkRm9ybUNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdRRC1VSSB8IFFkTXVsdGlJbnB1dENvbXBvbmVudCAtIFBsZWFzZSB1c2UgdGhlIE11bHRpSW5wdXQgd2l0aCB0aGUgUWRGb3JtQXJyYXkgZm9ybSBjb250cm9sIScpO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNhYmxlZCA9IGZvcm1BcnJheS5kaXNhYmxlZDtcbiAgICAgIHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UgPSAoZGlzYWJsZWQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZm9ybUFycmF5LnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUUQtVUkgfCBRZE11bHRpSW5wdXRDb21wb25lbnQgLSBNaXNzaW5nIFtmb3JtQXJyYXlOYW1lXSBkaXJlY3RpdmUgZnJvbSBob3N0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbmZpZykge1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgICBpZiAodGhpcy5oYXZlT3B0aW9uc0NoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgdGhpcy5tdWx0aUlucHV0U2VydmljZS5zZXRPcHRpb25zTGlzdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tPdXRzaWRlID0gKCk6IHZvaWQgPT4ge307XG4gICAgdGhpcy5fc3Vicz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5ICYmIHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UpIHRoaXMuZm9ybUFycmF5Ll91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sQ29udGFpbmVyKSB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIGdldEl0ZW1zKCk6IFFkTXVsdGlJbnB1dE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtcygpO1xuICB9XG5cbiAgaGFzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlJbnB1dFNlcnZpY2UuZ2V0SXRlbXMoKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0VHJhbnNsYXRpb24ob3B0aW9uOiBRZE11bHRpSW5wdXRPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKG9wdGlvbik7XG4gIH1cblxuICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnZpZXdvbmx5IHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BvdmVyT25DbGlja0RpcmVjdGl2ZT8ub3BlbigpO1xuICB9XG5cbiAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMudmlld29ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BvdmVyT25DbGlja0RpcmVjdGl2ZT8uY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKG9wdGlvbjogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkSXRlbShvcHRpb24pO1xuICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9uID0gdGhpcy5tdWx0aUlucHV0TWVudT8ua2V5TWFuYWdlcj8uYWN0aXZlSXRlbT8ub3B0aW9uO1xuICAgICAgICBpZiAobmV3T3B0aW9uPy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnNMaXN0Rm9yVmlldy5maW5kKHMgPT4gcy52YWx1ZSA9PT0gbmV3T3B0aW9uPy52YWx1ZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFkZENoaXAob3B0aW9uKTtcbiAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICAgICAgdGhpcy5tdWx0aUlucHV0TWVudT8uaGFuZGxlQXJyb3dLZXkoJ3VwJywgZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xuICAgICAgICB0aGlzLm11bHRpSW5wdXRNZW51Py5oYW5kbGVBcnJvd0tleSgnZG93bicsIGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldEN1cnJlbnRJbnB1dCh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICB0aGlzLm11bHRpSW5wdXRNZW51Py5yZXNldENoZWNrZWRPcHRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNsb3NlKGluZGV4KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUFycmF5KSB7XG4gICAgICB0aGlzLmZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aUlucHV0U2VydmljZS5yZW1vdmVJdGVtQXRJbmRleChpbmRleCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubXVsdGlJbnB1dFNlcnZpY2UuZ2V0SXRlbVZhbHVlcygpKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBnZXRJdGVyYWJsZUVsZW1lbnRzKCk6IE5nSXRlcmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbXNBcnJheSgpO1xuICB9XG5cbiAgZ2V0VmFsdWVzKCk6IFFkTXVsdGlJbnB1dE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtcygpO1xuICB9XG5cbiAgaGFuZGxlQ2hpcENsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKHRoaXMucmVhZG9ubHlBY3Rpb24pIHRoaXMuaGFuZGxlUmVhZE9ubHlBY3Rpb24oJGV2ZW50KTtcbiAgICBpZiAodGhpcy52aWV3b25seUFjdGlvbikgdGhpcy5oYW5kbGVWaWV3T25seUFjdGlvbigkZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlUmVhZE9ubHlBY3Rpb24oJGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGlja1JlYWRvbmx5LmVtaXQoJGV2ZW50LnRhcmdldC5kYXRhc2V0LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZVZpZXdPbmx5QWN0aW9uKCRldmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tWaWV3b25seS5lbWl0KCRldmVudC50YXJnZXQuZGF0YXNldC52YWx1ZSk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RmllbGQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gZ2V0TGFiZWwodGhpcy5jb25maWcpO1xuICAgIHRoaXMucmVhZG9ubHkgPSBnZXRSZWFkb25seSh0aGlzLmNvbmZpZywgdGhpcy5yZWFkb25seSk7XG4gICAgdGhpcy52aWV3b25seSA9IGdldFZpZXdvbmx5KHRoaXMuY29uZmlnLCB0aGlzLnZpZXdvbmx5KTtcbiAgICB0aGlzLmhpbnRBY3Rpb24gPSBnZXRIaW50QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5QWN0aW9uID0gZ2V0UmVhZG9ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMudmlld29ubHlBY3Rpb24gPSBnZXRWaWV3b25seUFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGdldERpc2FibGVkKHRoaXMuY29uZmlnKSB8fCAhIXRoaXMuZm9ybUFycmF5Py5kaXNhYmxlZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBnZXRNdWx0aUlucHV0T3B0aW9ucyh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGFkZENoaXAob3B0aW9uPzogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgIXRoaXMub3B0aW9uc0xpc3RGb3JWaWV3Lm1hcChvcHRpb25zID0+IG9wdGlvbnMudmFsdWUpLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0RmllbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9PT0gJycpIHJldHVybjtcblxuICAgICAgLy8gT24gRW50ZXIgbm9uLWV4aXN0aW5nIE9wdGlvblxuICAgICAgdGhpcy5oYW5kbGVVc2VySW5wdXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT24gRW50ZXIgZXhpc3Rpbmcgc3VnZ2VzdGVkIE9wdGlvblxuICAgICAgdGhpcy5hZGRJdGVtKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VySW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXM6IFFkTXVsdGlJbnB1dE9wdGlvbltdID0gW107XG4gICAgaWYgKHRoaXMuZmlsdGVyT3B0aW9ucyAhPT0gJycgJiYgIXRoaXMuY29uZmlnLmRpc2FibGVGcmVldGV4dCkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLmZpbmRPcHRpb25JbmRleCh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMuZ2V0U3BsaXRPcHRpb25zKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXMucHVzaCh0aGlzLm9wdGlvbnNMaXN0Rm9yVmlld1tvcHRpb25JbmRleF0pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRJdGVtc1RvQ2hpcFNldChpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtc1RvQ2hpcFNldChpdGVtczogUWRNdWx0aUlucHV0T3B0aW9uW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtQXJyYXkpIHtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9ICcnO1xuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSgpO1xuICAgICAgdGhpcy5mb3JtQXJyYXkubWFya0FzVG91Y2hlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5hZGRJdGVtKGl0ZW0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNwbGl0T3B0aW9ucygpOiBRZE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uuc3BsaXRGaWx0ZXJPcHRpb25zKHRoaXMuZmlsdGVyT3B0aW9ucywgdGhpcy5jb25maWcuaW5wdXRTcGxpdHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kT3B0aW9uSW5kZXgob3B0aW9uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zTGlzdEZvclZpZXcuZmluZEluZGV4KG9wdGlvbiA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKG9wdGlvbikgPT09IG9wdGlvbk5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtKG9wdGlvbjogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gJyc7XG5cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkpIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLmFkZFNlbGVjdGVkSXRlbShvcHRpb24pO1xuICAgIHRoaXMuY2hhbmdlVmFsdWUoKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtVmFsdWVzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXZlT3B0aW9uc0NoYW5nZWQoY2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNFcXVhbChjaGFuZ2VzLmNvbmZpZy5wcmV2aW91c1ZhbHVlPy5vcHRpb25zLCBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWU/Lm9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRGaWVsZD8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1zQXJyYXkoKTogKEZvcm1Db250cm9sIHwgUWRNdWx0aUlucHV0T3B0aW9uKVtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkgPyAodGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUNvbnRyb2xbXSkgOiB0aGlzLmdldEl0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcE1vZGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHwgdm9pZCB7XG4gICAgaWYgKCF0aGlzLmV2ZW50QnJva2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlLmNvbnN1bWU8eyBpc1ZpZXdvbmx5OiBib29sZWFuIH0+KCdvcGVyYXRpb25fbW9kZV9jaGFuZ2VkJykuc3Vic2NyaWJlKHRvcGljID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcudmlld29ubHkgPT09ICdib29sZWFuJykgcmV0dXJuO1xuXG4gICAgICB0aGlzLnZpZXdvbmx5ID0gZ2V0Vmlld29ubHkodGhpcy5jb25maWcsIHRvcGljLnBheWxvYWQuaXNWaWV3b25seSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxxZC1mb3JtLWxhYmVsXG4gIFtsYWJlbF09XCJsYWJlbFwiXG4gIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFt2aWV3b25seV09XCJ2aWV3b25seVwiXG4gIFtjb250cm9sXT1cImZvcm1BcnJheVwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxkaXZcbiAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgY2xhc3M9XCJxZC1tdWx0aS1pbnB1dF9faW5wdXQtY2hpcC1ib3hcIlxuICAoY2xpY2spPVwiZm9jdXMoKVwiXG4gIChvcGVuZWQpPVwib3BlbiA9IHRydWVcIlxuICAoY2xvc2VkKT1cIm9wZW4gPSBmYWxzZVwiXG4gIFtxZFBvcG92ZXJPbkNsaWNrXT1cIm1lbnVcIlxuICBbcWRQb3BvdmVyQ2xvc2VTdHJhdGVneV09XCInb25PdXRzaWRlQ2xpY2snXCJcbiAgW3FkUG9wb3ZlckRpc2FibGVkXT1cIm9wdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgW3FkUG9wb3ZlckF1dG9TaXplXT1cInsgd2lkdGg6IHRydWUgfVwiXG4gIFtxZFBvcG92ZXJCYWNrZ3JvdW5kQ29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gIFtwb3NpdGlvblN0cmF0ZWd5XT1cIltcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIG9mZnNldFg6IC0yXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIHdlaWdodDogMC44LFxuICAgICAgb2Zmc2V0WDogLTJcbiAgICB9XG4gIF1cIlxuPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImhhc0l0ZW1zKCkgPyAncWQtbXVsdGktaW5wdXRfX2NoaXAtbWFyZ2luJyA6ICcnXCI+XG4gICAgPHFkLW11bHRpLWlucHV0LWNoaXBcbiAgICAgICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGdldEl0ZXJhYmxlRWxlbWVudHMoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgW2Nsb3NlXT1cIiFkaXNhYmxlZCAmJiAhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgICAgIFtpdGVtQ29udHJvbF09XCJmb3JtQXJyYXkgPyBlbGVtZW50IDogdW5kZWZpbmVkXCJcbiAgICAgIFt2YWx1ZV09XCJmb3JtQXJyYXkgPyB1bmRlZmluZWQgOiBnZXRUcmFuc2xhdGlvbihlbGVtZW50KVwiXG4gICAgICAoY2xvc2VDbGlja0VtaXR0ZXIpPVwiY2xvc2UoaW5kZXgpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVDaGlwQ2xpY2soJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvcWQtbXVsdGktaW5wdXQtY2hpcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInFkLW11bHRpLWlucHV0X193cmFwcGVyXCI+XG4gICAgPGlucHV0XG4gICAgICAjaW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwicWQtbXVsdGktaW5wdXRfX2JveFwiXG4gICAgICAqbmdJZj1cIiFyZWFkb25seSAmJiAhdmlld29ubHlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyT3B0aW9uc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VWYWx1ZSgpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJoYXNGb2N1cyA9IHRydWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIm9wZW4gPyAncWQtbXVsdGktaW5wdXRfX2JveC0tb3BlbicgOiAnJ1wiXG4gICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1pbnB1dCdcIlxuICAgIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicWQtbXVsdGktaW5wdXRfX2JveCBxZC1tdWx0aS1pbnB1dF9fYm94LS1yZWFkb25seVwiICpuZ0lmPVwicmVhZG9ubHkgJiYgIWhhc0l0ZW1zKClcIj4mbmJzcDs8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJxZC1tdWx0aS1pbnB1dF9fYm94IHFkLW11bHRpLWlucHV0X19ib3gtLXZpZXdvbmx5XCIgKm5nSWY9XCJ2aWV3b25seSAmJiAhaGFzSXRlbXMoKVwiPiZuYnNwOzwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlICNtZW51PlxuICAgICAgPHFkLW11bHRpLWlucHV0LW1lbnVcbiAgICAgICAgW29wdGlvbnNMaXN0Rm9yVmlld109XCJvcHRpb25zTGlzdEZvclZpZXdcIlxuICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gICAgICAgIChpdGVtQ2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9xZC1tdWx0aS1pbnB1dC1tZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcgJiYgIXJlYWRvbmx5ICYmICF2aWV3b25seVwiPlxuICA8cWQtZm9ybS1oaW50XG4gICAgW2hpbnRdPVwiaGFzSGludCA/IGNvbmZpZy5oaW50LmkxOG4gOiAnJ1wiXG4gICAgW2NvbnRyb2xdPVwiZm9ybUFycmF5XCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwicmVhZG9ubHlcIlxuICBbdmFsdWVzXT1cImdldFZhbHVlcygpXCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cInJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJ2aWV3b25seVwiXG4gIFt2YWx1ZXNdPVwiZ2V0VmFsdWVzKClcIlxuICBbdmlld29ubHlBY3Rpb25dPVwidmlld29ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXZpZXdvbmx5PlxuIl19
540
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL211bHRpLWlucHV0L211bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9tdWx0aS1pbnB1dC9tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLElBQUksRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFLTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBR2hCLGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2xHLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2xCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0s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Vzt1QkFBQyw0QkFBNEI7Z0JBS3JDLFFBQVE7c0JBRlgsV0FBVzt1QkFBQyxxQkFBcUI7O3NCQUNqQyxXQUFXO3VCQUFDLDRCQUE0QjtnQkFLRyxZQUFZO3NCQUF2RCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLXN0cmljdC1pZ25vcmVcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3QsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ0l0ZXJhYmxlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFVudHlwZWRGb3JtQ29udHJvbFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgUWRGb3JtTXVsdGlJbnB1dENvbmZpZ3VyYXRpb24sIFFkTXVsdGlJbnB1dE9wdGlvbiB9IGZyb20gJy4uL21vZGVsL2Zvcm1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1BcnJheSB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tYXJyYXknO1xuaW1wb3J0IHsgUWRGb3JtQXJyYXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm1zL2NvbnRyb2xzL2Zvcm0tYXJyYXktZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldERpc2FibGVkLFxuICBnZXRIaW50QWN0aW9uLFxuICBnZXRMYWJlbCxcbiAgZ2V0TXVsdGlJbnB1dE9wdGlvbnMsXG4gIGdldFJlYWRvbmx5LFxuICBnZXRSZWFkb25seUFjdGlvbixcbiAgZ2V0Vmlld29ubHksXG4gIGdldFZpZXdvbmx5QWN0aW9uXG59IGZyb20gJy4uL3NoYXJlZC9oZWxwZXJzL2Zvcm1zLmhlbHBlcnMnO1xuaW1wb3J0IHsgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL2FjdGlvbi1lbWl0dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRNdWx0aUlucHV0U2VydmljZSB9IGZyb20gJy4vbXVsdGktaW5wdXQtc2VydmljZS9tdWx0aS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb3JlL3BvcG92ZXIvcG9wb3Zlci1vbi1jbGljay9wb3BvdmVyLW9uLWNsaWNrLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZE11bHRpSW5wdXRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS1pbnB1dC1tZW51L211bHRpLWlucHV0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFFkRXZlbnRCcm9rZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9ldmVudC1icm9rZXIuc2VydmljZSc7XG5cbi8qKlxuICogVGhlICoqUWRNdWx0aUlucHV0KiogaXMgYSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBhIHVzZXIgaW50ZXJmYWNlIGZvciBlbnRlcmluZyBtdWx0aXBsZSBpbnB1dHMuPGJyIC8+XG4gKiBJdCBpcyBkZXNpZ25lZCB0byBlbmhhbmNlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgaW5wdXRzIGFuZCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyMqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgbXVsdGlJbnB1dDogbmV3IFFkRm9ybUFycmF5KClcbiAqIH0pO1xuICogYGBgXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgPHFkLW11bHRpLWlucHV0IFtmb3JtQXJyYXlOYW1lXT1cIm11bHRpSW5wdXRcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gKiA8L2Zvcm0+XG4gKiBgYGBcbiAqXG4gKiAjIyMjKipVc2FnZSB3aXRoIE1vZGVsIEJpbmRpbmcqKlxuICogYGBgdHNcbiAqIHZhbHVlcztcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLW11bHRpLWlucHV0IFsodmFsdWVzKV09XCJ2YWx1ZXNcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtbXVsdGktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBRZE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgUWRNdWx0aUlucHV0U2VydmljZSxcbiAgICBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2VcbiAgXSxcbiAgaG9zdDogeyBjbGFzczogJ3FkLW11bHRpLWlucHV0JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBRZE11bHRpSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEhlcmUgYW4gaWQgY2FuIGJlIGFzc2lnbmVkLCB3aXRoIHdoaWNoIGEgdmFsdWUgY2FuIGJlIGxpbmtlZCB0byBhIGNvcnJlc3BvbmRpbmcgbGFiZWwuXG4gICAqL1xuICBASW5wdXQoKSBpZDtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgZm9ybSBpdGVtIHZhbHVlcywgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLW11bHRpLWlucHV0IFsodmFsdWVzKV09XCJ2YWx1ZXNcIiBbY29uZmlnXT1cImNvbmZpZ1wiPjwvcWQtbXVsdGktaW5wdXQ+XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWVzKHZhbHVlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gIH1cblxuICBnZXQgdmFsdWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqICogQGRlcHJlY2F0ZWRcbiAgICogVE9ETyByZW1vdmUgbG9naWMgZm9yIHN1cHBvcnQgb2YgW2Zvcm1Db250cm9sTmFtZV0gZGlyZWN0aXZlIGFuZCBGb3JtQ29udHJvbCB3aXRoIGFuZ3VsYXIgMTQgdXBkYXRlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZm9ybUNvbnRyb2xOYW1lKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1FELVVJIHwgUWRNdWx0aUlucHV0Q29tcG9uZW50IC0gUGxlYXNlIHVzZSB0aGUgTXVsdGlJbnB1dCB3aXRoIHRoZSBRZEZvcm1BcnJheSBmb3JtIGNvbnRyb2wgYW5kIHRoZSBbZm9ybUFycmF5TmFtZV0gZGlyZWN0aXZlISdcbiAgICApO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sTmFtZSA9IGZvcm1Db250cm9sTmFtZTtcbiAgfVxuXG4gIGdldCBmb3JtQ29udHJvbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2xOYW1lO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm1BcnJheU5hbWUoZm9ybUFycmF5TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZm9ybUFycmF5TmFtZSA9IGZvcm1BcnJheU5hbWU7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXlOYW1lIHx8IHRoaXMuZm9ybUNvbnRyb2xOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGZvcm0gaXRlbVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgbGFiZWw6IHsgaTE4bjogJ215LWxhYmVsJyB9LFxuICAgKiAgIGhpbnQ6IHsgaTE4bjogJ215LWhpbnQnIH0sXG4gICAqICAgb3B0aW9uczogW1xuICAgKiAgICAgeyBpMThuOiAnaTE4bi5xZC5leGFtcGxlRm9ybUZpZWxkLmdvb2RzRGVjbGFyYXRpb24uaW1wb3J0JywgdmFsdWU6ICdpbXBvcnQnIH0sXG4gICAqICAgICB7IGkxOG46ICdpMThuLnFkLmV4YW1wbGVGb3JtRmllbGQuZ29vZHNEZWNsYXJhdGlvbi5leHBvcnQnLCB2YWx1ZTogJ2V4cG9ydCcgfSxcbiAgICogICAgIHsgaTE4bjogJ2kxOG4ucWQuZXhhbXBsZUZvcm1GaWVsZC5nb29kc0RlY2xhcmF0aW9uLnRyYW5zaXQnLCB2YWx1ZTogJ3RyYW5zaXQnIH1cbiAgICogICBdXG4gICAqIH07XG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IFFkRm9ybU11bHRpSW5wdXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZCA9ICdtdWx0aS1pbnB1dCc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHZhbHVlcyBjaGFuZ2UuIFJldHVybiB2YWx1ZXMgbWF0Y2ggdGhlIGN1cnJlbnQgdmFsdWVzLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGhpbnQgaXMgY2xpY2tlZC90YXBwZWQuIGBoaW50QWN0aW9uYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tIaW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIGEgcmVhZG9ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGBjbGlja1JlYWRvbmx5IGAgbXVzdCBiZSBzZXQgdG8gYHRydWVgIGZvciB0aGlzLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNsaWNrUmVhZG9ubHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gYSB2aWV3b25seSB2YWx1ZSBpcyBjbGlja2VkL3RhcHBlZC4gYGNsaWNrVmlld29ubHkgYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tWaWV3b25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0RmllbGQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBRZE11bHRpSW5wdXRNZW51Q29tcG9uZW50KSkgbXVsdGlJbnB1dE1lbnU6IFFkTXVsdGlJbnB1dE1lbnVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoUWRQb3BvdmVyT25DbGlja0RpcmVjdGl2ZSkgcG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmU6IFFkUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGRyZW4oJ2Vycm9yVG9vbHRpcHMnKSBlcnJvclRvb2x0aXBzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2Ryb3Bkb3duT3B0aW9uJykgZHJvcGRvd25PcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC1yZWFkb25seScpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtY2hpcC1yZWFkb25seScpXG4gIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC0tcmVhZG9ubHktYWN0aW9uJylcbiAgcmVhZG9ubHlBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LXZpZXdvbmx5JylcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5xZC1tdWx0aS1pbnB1dC1jaGlwLXZpZXdvbmx5JylcbiAgdmlld29ubHkgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LS12aWV3b25seS1hY3Rpb24nKVxuICB2aWV3b25seUFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1oaW50LWFjdGlvbicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtLWhpbnQtYWN0aW9uJylcbiAgaGludEFjdGlvbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1kaXNhYmxlZCcpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZGlzYWJsZWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLW11bHRpLWlucHV0LWNoaXAtZGlzYWJsZWQnKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZm9jdXMnKVxuICBoYXNGb2N1cyA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtbXVsdGktaW5wdXQtZXJyb3InKVxuICBnZXQgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5ID8gdGhpcy5mb3JtQXJyYXkudG91Y2hlZCAmJiB0aGlzLmZvcm1BcnJheS5pbnZhbGlkIDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIGNsaWNrT3V0c2lkZSgkZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgJGV2ZW50LnRhcmdldC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAhJGV2ZW50LnRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoJ3FkLW11bHRpLWlucHV0JykgJiZcbiAgICAgIHRoaXMub3BlblxuICAgICkge1xuICAgICAgdGhpcy5fb25Ub3VjaCgpO1xuICAgICAgaWYgKCRldmVudD8ucG9pbnRlcklkICE9PSAtMSkgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICB9XG4gIH1cblxuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBRZE11bHRpSW5wdXRPcHRpb25bXTtcbiAgb3BlbiA9IGZhbHNlO1xuICBvcHRpb25zTGlzdEZvclZpZXc6IFFkTXVsdGlJbnB1dE9wdGlvbltdO1xuICBmaWx0ZXJPcHRpb25zOiBzdHJpbmc7XG4gIGZvcm1BcnJheTogUWRGb3JtQXJyYXk8c3RyaW5nPjtcblxuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9mb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9ybUFycmF5TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9vbkRpc2FibGVkQ2hhbmdlO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGhhc0hpbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmhpbnQgJiYgdGhpcy5jb25maWcuaGludC5pMThuICYmICF0aGlzLmNvbmZpZy5oaW50LmRpc2FibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG11bHRpSW5wdXRTZXJ2aWNlOiBRZE11bHRpSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHFkRm9ybUFycmF5RmFjdG9yeVNlcnZpY2U6IFFkRm9ybUFycmF5RmFjdG9yeVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBldmVudEJyb2tlclNlcnZpY2U6IFFkRXZlbnRCcm9rZXJTZXJ2aWNlXG4gICkge1xuICAgIGlmICghdGhpcy5pZCkgdGhpcy5pZCA9IHV1aWQoKTtcblxuICAgIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uub3B0aW9uc0xpc3RGb3JWaWV3JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUobGlzdCA9PiB7XG4gICAgICB0aGlzLm9wdGlvbnNMaXN0Rm9yVmlldyA9IGxpc3Q7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcblxuICAgIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uuc2V0T3B0aW9uc0xpc3QodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy52YWx1ZXMpO1xuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcblxuICAgIGlmICghdGhpcy5jb250cm9sQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mb3JtQXJyYXlOYW1lKSB7XG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5nZXQodGhpcy5mb3JtQXJyYXlOYW1lKTtcblxuICAgICAgLy8gVXBkYXRpbmcgZm9ybSBhcnJheSBwcm9ncmFtbWF0aWNhbGx5IGZyb20gb3V0c2lkZVxuICAgICAgdGhpcy5fc3Vicy5hZGQoXG4gICAgICAgIGZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgaWYgKGZvcm1BcnJheSBpbnN0YW5jZW9mIFFkRm9ybUFycmF5KSB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5ID0gZm9ybUFycmF5O1xuICAgICAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldFNlbGVjdGVkSXRlbXModGhpcy5mb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETyByZW1vdmUgbG9naWMgZm9yIHN1cHBvcnQgb2YgQW5ndWxhciBGb3JtQ29udHJvbCB3aXRoIGFuZ3VsYXIgMTkgdXBkYXRlXG4gICAgICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5xZEZvcm1BcnJheUZhY3RvcnlTZXJ2aWNlLmNyZWF0ZVFkRm9ybUFycmF5RnJvbUZvcm1Db250cm9sKFxuICAgICAgICAgIGZvcm1BcnJheSBhcyBVbnR5cGVkRm9ybUNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdRRC1VSSB8IFFkTXVsdGlJbnB1dENvbXBvbmVudCAtIFBsZWFzZSB1c2UgdGhlIE11bHRpSW5wdXQgd2l0aCB0aGUgUWRGb3JtQXJyYXkgZm9ybSBjb250cm9sIScpO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNhYmxlZCA9IGZvcm1BcnJheS5kaXNhYmxlZDtcbiAgICAgIHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UgPSAoZGlzYWJsZWQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZm9ybUFycmF5LnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUUQtVUkgfCBRZE11bHRpSW5wdXRDb21wb25lbnQgLSBNaXNzaW5nIFtmb3JtQXJyYXlOYW1lXSBkaXJlY3RpdmUgZnJvbSBob3N0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbmZpZykge1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgICBpZiAodGhpcy5oYXZlT3B0aW9uc0NoYW5nZWQoY2hhbmdlcykpIHtcbiAgICAgICAgdGhpcy5tdWx0aUlucHV0U2VydmljZS5zZXRPcHRpb25zTGlzdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tPdXRzaWRlID0gKCk6IHZvaWQgPT4ge307XG4gICAgdGhpcy5fc3Vicz8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUFycmF5ICYmIHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UpIHRoaXMuZm9ybUFycmF5Ll91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sQ29udGFpbmVyKSB0aGlzLmdldEl0ZW1zKCk7XG5cbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHRoaXMudmFsdWVzKTtcbiAgfVxuXG4gIGdldEl0ZW1zKCk6IFFkTXVsdGlJbnB1dE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtcygpO1xuICB9XG5cbiAgaGFzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlJbnB1dFNlcnZpY2UuZ2V0SXRlbXMoKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0VHJhbnNsYXRpb24ob3B0aW9uOiBRZE11bHRpSW5wdXRPcHRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKG9wdGlvbik7XG4gIH1cblxuICBvcGVuUG9wb3ZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnZpZXdvbmx5IHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BvdmVyT25DbGlja0RpcmVjdGl2ZT8ub3BlbigpO1xuICB9XG5cbiAgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMudmlld29ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wb3BvdmVyT25DbGlja0RpcmVjdGl2ZT8uY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKG9wdGlvbjogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkSXRlbShvcHRpb24pO1xuICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9uID0gdGhpcy5tdWx0aUlucHV0TWVudT8ua2V5TWFuYWdlcj8uYWN0aXZlSXRlbT8ub3B0aW9uO1xuICAgICAgICBpZiAobmV3T3B0aW9uPy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnNMaXN0Rm9yVmlldy5maW5kKHMgPT4gcy52YWx1ZSA9PT0gbmV3T3B0aW9uPy52YWx1ZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFkZENoaXAob3B0aW9uKTtcbiAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICAgICAgdGhpcy5tdWx0aUlucHV0TWVudT8uaGFuZGxlQXJyb3dLZXkoJ3VwJywgZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5vcGVuUG9wb3ZlcigpO1xuICAgICAgICB0aGlzLm11bHRpSW5wdXRNZW51Py5oYW5kbGVBcnJvd0tleSgnZG93bicsIGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLnNldEN1cnJlbnRJbnB1dCh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgIHRoaXMub3BlblBvcG92ZXIoKTtcbiAgICB0aGlzLm11bHRpSW5wdXRNZW51Py5yZXNldENoZWNrZWRPcHRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNsb3NlKGluZGV4KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUFycmF5KSB7XG4gICAgICB0aGlzLmZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgICB0aGlzLmZvcm1BcnJheS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aUlucHV0U2VydmljZS5yZW1vdmVJdGVtQXRJbmRleChpbmRleCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubXVsdGlJbnB1dFNlcnZpY2UuZ2V0SXRlbVZhbHVlcygpKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBnZXRJdGVyYWJsZUVsZW1lbnRzKCk6IE5nSXRlcmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbXNBcnJheSgpO1xuICB9XG5cbiAgZ2V0VmFsdWVzKCk6IFFkTXVsdGlJbnB1dE9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtcygpO1xuICB9XG5cbiAgaGFuZGxlQ2hpcENsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKHRoaXMucmVhZG9ubHlBY3Rpb24pIHRoaXMuaGFuZGxlUmVhZE9ubHlBY3Rpb24oJGV2ZW50KTtcbiAgICBpZiAodGhpcy52aWV3b25seUFjdGlvbikgdGhpcy5oYW5kbGVWaWV3T25seUFjdGlvbigkZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlUmVhZE9ubHlBY3Rpb24oJGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbGlja1JlYWRvbmx5LmVtaXQoJGV2ZW50LnRhcmdldC5kYXRhc2V0LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZVZpZXdPbmx5QWN0aW9uKCRldmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tWaWV3b25seS5lbWl0KCRldmVudC50YXJnZXQuZGF0YXNldC52YWx1ZSk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RmllbGQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gZ2V0TGFiZWwodGhpcy5jb25maWcpO1xuICAgIHRoaXMucmVhZG9ubHkgPSBnZXRSZWFkb25seSh0aGlzLmNvbmZpZywgdGhpcy5yZWFkb25seSk7XG4gICAgdGhpcy52aWV3b25seSA9IGdldFZpZXdvbmx5KHRoaXMuY29uZmlnLCB0aGlzLnZpZXdvbmx5KTtcbiAgICB0aGlzLmhpbnRBY3Rpb24gPSBnZXRIaW50QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5QWN0aW9uID0gZ2V0UmVhZG9ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMudmlld29ubHlBY3Rpb24gPSBnZXRWaWV3b25seUFjdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGdldERpc2FibGVkKHRoaXMuY29uZmlnKSB8fCAhIXRoaXMuZm9ybUFycmF5Py5kaXNhYmxlZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBnZXRNdWx0aUlucHV0T3B0aW9ucyh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGFkZENoaXAob3B0aW9uPzogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24gfHwgIXRoaXMub3B0aW9uc0xpc3RGb3JWaWV3Lm1hcChvcHRpb25zID0+IG9wdGlvbnMudmFsdWUpLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0RmllbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9PT0gJycpIHJldHVybjtcblxuICAgICAgLy8gT24gRW50ZXIgbm9uLWV4aXN0aW5nIE9wdGlvblxuICAgICAgdGhpcy5oYW5kbGVVc2VySW5wdXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT24gRW50ZXIgZXhpc3Rpbmcgc3VnZ2VzdGVkIE9wdGlvblxuICAgICAgdGhpcy5hZGRJdGVtKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VySW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXM6IFFkTXVsdGlJbnB1dE9wdGlvbltdID0gW107XG4gICAgaWYgKHRoaXMuZmlsdGVyT3B0aW9ucyAhPT0gJycgJiYgIXRoaXMuY29uZmlnLmRpc2FibGVGcmVldGV4dCkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLmZpbmRPcHRpb25JbmRleCh0aGlzLmZpbHRlck9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMuZ2V0U3BsaXRPcHRpb25zKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXMucHVzaCh0aGlzLm9wdGlvbnNMaXN0Rm9yVmlld1tvcHRpb25JbmRleF0pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRJdGVtc1RvQ2hpcFNldChpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtc1RvQ2hpcFNldChpdGVtczogUWRNdWx0aUlucHV0T3B0aW9uW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtQXJyYXkpIHtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyA9ICcnO1xuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSgpO1xuICAgICAgdGhpcy5mb3JtQXJyYXkubWFya0FzVG91Y2hlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5hZGRJdGVtKGl0ZW0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFNwbGl0T3B0aW9ucygpOiBRZE11bHRpSW5wdXRPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlJbnB1dFNlcnZpY2Uuc3BsaXRGaWx0ZXJPcHRpb25zKHRoaXMuZmlsdGVyT3B0aW9ucywgdGhpcy5jb25maWcuaW5wdXRTcGxpdHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kT3B0aW9uSW5kZXgob3B0aW9uTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zTGlzdEZvclZpZXcuZmluZEluZGV4KG9wdGlvbiA9PiB0aGlzLmdldFRyYW5zbGF0aW9uKG9wdGlvbikgPT09IG9wdGlvbk5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtKG9wdGlvbjogUWRNdWx0aUlucHV0T3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zID0gJyc7XG5cbiAgICBpZiAodGhpcy5mb3JtQXJyYXkpIHtcbiAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2gob3B0aW9uLnZhbHVlKTtcbiAgICAgIHRoaXMuZm9ybUFycmF5Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm11bHRpSW5wdXRTZXJ2aWNlLmFkZFNlbGVjdGVkSXRlbShvcHRpb24pO1xuICAgIHRoaXMuY2hhbmdlVmFsdWUoKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5tdWx0aUlucHV0U2VydmljZS5nZXRJdGVtVmFsdWVzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXZlT3B0aW9uc0NoYW5nZWQoY2hhbmdlcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNFcXVhbChjaGFuZ2VzLmNvbmZpZy5wcmV2aW91c1ZhbHVlPy5vcHRpb25zLCBjaGFuZ2VzLmNvbmZpZy5jdXJyZW50VmFsdWU/Lm9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRGaWVsZD8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1zQXJyYXkoKTogKEZvcm1Db250cm9sIHwgUWRNdWx0aUlucHV0T3B0aW9uKVtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkgPyAodGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUNvbnRyb2xbXSkgOiB0aGlzLmdldEl0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcE1vZGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHwgdm9pZCB7XG4gICAgaWYgKCF0aGlzLmV2ZW50QnJva2VyU2VydmljZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlLmNvbnN1bWU8eyBpc1ZpZXdvbmx5OiBib29sZWFuIH0+KCdvcGVyYXRpb25fbW9kZV9jaGFuZ2VkJykuc3Vic2NyaWJlKHRvcGljID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcudmlld29ubHkgPT09ICdib29sZWFuJykgcmV0dXJuO1xuXG4gICAgICB0aGlzLnZpZXdvbmx5ID0gZ2V0Vmlld29ubHkodGhpcy5jb25maWcsIHRvcGljLnBheWxvYWQuaXNWaWV3b25seSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxxZC1mb3JtLWxhYmVsXG4gIFtsYWJlbF09XCJsYWJlbFwiXG4gIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFt2aWV3b25seV09XCJ2aWV3b25seVwiXG4gIFtjb250cm9sXT1cImZvcm1BcnJheVwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxkaXZcbiAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgY2xhc3M9XCJxZC1tdWx0aS1pbnB1dF9faW5wdXQtY2hpcC1ib3hcIlxuICAoY2xpY2spPVwiZm9jdXMoKVwiXG4gIChvcGVuZWQpPVwib3BlbiA9IHRydWVcIlxuICAoY2xvc2VkKT1cIm9wZW4gPSBmYWxzZVwiXG4gIFtxZFBvcG92ZXJPbkNsaWNrXT1cIm1lbnVcIlxuICBbcWRQb3BvdmVyQ2xvc2VTdHJhdGVneV09XCInb25PdXRzaWRlQ2xpY2snXCJcbiAgW3FkUG9wb3ZlckRpc2FibGVkXT1cIm9wdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgW3FkUG9wb3ZlckF1dG9TaXplXT1cInsgd2lkdGg6IHRydWUgfVwiXG4gIFtxZFBvcG92ZXJCYWNrZ3JvdW5kQ29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXG4gIFtwb3NpdGlvblN0cmF0ZWd5XT1cIltcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgIG9mZnNldFg6IC0yXG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgIHdlaWdodDogMC44LFxuICAgICAgb2Zmc2V0WDogLTJcbiAgICB9XG4gIF1cIlxuPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImhhc0l0ZW1zKCkgPyAncWQtbXVsdGktaW5wdXRfX2NoaXAtbWFyZ2luJyA6ICcnXCI+XG4gICAgPHFkLW11bHRpLWlucHV0LWNoaXBcbiAgICAgICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGdldEl0ZXJhYmxlRWxlbWVudHMoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgW2Nsb3NlXT1cIiFkaXNhYmxlZCAmJiAhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgICAgIFtpdGVtQ29udHJvbF09XCJmb3JtQXJyYXkgPyBlbGVtZW50IDogdW5kZWZpbmVkXCJcbiAgICAgIFt2YWx1ZV09XCJmb3JtQXJyYXkgPyB1bmRlZmluZWQgOiBnZXRUcmFuc2xhdGlvbihlbGVtZW50KVwiXG4gICAgICAoY2xvc2VDbGlja0VtaXR0ZXIpPVwiY2xvc2UoaW5kZXgpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVDaGlwQ2xpY2soJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvcWQtbXVsdGktaW5wdXQtY2hpcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInFkLW11bHRpLWlucHV0X193cmFwcGVyXCI+XG4gICAgPGlucHV0XG4gICAgICAjaW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwicWQtbXVsdGktaW5wdXRfX2JveFwiXG4gICAgICAqbmdJZj1cIiFyZWFkb25seSAmJiAhdmlld29ubHlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyT3B0aW9uc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VWYWx1ZSgpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJoYXNGb2N1cyA9IHRydWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIm9wZW4gPyAncWQtbXVsdGktaW5wdXRfX2JveC0tb3BlbicgOiAnJ1wiXG4gICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJy1pbnB1dCdcIlxuICAgIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicWQtbXVsdGktaW5wdXRfX2JveCBxZC1tdWx0aS1pbnB1dF9fYm94LS1yZWFkb25seVwiICpuZ0lmPVwicmVhZG9ubHkgJiYgIWhhc0l0ZW1zKClcIj4mbmJzcDs8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJxZC1tdWx0aS1pbnB1dF9fYm94IHFkLW11bHRpLWlucHV0X19ib3gtLXZpZXdvbmx5XCIgKm5nSWY9XCJ2aWV3b25seSAmJiAhaGFzSXRlbXMoKVwiPiZuYnNwOzwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlICNtZW51PlxuICAgICAgPHFkLW11bHRpLWlucHV0LW1lbnVcbiAgICAgICAgW29wdGlvbnNMaXN0Rm9yVmlld109XCJvcHRpb25zTGlzdEZvclZpZXdcIlxuICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gICAgICAgIChpdGVtQ2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9xZC1tdWx0aS1pbnB1dC1tZW51PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxxZC1mb3JtLWhpbnRcbiAgKm5nSWY9XCJjb25maWcgJiYgIXJlYWRvbmx5ICYmICF2aWV3b25seSAmJiAoaGFzSGludCB8fCBoYXNFcnJvcilcIlxuICBbaGludF09XCJoYXNIaW50ID8gY29uZmlnLmhpbnQuaTE4biA6ICcnXCJcbiAgW2NvbnRyb2xdPVwiZm9ybUFycmF5XCJcbiAgW2hhc0Vycm9yXT1cImhhc0Vycm9yXCJcbiAgW2hpbnRBY3Rpb25dPVwiaGludEFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0taGludD5cblxuPHFkLWZvcm0tcmVhZG9ubHlcbiAgKm5nSWY9XCJyZWFkb25seVwiXG4gIFt2YWx1ZXNdPVwiZ2V0VmFsdWVzKClcIlxuICBbcmVhZG9ubHlBY3Rpb25dPVwicmVhZG9ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXJlYWRvbmx5PlxuXG48cWQtZm9ybS12aWV3b25seVxuICAqbmdJZj1cInZpZXdvbmx5XCJcbiAgW3ZhbHVlc109XCJnZXRWYWx1ZXMoKVwiXG4gIFt2aWV3b25seUFjdGlvbl09XCJ2aWV3b25seUFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tdmlld29ubHk+XG4iXX0=
@@ -380,7 +380,7 @@ export class QdPinCodeComponent {
380
380
  },
381
381
  QdPinCodeService,
382
382
  QdFormsActionEmitterService
383
- ], viewQueries: [{ propertyName: "inputsList", predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngFor=\"let i of iterable(codeLength); let index = index; let last = last\">\n <input\n #input\n *ngIf=\"!readonly && !viewonly\"\n [ngClass]=\"'qd-pin-code__input qd-pin-code--input-' + index + (last ? ' qd-pin-code__input--last' : '')\"\n [attr.data-test-id]=\"testId + '-input-' + index\"\n [type]=\"codeHidden ? 'password' : 'tel'\"\n [tabindex]=\"pinCodeService.firstEmpty === index ? 0 : -1\"\n (click)=\"handleCLick($event)\"\n (keydown.backspace)=\"handleDelete($event)\"\n (keydown.delete)=\"handleDelete($event)\"\n (keydown.enter)=\"handleComplete()\"\n (keypress)=\"handleInput($event)\"\n (blur)=\"handleBlur(index)\"\n [disabled]=\"disabled\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;height:4.5rem;margin-bottom:.75rem}:host .qd-pin-code__input{width:1.875rem;height:2.25rem;border:.0625rem solid rgb(180,180,180);margin-right:.75rem;margin-bottom:.375rem;caret-color:#fff0;cursor:default;font-size:1.5rem;font-weight:500;text-align:center}:host .qd-pin-code__input--last{margin-right:0}:host .qd-pin-code__input:focus{border-width:.125rem;border-color:#069}:host .qd-pin-code__input:active{border-width:.0625rem;border-color:#b4b4b4}:host .qd-pin-code__input:focus-visible{outline:none}:host.qd-pin-code--error .qd-pin-code__input{border-color:#c70023}:host.qd-pin-code--error .qd-pin-code__input:focus{border-width:.125rem}:host.qd-pin-code--error .qd-pin-code__input:active{border-width:.0625rem}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i7.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i8.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i9.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }] });
383
+ ], viewQueries: [{ propertyName: "inputsList", predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngFor=\"let i of iterable(codeLength); let index = index; let last = last\">\n <input\n #input\n *ngIf=\"!readonly && !viewonly\"\n [ngClass]=\"'qd-pin-code__input qd-pin-code--input-' + index + (last ? ' qd-pin-code__input--last' : '')\"\n [attr.data-test-id]=\"testId + '-input-' + index\"\n [type]=\"codeHidden ? 'password' : 'tel'\"\n [tabindex]=\"pinCodeService.firstEmpty === index ? 0 : -1\"\n (click)=\"handleCLick($event)\"\n (keydown.backspace)=\"handleDelete($event)\"\n (keydown.delete)=\"handleDelete($event)\"\n (keydown.enter)=\"handleComplete()\"\n (keypress)=\"handleInput($event)\"\n (blur)=\"handleBlur(index)\"\n [disabled]=\"disabled\"\n />\n</ng-container>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;height:4.5rem;margin-bottom:.75rem}:host .qd-pin-code__input{width:1.875rem;height:2.25rem;border:.0625rem solid rgb(180,180,180);margin-right:.75rem;margin-bottom:.375rem;caret-color:#fff0;cursor:default;font-size:1.5rem;font-weight:500;text-align:center}:host .qd-pin-code__input--last{margin-right:0}:host .qd-pin-code__input:focus{border-width:.125rem;border-color:#069}:host .qd-pin-code__input:active{border-width:.0625rem;border-color:#b4b4b4}:host .qd-pin-code__input:focus-visible{outline:none}:host.qd-pin-code--error .qd-pin-code__input{border-color:#c70023}:host.qd-pin-code--error .qd-pin-code__input:focus{border-width:.125rem}:host.qd-pin-code--error .qd-pin-code__input:active{border-width:.0625rem}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.QdFormHintComponent, selector: "qd-form-hint", inputs: ["hint", "control", "hasError", "hintAction", "data-test-id"] }, { kind: "component", type: i7.QdFormLabelComponent, selector: "qd-form-label", inputs: ["label", "isDisabled", "readonly", "viewonly", "control", "tooltip", "data-test-id"] }, { kind: "component", type: i8.QdFormReadonlyComponent, selector: "qd-form-readonly", inputs: ["values", "readonlyAction", "data-test-id"] }, { kind: "component", type: i9.QdFormViewonlyComponent, selector: "qd-form-viewonly", inputs: ["values", "viewonlyAction", "data-test-id"] }] });
384
384
  }
385
385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPinCodeComponent, decorators: [{
386
386
  type: Component,
@@ -392,7 +392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
392
392
  },
393
393
  QdPinCodeService,
394
394
  QdFormsActionEmitterService
395
- ], host: { class: 'qd-pin-code' }, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngFor=\"let i of iterable(codeLength); let index = index; let last = last\">\n <input\n #input\n *ngIf=\"!readonly && !viewonly\"\n [ngClass]=\"'qd-pin-code__input qd-pin-code--input-' + index + (last ? ' qd-pin-code__input--last' : '')\"\n [attr.data-test-id]=\"testId + '-input-' + index\"\n [type]=\"codeHidden ? 'password' : 'tel'\"\n [tabindex]=\"pinCodeService.firstEmpty === index ? 0 : -1\"\n (click)=\"handleCLick($event)\"\n (keydown.backspace)=\"handleDelete($event)\"\n (keydown.delete)=\"handleDelete($event)\"\n (keydown.enter)=\"handleComplete()\"\n (keypress)=\"handleInput($event)\"\n (blur)=\"handleBlur(index)\"\n [disabled]=\"disabled\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"!readonly && !viewonly\">\n <qd-form-hint\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n ></qd-form-hint>\n</ng-container>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;height:4.5rem;margin-bottom:.75rem}:host .qd-pin-code__input{width:1.875rem;height:2.25rem;border:.0625rem solid rgb(180,180,180);margin-right:.75rem;margin-bottom:.375rem;caret-color:#fff0;cursor:default;font-size:1.5rem;font-weight:500;text-align:center}:host .qd-pin-code__input--last{margin-right:0}:host .qd-pin-code__input:focus{border-width:.125rem;border-color:#069}:host .qd-pin-code__input:active{border-width:.0625rem;border-color:#b4b4b4}:host .qd-pin-code__input:focus-visible{outline:none}:host.qd-pin-code--error .qd-pin-code__input{border-color:#c70023}:host.qd-pin-code--error .qd-pin-code__input:focus{border-width:.125rem}:host.qd-pin-code--error .qd-pin-code__input:active{border-width:.0625rem}\n"] }]
395
+ ], host: { class: 'qd-pin-code' }, template: "<qd-form-label\n [label]=\"label\"\n [readonly]=\"readonly\"\n [viewonly]=\"viewonly\"\n [control]=\"control\"\n [tooltip]=\"config?.tooltip\"\n [data-test-id]=\"testId\"\n></qd-form-label>\n\n<ng-container *ngFor=\"let i of iterable(codeLength); let index = index; let last = last\">\n <input\n #input\n *ngIf=\"!readonly && !viewonly\"\n [ngClass]=\"'qd-pin-code__input qd-pin-code--input-' + index + (last ? ' qd-pin-code__input--last' : '')\"\n [attr.data-test-id]=\"testId + '-input-' + index\"\n [type]=\"codeHidden ? 'password' : 'tel'\"\n [tabindex]=\"pinCodeService.firstEmpty === index ? 0 : -1\"\n (click)=\"handleCLick($event)\"\n (keydown.backspace)=\"handleDelete($event)\"\n (keydown.delete)=\"handleDelete($event)\"\n (keydown.enter)=\"handleComplete()\"\n (keypress)=\"handleInput($event)\"\n (blur)=\"handleBlur(index)\"\n [disabled]=\"disabled\"\n />\n</ng-container>\n\n<qd-form-hint\n *ngIf=\"!readonly && !viewonly && (hint || hasError)\"\n [hint]=\"hint\"\n [control]=\"control\"\n [hasError]=\"hasError\"\n [hintAction]=\"hintAction\"\n [data-test-id]=\"testId\"\n></qd-form-hint>\n\n<qd-form-readonly\n *ngIf=\"readonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [readonlyAction]=\"readonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-readonly>\n\n<qd-form-viewonly\n *ngIf=\"viewonly\"\n [values]=\"[pinCodeService.joinedValues]\"\n [viewonlyAction]=\"viewonlyAction\"\n [data-test-id]=\"testId\"\n></qd-form-viewonly>\n", styles: [":host{display:block;height:4.5rem;margin-bottom:.75rem}:host .qd-pin-code__input{width:1.875rem;height:2.25rem;border:.0625rem solid rgb(180,180,180);margin-right:.75rem;margin-bottom:.375rem;caret-color:#fff0;cursor:default;font-size:1.5rem;font-weight:500;text-align:center}:host .qd-pin-code__input--last{margin-right:0}:host .qd-pin-code__input:focus{border-width:.125rem;border-color:#069}:host .qd-pin-code__input:active{border-width:.0625rem;border-color:#b4b4b4}:host .qd-pin-code__input:focus-visible{outline:none}:host.qd-pin-code--error .qd-pin-code__input{border-color:#c70023}:host.qd-pin-code--error .qd-pin-code__input:focus{border-width:.125rem}:host.qd-pin-code--error .qd-pin-code__input:active{border-width:.0625rem}\n"] }]
396
396
  }], ctorParameters: () => [{ type: i1.QdPinCodeService }, { type: i0.ChangeDetectorRef }, { type: i2.QdFormsActionEmitterService }, { type: i3.ControlContainer, decorators: [{
397
397
  type: Optional
398
398
  }, {
@@ -451,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
451
451
  type: HostListener,
452
452
  args: ['paste', ['$event']]
453
453
  }] } });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL3Bpbi1jb2RlL3Bpbi1jb2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9waW4tY29kZS9waW4tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxPQUFPLEVBQ1AsYUFBYSxFQUNiLFFBQVEsRUFDUixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7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LE1BQU07Z0JBS1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFLWSxhQUFhO3NCQUEvQixNQUFNO2dCQUVnQixVQUFVO3NCQUFoQyxZQUFZO3VCQUFDLE9BQU87Z0JBR3JCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBSzFDLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBTTFDLFVBQVU7c0JBRlQsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUN2QyxXQUFXO3VCQUFDLGdDQUFnQztnQkFLN0MsUUFBUTtzQkFGUCxXQUFXO3VCQUFDLHdCQUF3Qjs7c0JBQ3BDLFdBQVc7dUJBQUMsNkJBQTZCO2dCQUt0QyxRQUFRO3NCQUZYLFdBQVc7dUJBQUMscUJBQXFCOztzQkFDakMsV0FBVzt1QkFBQywwQkFBMEI7Z0JBS0osT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtc3RyaWN0LWlnbm9yZVxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUWRGb3JtUGluQ29kZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbC9mb3Jtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgZ2V0Q29kZUhpZGRlbixcbiAgZ2V0Q29kZUxlbmd0aCxcbiAgZ2V0RGlnaXRzT25seSxcbiAgZ2V0RGlzYWJsZWQsXG4gIGdldEZvY3VzT25Jbml0LFxuICBnZXRIaW50LFxuICBnZXRIaW50QWN0aW9uLFxuICBnZXRMYWJlbCxcbiAgZ2V0UmVhZG9ubHksXG4gIGdldFJlYWRvbmx5QWN0aW9uLFxuICBnZXRWaWV3b25seSxcbiAgZ2V0Vmlld29ubHlBY3Rpb25cbn0gZnJvbSAnLi4vc2hhcmVkL2hlbHBlcnMvZm9ybXMuaGVscGVycyc7XG5pbXBvcnQgeyBoYXNWYWxpZGF0aW9uS2V5IH0gZnJvbSAnLi4vc2hhcmVkL2hlbHBlcnMvaGFzLXZhbGlkYXRvcnMuaGVscGVycyc7XG5pbXBvcnQgeyBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvYWN0aW9uLWVtaXR0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZFBpbkNvZGVTZXJ2aWNlIH0gZnJvbSAnLi9waW4tY29kZS1zZXJ2aWNlL3Bpbi1jb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRFdmVudEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2V2ZW50LWJyb2tlci5zZXJ2aWNlJztcblxuLyoqXG4gKiAqKlFkUGluQ29kZSoqIGNvbXBvbmVudCBwcm92aWRlcyBhIEZvcm1FbGVtZW50LlxuICogVGhlICoqUWRQaW5Db2RlKiogaXMgYSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBhIGZvcm0gZWxlbWVudCBmb3IgZW50ZXJpbmcgYSBQSU4gY29kZS48YnIgLz5cbiAqIEl0IGFsbG93cyB1c2VycyB0byBpbnB1dCBhIFBJTiBjb2RlIGJ5IHR5cGluZyBpbmRpdmlkdWFsIGRpZ2l0cyBvciBsZXR0ZXJzIGludG8gc2VwYXJhdGUgaW5wdXQgZmllbGRzLiBJdCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyMqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgcGluQ29kZTogbmV3IFFkRm9ybUNvbnRyb2woKVxuICogfSk7XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtcGluLWNvZGUgW2Zvcm1Db250cm9sTmFtZV09XCJwaW5Db2RlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLXBpbi1jb2RlPlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogIyMjIyoqVXNhZ2Ugd2l0aCBNb2RlbCBCaW5kaW5nKipcbiAqIGBgYHRzXG4gKiB2YWx1ZTtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLXBpbi1jb2RlIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLXBpbi1jb2RlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3FkLXBpbi1jb2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGluLWNvZGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogUWRQaW5Db2RlQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFFkUGluQ29kZVNlcnZpY2UsXG4gICAgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlXG4gIF0sXG4gIGhvc3Q6IHsgY2xhc3M6ICdxZC1waW4tY29kZScgfVxufSlcbmV4cG9ydCBjbGFzcyBRZFBpbkNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIG5hbWUgY2FuIGJlIGFzc2lnbmVkIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFJlYWN0aXZlIEZvcm1zLlxuICAgKi9cbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGZvcm0gaXRlbSB2YWx1ZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLXBpbi1jb2RlIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIiAoY29tcGxldGVkKT1cImNvbXBsZXRlZCgkZXZlbnQpXCI+PC9xZC1waW4tY29kZT5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGl0ZW1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGxhYmVsOiB7IGkxOG46ICdsYWJlbCcgfSxcbiAgICogICBoaW50OiB7IGkxOG46ICdoaW50JyB9LFxuICAgKiAgIGNvZGVMZW5ndGg6IDZcbiAgICogfTtcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogUWRGb3JtUGluQ29kZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJykgdGVzdElkID0gJ3Bpbi1jb2RlJztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaW5wdXQgd2FzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIFJldHVybiB2YWx1ZSBtYXRjaGVzIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC4gUmV0dXJuIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaGludCBpcyBjbGlja2VkL3RhcHBlZC4gYGhpbnRBY3Rpb25gIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbGlja0hpbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHJlYWRvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgcmVhZG9ubHlBY3Rpb24gYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tSZWFkb25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmlld29ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGB2aWV3b25seUFjdGlvbiBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2lucHV0JykgaW5wdXRzTGlzdCE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1yZWFkb25seScpXG4gIHJlYWRvbmx5OiBib29sZWFuO1xuICByZWFkb25seUFjdGlvbjogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS12aWV3b25seScpXG4gIHZpZXdvbmx5OiBib29sZWFuO1xuICB2aWV3b25seUFjdGlvbjogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0taGludC1hY3Rpb24nKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1oaW50LWFjdGlvbicpXG4gIGhpbnRBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0tZGlzYWJsZWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1kaXNhYmxlZCcpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtcGluLWNvZGUtLWVycm9yJylcbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wudG91Y2hlZCAmJiB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmJsdXJDdXJyZW50IDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pIG9uUGFzdGUoJGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVQYXN0ZSgkZXZlbnQpO1xuICB9XG5cbiAgbGFiZWw6IHN0cmluZztcbiAgaGludDogc3RyaW5nO1xuICBkaWdpdHNPbmx5OiBib29sZWFuO1xuICBjb2RlTGVuZ3RoOiBudW1iZXI7XG4gIGZvY3VzT25Jbml0OiBib29sZWFuO1xuICBjb2RlSGlkZGVuOiBib29sZWFuO1xuICBpdGVyYWJsZTogQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5O1xuICBibHVyQ3VycmVudDogYm9vbGVhbjtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gIHByaXZhdGUgX2FjdGlvbkVtaXR0ZXJTZXJ2aWNlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGVycm9ycygpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmVycm9ycyA6IFtdO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb250cm9sKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gaGFzVmFsaWRhdGlvbktleSh0aGlzLmNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBpbkNvZGVTZXJ2aWNlOiBRZFBpbkNvZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50QnJva2VyU2VydmljZTogUWRFdmVudEJyb2tlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbigpO1xuXG4gICAgdGhpcy5waW5Db2RlU2VydmljZS5jb2RlTGVuZ3RoID0gdGhpcy5jb2RlTGVuZ3RoO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UudmFsdWVzID0gKHRoaXMudmFsdWUgPz8gdGhpcy5jb25maWc/LnZhbHVlKT8uc3BsaXQoJycpID8/IFtdO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lcikge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1FELVVJIHwgUWRQaW5Db2RlQ29tcG9uZW50IC0gTWlzc2luZyBGb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIGZyb20gaG9zdCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldElucHV0cygpO1xuICAgIHRoaXMuZmlsbElucHV0cyh0aGlzLnBpbkNvZGVTZXJ2aWNlLnZhbHVlcyk7XG4gICAgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcblxuICAgICAgaWYgKHRoaXMuaGFzRm9jdXNPbkluaXRDaGFuZ2VkKGNoYW5nZXNbJ2NvbmZpZyddKSkgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG5cbiAgICAgIGlmICh0aGlzLmhhc0NvZGVMZW5ndGhDaGFuZ2VkKGNoYW5nZXNbJ2NvbmZpZyddKSkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvZGVMZW5ndGhDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25FbWl0dGVyU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWVzKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZXMpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRpZ2l0c09ubHkgJiYgIXRoaXMuaXNJbml0aWFsVGV4dE51bWVyaWModmFsdWVzKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc051bWVyaWNPckxhdGluKHZhbHVlcykpIHJldHVybjtcblxuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWVzKHZhbHVlcyk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgaGFuZGxlQ0xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMucGluQ29kZVNlcnZpY2UuYWxsRmlsbGVkKSB7XG4gICAgICB0aGlzLmZvY3VzRmlyc3RFbXB0eSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0ZpcnN0RW1wdHkoKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgkZXZlbnQpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX2lucHV0c1t0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleF0udmFsdWUgPSAnJztcblxuICAgIHRoaXMuaGFuZGxlUHJldmlvdXMoKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLl9vblRvdWNoKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5waW5Db2RlU2VydmljZS5qb2luZWRWYWx1ZXMpO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoJGV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAodGhpcy5pc0VudGVyKCRldmVudC5rZXkpKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9ICRldmVudC5rZXkudG9VcHBlckNhc2UoKTtcblxuICAgIGlmICh0aGlzLmRpZ2l0c09ubHkgJiYgIXRoaXMuaXNOdW1lcmljKHZhbHVlKSkge1xuICAgICAgdGhpcy5zZXRFcnJvckRpZ2l0c09ubHkoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc051bWVyaWNPckxhdGluKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5faW5wdXRzW3RoaXMucGluQ29kZVNlcnZpY2UuY3VycmVudEluZGV4XS52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuZmlsbGVkVGlsbCA9IHRoaXMucGluQ29kZVNlcnZpY2UuY3VycmVudEluZGV4O1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWUodmFsdWUpO1xuXG4gICAgdGhpcy5oYW5kbGVOZXh0KCk7XG5cbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG4gICAgdGhpcy5fb25Ub3VjaCh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgfVxuXG4gIGhhbmRsZUJsdXIoaW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJDdXJyZW50ID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5waW5Db2RlU2VydmljZS5jdXJyZW50SW5kZXggPT09IGluZGV4KSB7XG4gICAgICB0aGlzLmJsdXJDdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpbkNvZGVTZXJ2aWNlLmFsbEZpbGxlZCkge1xuICAgICAgdGhpcy5jb21wbGV0ZWQuZW1pdCh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG5cbiAgICAgIHRoaXMuYmx1ckFsbCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubGFiZWwgPSBnZXRMYWJlbCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oaW50ID0gZ2V0SGludCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5yZWFkb25seSA9IGdldFJlYWRvbmx5KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5QWN0aW9uID0gZ2V0UmVhZG9ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy52aWV3b25seUFjdGlvbiA9IGdldFZpZXdvbmx5QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRpc2FibGVkID0gZ2V0RGlzYWJsZWQodGhpcy5jb25maWcpIHx8ICEhdGhpcy5jb250cm9sPy5kaXNhYmxlZDtcbiAgICB0aGlzLmhpbnRBY3Rpb24gPSBnZXRIaW50QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRpZ2l0c09ubHkgPSBnZXREaWdpdHNPbmx5KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmNvZGVMZW5ndGggPSBnZXRDb2RlTGVuZ3RoKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmZvY3VzT25Jbml0ID0gZ2V0Rm9jdXNPbkluaXQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuY29kZUhpZGRlbiA9IGdldENvZGVIaWRkZW4odGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNGb2N1c09uSW5pdENoYW5nZWQoY29uZmlnOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpb3VzVmFsdWU/LmZvY3VzT25Jbml0ICE9PSBjb25maWcuY3VycmVudFZhbHVlPy5mb2N1c09uSW5pdDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ29kZUxlbmd0aENoYW5nZWQoY29uZmlnOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpb3VzVmFsdWU/LmNvZGVMZW5ndGggIT09IGNvbmZpZy5jdXJyZW50VmFsdWU/LmNvZGVMZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvZGVMZW5ndGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dHNMaXN0Py5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLmVtcHR5QWxsKCk7XG4gICAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgICB0aGlzLmNvbnRyb2xDb250YWluZXI/LnJlc2V0KCk7XG4gICAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLmNvZGVMZW5ndGggPSB0aGlzLmNvZGVMZW5ndGg7XG4gICAgICB0aGlzLmdldElucHV0cygpO1xuICAgICAgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldElucHV0cygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dHMgPSB0aGlzLmlucHV0c0xpc3QubWFwKGlucHV0ID0+IGlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbXB0eUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dHMuZm9yRWFjaChpbnB1dCA9PiAoaW5wdXQudmFsdWUgPSAnJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0c1swXT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNDdXJyZW50KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0c1t0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleF0uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNGaXJzdEVtcHR5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpbkNvZGVTZXJ2aWNlLmZpcnN0RW1wdHkgPT09IC0xKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbnB1dHNbdGhpcy5waW5Db2RlU2VydmljZS5maXJzdEVtcHR5XT8uZm9jdXMoKTtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleCA9IHRoaXMucGluQ29kZVNlcnZpY2UuZmlyc3RFbXB0eTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNGaXJzdE9uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb2N1c09uSW5pdCkgdGhpcy5mb2N1c0ZpcnN0KCk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRzLmZvckVhY2goaW5wdXQgPT4gaW5wdXQuYmx1cigpKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5ibHVyQWxsKCk7XG4gICAgdGhpcy5mb2N1c0N1cnJlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLm1hdGNoUGFzdGVkVGV4dFBhdHRlcm4oJGV2ZW50KSkge1xuICAgICAgdGhpcy5zZXRFcnJvckRpZ2l0c09ubHkoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW1wdHlBbGwoKTtcbiAgICB0aGlzLmZvY3VzRmlyc3QoKTtcblxuICAgIHRoaXMuaGFuZGxlSW5wdXRzV2hlblBhc3RlKHRoaXMuZ2V0Q2xpcGJvYXJkVGV4dCgkZXZlbnQpLnRvVXBwZXJDYXNlKCkuc3BsaXQoJycpKTtcblxuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWVzKHRoaXMuZ2V0Q2xpcGJvYXJkVGV4dCgkZXZlbnQpKTtcbiAgICB0aGlzLmZvY3VzRmlyc3RFbXB0eSgpO1xuICAgIHRoaXMuaGFuZGxlQ29tcGxldGUoKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLl9vblRvdWNoKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5waW5Db2RlU2VydmljZS5qb2luZWRWYWx1ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaFBhc3RlZFRleHRQYXR0ZXJuKCRldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDbGlwYm9hcmRUZXh0KCRldmVudClcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5ldmVyeShpdGVtID0+ICh0aGlzLmRpZ2l0c09ubHkgJiYgdGhpcy5pc051bWVyaWMoaXRlbSkpIHx8ICghdGhpcy5kaWdpdHNPbmx5ICYmIHRoaXMuaXNOdW1lcmljT3JMYXRpbihpdGVtKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luaXRpYWxUZXh0TnVtZXJpYyh0ZXh0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRleHQuc3BsaXQoJycpLmV2ZXJ5KGVsZW1lbnQgPT4gdGhpcy5pc051bWVyaWMoZWxlbWVudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGlwYm9hcmRUZXh0KCRldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiAkZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0c1doZW5QYXN0ZShjb2RlTGlzdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbGxJbnB1dHMoY29kZUxpc3QpO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuZmlsbGVkVGlsbCA9XG4gICAgICB0aGlzLl9pbnB1dHMubGVuZ3RoIDwgY29kZUxpc3QubGVuZ3RoID8gdGhpcy5faW5wdXRzLmxlbmd0aCAtIDEgOiBjb2RlTGlzdC5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsSW5wdXRzKGNvZGVMaXN0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0cy5mb3JFYWNoKChpbnB1dCwgaSkgPT4gKGlucHV0LnZhbHVlID0gY29kZUxpc3RbaV0gfHwgJycpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZS5tYXRjaCgvXFxkL2dpdSk7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtZXJpY09yTGF0aW4odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXZhbHVlLm1hdGNoKC9bQS1aXFxkXS9naXUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGVyKGtleTogS2V5Ym9hcmRFdmVudFsna2V5J10pOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ID09PSAnRW50ZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnN0ZXBQcmV2aW91cygpO1xuXG4gICAgdGhpcy5mb2N1c0N1cnJlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnN0ZXBOZXh0KCk7XG5cbiAgICB0aGlzLmZvY3VzQ3VycmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvckRpZ2l0c09ubHkoKTogdm9pZCB7XG4gICAgLy8gVE9ETzogVXNlIEZvcm1Db250cm9sLCB3aGVuIEFuZ3VsYXIgVXBkYXRlIGlzIGRvbmUhXG4gICAgdGhpcy5jb250cm9sPy5zZXRFcnJvcnMoeyBkaWdpdHNPbmx5OiAnaTE4bi5xZC5mb3JtLmVycm9yLmRpZ2l0c09ubHknIH0pO1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHRoaXMudHJpZ2dlclZhbGlkYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24gfCB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudEJyb2tlclNlcnZpY2UuY29uc3VtZTx7IGlzVmlld29ubHk6IGJvb2xlYW4gfT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKS5zdWJzY3JpYmUodG9waWMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy52aWV3b25seSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm47XG5cbiAgICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZywgdG9waWMucGF5bG9hZC5pc1ZpZXdvbmx5KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGkgb2YgaXRlcmFibGUoY29kZUxlbmd0aCk7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgPGlucHV0XG4gICAgI2lucHV0XG4gICAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgICBbbmdDbGFzc109XCIncWQtcGluLWNvZGVfX2lucHV0IHFkLXBpbi1jb2RlLS1pbnB1dC0nICsgaW5kZXggKyAobGFzdCA/ICcgcWQtcGluLWNvZGVfX2lucHV0LS1sYXN0JyA6ICcnKVwiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctaW5wdXQtJyArIGluZGV4XCJcbiAgICBbdHlwZV09XCJjb2RlSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZWwnXCJcbiAgICBbdGFiaW5kZXhdPVwicGluQ29kZVNlcnZpY2UuZmlyc3RFbXB0eSA9PT0gaW5kZXggPyAwIDogLTFcIlxuICAgIChjbGljayk9XCJoYW5kbGVDTGljaygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiaGFuZGxlRGVsZXRlKCRldmVudClcIlxuICAgIChrZXlkb3duLmRlbGV0ZSk9XCJoYW5kbGVEZWxldGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlQ29tcGxldGUoKVwiXG4gICAgKGtleXByZXNzKT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgIChibHVyKT1cImhhbmRsZUJsdXIoaW5kZXgpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCI+XG4gIDxxZC1mb3JtLWhpbnRcbiAgICBbaGludF09XCJoaW50XCJcbiAgICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgICBbaGFzRXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtoaW50QWN0aW9uXT1cImhpbnRBY3Rpb25cIlxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgPjwvcWQtZm9ybS1oaW50PlxuPC9uZy1jb250YWluZXI+XG5cbjxxZC1mb3JtLXJlYWRvbmx5XG4gICpuZ0lmPVwicmVhZG9ubHlcIlxuICBbdmFsdWVzXT1cIltwaW5Db2RlU2VydmljZS5qb2luZWRWYWx1ZXNdXCJcbiAgW3JlYWRvbmx5QWN0aW9uXT1cInJlYWRvbmx5QWN0aW9uXCJcbiAgW2RhdGEtdGVzdC1pZF09XCJ0ZXN0SWRcIlxuPjwvcWQtZm9ybS1yZWFkb25seT5cblxuPHFkLWZvcm0tdmlld29ubHlcbiAgKm5nSWY9XCJ2aWV3b25seVwiXG4gIFt2YWx1ZXNdPVwiW3BpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlc11cIlxuICBbdmlld29ubHlBY3Rpb25dPVwidmlld29ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXZpZXdvbmx5PlxuIl19
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2Zvcm1zL3Bpbi1jb2RlL3Bpbi1jb2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9mb3Jtcy9waW4tY29kZS9waW4tY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFHVCxRQUFRLEVBQ1IsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBRWxCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxPQUFPLEVBQ1AsYUFBYSxFQUNiLFFBQVEsRUFDUixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7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LE1BQU07Z0JBS1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFLWSxhQUFhO3NCQUEvQixNQUFNO2dCQUVnQixVQUFVO3NCQUFoQyxZQUFZO3VCQUFDLE9BQU87Z0JBR3JCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBSzFDLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBTTFDLFVBQVU7c0JBRlQsV0FBVzt1QkFBQywyQkFBMkI7O3NCQUN2QyxXQUFXO3VCQUFDLGdDQUFnQztnQkFLN0MsUUFBUTtzQkFGUCxXQUFXO3VCQUFDLHdCQUF3Qjs7c0JBQ3BDLFdBQVc7dUJBQUMsNkJBQTZCO2dCQUt0QyxRQUFRO3NCQUZYLFdBQVc7dUJBQUMscUJBQXFCOztzQkFDakMsV0FBVzt1QkFBQywwQkFBMEI7Z0JBS0osT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtc3RyaWN0LWlnbm9yZVxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUWRGb3JtUGluQ29kZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbC9mb3Jtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgZ2V0Q29kZUhpZGRlbixcbiAgZ2V0Q29kZUxlbmd0aCxcbiAgZ2V0RGlnaXRzT25seSxcbiAgZ2V0RGlzYWJsZWQsXG4gIGdldEZvY3VzT25Jbml0LFxuICBnZXRIaW50LFxuICBnZXRIaW50QWN0aW9uLFxuICBnZXRMYWJlbCxcbiAgZ2V0UmVhZG9ubHksXG4gIGdldFJlYWRvbmx5QWN0aW9uLFxuICBnZXRWaWV3b25seSxcbiAgZ2V0Vmlld29ubHlBY3Rpb25cbn0gZnJvbSAnLi4vc2hhcmVkL2hlbHBlcnMvZm9ybXMuaGVscGVycyc7XG5pbXBvcnQgeyBoYXNWYWxpZGF0aW9uS2V5IH0gZnJvbSAnLi4vc2hhcmVkL2hlbHBlcnMvaGFzLXZhbGlkYXRvcnMuaGVscGVycyc7XG5pbXBvcnQgeyBRZEZvcm1zQWN0aW9uRW1pdHRlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvYWN0aW9uLWVtaXR0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZFBpbkNvZGVTZXJ2aWNlIH0gZnJvbSAnLi9waW4tY29kZS1zZXJ2aWNlL3Bpbi1jb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRFdmVudEJyb2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2V2ZW50LWJyb2tlci5zZXJ2aWNlJztcblxuLyoqXG4gKiAqKlFkUGluQ29kZSoqIGNvbXBvbmVudCBwcm92aWRlcyBhIEZvcm1FbGVtZW50LlxuICogVGhlICoqUWRQaW5Db2RlKiogaXMgYSBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBhIGZvcm0gZWxlbWVudCBmb3IgZW50ZXJpbmcgYSBQSU4gY29kZS48YnIgLz5cbiAqIEl0IGFsbG93cyB1c2VycyB0byBpbnB1dCBhIFBJTiBjb2RlIGJ5IHR5cGluZyBpbmRpdmlkdWFsIGRpZ2l0cyBvciBsZXR0ZXJzIGludG8gc2VwYXJhdGUgaW5wdXQgZmllbGRzLiBJdCBjYW4gYmUgdXNlZCB3aXRoIFF1YWRyZWwgUmVhY3RpdmUgRm9ybXMgb3Igd2l0aCBtb2RlbCBiaW5kaW5nLlxuICpcbiAqICMjIyMqKlVzYWdlIHdpdGggUmVhY3RpdmUgRm9ybXMqKlxuICpcbiAqIGBgYHRzXG4gKiBmb3JtID0gbmV3IFFkRm9ybUdyb3VwKHtcbiAqICAgcGluQ29kZTogbmV3IFFkRm9ybUNvbnRyb2woKVxuICogfSk7XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICogICA8cWQtcGluLWNvZGUgW2Zvcm1Db250cm9sTmFtZV09XCJwaW5Db2RlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLXBpbi1jb2RlPlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogIyMjIyoqVXNhZ2Ugd2l0aCBNb2RlbCBCaW5kaW5nKipcbiAqIGBgYHRzXG4gKiB2YWx1ZTtcbiAqIGBgYFxuICogYGBgaHRtbFxuICogPHFkLXBpbi1jb2RlIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIj48L3FkLXBpbi1jb2RlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3FkLXBpbi1jb2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGluLWNvZGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogUWRQaW5Db2RlQ29tcG9uZW50LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFFkUGluQ29kZVNlcnZpY2UsXG4gICAgUWRGb3Jtc0FjdGlvbkVtaXR0ZXJTZXJ2aWNlXG4gIF0sXG4gIGhvc3Q6IHsgY2xhc3M6ICdxZC1waW4tY29kZScgfVxufSlcbmV4cG9ydCBjbGFzcyBRZFBpbkNvZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIG5hbWUgY2FuIGJlIGFzc2lnbmVkIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFJlYWN0aXZlIEZvcm1zLlxuICAgKi9cbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGZvcm0gaXRlbSB2YWx1ZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggTW9kZWwgQmluZGluZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogPHFkLXBpbi1jb2RlIFsodmFsdWUpXT1cInZhbHVlXCIgW2NvbmZpZ109XCJjb25maWdcIiAoY29tcGxldGVkKT1cImNvbXBsZXRlZCgkZXZlbnQpXCI+PC9xZC1waW4tY29kZT5cbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGl0ZW1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIGxhYmVsOiB7IGkxOG46ICdsYWJlbCcgfSxcbiAgICogICBoaW50OiB7IGkxOG46ICdoaW50JyB9LFxuICAgKiAgIGNvZGVMZW5ndGg6IDZcbiAgICogfTtcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogUWRGb3JtUGluQ29kZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgc3RhdGljIHRlc3QgSUQgZm9yIGludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBzZXQuIDxiciAvPlxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBIVE1MIGF0dHJpYnV0ZSBbZGF0YS10ZXN0LWlkXS5cbiAgICovXG4gIEBJbnB1dCgnZGF0YS10ZXN0LWlkJykgdGVzdElkID0gJ3Bpbi1jb2RlJztcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaW5wdXQgd2FzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIFJldHVybiB2YWx1ZSBtYXRjaGVzIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB3aGVuIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC4gUmV0dXJuIHZhbHVlIG1hdGNoZXMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgaGludCBpcyBjbGlja2VkL3RhcHBlZC4gYGhpbnRBY3Rpb25gIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbGlja0hpbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIHJlYWRvbmx5IHZhbHVlIGlzIGNsaWNrZWQvdGFwcGVkLiBgcmVhZG9ubHlBY3Rpb24gYCBtdXN0IGJlIHNldCB0byBgdHJ1ZWAgZm9yIHRoaXMuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xpY2tSZWFkb25seSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgdmlld29ubHkgdmFsdWUgaXMgY2xpY2tlZC90YXBwZWQuIGB2aWV3b25seUFjdGlvbiBgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCBmb3IgdGhpcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbGlja1ZpZXdvbmx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ2lucHV0JykgaW5wdXRzTGlzdCE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1yZWFkb25seScpXG4gIHJlYWRvbmx5OiBib29sZWFuO1xuICByZWFkb25seUFjdGlvbjogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS12aWV3b25seScpXG4gIHZpZXdvbmx5OiBib29sZWFuO1xuICB2aWV3b25seUFjdGlvbjogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0taGludC1hY3Rpb24nKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1oaW50LWFjdGlvbicpXG4gIGhpbnRBY3Rpb24gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLWZvcm0tZGlzYWJsZWQnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnFkLXBpbi1jb2RlLS1kaXNhYmxlZCcpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtZm9ybS1lcnJvcicpXG4gIEBIb3N0QmluZGluZygnY2xhc3MucWQtcGluLWNvZGUtLWVycm9yJylcbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wudG91Y2hlZCAmJiB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmJsdXJDdXJyZW50IDogZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pIG9uUGFzdGUoJGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVQYXN0ZSgkZXZlbnQpO1xuICB9XG5cbiAgbGFiZWw6IHN0cmluZztcbiAgaGludDogc3RyaW5nO1xuICBkaWdpdHNPbmx5OiBib29sZWFuO1xuICBjb2RlTGVuZ3RoOiBudW1iZXI7XG4gIGZvY3VzT25Jbml0OiBib29sZWFuO1xuICBjb2RlSGlkZGVuOiBib29sZWFuO1xuICBpdGVyYWJsZTogQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5O1xuICBibHVyQ3VycmVudDogYm9vbGVhbjtcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gIHByaXZhdGUgX2FjdGlvbkVtaXR0ZXJTZXJ2aWNlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfb25Ub3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgZ2V0IGVycm9ycygpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmVycm9ycyA6IFtdO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb250cm9sKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gaGFzVmFsaWRhdGlvbktleSh0aGlzLmNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBpbkNvZGVTZXJ2aWNlOiBRZFBpbkNvZGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uRW1pdHRlclNlcnZpY2U6IFFkRm9ybXNBY3Rpb25FbWl0dGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIEBTa2lwU2VsZigpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50QnJva2VyU2VydmljZTogUWRFdmVudEJyb2tlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29uZmlndXJhdGlvbigpO1xuXG4gICAgdGhpcy5waW5Db2RlU2VydmljZS5jb2RlTGVuZ3RoID0gdGhpcy5jb2RlTGVuZ3RoO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UudmFsdWVzID0gKHRoaXMudmFsdWUgPz8gdGhpcy5jb25maWc/LnZhbHVlKT8uc3BsaXQoJycpID8/IFtdO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbENvbnRhaW5lcikge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1FELVVJIHwgUWRQaW5Db2RlQ29tcG9uZW50IC0gTWlzc2luZyBGb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIGZyb20gaG9zdCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5oaW50RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja0hpbnQuZW1pdCgpKSk7XG4gICAgdGhpcy5fc3Vicy5hZGQodGhpcy5hY3Rpb25FbWl0dGVyU2VydmljZS5yZWFkb25seUV2ZW50RW1pdHRlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xpY2tSZWFkb25seS5lbWl0KCkpKTtcbiAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmFjdGlvbkVtaXR0ZXJTZXJ2aWNlLnZpZXdvbmx5RXZlbnRFbWl0dGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja1ZpZXdvbmx5LmVtaXQoKSkpO1xuICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldElucHV0cygpO1xuICAgIHRoaXMuZmlsbElucHV0cyh0aGlzLnBpbkNvZGVTZXJ2aWNlLnZhbHVlcyk7XG4gICAgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTtcblxuICAgICAgaWYgKHRoaXMuaGFzRm9jdXNPbkluaXRDaGFuZ2VkKGNoYW5nZXNbJ2NvbmZpZyddKSkgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG5cbiAgICAgIGlmICh0aGlzLmhhc0NvZGVMZW5ndGhDaGFuZ2VkKGNoYW5nZXNbJ2NvbmZpZyddKSkge1xuICAgICAgICB0aGlzLmhhbmRsZUNvZGVMZW5ndGhDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25FbWl0dGVyU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWVzKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZXMpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRpZ2l0c09ubHkgJiYgIXRoaXMuaXNJbml0aWFsVGV4dE51bWVyaWModmFsdWVzKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc051bWVyaWNPckxhdGluKHZhbHVlcykpIHJldHVybjtcblxuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWVzKHZhbHVlcyk7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgaGFuZGxlQ0xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMucGluQ29kZVNlcnZpY2UuYWxsRmlsbGVkKSB7XG4gICAgICB0aGlzLmZvY3VzRmlyc3RFbXB0eSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mb2N1c0ZpcnN0RW1wdHkoKTtcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgkZXZlbnQpOiB2b2lkIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX2lucHV0c1t0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleF0udmFsdWUgPSAnJztcblxuICAgIHRoaXMuaGFuZGxlUHJldmlvdXMoKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLl9vblRvdWNoKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5waW5Db2RlU2VydmljZS5qb2luZWRWYWx1ZXMpO1xuICB9XG5cbiAgaGFuZGxlSW5wdXQoJGV2ZW50KTogdm9pZCB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAodGhpcy5pc0VudGVyKCRldmVudC5rZXkpKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZSA9ICRldmVudC5rZXkudG9VcHBlckNhc2UoKTtcblxuICAgIGlmICh0aGlzLmRpZ2l0c09ubHkgJiYgIXRoaXMuaXNOdW1lcmljKHZhbHVlKSkge1xuICAgICAgdGhpcy5zZXRFcnJvckRpZ2l0c09ubHkoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc051bWVyaWNPckxhdGluKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5faW5wdXRzW3RoaXMucGluQ29kZVNlcnZpY2UuY3VycmVudEluZGV4XS52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuZmlsbGVkVGlsbCA9IHRoaXMucGluQ29kZVNlcnZpY2UuY3VycmVudEluZGV4O1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWUodmFsdWUpO1xuXG4gICAgdGhpcy5oYW5kbGVOZXh0KCk7XG5cbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG4gICAgdGhpcy5fb25Ub3VjaCh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgfVxuXG4gIGhhbmRsZUJsdXIoaW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJDdXJyZW50ID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5waW5Db2RlU2VydmljZS5jdXJyZW50SW5kZXggPT09IGluZGV4KSB7XG4gICAgICB0aGlzLmJsdXJDdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hlY2tFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpbkNvZGVTZXJ2aWNlLmFsbEZpbGxlZCkge1xuICAgICAgdGhpcy5jb21wbGV0ZWQuZW1pdCh0aGlzLnBpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlcyk7XG5cbiAgICAgIHRoaXMuYmx1ckFsbCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubGFiZWwgPSBnZXRMYWJlbCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5oaW50ID0gZ2V0SGludCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5yZWFkb25seSA9IGdldFJlYWRvbmx5KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnJlYWRvbmx5QWN0aW9uID0gZ2V0UmVhZG9ubHlBY3Rpb24odGhpcy5jb25maWcpO1xuICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy52aWV3b25seUFjdGlvbiA9IGdldFZpZXdvbmx5QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRpc2FibGVkID0gZ2V0RGlzYWJsZWQodGhpcy5jb25maWcpIHx8ICEhdGhpcy5jb250cm9sPy5kaXNhYmxlZDtcbiAgICB0aGlzLmhpbnRBY3Rpb24gPSBnZXRIaW50QWN0aW9uKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRpZ2l0c09ubHkgPSBnZXREaWdpdHNPbmx5KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmNvZGVMZW5ndGggPSBnZXRDb2RlTGVuZ3RoKHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmZvY3VzT25Jbml0ID0gZ2V0Rm9jdXNPbkluaXQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuY29kZUhpZGRlbiA9IGdldENvZGVIaWRkZW4odGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNGb2N1c09uSW5pdENoYW5nZWQoY29uZmlnOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpb3VzVmFsdWU/LmZvY3VzT25Jbml0ICE9PSBjb25maWcuY3VycmVudFZhbHVlPy5mb2N1c09uSW5pdDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ29kZUxlbmd0aENoYW5nZWQoY29uZmlnOiBTaW1wbGVDaGFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpb3VzVmFsdWU/LmNvZGVMZW5ndGggIT09IGNvbmZpZy5jdXJyZW50VmFsdWU/LmNvZGVMZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvZGVMZW5ndGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dHNMaXN0Py5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLmVtcHR5QWxsKCk7XG4gICAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgICB0aGlzLmNvbnRyb2xDb250YWluZXI/LnJlc2V0KCk7XG4gICAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLmNvZGVMZW5ndGggPSB0aGlzLmNvZGVMZW5ndGg7XG4gICAgICB0aGlzLmdldElucHV0cygpO1xuICAgICAgdGhpcy5mb2N1c0ZpcnN0T25Jbml0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldElucHV0cygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dHMgPSB0aGlzLmlucHV0c0xpc3QubWFwKGlucHV0ID0+IGlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbXB0eUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dHMuZm9yRWFjaChpbnB1dCA9PiAoaW5wdXQudmFsdWUgPSAnJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0c1swXT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNDdXJyZW50KCk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0c1t0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleF0uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNGaXJzdEVtcHR5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpbkNvZGVTZXJ2aWNlLmZpcnN0RW1wdHkgPT09IC0xKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbnB1dHNbdGhpcy5waW5Db2RlU2VydmljZS5maXJzdEVtcHR5XT8uZm9jdXMoKTtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLmN1cnJlbnRJbmRleCA9IHRoaXMucGluQ29kZVNlcnZpY2UuZmlyc3RFbXB0eTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNGaXJzdE9uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb2N1c09uSW5pdCkgdGhpcy5mb2N1c0ZpcnN0KCk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXRzLmZvckVhY2goaW5wdXQgPT4gaW5wdXQuYmx1cigpKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5ibHVyQWxsKCk7XG4gICAgdGhpcy5mb2N1c0N1cnJlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLm1hdGNoUGFzdGVkVGV4dFBhdHRlcm4oJGV2ZW50KSkge1xuICAgICAgdGhpcy5zZXRFcnJvckRpZ2l0c09ubHkoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW1wdHlBbGwoKTtcbiAgICB0aGlzLmZvY3VzRmlyc3QoKTtcblxuICAgIHRoaXMuaGFuZGxlSW5wdXRzV2hlblBhc3RlKHRoaXMuZ2V0Q2xpcGJvYXJkVGV4dCgkZXZlbnQpLnRvVXBwZXJDYXNlKCkuc3BsaXQoJycpKTtcblxuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuYWRkVmFsdWVzKHRoaXMuZ2V0Q2xpcGJvYXJkVGV4dCgkZXZlbnQpKTtcbiAgICB0aGlzLmZvY3VzRmlyc3RFbXB0eSgpO1xuICAgIHRoaXMuaGFuZGxlQ29tcGxldGUoKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLl9vblRvdWNoKHRoaXMucGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5waW5Db2RlU2VydmljZS5qb2luZWRWYWx1ZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXRjaFBhc3RlZFRleHRQYXR0ZXJuKCRldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDbGlwYm9hcmRUZXh0KCRldmVudClcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5ldmVyeShpdGVtID0+ICh0aGlzLmRpZ2l0c09ubHkgJiYgdGhpcy5pc051bWVyaWMoaXRlbSkpIHx8ICghdGhpcy5kaWdpdHNPbmx5ICYmIHRoaXMuaXNOdW1lcmljT3JMYXRpbihpdGVtKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luaXRpYWxUZXh0TnVtZXJpYyh0ZXh0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRleHQuc3BsaXQoJycpLmV2ZXJ5KGVsZW1lbnQgPT4gdGhpcy5pc051bWVyaWMoZWxlbWVudCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGlwYm9hcmRUZXh0KCRldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiAkZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0c1doZW5QYXN0ZShjb2RlTGlzdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbGxJbnB1dHMoY29kZUxpc3QpO1xuICAgIHRoaXMucGluQ29kZVNlcnZpY2UuZmlsbGVkVGlsbCA9XG4gICAgICB0aGlzLl9pbnB1dHMubGVuZ3RoIDwgY29kZUxpc3QubGVuZ3RoID8gdGhpcy5faW5wdXRzLmxlbmd0aCAtIDEgOiBjb2RlTGlzdC5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsSW5wdXRzKGNvZGVMaXN0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0cy5mb3JFYWNoKChpbnB1dCwgaSkgPT4gKGlucHV0LnZhbHVlID0gY29kZUxpc3RbaV0gfHwgJycpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWx1ZS5tYXRjaCgvXFxkL2dpdSk7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtZXJpY09yTGF0aW4odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXZhbHVlLm1hdGNoKC9bQS1aXFxkXS9naXUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudGVyKGtleTogS2V5Ym9hcmRFdmVudFsna2V5J10pOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ID09PSAnRW50ZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcmV2aW91cygpOiB2b2lkIHtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnN0ZXBQcmV2aW91cygpO1xuXG4gICAgdGhpcy5mb2N1c0N1cnJlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnBpbkNvZGVTZXJ2aWNlLnN0ZXBOZXh0KCk7XG5cbiAgICB0aGlzLmZvY3VzQ3VycmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvckRpZ2l0c09ubHkoKTogdm9pZCB7XG4gICAgLy8gVE9ETzogVXNlIEZvcm1Db250cm9sLCB3aGVuIEFuZ3VsYXIgVXBkYXRlIGlzIGRvbmUhXG4gICAgdGhpcy5jb250cm9sPy5zZXRFcnJvcnMoeyBkaWdpdHNPbmx5OiAnaTE4bi5xZC5mb3JtLmVycm9yLmRpZ2l0c09ubHknIH0pO1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHRoaXMudHJpZ2dlclZhbGlkYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9wTW9kZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24gfCB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRCcm9rZXJTZXJ2aWNlKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudEJyb2tlclNlcnZpY2UuY29uc3VtZTx7IGlzVmlld29ubHk6IGJvb2xlYW4gfT4oJ29wZXJhdGlvbl9tb2RlX2NoYW5nZWQnKS5zdWJzY3JpYmUodG9waWMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy52aWV3b25seSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm47XG5cbiAgICAgIHRoaXMudmlld29ubHkgPSBnZXRWaWV3b25seSh0aGlzLmNvbmZpZywgdG9waWMucGF5bG9hZC5pc1ZpZXdvbmx5KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHFkLWZvcm0tbGFiZWxcbiAgW2xhYmVsXT1cImxhYmVsXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgW3ZpZXdvbmx5XT1cInZpZXdvbmx5XCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbFwiXG4gIFt0b29sdGlwXT1cImNvbmZpZz8udG9vbHRpcFwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tbGFiZWw+XG5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGkgb2YgaXRlcmFibGUoY29kZUxlbmd0aCk7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgPGlucHV0XG4gICAgI2lucHV0XG4gICAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5XCJcbiAgICBbbmdDbGFzc109XCIncWQtcGluLWNvZGVfX2lucHV0IHFkLXBpbi1jb2RlLS1pbnB1dC0nICsgaW5kZXggKyAobGFzdCA/ICcgcWQtcGluLWNvZGVfX2lucHV0LS1sYXN0JyA6ICcnKVwiXG4gICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctaW5wdXQtJyArIGluZGV4XCJcbiAgICBbdHlwZV09XCJjb2RlSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZWwnXCJcbiAgICBbdGFiaW5kZXhdPVwicGluQ29kZVNlcnZpY2UuZmlyc3RFbXB0eSA9PT0gaW5kZXggPyAwIDogLTFcIlxuICAgIChjbGljayk9XCJoYW5kbGVDTGljaygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiaGFuZGxlRGVsZXRlKCRldmVudClcIlxuICAgIChrZXlkb3duLmRlbGV0ZSk9XCJoYW5kbGVEZWxldGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlQ29tcGxldGUoKVwiXG4gICAgKGtleXByZXNzKT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgIChibHVyKT1cImhhbmRsZUJsdXIoaW5kZXgpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG5cbjxxZC1mb3JtLWhpbnRcbiAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgIXZpZXdvbmx5ICYmIChoaW50IHx8IGhhc0Vycm9yKVwiXG4gIFtoaW50XT1cImhpbnRcIlxuICBbY29udHJvbF09XCJjb250cm9sXCJcbiAgW2hhc0Vycm9yXT1cImhhc0Vycm9yXCJcbiAgW2hpbnRBY3Rpb25dPVwiaGludEFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0taGludD5cblxuPHFkLWZvcm0tcmVhZG9ubHlcbiAgKm5nSWY9XCJyZWFkb25seVwiXG4gIFt2YWx1ZXNdPVwiW3BpbkNvZGVTZXJ2aWNlLmpvaW5lZFZhbHVlc11cIlxuICBbcmVhZG9ubHlBY3Rpb25dPVwicmVhZG9ubHlBY3Rpb25cIlxuICBbZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4+PC9xZC1mb3JtLXJlYWRvbmx5PlxuXG48cWQtZm9ybS12aWV3b25seVxuICAqbmdJZj1cInZpZXdvbmx5XCJcbiAgW3ZhbHVlc109XCJbcGluQ29kZVNlcnZpY2Uuam9pbmVkVmFsdWVzXVwiXG4gIFt2aWV3b25seUFjdGlvbl09XCJ2aWV3b25seUFjdGlvblwiXG4gIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbj48L3FkLWZvcm0tdmlld29ubHk+XG4iXX0=