@fundamental-ngx/core 0.47.3 → 0.47.4-rc.1

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 (30) hide show
  1. package/combobox/combobox.component.d.ts +9 -3
  2. package/esm2022/busy-indicator/busy-indicator.component.mjs +3 -3
  3. package/esm2022/combobox/combobox.component.mjs +19 -4
  4. package/esm2022/list/list-focus-item.model.mjs +4 -2
  5. package/esm2022/list/list-item/list-item.component.mjs +1 -1
  6. package/esm2022/list/list.component.mjs +11 -7
  7. package/esm2022/pagination/pagination.component.mjs +2 -2
  8. package/esm2022/select/select-key-manager.service.mjs +5 -5
  9. package/esm2022/select/select.component.mjs +14 -3
  10. package/esm2022/select/select.interface.mjs +1 -1
  11. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +2 -2
  12. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-combobox.mjs +18 -3
  14. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-list.mjs +12 -6
  16. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-pagination.mjs +1 -1
  18. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-select.mjs +14 -3
  20. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  21. package/fundamental-ngx-core-v0.47.4-rc.1.tgz +0 -0
  22. package/list/list-focus-item.model.d.ts +8 -3
  23. package/list/list-item/list-item.component.d.ts +3 -3
  24. package/list/list.component.d.ts +6 -4
  25. package/package.json +3 -3
  26. package/schematics/add-dependencies/index.js +4 -4
  27. package/select/select-key-manager.service.d.ts +1 -1
  28. package/select/select.component.d.ts +10 -4
  29. package/select/select.interface.d.ts +1 -1
  30. package/fundamental-ngx-core-v0.47.3.tgz +0 -0
@@ -271,7 +271,7 @@ export class PaginationComponent {
271
271
  }));
272
272
  }
273
273
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: PaginationComponent, deps: [{ token: i1.PaginationService }, { token: i0.ChangeDetectorRef }, { token: i2.LiveAnnouncer }, { token: FD_LANGUAGE }, { token: i3.RtlService, optional: true }, { token: i4.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
274
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: PaginationComponent, isStandalone: true, selector: "fd-pagination", inputs: { id: "id", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"'corePagination.ariaLabel' | fdTranslate\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.firstLabel' | fdTranslate\"\n [title]=\"'corePagination.firstLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.previousLabel' | fdTranslate\"\n [title]=\"'corePagination.previousLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: currentPage }\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{ 'corePagination.labelBeforeInputMobile' | fdTranslate }}\n </label>\n\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"\n 'corePagination.inputAriaLabel' | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages }\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n 'corePagination.labelAfterInputMobile'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages }\n }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.nextLabel' | fdTranslate\"\n [title]=\"'corePagination.nextLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.lastLabel' | fdTranslate\"\n [title]=\"'corePagination.lastLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate : _currentShowing }}\n </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ 'corePagination.itemsPerPageLabel' | fdTranslate }}\n </label>\n\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n <li fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</li>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.32.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0 1rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;gap:var(--fdPagination_Elements_Spacing);justify-content:center;line-height:var(--sapContent_LineHeight);margin:0 auto;padding:0}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-moz-appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;align-self:center;flex-shrink:0}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);bottom:var(--fdButton_Outline_Offset);content:\"\";display:block;left:var(--fdButton_Outline_Offset);position:absolute;right:var(--fdButton_Outline_Offset);top:var(--fdButton_Outline_Offset)}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: OnlyDigitsDirective, selector: "[fdkOnlyDigits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
274
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: PaginationComponent, isStandalone: true, selector: "fd-pagination", inputs: { id: "id", mobile: "mobile", totalItems: "totalItems", currentPage: "currentPage", itemsPerPage: "itemsPerPage", itemsPerPageTemplate: "itemsPerPageTemplate", itemsPerPageOptions: "itemsPerPageOptions", displayTotalItems: "displayTotalItems", displayTextTemplate: "displayTextTemplate" }, outputs: { pageChangeStart: "pageChangeStart", itemsPerPageChange: "itemsPerPageChange" }, host: { properties: { "class.fd-pagination--mobile": "mobile", "class.fd-pagination--short": "_lastPage <= 9" }, classAttribute: "fd-pagination" }, providers: [PaginationService, contentDensityObserverProviders()], viewQueries: [{ propertyName: "_focusKeyManagerList", first: true, predicate: FocusKeyManagerListDirective, descendants: true }, { propertyName: "_pageInputElement", first: true, predicate: ["pageInputElement"], descendants: true, read: ElementRef }, { propertyName: "_currentPageElement", first: true, predicate: ["currentPageElement"], descendants: true, read: ElementRef }, { propertyName: "_focusKeyManagerItems", predicate: FocusKeyManagerItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"totalItems\">\n <div class=\"fd-pagination__per-page\" *ngIf=\"itemsPerPageTemplate || itemsPerPageOptions?.length\">\n <!-- note, that we're checking for the length of \"itemsPerPageOptions\", but using \"_displayedPageSizeOptions\" as \"pageOptions\" -->\n <!-- these 2 can be different, as \"_displayedPageSizeOptions\" may also include \"itemsPerPage\" if it's not included in options -->\n <ng-container\n [ngTemplateOutlet]=\"itemsPerPageTemplate || perPage\"\n [ngTemplateOutletContext]=\"{ onSelect: _onChangePerPage, pageOptions: _displayedPageSizeOptions }\"\n ></ng-container>\n </div>\n\n <nav\n fdkFocusKeyManagerList\n orientation=\"horizontal\"\n [skipPredicate]=\"skipItemPredicate\"\n class=\"fd-pagination__nav\"\n [attr.aria-label]=\"'corePagination.ariaLabel' | fdTranslate\"\n [attr.aria-labelledby]=\"displayTotalItems ? _totalPagesElementId : null\"\n *ngIf=\"totalItems >= itemsPerPage\"\n >\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-rewind\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.firstLabel' | fdTranslate\"\n [title]=\"'corePagination.firstLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"goToFirstPage()\"\n (keyup.enter)=\"goToFirstPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToFirstPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n [disabled]=\"isFirstPage\"\n [ariaLabel]=\"'corePagination.previousLabel' | fdTranslate\"\n [title]=\"'corePagination.previousLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isFirstPage\"\n (click)=\"previousPage()\"\n (keyup.enter)=\"previousPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"previousPage()\"\n ></button>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesBeforeCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n #currentPageElement\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: currentPage }\"\n class=\"fd-pagination__link is-active\"\n [attr.aria-current]=\"true\"\n >\n {{ currentPage }}\n </button>\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{ 'corePagination.labelBeforeInputMobile' | fdTranslate }}\n </label>\n\n <input\n #pageInputElement\n fdkFocusKeyManagerItem\n fd-form-control\n fdkOnlyDigits\n required\n size=\"1\"\n min=\"1\"\n type=\"number\"\n [max]=\"_lastPage\"\n [state]=\"currentPageModel.invalid ? 'error' : null\"\n class=\"fd-pagination__input\"\n #currentPageModel=\"ngModel\"\n [ngModel]=\"currentPage\"\n [attr.aria-label]=\"\n 'corePagination.inputAriaLabel' | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages }\n \"\n (keydown.enter)=\"goToPage(currentPageModel.value)\"\n (keydown.space)=\"goToPage(currentPageModel.value)\"\n (blur)=\"_restoreInputValue(currentPageModel)\"\n />\n\n <label fd-form-label class=\"fd-pagination__label\">\n {{\n 'corePagination.labelAfterInputMobile'\n | fdTranslate : { pageNumber: currentPage, totalCount: _totalPages }\n }}\n </label>\n\n <!-- Duplicated to preserve the items order for keyboard navigation -->\n <ng-container *ngFor=\"let page of _pagesAfterCurrent\">\n <button\n *ngIf=\"page !== _moreElementValue; else more\"\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n [title]=\"'corePagination.pageLabel' | fdTranslate : { pageNumber: page }\"\n class=\"fd-pagination__link\"\n (click)=\"goToPage(page)\"\n (keyup.enter)=\"goToPage(page, $event)\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToPage(page, $event)\"\n >\n {{ page }}\n </button>\n </ng-container>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-right-arrow\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.nextLabel' | fdTranslate\"\n [title]=\"'corePagination.nextLabel' | fdTranslate\"\n class=\"fd-pagination__button\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"nextPage()\"\n (keyup.enter)=\"nextPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"nextPage()\"\n ></button>\n\n <button\n fdkFocusKeyManagerItem\n fd-button\n fdType=\"transparent\"\n glyph=\"media-forward\"\n [disabled]=\"isLastPage\"\n [ariaLabel]=\"'corePagination.lastLabel' | fdTranslate\"\n [title]=\"'corePagination.lastLabel' | fdTranslate\"\n class=\"fd-pagination__button fd-pagination__button--mobile\"\n [attr.aria-disabled]=\"isLastPage\"\n (click)=\"goToLastPage()\"\n (keyup.enter)=\"goToLastPage()\"\n (keydown.space)=\"$event.preventDefault()\"\n (keyup.space)=\"goToLastPage()\"\n ></button>\n </nav>\n\n <span *ngIf=\"displayTotalItems\" class=\"fd-pagination__total\" [attr.id]=\"_totalPagesElementId\">\n <ng-container\n [ngTemplateOutlet]=\"displayTextTemplate || total\"\n [ngTemplateOutletContext]=\"{ showing: _currentShowing }\"\n ></ng-container>\n </span>\n</ng-container>\n\n<ng-template #more>\n <span class=\"fd-pagination__more\" aria-hidden=\"true\" aria-label=\"...\" role=\"presentation\"></span>\n</ng-template>\n\n<ng-template #total let-showing=\"showing\">\n <span fd-form-label class=\"fd-pagination__total-label\">\n {{ 'corePagination.totalResultsLabel' | fdTranslate : _currentShowing }}\n </span>\n</ng-template>\n\n<ng-template #perPage let-pageOptions=\"pageOptions\">\n <label fd-form-label class=\"fd-pagination__per-page-label\">\n {{ 'corePagination.itemsPerPageLabel' | fdTranslate }}\n </label>\n\n <fd-select class=\"fd-pagination__per-page-select\" [value]=\"itemsPerPage\" (valueChange)=\"_onChangePerPage($event)\">\n <li fd-option *ngFor=\"let option of pageOptions\" [value]=\"option\">{{ option }}</li>\n </fd-select>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.32.0\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-pagination{--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width);-webkit-box-sizing:border-box;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;justify-content:space-between;line-height:var(--sapContent_LineHeight);margin:0;padding:0 1rem;width:100%}.fd-pagination:after,.fd-pagination:before{box-sizing:inherit;font-size:inherit}.fd-pagination__per-page{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__per-page:after,.fd-pagination__per-page:before{box-sizing:inherit;font-size:inherit}.fd-pagination__nav{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;gap:var(--fdPagination_Elements_Spacing);justify-content:center;line-height:var(--sapContent_LineHeight);margin:0 auto;padding:0}.fd-pagination__nav:after,.fd-pagination__nav:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-pagination__more:after,.fd-pagination__more:before{box-sizing:inherit;font-size:inherit}.fd-pagination__more:before{content:\"...\";display:block;text-align:center;width:var(--fdPaginationMoreWidth)}.fd-pagination__more[class*=-compact],.fd-pagination__more[class*=-condensed],[class*=-compact] .fd-pagination__more:not([class*=-cozy]),[class*=-condensed] .fd-pagination__more:not([class*=-cozy]){--fdPaginationMoreWidth:var(--fdPagination_Placeholder_Dots_Width_Compact)}.fd-pagination .fd-pagination__input{-moz-appearance:textfield;min-width:2.5rem;text-align:center;width:auto}.fd-pagination .fd-pagination__input::-webkit-inner-spin-button,.fd-pagination .fd-pagination__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.fd-pagination .fd-pagination__label,.fd-pagination .fd-pagination__per-page-label{-ms-flex-negative:0;align-self:center;flex-shrink:0}.fd-pagination .fd-pagination__label{display:none}.fd-pagination .fd-pagination__total-label{margin:0}.fd-pagination .fd-pagination__link.is-focus,.fd-pagination .fd-pagination__link:focus{outline:none;z-index:5}.fd-pagination .fd-pagination__link.is-focus:after,.fd-pagination .fd-pagination__link:focus:after{border:var(--sapContent_FocusWidth) var(--sapContent_FocusStyle) var(--sapContent_FocusColor);border-radius:var(--fdButton_Focus_Border_Radius);bottom:var(--fdButton_Outline_Offset);content:\"\";display:block;left:var(--fdButton_Outline_Offset);position:absolute;right:var(--fdButton_Outline_Offset);top:var(--fdButton_Outline_Offset)}.fd-pagination .fd-pagination__link.is-focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link.is-focus.is-selected:after,.fd-pagination .fd-pagination__link:focus.fd-button--toggled:after,.fd-pagination .fd-pagination__link:focus.is-selected:after{border-color:var(--fdButton_Outline_Contrast)}.fd-pagination .fd-pagination__link.is-active{display:none}.fd-pagination .fd-pagination__button [class*=sap-icon][dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__button [class*=sap-icon]{transform:rotate(180deg)}.fd-pagination .fd-pagination__button--mobile{display:none}.fd-pagination .fd-pagination__button.is-disabled,.fd-pagination .fd-pagination__button:disabled,.fd-pagination .fd-pagination__button[aria-disabled=true]{pointer-events:none}.fd-pagination--short .fd-pagination__link.is-active,.fd-pagination--short .fd-pagination__link:active{display:flex}.fd-pagination--short .fd-pagination__input{display:none}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination--mobile .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination--mobile .fd-pagination__link,.fd-pagination--mobile .fd-pagination__more,.fd-pagination--mobile .fd-pagination__per-page-label,.fd-pagination--mobile .fd-pagination__total{display:none}.fd-pagination--mobile .fd-pagination__button--mobile,.fd-pagination--mobile .fd-pagination__input,.fd-pagination--mobile .fd-pagination__label{display:flex}.fd-pagination--mobile .fd-pagination__link.is-active,.fd-pagination--mobile .fd-pagination__link:active{display:none}@media (max-width: 599px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}@media (min-width: 600px) and (max-width: 1023px){.fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:auto;margin-right:0}.fd-pagination .fd-pagination__per-page+.fd-pagination__nav[dir=rtl],[dir=rtl] .fd-pagination .fd-pagination__per-page+.fd-pagination__nav{margin-left:0;margin-right:auto}.fd-pagination .fd-pagination__link,.fd-pagination .fd-pagination__more,.fd-pagination .fd-pagination__per-page-label,.fd-pagination .fd-pagination__total{display:none}.fd-pagination .fd-pagination__button--mobile,.fd-pagination .fd-pagination__input,.fd-pagination .fd-pagination__label{display:flex}.fd-pagination .fd-pagination__link.is-active,.fd-pagination .fd-pagination__link:active{display:none}}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.fd-pagination__label .fd-form-label,.fd-pagination__total-label .fd-form-label{margin:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusKeyManagerListDirective, selector: "[fdkFocusKeyManagerList]", inputs: ["orientation", "skipPredicate"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: FocusKeyManagerItemDirective, selector: "[fdkFocusKeyManagerItem]", inputs: ["initialFocus", "_tabindex"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: OnlyDigitsDirective, selector: "[fdkOnlyDigits]", inputs: ["decimal", "decimalSeparator"] }, { kind: "component", type: SelectComponent, selector: "fd-select", inputs: ["extendedBodyTemplate", "scrollStrategy", "controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline", "selectControlClass", "selectDropdownButtonClass", "advancedStateMessage", "tabOutStrategy", "compareWith"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, preserveWhitespaces: true }); }
275
275
  }
276
276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: PaginationComponent, decorators: [{
277
277
  type: Component,
@@ -334,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
334
334
  }], itemsPerPageChange: [{
335
335
  type: Output
336
336
  }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFnQixXQUFXLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwSCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1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RUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtyRCxFQUFFO3NCQURELEtBQUs7Z0JBS0YsTUFBTTtzQkFEVCxLQUFLO2dCQVVOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsWUFBWTtzQkFEZixLQUFLO2dCQWlCTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWdCTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBUU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXJJdGVtRGlyZWN0aXZlLCBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPbmx5RGlnaXRzRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCwgRm9ybUxhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50LCBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2VsZWN0JztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBGZFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vcGFnaW5hdGlvbi5zZXJ2aWNlJztcblxuLyoqIENvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG5jb25zdCBERUZBVUxUX0lURU1TX1BFUl9QQUdFID0gMTA7XG5cbmludGVyZmFjZSBDdXJyZW50U2hvd2luZyB7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHRvOiBudW1iZXI7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xufVxuXG5sZXQgcGFnaW5hdGlvblVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIG5hdmlnYXRpb24gYmV0d2VlbiBwYWdlZCBpbmZvcm1hdGlvbi5cbiAqIGBgYGh0bWxcbiAqIDxmZC1wYWdpbmF0aW9uXG4gKiAgICAgICAgICBbdG90YWxJdGVtc109XCI1MFwiXG4gKiAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIjEwXCJcbiAqICAgICAgICAgIFtjdXJyZW50UGFnZV09XCIzXCI+XG4gKiA8L2ZkLXBhZ2luYXRpb24+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1wYWdpbmF0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbUGFnaW5hdGlvblNlcnZpY2UsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXBhZ2luYXRpb24nLFxuICAgICAgICAnW2NsYXNzLmZkLXBhZ2luYXRpb24tLW1vYmlsZV0nOiAnbW9iaWxlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1wYWdpbmF0aW9uLS1zaG9ydF0nOiAnX2xhc3RQYWdlIDw9IDknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiB0cnVlLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBGb3JtQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgT25seURpZ2l0c0RpcmVjdGl2ZSxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBPcHRpb25Db21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlKVxuICAgIHJlYWRvbmx5IF9mb2N1c0tleU1hbmFnZXJMaXN0OiBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzS2V5TWFuYWdlckl0ZW1zOiBRdWVyeUxpc3Q8Rm9jdXNLZXlNYW5hZ2VySXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BhZ2VJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSBfcGFnZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY3VycmVudFBhZ2VFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgX2N1cnJlbnRQYWdlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBJZCBmb3IgdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LiBJZiBvbWl0dGVkLCBhIHVuaXF1ZSBvbmUgaXMgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZC1wYWdpbmF0aW9uLScgKyBwYWdpbmF0aW9uVW5pcXVlSWQrKztcblxuICAgIC8qKiBXaGV0aGVyIGNvbXBvbmVudCBzaG91bGQgYmUgc2hvd24gaW4gdGhlIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1vYmlsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX21vYmlsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2JpbGU7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcblxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBNYXRoLmZsb29yKGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAxKSk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIERFRkFVTFRfSVRFTVNfUEVSX1BBR0UpKTtcblxuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBNYXRoLm1heCh2YWx1ZSwgMSk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlIHNob3cgcmFuZ2Ugb2YgaXRlbSBieSBjdXJyZW50IHBhZ2Ugb2YgaXRlbXMuXG4gICAgICogSXQgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGBpdGVtc1BlclBhZ2VPcHRpb25zYCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zUGVyUGFnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIGl0ZW1zIHBlciBwYWdlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zUGVyUGFnZU9wdGlvbnModmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZU9wdGlvbnMgPSBjb2VyY2VBcnJheTxudW1iZXI+KHZhbHVlKVxuICAgICAgICAgICAgLm1hcCgodikgPT4gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgMCkpXG4gICAgICAgICAgICAubWFwKCh2KSA9PiBNYXRoLmZsb29yKHYpKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdiA+IDApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpO1xuICAgIH1cbiAgICBnZXQgaXRlbXNQZXJQYWdlT3B0aW9ucygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUb3RhbEl0ZW1zID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSBzaG93IHJhbmdlIG9mIGl0ZW0gYnkgY3VycmVudCBwYWdlIG9mIGl0ZW1zLlxuICAgICAqIERlZmF1bHQgdmlldzogU2hvd2luZyB7eyBmcm9tIH19LXt7IHRvIH19IG9mIHt7IG9mIH19XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5VGV4dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcGFnZSBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VDaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpdGVtcyBwZXIgcGFnZSBvcHRpb24gaXMgY2hhbmdlZC4qL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wYWdlc0JlZm9yZUN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXNBZnRlckN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHNcbiAgICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLCB0aGUgY3VycmVudCBwYWdlLCBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICAgKi9cbiAgICBnZXQgcGFnaW5hdGlvbk9iamVjdCgpOiBQYWdpbmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLml0ZW1zUGVyUGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sYXN0UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFRvdGFsUGFnZXModGhpcy5wYWdpbmF0aW9uT2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RvdGFsUGFnZXNFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnX190b3RhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX21vcmVFbGVtZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UubW9yZUVsZW1lbnRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50U2hvd2luZzogQ3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgICB0b3RhbENvdW50OiAwXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlT3B0aW9uczogbnVtYmVyW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRQYWdlID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRpb25SZXNvbHZlciA9IG5ldyBUcmFuc2xhdGlvblJlc29sdmVyKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSByZWFkb25seSBfbGFuZ3VhZ2U6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzPy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGNoYW5nZXMuY3VycmVudFBhZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWZyZXNoUGFnZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlZnJlc2hQYWdlcygpKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2tpcEl0ZW1QcmVkaWNhdGUoaXRlbTogRWxlbWVudFJlZiAmIEZvY3VzYWJsZU9wdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXkgPT09ICdub25lJyB8fFxuICAgICAgICAgICAgaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9PT0gJ3RydWUnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgcGFnZS5cbiAgICAgKiBAcGFyYW0gcGFnZSBUaGUgcGFnZSB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IChvcHRpb25hbCkuXG4gICAgICovXG4gICAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlID4gdGhpcy5fbGFzdFBhZ2UgfHwgcGFnZSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3RhcnQuZW1pdChwYWdlKTtcblxuICAgICAgICB0aGlzLl9hbm5vdW5jZVBhZ2UocGFnZSk7XG4gICAgfVxuXG4gICAgLyoqIE5hdmlnYXRlcyB0byB0aGUgZmlyc3QgcGFnZSAqL1xuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgcHJldmlvdXMgcGFnZS5cbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBwYWdlLlxuICAgICAqL1xuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcbiAgICB9XG5cbiAgICAvKiogTmF2aWdhdGVzIHRvIHRoZSBsYXN0IHBhZ2UgKi9cbiAgICBnb1RvTGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5fbGFzdFBhZ2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2hhbmdlUGVyUGFnZSA9IChldmVudDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodGhpcy5pdGVtc1BlclBhZ2UpO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IG1heFBhZ2UgPSB0aGlzLl9wYWdlc1t0aGlzLl9wYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiBtYXhQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdGFydC5lbWl0KG1heFBhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Jlc3RvcmVJbnB1dFZhbHVlKG1vZGVsOiBOZ01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLnJlc2V0KHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoUGFnZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb25PYmplY3Q7XG5cbiAgICAgICAgdGhpcy5fcGFnZXMgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFBhZ2VzKHBhZ2luYXRpb24pO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLl9wYWdlcy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpO1xuXG4gICAgICAgIHRoaXMuX3BhZ2VzQmVmb3JlQ3VycmVudCA9IHRoaXMuX3BhZ2VzLnNsaWNlKDAsIGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICB0aGlzLl9wYWdlc0FmdGVyQ3VycmVudCA9IHRoaXMuX3BhZ2VzLnNsaWNlKGN1cnJlbnRQYWdlSW5kZXggKyAxKTtcblxuICAgICAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSA/PyBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTaG93aW5nID0ge1xuICAgICAgICAgICAgZnJvbTogdGhpcy5jdXJyZW50UGFnZSAtIDEgPT09IDAgPyAxIDogKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIDEsXG4gICAgICAgICAgICB0bzogTWF0aC5taW4oKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIGl0ZW1zUGVyUGFnZSwgdGhpcy50b3RhbEl0ZW1zKSxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHRoaXMudG90YWxJdGVtc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgY3VycmVudCBwYWdlIGxpbmsvaW5wdXQgdXNpbmcgRm9jdXNLZXlNYW5hZ2VyXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzQ3VycmVudFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlTmF0aXZlRWxlbWVudCA9XG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2N1cnJlbnRQYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5ID09PSAnbm9uZSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3BhZ2VJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5fY3VycmVudFBhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9mb2N1c0tleU1hbmFnZXJJdGVtc1xuICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbS5uYXRpdmVFbGVtZW50ID09PSBjdXJyZW50UGFnZU5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlckxpc3QuZm9jdXNJdGVtKGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHBhZ2Ugc2l6ZSBvcHRpb25zIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuIEluY2x1ZGVzIG1ha2luZyBzdXJlIHRoYXRcbiAgICAgKiB0aGUgcGFnZSBzaXplIGlzIGFuIG9wdGlvbiBhbmQgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBubyBwYWdlIHNpemUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgZmlyc3QgcGFnZSBzaXplIG9wdGlvbiBvciB0aGUgZGVmYXVsdCBwYWdlIHNpemUuXG4gICAgICAgIGlmICghdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHRoaXMuaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPyB0aGlzLml0ZW1zUGVyUGFnZU9wdGlvbnNbMF0gOiBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zID0gdGhpcy5pdGVtc1BlclBhZ2VPcHRpb25zPy5zbGljZSgpID8/IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKHRoaXMuaXRlbXNQZXJQYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5pdGVtc1BlclBhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfYW5ub3VuY2VQYWdlKHBhZ2U6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKFxuICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlKSxcbiAgICAgICAgICAgICAgICAnY29yZVBhZ2luYXRpb24uY3VycmVudFBhZ2VBcmlhTGFiZWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlcjogcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdGhpcy50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbEl0ZW1zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlXCIgKm5nSWY9XCJpdGVtc1BlclBhZ2VUZW1wbGF0ZSB8fCBpdGVtc1BlclBhZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPCEtLSBub3RlLCB0aGF0IHdlJ3JlIGNoZWNraW5nIGZvciB0aGUgbGVuZ3RoIG9mIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBidXQgdXNpbmcgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgYXMgXCJwYWdlT3B0aW9uc1wiIC0tPlxuICAgICAgICA8IS0tIHRoZXNlIDIgY2FuIGJlIGRpZmZlcmVudCwgYXMgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgbWF5IGFsc28gaW5jbHVkZSBcIml0ZW1zUGVyUGFnZVwiIGlmIGl0J3Mgbm90IGluY2x1ZGVkIGluIG9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1zUGVyUGFnZVRlbXBsYXRlIHx8IHBlclBhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb25TZWxlY3Q6IF9vbkNoYW5nZVBlclBhZ2UsIHBhZ2VPcHRpb25zOiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmF2XG4gICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckxpc3RcbiAgICAgICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgW3NraXBQcmVkaWNhdGVdPVwic2tpcEl0ZW1QcmVkaWNhdGVcIlxuICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX25hdlwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLmFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkaXNwbGF5VG90YWxJdGVtcyA/IF90b3RhbFBhZ2VzRWxlbWVudElkIDogbnVsbFwiXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtcyA+PSBpdGVtc1BlclBhZ2VcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLXJld2luZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaXJzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZVBhZ2luYXRpb24uZmlyc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2NvcmVQYWdpbmF0aW9uLmZpcnN0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b24gZmQtcGFnaW5hdGlvbl9fYnV0dG9uLS1tb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvRmlyc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9GaXJzdFBhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wcmV2aW91c0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInY29yZVBhZ2luYXRpb24ucHJldmlvdXNMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gRHVwbGljYXRlZCB0byBwcmVzZXJ2ZSB0aGUgaXRlbXMgb3JkZXIgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgX3BhZ2VzQmVmb3JlQ3VycmVudFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZSAhPT0gX21vcmVFbGVtZW50VmFsdWU7IGVsc2UgbW9yZVwiXG4gICAgICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19saW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZSlcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjY3VycmVudFBhZ2VFbGVtZW50XG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLnBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmsgaXMtYWN0aXZlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2UgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLmxhYmVsQmVmb3JlSW5wdXRNb2JpbGUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNwYWdlSW5wdXRFbGVtZW50XG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgIGZka09ubHlEaWdpdHNcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBzaXplPVwiMVwiXG4gICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgW21heF09XCJfbGFzdFBhZ2VcIlxuICAgICAgICAgICAgW3N0YXRlXT1cImN1cnJlbnRQYWdlTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9faW5wdXRcIlxuICAgICAgICAgICAgI2N1cnJlbnRQYWdlTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ2NvcmVQYWdpbmF0aW9uLmlucHV0QXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBjdXJyZW50UGFnZSwgdG90YWxDb3VudDogX3RvdGFsUGFnZXMgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9yZXN0b3JlSW5wdXRWYWx1ZShjdXJyZW50UGFnZU1vZGVsKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnY29yZVBhZ2luYXRpb24ubGFiZWxBZnRlcklucHV0TW9iaWxlJ1xuICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBjdXJyZW50UGFnZSwgdG90YWxDb3VudDogX3RvdGFsUGFnZXMgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8IS0tIER1cGxpY2F0ZWQgdG8gcHJlc2VydmUgdGhlIGl0ZW1zIG9yZGVyIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIF9wYWdlc0FmdGVyQ3VycmVudFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZSAhPT0gX21vcmVFbGVtZW50VmFsdWU7IGVsc2UgbW9yZVwiXG4gICAgICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19saW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZSlcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMYXN0UGFnZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5uZXh0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5uZXh0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJtZWRpYS1mb3J3YXJkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLmxhc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2NvcmVQYWdpbmF0aW9uLmxhc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvbiBmZC1wYWdpbmF0aW9uX19idXR0b24tLW1vYmlsZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvTGFzdFBhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub0xhc3RQYWdlKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgPC9uYXY+XG5cbiAgICA8c3BhbiAqbmdJZj1cImRpc3BsYXlUb3RhbEl0ZW1zXCIgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX190b3RhbFwiIFthdHRyLmlkXT1cIl90b3RhbFBhZ2VzRWxlbWVudElkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlUZXh0VGVtcGxhdGUgfHwgdG90YWxcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2hvd2luZzogX2N1cnJlbnRTaG93aW5nIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbW9yZT5cbiAgICA8c3BhbiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX21vcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBhcmlhLWxhYmVsPVwiLi4uXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdG90YWwgbGV0LXNob3dpbmc9XCJzaG93aW5nXCI+XG4gICAgPHNwYW4gZmQtZm9ybS1sYWJlbCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3RvdGFsLWxhYmVsXCI+XG4gICAgICAgIHt7ICdjb3JlUGFnaW5hdGlvbi50b3RhbFJlc3VsdHNMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IF9jdXJyZW50U2hvd2luZyB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcGVyUGFnZSBsZXQtcGFnZU9wdGlvbnM9XCJwYWdlT3B0aW9uc1wiPlxuICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fcGVyLXBhZ2UtbGFiZWxcIj5cbiAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLml0ZW1zUGVyUGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgPC9sYWJlbD5cblxuICAgIDxmZC1zZWxlY3QgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19wZXItcGFnZS1zZWxlY3RcIiBbdmFsdWVdPVwiaXRlbXNQZXJQYWdlXCIgKHZhbHVlQ2hhbmdlKT1cIl9vbkNoYW5nZVBlclBhZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bGkgZmQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGFnZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9saT5cbiAgICA8L2ZkLXNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFnQixXQUFXLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwSCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1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RUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtyRCxFQUFFO3NCQURELEtBQUs7Z0JBS0YsTUFBTTtzQkFEVCxLQUFLO2dCQVVOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsWUFBWTtzQkFEZixLQUFLO2dCQWlCTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS0YsbUJBQW1CO3NCQUR0QixLQUFLO2dCQWdCTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBUU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXJJdGVtRGlyZWN0aXZlLCBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPbmx5RGlnaXRzRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCwgRm9ybUxhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50LCBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2VsZWN0JztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBGZFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4vcGFnaW5hdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vcGFnaW5hdGlvbi5zZXJ2aWNlJztcblxuLyoqIENvbnN0YW50IHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG5jb25zdCBERUZBVUxUX0lURU1TX1BFUl9QQUdFID0gMTA7XG5cbmludGVyZmFjZSBDdXJyZW50U2hvd2luZyB7XG4gICAgZnJvbTogbnVtYmVyO1xuICAgIHRvOiBudW1iZXI7XG4gICAgdG90YWxDb3VudDogbnVtYmVyO1xufVxuXG5sZXQgcGFnaW5hdGlvblVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIG5hdmlnYXRpb24gYmV0d2VlbiBwYWdlZCBpbmZvcm1hdGlvbi5cbiAqIGBgYGh0bWxcbiAqIDxmZC1wYWdpbmF0aW9uXG4gKiAgICAgICAgICBbdG90YWxJdGVtc109XCI1MFwiXG4gKiAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIjEwXCJcbiAqICAgICAgICAgIFtjdXJyZW50UGFnZV09XCIzXCI+XG4gKiA8L2ZkLXBhZ2luYXRpb24+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1wYWdpbmF0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbUGFnaW5hdGlvblNlcnZpY2UsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXBhZ2luYXRpb24nLFxuICAgICAgICAnW2NsYXNzLmZkLXBhZ2luYXRpb24tLW1vYmlsZV0nOiAnbW9iaWxlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1wYWdpbmF0aW9uLS1zaG9ydF0nOiAnX2xhc3RQYWdlIDw9IDknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiB0cnVlLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBGb3JtQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgT25seURpZ2l0c0RpcmVjdGl2ZSxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBPcHRpb25Db21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlKVxuICAgIHJlYWRvbmx5IF9mb2N1c0tleU1hbmFnZXJMaXN0OiBGb2N1c0tleU1hbmFnZXJMaXN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZvY3VzS2V5TWFuYWdlckl0ZW1EaXJlY3RpdmUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzS2V5TWFuYWdlckl0ZW1zOiBRdWVyeUxpc3Q8Rm9jdXNLZXlNYW5hZ2VySXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BhZ2VJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSBfcGFnZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY3VycmVudFBhZ2VFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgX2N1cnJlbnRQYWdlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBJZCBmb3IgdGhlIHBhZ2luYXRpb24gY29tcG9uZW50LiBJZiBvbWl0dGVkLCBhIHVuaXF1ZSBvbmUgaXMgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZC1wYWdpbmF0aW9uLScgKyBwYWdpbmF0aW9uVW5pcXVlSWQrKztcblxuICAgIC8qKiBXaGV0aGVyIGNvbXBvbmVudCBzaG91bGQgYmUgc2hvd24gaW4gdGhlIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1vYmlsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX21vYmlsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2JpbGU7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcblxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN1cnJlbnRQYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBNYXRoLmZsb29yKGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAxKSk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gICAgfVxuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpdGVtc1BlclBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgICAgICB2YWx1ZSA9IE1hdGguZmxvb3IoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIERFRkFVTFRfSVRFTVNfUEVSX1BBR0UpKTtcblxuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBNYXRoLm1heCh2YWx1ZSwgMSk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlIHNob3cgcmFuZ2Ugb2YgaXRlbSBieSBjdXJyZW50IHBhZ2Ugb2YgaXRlbXMuXG4gICAgICogSXQgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGBpdGVtc1BlclBhZ2VPcHRpb25zYCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zUGVyUGFnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIGl0ZW1zIHBlciBwYWdlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zUGVyUGFnZU9wdGlvbnModmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZU9wdGlvbnMgPSBjb2VyY2VBcnJheTxudW1iZXI+KHZhbHVlKVxuICAgICAgICAgICAgLm1hcCgodikgPT4gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgMCkpXG4gICAgICAgICAgICAubWFwKCh2KSA9PiBNYXRoLmZsb29yKHYpKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdiA+IDApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpO1xuICAgIH1cbiAgICBnZXQgaXRlbXNQZXJQYWdlT3B0aW9ucygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUb3RhbEl0ZW1zID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSBzaG93IHJhbmdlIG9mIGl0ZW0gYnkgY3VycmVudCBwYWdlIG9mIGl0ZW1zLlxuICAgICAqIERlZmF1bHQgdmlldzogU2hvd2luZyB7eyBmcm9tIH19LXt7IHRvIH19IG9mIHt7IG9mIH19XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5VGV4dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgcGFnZSBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHBhZ2VDaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBpdGVtcyBwZXIgcGFnZSBvcHRpb24gaXMgY2hhbmdlZC4qL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXM6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wYWdlc0JlZm9yZUN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGFnZXNBZnRlckN1cnJlbnQ6IG51bWJlcltdO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHNcbiAgICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLCB0aGUgY3VycmVudCBwYWdlLCBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICAgKi9cbiAgICBnZXQgcGFnaW5hdGlvbk9iamVjdCgpOiBQYWdpbmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLml0ZW1zUGVyUGFnZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9sYXN0UGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFRvdGFsUGFnZXModGhpcy5wYWdpbmF0aW9uT2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RvdGFsUGFnZXNFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnX190b3RhbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX21vcmVFbGVtZW50VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UubW9yZUVsZW1lbnRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50U2hvd2luZzogQ3VycmVudFNob3dpbmcgPSB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgICB0b3RhbENvdW50OiAwXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlT3B0aW9uczogbnVtYmVyW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRQYWdlID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRpb25SZXNvbHZlciA9IG5ldyBUcmFuc2xhdGlvblJlc29sdmVyKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSByZWFkb25seSBfbGFuZ3VhZ2U6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzPy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGNoYW5nZXMuY3VycmVudFBhZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMucGFnaW5hdGlvbk9iamVjdCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdG90YWxQYWdlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWZyZXNoUGFnZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlZnJlc2hQYWdlcygpKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2tpcEl0ZW1QcmVkaWNhdGUoaXRlbTogRWxlbWVudFJlZiAmIEZvY3VzYWJsZU9wdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQpLmRpc3BsYXkgPT09ICdub25lJyB8fFxuICAgICAgICAgICAgaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9PT0gJ3RydWUnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgcGFnZS5cbiAgICAgKiBAcGFyYW0gcGFnZSBUaGUgcGFnZSB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IChvcHRpb25hbCkuXG4gICAgICovXG4gICAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChwYWdlID4gdGhpcy5fbGFzdFBhZ2UgfHwgcGFnZSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3RhcnQuZW1pdChwYWdlKTtcblxuICAgICAgICB0aGlzLl9hbm5vdW5jZVBhZ2UocGFnZSk7XG4gICAgfVxuXG4gICAgLyoqIE5hdmlnYXRlcyB0byB0aGUgZmlyc3QgcGFnZSAqL1xuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgcHJldmlvdXMgcGFnZS5cbiAgICAgKi9cbiAgICBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBwYWdlLlxuICAgICAqL1xuICAgIG5leHRQYWdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTtcbiAgICB9XG5cbiAgICAvKiogTmF2aWdhdGVzIHRvIHRoZSBsYXN0IHBhZ2UgKi9cbiAgICBnb1RvTGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UodGhpcy5fbGFzdFBhZ2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2hhbmdlUGVyUGFnZSA9IChldmVudDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlQ2hhbmdlLmVtaXQodGhpcy5pdGVtc1BlclBhZ2UpO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hQYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IG1heFBhZ2UgPSB0aGlzLl9wYWdlc1t0aGlzLl9wYWdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiBtYXhQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdGFydC5lbWl0KG1heFBhZ2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Jlc3RvcmVJbnB1dFZhbHVlKG1vZGVsOiBOZ01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLnJlc2V0KHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoUGFnZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb25PYmplY3Q7XG5cbiAgICAgICAgdGhpcy5fcGFnZXMgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFBhZ2VzKHBhZ2luYXRpb24pO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLl9wYWdlcy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2UpO1xuXG4gICAgICAgIHRoaXMuX3BhZ2VzQmVmb3JlQ3VycmVudCA9IHRoaXMuX3BhZ2VzLnNsaWNlKDAsIGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICB0aGlzLl9wYWdlc0FmdGVyQ3VycmVudCA9IHRoaXMuX3BhZ2VzLnNsaWNlKGN1cnJlbnRQYWdlSW5kZXggKyAxKTtcblxuICAgICAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSBwYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSA/PyBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTaG93aW5nID0ge1xuICAgICAgICAgICAgZnJvbTogdGhpcy5jdXJyZW50UGFnZSAtIDEgPT09IDAgPyAxIDogKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIDEsXG4gICAgICAgICAgICB0bzogTWF0aC5taW4oKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIGl0ZW1zUGVyUGFnZSwgdGhpcy50b3RhbEl0ZW1zKSxcbiAgICAgICAgICAgIHRvdGFsQ291bnQ6IHRoaXMudG90YWxJdGVtc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgY3VycmVudCBwYWdlIGxpbmsvaW5wdXQgdXNpbmcgRm9jdXNLZXlNYW5hZ2VyXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZvY3VzQ3VycmVudFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlTmF0aXZlRWxlbWVudCA9XG4gICAgICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2N1cnJlbnRQYWdlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5kaXNwbGF5ID09PSAnbm9uZSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3BhZ2VJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgIDogdGhpcy5fY3VycmVudFBhZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9mb2N1c0tleU1hbmFnZXJJdGVtc1xuICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbS5uYXRpdmVFbGVtZW50ID09PSBjdXJyZW50UGFnZU5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuX2ZvY3VzS2V5TWFuYWdlckxpc3QuZm9jdXNJdGVtKGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHBhZ2Ugc2l6ZSBvcHRpb25zIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuIEluY2x1ZGVzIG1ha2luZyBzdXJlIHRoYXRcbiAgICAgKiB0aGUgcGFnZSBzaXplIGlzIGFuIG9wdGlvbiBhbmQgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiBubyBwYWdlIHNpemUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgZmlyc3QgcGFnZSBzaXplIG9wdGlvbiBvciB0aGUgZGVmYXVsdCBwYWdlIHNpemUuXG4gICAgICAgIGlmICghdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IHRoaXMuaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPyB0aGlzLml0ZW1zUGVyUGFnZU9wdGlvbnNbMF0gOiBERUZBVUxUX0lURU1TX1BFUl9QQUdFO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zID0gdGhpcy5pdGVtc1BlclBhZ2VPcHRpb25zPy5zbGljZSgpID8/IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluY2x1ZGVzKHRoaXMuaXRlbXNQZXJQYWdlKSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5pdGVtc1BlclBhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfYW5ub3VuY2VQYWdlKHBhZ2U6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKFxuICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKFxuICAgICAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlKSxcbiAgICAgICAgICAgICAgICAnY29yZVBhZ2luYXRpb24uY3VycmVudFBhZ2VBcmlhTGFiZWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlcjogcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdGhpcy50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbEl0ZW1zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3Blci1wYWdlXCIgKm5nSWY9XCJpdGVtc1BlclBhZ2VUZW1wbGF0ZSB8fCBpdGVtc1BlclBhZ2VPcHRpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgPCEtLSBub3RlLCB0aGF0IHdlJ3JlIGNoZWNraW5nIGZvciB0aGUgbGVuZ3RoIG9mIFwiaXRlbXNQZXJQYWdlT3B0aW9uc1wiLCBidXQgdXNpbmcgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgYXMgXCJwYWdlT3B0aW9uc1wiIC0tPlxuICAgICAgICA8IS0tIHRoZXNlIDIgY2FuIGJlIGRpZmZlcmVudCwgYXMgXCJfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zXCIgbWF5IGFsc28gaW5jbHVkZSBcIml0ZW1zUGVyUGFnZVwiIGlmIGl0J3Mgbm90IGluY2x1ZGVkIGluIG9wdGlvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1zUGVyUGFnZVRlbXBsYXRlIHx8IHBlclBhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb25TZWxlY3Q6IF9vbkNoYW5nZVBlclBhZ2UsIHBhZ2VPcHRpb25zOiBfZGlzcGxheWVkUGFnZVNpemVPcHRpb25zIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmF2XG4gICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckxpc3RcbiAgICAgICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgW3NraXBQcmVkaWNhdGVdPVwic2tpcEl0ZW1QcmVkaWNhdGVcIlxuICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX25hdlwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLmFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJkaXNwbGF5VG90YWxJdGVtcyA/IF90b3RhbFBhZ2VzRWxlbWVudElkIDogbnVsbFwiXG4gICAgICAgICpuZ0lmPVwidG90YWxJdGVtcyA+PSBpdGVtc1BlclBhZ2VcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBnbHlwaD1cIm1lZGlhLXJld2luZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaXJzdFBhZ2VcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZVBhZ2luYXRpb24uZmlyc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2NvcmVQYWdpbmF0aW9uLmZpcnN0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b24gZmQtcGFnaW5hdGlvbl9fYnV0dG9uLS1tb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvRmlyc3RQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9GaXJzdFBhZ2UoKVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpcnN0UGFnZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wcmV2aW91c0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInY29yZVBhZ2luYXRpb24ucHJldmlvdXNMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRmlyc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gRHVwbGljYXRlZCB0byBwcmVzZXJ2ZSB0aGUgaXRlbXMgb3JkZXIgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgX3BhZ2VzQmVmb3JlQ3VycmVudFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZSAhPT0gX21vcmVFbGVtZW50VmFsdWU7IGVsc2UgbW9yZVwiXG4gICAgICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19saW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZSlcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjY3VycmVudFBhZ2VFbGVtZW50XG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLnBhZ2VMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IHsgcGFnZU51bWJlcjogY3VycmVudFBhZ2UgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2xpbmsgaXMtYWN0aXZlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2UgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLmxhYmVsQmVmb3JlSW5wdXRNb2JpbGUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNwYWdlSW5wdXRFbGVtZW50XG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgIGZka09ubHlEaWdpdHNcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBzaXplPVwiMVwiXG4gICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgW21heF09XCJfbGFzdFBhZ2VcIlxuICAgICAgICAgICAgW3N0YXRlXT1cImN1cnJlbnRQYWdlTW9kZWwuaW52YWxpZCA/ICdlcnJvcicgOiBudWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9faW5wdXRcIlxuICAgICAgICAgICAgI2N1cnJlbnRQYWdlTW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgJ2NvcmVQYWdpbmF0aW9uLmlucHV0QXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBjdXJyZW50UGFnZSwgdG90YWxDb3VudDogX3RvdGFsUGFnZXMgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImdvVG9QYWdlKGN1cnJlbnRQYWdlTW9kZWwudmFsdWUpXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9yZXN0b3JlSW5wdXRWYWx1ZShjdXJyZW50UGFnZU1vZGVsKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWwgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19sYWJlbFwiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAnY29yZVBhZ2luYXRpb24ubGFiZWxBZnRlcklucHV0TW9iaWxlJ1xuICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBwYWdlTnVtYmVyOiBjdXJyZW50UGFnZSwgdG90YWxDb3VudDogX3RvdGFsUGFnZXMgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8IS0tIER1cGxpY2F0ZWQgdG8gcHJlc2VydmUgdGhlIGl0ZW1zIG9yZGVyIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIF9wYWdlc0FmdGVyQ3VycmVudFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZSAhPT0gX21vcmVFbGVtZW50VmFsdWU7IGVsc2UgbW9yZVwiXG4gICAgICAgICAgICAgICAgZmRrRm9jdXNLZXlNYW5hZ2VySXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5wYWdlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IHBhZ2VOdW1iZXI6IHBhZ2UgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19saW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZSlcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvUGFnZShwYWdlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cImdvVG9QYWdlKHBhZ2UsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZGtGb2N1c0tleU1hbmFnZXJJdGVtXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMYXN0UGFnZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlUGFnaW5hdGlvbi5uZXh0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidjb3JlUGFnaW5hdGlvbi5uZXh0TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19idXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZka0ZvY3VzS2V5TWFuYWdlckl0ZW1cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJtZWRpYS1mb3J3YXJkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ2NvcmVQYWdpbmF0aW9uLmxhc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ2NvcmVQYWdpbmF0aW9uLmxhc3RMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLXBhZ2luYXRpb25fX2J1dHRvbiBmZC1wYWdpbmF0aW9uX19idXR0b24tLW1vYmlsZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzTGFzdFBhZ2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJnb1RvTGFzdFBhZ2UoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiZ29Ub0xhc3RQYWdlKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgPC9uYXY+XG5cbiAgICA8c3BhbiAqbmdJZj1cImRpc3BsYXlUb3RhbEl0ZW1zXCIgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX190b3RhbFwiIFthdHRyLmlkXT1cIl90b3RhbFBhZ2VzRWxlbWVudElkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlUZXh0VGVtcGxhdGUgfHwgdG90YWxcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2hvd2luZzogX2N1cnJlbnRTaG93aW5nIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbW9yZT5cbiAgICA8c3BhbiBjbGFzcz1cImZkLXBhZ2luYXRpb25fX21vcmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBhcmlhLWxhYmVsPVwiLi4uXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdG90YWwgbGV0LXNob3dpbmc9XCJzaG93aW5nXCI+XG4gICAgPHNwYW4gZmQtZm9ybS1sYWJlbCBjbGFzcz1cImZkLXBhZ2luYXRpb25fX3RvdGFsLWxhYmVsXCI+XG4gICAgICAgIHt7ICdjb3JlUGFnaW5hdGlvbi50b3RhbFJlc3VsdHNMYWJlbCcgfCBmZFRyYW5zbGF0ZSA6IF9jdXJyZW50U2hvd2luZyB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcGVyUGFnZSBsZXQtcGFnZU9wdGlvbnM9XCJwYWdlT3B0aW9uc1wiPlxuICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIGNsYXNzPVwiZmQtcGFnaW5hdGlvbl9fcGVyLXBhZ2UtbGFiZWxcIj5cbiAgICAgICAge3sgJ2NvcmVQYWdpbmF0aW9uLml0ZW1zUGVyUGFnZUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgPC9sYWJlbD5cblxuICAgIDxmZC1zZWxlY3QgY2xhc3M9XCJmZC1wYWdpbmF0aW9uX19wZXItcGFnZS1zZWxlY3RcIiBbdmFsdWVdPVwiaXRlbXNQZXJQYWdlXCIgKHZhbHVlQ2hhbmdlKT1cIl9vbkNoYW5nZVBlclBhZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bGkgZmQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGFnZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9saT5cbiAgICA8L2ZkLXNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,8 +1,8 @@
1
- import { Injectable } from '@angular/core';
2
- import { takeUntil } from 'rxjs/operators';
3
1
  import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
2
+ import { DOWN_ARROW, END, ENTER, ESCAPE, HOME, SPACE, TAB, UP_ARROW, hasModifierKey } from '@angular/cdk/keycodes';
3
+ import { Injectable } from '@angular/core';
4
4
  import { KeyUtil } from '@fundamental-ngx/cdk/utils';
5
- import { UP_ARROW, DOWN_ARROW, ENTER, SPACE, HOME, TAB, END, ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';
5
+ import { takeUntil } from 'rxjs/operators';
6
6
  import * as i0 from "@angular/core";
7
7
  export class SelectKeyManagerService {
8
8
  /**
@@ -19,7 +19,7 @@ export class SelectKeyManagerService {
19
19
  // tab focus fix for mobile
20
20
  if (!this._component.mobile) {
21
21
  this._component.focus();
22
- this._component.close();
22
+ this._component.close(false, true);
23
23
  }
24
24
  });
25
25
  this._keyManager.change.pipe(takeUntil(this._component._destroy)).subscribe(() => {
@@ -115,4 +115,4 @@ export class SelectKeyManagerService {
115
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: SelectKeyManagerService, decorators: [{
116
116
  type: Injectable
117
117
  }] });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWtleS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LWtleS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU1uSCxNQUFNLE9BQU8sdUJBQXVCO0lBT2hDOzs7T0FHRztJQUNILGVBQWU7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQTBCLENBQW1CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3hGLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2FBQ3hELHVCQUF1QixFQUFFO2FBQ3pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ25FLHVCQUF1QixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FB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RUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMvRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7SUFDTCxDQUFDOzhHQXRIUSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFVQX0FSUk9XLCBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIEhPTUUsIFRBQiwgRU5ELCBFU0NBUEUsIGhhc01vZGlmaWVyS2V5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcblxuaW1wb3J0IHsgU2VsZWN0SW50ZXJmYWNlIH0gZnJvbSAnLi9zZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuL29wdGlvbnMuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlbGVjdEtleU1hbmFnZXJTZXJ2aWNlIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb21wb25lbnQ6IFNlbGVjdEludGVyZmFjZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2tleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbnNJbnRlcmZhY2U+O1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBhIGtleSBtYW5hZ2VyIHRvIGxpc3RlbiB0byBrZXlib2FyZCBldmVudHMgb24gdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9pbml0S2V5TWFuYWdlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxPcHRpb25zSW50ZXJmYWNlPih0aGlzLl9jb21wb25lbnQuX29wdGlvbnMpXG4gICAgICAgICAgICAud2l0aFR5cGVBaGVhZCh0aGlzLl9jb21wb25lbnQudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbClcbiAgICAgICAgICAgIC53aXRoVmVydGljYWxPcmllbnRhdGlvbigpXG4gICAgICAgICAgICAud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9jb21wb25lbnQuX2lzUnRsKCkgPyAncnRsJyA6ICdsdHInKVxuICAgICAgICAgICAgLndpdGhBbGxvd2VkTW9kaWZpZXJLZXlzKFsnc2hpZnRLZXknXSk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlci50YWJPdXQucGlwZSh0YWtlVW50aWwodGhpcy5fY29tcG9uZW50Ll9kZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRhYiBmb2N1cyBmaXggZm9yIG1vYmlsZVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnQubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2NvbXBvbmVudC5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Ll9pc09wZW4gJiYgdGhpcy5fY29tcG9uZW50Ll9vcHRpb25QYW5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbEFjdGl2ZU9wdGlvbkludG9WaWV3KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb21wb25lbnQuX2lzT3BlbiAmJiB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Njcm9sbEFjdGl2ZU9wdGlvbkludG9WaWV3KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IHx8IDA7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5fb3B0aW9uUGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLl9jb21wb25lbnQuX2dldE9wdGlvblNjcm9sbFBvc2l0aW9uKFxuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuX2dldEl0ZW1IZWlnaHQoKSxcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5fb3B0aW9uUGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGlsZSB0aGUgc2VsZWN0IGlzIGNsb3NlZC5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2hhbmRsZUNsb3NlZEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNPcGVuS2V5ID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKTtcbiAgICAgICAgY29uc3QgbWFuYWdlciA9IHRoaXMuX2tleU1hbmFnZXI7XG5cbiAgICAgICAgLy8gT3BlbiB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgICAgIGlmICghbWFuYWdlci5pc1R5cGluZygpICYmIGlzT3BlbktleSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50cyB0aGUgcGFnZSBmcm9tIHNjcm9sbGluZyBkb3duIHdoZW4gcHJlc3Npbmcgc3BhY2VcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNseVNlbGVjdGVkT3B0aW9uID0gdGhpcy5fY29tcG9uZW50LnNlbGVjdGVkO1xuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtIT01FLCBFTkRdKSkge1xuICAgICAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgSE9NRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5fY29tcG9uZW50LnNlbGVjdGVkO1xuXG4gICAgICAgICAgICAvLyBhMTF5IFNpbmNlIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgd2UgbmVlZCB0byBhbm5vdW5jZSBpdC5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbiAmJiBwcmV2aW91c2x5U2VsZWN0ZWRPcHRpb24gIT09IHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9saXZlQW5ub3VuY2VyLmFubm91bmNlKChzZWxlY3RlZE9wdGlvbiBhcyBPcHRpb25zSW50ZXJmYWNlKS52aWV3VmFsdWUsIDEwMDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIHdoZW4gdGhlIHNlbGVjdGVkIGlzIG9wZW4uXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2hhbmRsZU9wZW5LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLl9rZXlNYW5hZ2VyO1xuICAgICAgICBjb25zdCBpc0Fycm93S2V5ID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtVUF9BUlJPVywgRE9XTl9BUlJPV10pO1xuICAgICAgICBjb25zdCBpc1R5cGluZyA9IG1hbmFnZXIuaXNUeXBpbmcoKTtcblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtIT01FLCBFTkRdKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgSE9NRSkpIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKGlzQXJyb3dLZXkgJiYgZXZlbnQuYWx0S2V5KSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VTQ0FQRV0pKSB7XG4gICAgICAgICAgICAvLyBDbG9zZSB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gV2hlbiB1c2VyIGlzIHR5cGluZyBkbyBub3RoaW5nLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGUgdHlwaW5nIHNlcXVlbmNlIGNhbiBpbmNsdWRlIHRoZSBzcGFjZSBrZXkuXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAhaXNUeXBpbmcgJiZcbiAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkgJiZcbiAgICAgICAgICAgIG1hbmFnZXIuYWN0aXZlSXRlbSAmJlxuICAgICAgICAgICAgIWhhc01vZGlmaWVyS2V5KGV2ZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuYmx1cigpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc1R5cGluZyAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1RBQl0pICYmIHRoaXMuX2NvbXBvbmVudC5tb2JpbGUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWtleS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LWtleS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU0zQyxNQUFNLE9BQU8sdUJBQXVCO0lBT2hDOzs7T0FHRztJQUNILGVBQWU7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQTBCLENBQW1CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3hGLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2FBQ3hELHVCQUF1QixFQUFFO2FBQ3pCLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ25FLHVCQUF1QixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FB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QUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQjthQUFNLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQy9FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7OEdBdEhRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTkQsIEVOVEVSLCBFU0NBUEUsIEhPTUUsIFNQQUNFLCBUQUIsIFVQX0FSUk9XLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi9vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWxlY3RJbnRlcmZhY2UgfSBmcm9tICcuL3NlbGVjdC5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VsZWN0S2V5TWFuYWdlclNlcnZpY2Uge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbXBvbmVudDogU2VsZWN0SW50ZXJmYWNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfa2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8T3B0aW9uc0ludGVyZmFjZT47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGEga2V5IG1hbmFnZXIgdG8gbGlzdGVuIHRvIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgb3ZlcmxheSBwYW5lbC5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2luaXRLZXlNYW5hZ2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE9wdGlvbnNJbnRlcmZhY2U+KHRoaXMuX2NvbXBvbmVudC5fb3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoVHlwZUFoZWFkKHRoaXMuX2NvbXBvbmVudC50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKVxuICAgICAgICAgICAgLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKClcbiAgICAgICAgICAgIC53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2NvbXBvbmVudC5faXNSdGwoKSA/ICdydGwnIDogJ2x0cicpXG4gICAgICAgICAgICAud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWydzaGlmdEtleSddKTtcblxuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKHRha2VVbnRpbCh0aGlzLl9jb21wb25lbnQuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gdGFiIGZvY3VzIGZpeCBmb3IgbW9iaWxlXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudC5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuY2xvc2UoZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9jb21wb25lbnQuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudC5faXNPcGVuICYmIHRoaXMuX2NvbXBvbmVudC5fb3B0aW9uUGFuZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxBY3RpdmVPcHRpb25JbnRvVmlldygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY29tcG9uZW50Ll9pc09wZW4gJiYgdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zY3JvbGxBY3RpdmVPcHRpb25JbnRvVmlldygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uSW5kZXggPSB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCB8fCAwO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuX29wdGlvblBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5fY29tcG9uZW50Ll9nZXRPcHRpb25TY3JvbGxQb3NpdGlvbihcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9nZXRJdGVtSGVpZ2h0KCksXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuX29wdGlvblBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgd2hpbGUgdGhlIHNlbGVjdCBpcyBjbG9zZWQuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9oYW5kbGVDbG9zZWRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzT3BlbktleSA9IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSk7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLl9rZXlNYW5hZ2VyO1xuXG4gICAgICAgIC8vIE9wZW4gdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgICAgICBpZiAoIW1hbmFnZXIuaXNUeXBpbmcoKSAmJiBpc09wZW5LZXkgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmcgZG93biB3aGVuIHByZXNzaW5nIHNwYWNlXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Lm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzbHlTZWxlY3RlZE9wdGlvbiA9IHRoaXMuX2NvbXBvbmVudC5zZWxlY3RlZDtcblxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbSE9NRSwgRU5EXSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEhPTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuX2NvbXBvbmVudC5zZWxlY3RlZDtcblxuICAgICAgICAgICAgLy8gYTExeSBTaW5jZSB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIG5lZWQgdG8gYW5ub3VuY2UgaXQuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgcHJldmlvdXNseVNlbGVjdGVkT3B0aW9uICE9PSBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSgoc2VsZWN0ZWRPcHRpb24gYXMgT3B0aW9uc0ludGVyZmFjZSkudmlld1ZhbHVlLCAxMDAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGVuIHRoZSBzZWxlY3RlZCBpcyBvcGVuLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9oYW5kbGVPcGVuS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5fa2V5TWFuYWdlcjtcbiAgICAgICAgY29uc3QgaXNBcnJvd0tleSA9IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1ddKTtcbiAgICAgICAgY29uc3QgaXNUeXBpbmcgPSBtYW5hZ2VyLmlzVHlwaW5nKCk7XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbSE9NRSwgRU5EXSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEhPTUUpKSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChpc0Fycm93S2V5ICYmIGV2ZW50LmFsdEtleSkgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFU0NBUEVdKSkge1xuICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuY2xvc2UoKTtcbiAgICAgICAgICAgIC8vIFdoZW4gdXNlciBpcyB0eXBpbmcgZG8gbm90aGluZyxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHR5cGluZyBzZXF1ZW5jZSBjYW4gaW5jbHVkZSB0aGUgc3BhY2Uga2V5LlxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgIWlzVHlwaW5nICYmXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pICYmXG4gICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW0gJiZcbiAgICAgICAgICAgICFoYXNNb2RpZmllcktleShldmVudClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmJsdXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNUeXBpbmcgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtUQUJdKSAmJiB0aGlzLl9jb21wb25lbnQubW9iaWxlKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19