@skyux/lookup 10.41.5 → 10.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/documentation.json +1886 -1768
  2. package/esm2022/lib/modules/autocomplete/autocomplete-adapter.service.mjs +4 -4
  3. package/esm2022/lib/modules/autocomplete/autocomplete-input.directive.mjs +4 -4
  4. package/esm2022/lib/modules/autocomplete/autocomplete-search-async-disabled.pipe.mjs +4 -4
  5. package/esm2022/lib/modules/autocomplete/autocomplete.component.mjs +4 -4
  6. package/esm2022/lib/modules/autocomplete/autocomplete.module.mjs +5 -5
  7. package/esm2022/lib/modules/country-field/country-field.component.mjs +4 -4
  8. package/esm2022/lib/modules/country-field/country-field.module.mjs +5 -5
  9. package/esm2022/lib/modules/lookup/lookup-adapter.service.mjs +4 -4
  10. package/esm2022/lib/modules/lookup/lookup-autocomplete-adapter.mjs +4 -4
  11. package/esm2022/lib/modules/lookup/lookup-show-more-modal.component.mjs +4 -4
  12. package/esm2022/lib/modules/lookup/lookup.component.mjs +22 -5
  13. package/esm2022/lib/modules/lookup/lookup.module.mjs +5 -5
  14. package/esm2022/lib/modules/search/search-adapter.service.mjs +4 -4
  15. package/esm2022/lib/modules/search/search.component.mjs +4 -4
  16. package/esm2022/lib/modules/search/search.module.mjs +5 -5
  17. package/esm2022/lib/modules/selection-modal/selection-modal-item-selected.pipe.mjs +4 -4
  18. package/esm2022/lib/modules/selection-modal/selection-modal.component.mjs +4 -4
  19. package/esm2022/lib/modules/selection-modal/selection-modal.module.mjs +5 -5
  20. package/esm2022/lib/modules/selection-modal/selection-modal.service.mjs +4 -4
  21. package/esm2022/lib/modules/shared/sky-lookup-resources.module.mjs +5 -5
  22. package/esm2022/testing/country-field/country-field-testing.module.mjs +5 -5
  23. package/esm2022/testing/search/search-testing.module.mjs +5 -5
  24. package/fesm2022/skyux-lookup-testing.mjs +8 -8
  25. package/fesm2022/skyux-lookup-testing.mjs.map +1 -1
  26. package/fesm2022/skyux-lookup.mjs +84 -67
  27. package/fesm2022/skyux-lookup.mjs.map +1 -1
  28. package/lib/modules/lookup/lookup.component.d.ts +8 -1
  29. package/package.json +17 -17
@@ -828,10 +828,10 @@ export class SkyAutocompleteComponent {
828
828
  this.#isResultsVisible.next(isResultsVisible);
829
829
  }
830
830
  }
831
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyAffixService }, { token: i2.SkyAutocompleteAdapterService }, { token: i1.SkyOverlayService }, { token: i3.SkyInputBoxHostService, optional: true }, { token: SKY_STACKING_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
832
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyAutocompleteComponent, selector: "sky-autocomplete", inputs: { ariaLabelledBy: "ariaLabelledBy", data: "data", debounceTime: "debounceTime", descriptorProperty: "descriptorProperty", enableShowMore: "enableShowMore", messageStream: "messageStream", wrapperClass: "wrapperClass", propertiesToSearch: "propertiesToSearch", search: "search", searchResultTemplate: "searchResultTemplate", searchTextMinimumCharacters: "searchTextMinimumCharacters", searchFilters: "searchFilters", searchResultsLimit: "searchResultsLimit", showAddButton: "showAddButton", noResultsFoundText: "noResultsFoundText", searchAsyncDisabled: "searchAsyncDisabled" }, outputs: { addClick: "addClick", showMoreClick: "showMoreClick", selectionChange: "selectionChange", searchAsync: "searchAsync", openChange: "openChange" }, providers: [SkyAutocompleteAdapterService], queries: [{ propertyName: "inputDirective", first: true, predicate: SkyAutocompleteInputDirective, descendants: true }], viewQueries: [{ propertyName: "resultsTemplateRef", first: true, predicate: ["resultsTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "resultsRef", first: true, predicate: ["resultsRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-controls]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n ? resultsListId\n : null\n \"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content />\n</div>\n\n<ng-template #resultsTemplateRef>\n <!-- We do not want the blur to fire here so that the dropdown does not close. This is why we are preventing the mousedown default. -->\n <div\n class=\"sky-autocomplete-results-container\"\n [attr.id]=\"resultsListId\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (mousedown)=\"$event.preventDefault()\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"isResultsVisible | async\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"\n (!searchResultsLimit || i < searchResultsLimit) &&\n !(enableShowMore && i >= 5)\n \"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (click)=\"onResultClick(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon icon=\"add\" />\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:-webkit-calc(50vh - 50px);max-height:-moz-calc(50vh - 50px);max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: i6.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i7.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "component", type: i5.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "pipe", type: i1.SkyNumericPipe, name: "skyNumeric" }, { kind: "pipe", type: i9.SkyAutocompleteSearchAsyncDisabledPipe, name: "skyAutocompleteSearchAsyncDisabled" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
831
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyAffixService }, { token: i2.SkyAutocompleteAdapterService }, { token: i1.SkyOverlayService }, { token: i3.SkyInputBoxHostService, optional: true }, { token: SKY_STACKING_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
832
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SkyAutocompleteComponent, selector: "sky-autocomplete", inputs: { ariaLabelledBy: "ariaLabelledBy", data: "data", debounceTime: "debounceTime", descriptorProperty: "descriptorProperty", enableShowMore: "enableShowMore", messageStream: "messageStream", wrapperClass: "wrapperClass", propertiesToSearch: "propertiesToSearch", search: "search", searchResultTemplate: "searchResultTemplate", searchTextMinimumCharacters: "searchTextMinimumCharacters", searchFilters: "searchFilters", searchResultsLimit: "searchResultsLimit", showAddButton: "showAddButton", noResultsFoundText: "noResultsFoundText", searchAsyncDisabled: "searchAsyncDisabled" }, outputs: { addClick: "addClick", showMoreClick: "showMoreClick", selectionChange: "selectionChange", searchAsync: "searchAsync", openChange: "openChange" }, providers: [SkyAutocompleteAdapterService], queries: [{ propertyName: "inputDirective", first: true, predicate: SkyAutocompleteInputDirective, descendants: true }], viewQueries: [{ propertyName: "resultsTemplateRef", first: true, predicate: ["resultsTemplateRef"], descendants: true, read: TemplateRef }, { propertyName: "resultsRef", first: true, predicate: ["resultsRef"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-controls]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n ? resultsListId\n : null\n \"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content />\n</div>\n\n<ng-template #resultsTemplateRef>\n <!-- We do not want the blur to fire here so that the dropdown does not close. This is why we are preventing the mousedown default. -->\n <div\n class=\"sky-autocomplete-results-container\"\n [attr.id]=\"resultsListId\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (mousedown)=\"$event.preventDefault()\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"isResultsVisible | async\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"\n (!searchResultsLimit || i < searchResultsLimit) &&\n !(enableShowMore && i >= 5)\n \"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (click)=\"onResultClick(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon icon=\"add\" />\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:-webkit-calc(50vh - 50px);max-height:-moz-calc(50vh - 50px);max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: ["skyHighlight"] }, { kind: "component", type: i6.λ1, selector: "sky-icon", inputs: ["icon", "iconName", "iconType", "size", "fixedWidth", "variant"] }, { kind: "directive", type: i7.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "component", type: i5.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "pipe", type: i1.SkyNumericPipe, name: "skyNumeric" }, { kind: "pipe", type: i9.SkyAutocompleteSearchAsyncDisabledPipe, name: "skyAutocompleteSearchAsyncDisabled" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
833
833
  }
834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteComponent, decorators: [{
834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteComponent, decorators: [{
835
835
  type: Component,
836
836
  args: [{ selector: 'sky-autocomplete', providers: [SkyAutocompleteAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n \"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-controls]=\"\n isOpen && (showActionsArea || (isResultsVisible | async))\n ? resultsListId\n : null\n \"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content />\n</div>\n\n<ng-template #resultsTemplateRef>\n <!-- We do not want the blur to fire here so that the dropdown does not close. This is why we are preventing the mousedown default. -->\n <div\n class=\"sky-autocomplete-results-container\"\n [attr.id]=\"resultsListId\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (mousedown)=\"$event.preventDefault()\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"isResultsVisible | async\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"\n (!searchResultsLimit || i < searchResultsLimit) &&\n !(enableShowMore && i >= 5)\n \"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.data-descriptor-value]=\"result.data[descriptorProperty]\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (click)=\"onResultClick(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate || defaultSearchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"sky-autocomplete-action sky-autocomplete-action-more sky-btn sky-btn-link\"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon icon=\"add\" />\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n", styles: [".sky-autocomplete-results-container{position:fixed;background-color:#fff}.sky-autocomplete-results-waiting{height:70px}.sky-autocomplete-results{display:flex;flex-direction:column;padding:4px;overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:-webkit-calc(50vh - 50px);max-height:-moz-calc(50vh - 50px);max-height:calc(50vh - 50px)}.sky-autocomplete-result{color:#212327;margin-bottom:4px;padding:3px 20px;cursor:pointer}.sky-autocomplete-result:last-child{margin-bottom:0}.sky-autocomplete-actions{border-top:1px solid #cdcfd2}.sky-autocomplete-actions .sky-autocomplete-action{border:none}.sky-autocomplete-actions .sky-autocomplete-actions-no-results{display:inline-block;padding:7px 13px}.sky-autocomplete-action-add{float:right}.sky-autocomplete-action-add sky-icon{padding-right:5px}.sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:#eeeeef}.sky-autocomplete-descendant-focus.sky-autocomplete-action{outline:thin dotted;outline:-webkit-focus-ring-color auto 5px}::ng-deep .sky-theme-modern .sky-autocomplete-results-container{border-radius:6px}::ng-deep .sky-theme-modern .sky-autocomplete-results{padding:10px 0}::ng-deep .sky-theme-modern .sky-autocomplete-result{margin-bottom:0;padding:10px 0 10px 15px}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus:not(.sky-autocomplete-action){background-color:inherit}::ng-deep .sky-theme-modern .sky-autocomplete-descendant-focus{border:none;box-shadow:inset 0 0 0 2px #1870b8,0 1px 8px #0000004d}\n"] }]
837
837
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyAffixService }, { type: i2.SkyAutocompleteAdapterService }, { type: i1.SkyOverlayService }, { type: i3.SkyInputBoxHostService, decorators: [{
@@ -897,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
897
897
  read: ElementRef,
898
898
  }]
899
899
  }] } });
900
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBR3RCLHVCQUF1QixHQUl4QixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBRVAsSUFBSSxFQUNKLFNBQVMsSUFBSSxtQkFBbUIsRUFDaEMsRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sd0NB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Z0JBZUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWNLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBY0ssYUFBYTtzQkFEdkIsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQVNLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFtQkssTUFBTTtzQkFEaEIsS0FBSztnQkFxQkMsb0JBQW9CO3NCQUQxQixLQUFLO2dCQVVLLDJCQUEyQjtzQkFEckMsS0FBSztnQkFrQkssYUFBYTtzQkFEdkIsS0FBSztnQkFvQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWVLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBY0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFRQyxRQUFRO3NCQURkLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsTUFBTTtnQkFPQSxlQUFlO3NCQURyQixNQUFNO2dCQVFBLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsVUFBVTtzQkFEaEIsTUFBTTtnQkEwQ0ksY0FBYztzQkFEeEIsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBaUVwQyxrQkFBa0I7c0JBSHhCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUU7d0JBQy9CLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNVSxVQUFVO3NCQUhwQixTQUFTO3VCQUFDLFlBQVksRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfU1RBQ0tJTkdfQ09OVEVYVCxcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBZmZpeGVyLFxuICBTa3lMaXZlQW5ub3VuY2VyU2VydmljZSxcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbiAgU2t5U3RhY2tpbmdDb250ZXh0LFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBmcm9tLFxuICBmcm9tRXZlbnQgYXMgb2JzZXJ2YWJsZUZyb21FdmVudCxcbiAgb2YsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgbWFwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVEaWFjcml0aWNzIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1sb29rdXAtc3RyaW5nLXV0aWxzJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtZGVmYXVsdC1zZWFyY2gtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1tZXNzYWdlLXR5cGUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNBcmdzIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWFzeW5jLWFyZ3MnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtcmVzdWx0JztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uLWZpbHRlcic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWxlY3Rpb24tY2hhbmdlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNob3dNb3JlQXJncyB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNob3ctbW9yZS1hcmdzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdCB7XG4gIGVsZW1lbnRJZDogc3RyaW5nO1xuICBkYXRhOiBhbnk7XG59XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vI3JlZ2lvbiBwdWJsaWNfYXBpXG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgSUQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHNcbiAgICogdGhlIGF1dG9jb21wbGV0ZSB0ZXh0IGlucHV0LiBUaGlzIHNldHMgdGhlIGlucHV0J3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbGxlZGJ5KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIGRhdGEgc291cmNlIGZvciB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCB0byBzZWFyY2hcbiAgICogd2hlbiB1c2VycyBlbnRlciB0ZXh0LiBGb3IgYSBkeW5hbWljIGRhdGEgc291cmNlIHN1Y2ggYXMgYW4gYXJyYXkgdGhhdFxuICAgKiBjaGFuZ2VzIGR1ZSB0byBzZXJ2ZXIgY2FsbHMsIHVzZSBgc2VhcmNoYCBvciBgc2VhcmNoQXN5bmNgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGEgPSB2YWx1ZSA/PyBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzZWFyY2hpbmcgd2hpbGUgdXNlcnNcbiAgICogZW50ZXIgdGV4dCBpbiB0aGUgYXV0b2NvbXBsZXRlIGZpZWxkLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RlYm91bmNlVGltZSA9IHZhbHVlID8/IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgcHJvcGVydHkgdG8gZGlzcGxheSBpbiB0aGUgdGV4dCBpbnB1dCBhZnRlciB1c2Vyc1xuICAgKiBzZWxlY3QgYW4gaXRlbSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgXCJuYW1lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRvclByb3BlcnR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5ID0gdmFsdWUgfHwgJ25hbWUnO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdG9yUHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rlc2NyaXB0b3JQcm9wZXJ0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgYnV0dG9uIGluIHRoZSBkcm9wZG93biB0aGF0IG9wZW5zIGEgcGlja2VyIHdoZXJlIHVzZXJzIGNhbiB2aWV3IGFsbCBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbmFibGVTaG93TW9yZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19lbmFibGVTaG93TW9yZSA9ICEhdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlSXNSZXN1bHRzVmlzaWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlU2hvd01vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19lbmFibGVTaG93TW9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSBvZiBgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZWAgdGhhdCBjYW4gY2xvc2UgdGhlIGRyb3Bkb3duLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWVzc2FnZVN0cmVhbSh2YWx1ZTogU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tZXNzYWdlU3RyZWFtID0gdmFsdWUgPz8gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcbiAgICB0aGlzLiNpbml0TWVzc2FnZVN0cmVhbSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlU3RyZWFtKCk6IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLiNfbWVzc2FnZVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3cmFwcGVyQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCBwcm9wZXJ0aWVzIHRvIHNlYXJjaC5cbiAgICogQGRlZmF1bHQgW1wibmFtZVwiXVxuICAgKiBAZGVwcmVjYXRlZCBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LiBUbyBzZWFyY2ggc3BlY2lmaWMgcHJvcGVydGllcywgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHByb3BlcnRpZXNUb1NlYXJjaCh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfcHJvcGVydGllc1RvU2VhcmNoID0gdmFsdWUgPz8gWyduYW1lJ107XG5cbiAgICB0aGlzLiN1cGRhdGVEZWZhdWx0U2VhcmNoT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBwcm9wZXJ0aWVzVG9TZWFyY2goKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNfcHJvcGVydGllc1RvU2VhcmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGR5bmFtaWNhbGx5IG1hbmFnZXMgdGhlIGRhdGEgc291cmNlIHdoZW4gdXNlcnNcbiAgICogY2hhbmdlIHRoZSB0ZXh0IGluIHRoZSBhdXRvY29tcGxldGUgZmllbGQuIFRoZSBzZWFyY2ggZnVuY3Rpb24gbXVzdCByZXR1cm5cbiAgICogYW4gYXJyYXkgb3IgYSBwcm9taXNlIG9mIGFuIGFycmF5LiBUaGUgYHNlYXJjaGAgcHJvcGVydHkgaXMgcGFydGljdWxhcmx5XG4gICAqIHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHNvdXJjZSBkb2VzIG5vdCBsaXZlIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICogQGRlcHJlY2F0ZWQgV2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgdGhpcyBwcm9wZXJ0eS4gVG8gY2FsbCBhIHJlbW90ZSBkYXRhIHNvdXJjZSwgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaCh2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoID0gdmFsdWU7XG4gICAgdGhpcy5zZWFyY2hPckRlZmF1bHQgPVxuICAgICAgdmFsdWUgfHxcbiAgICAgIHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2goKTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGZvcm1hdHMgZWFjaCBzZWFyY2ggcmVzdWx0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBpbmplY3RzIHNlYXJjaCByZXN1bHQgdmFsdWVzIGludG8gdGhlIHRlbXBsYXRlXG4gICAqIGFzIGBpdGVtYCB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgYWxsIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBvZiB0aGUgc2VhcmNoIHJlc3VsdHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoUmVzdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHVzZXJzIG11c3QgZW50ZXIgYmVmb3JlXG4gICAqIHRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50IHNlYXJjaGVzIHRoZSBkYXRhIHNvdXJjZSBhbmQgZGlzcGxheXMgc2VhcmNoXG4gICAqIHJlc3VsdHMgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gdmFsdWUgJiYgdmFsdWUgPiAwID8gdmFsdWUgOiAxO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXJyYXkgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWdhaW5zdCBlYWNoIHNlYXJjaCByZXN1bHQgaW4gb3JkZXJcbiAgICogdG8gZmlsdGVyIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IHNlYXJjaCBmdW5jdGlvbi4gV2hlblxuICAgKiB1c2luZyB0aGUgYHNlYXJjaGAgcHJvcGVydHkgdG8gc3BlY2lmeSBhIGN1c3RvbSBzZWFyY2ggZnVuY3Rpb24sIHlvdSBtdXN0XG4gICAqIG1hbnVhbGx5IGFwcGx5IGZpbHRlcnMgaW5zaWRlIHRoYXQgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBgdHJ1ZWBcbiAgICogb3IgYGZhbHNlYCBmb3IgZWFjaCByZXN1bHQgdG8gaW5kaWNhdGUgd2hldGhlciB0byBkaXNwbGF5IGl0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVwcmVjYXRlZCBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LiBUbyBmaWx0ZXIgcmVzdWx0cywgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaEZpbHRlcnMoXG4gICAgdmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19zZWFyY2hGaWx0ZXJzID0gdmFsdWU7XG5cbiAgICB0aGlzLiN1cGRhdGVEZWZhdWx0U2VhcmNoT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hGaWx0ZXJzKCk6XG4gICAgfCBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoRmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBkaXNwbGF5cyBhbGwgbWF0Y2hpbmcgcmVzdWx0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0c0xpbWl0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0ID0gdmFsdWUgfHwgMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0c0xpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0aGF0IGxldHMgdXNlcnMgYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzaG93QWRkQnV0dG9uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3Nob3dBZGRCdXR0b24gPSAhIXZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUlzUmVzdWx0c1Zpc2libGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dBZGRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19zaG93QWRkQnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBzZWFyY2ggcmVzdWx0cyBhcmUgZm91bmQuXG4gICAqIEBkZWZhdWx0IFwiTm8gbWF0Y2hlcyBmb3VuZFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9SZXN1bHRzRm91bmRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBbGxvd3MgYXN5bmMgc2VhcmNoIHRvIGJlIGRpc2FibGVkIGV2ZW4gd2hlbiBhIGxpc3RlbmVyIGlzIHNwZWNpZmllZCBmb3JcbiAgICogdGhlIGBzZWFyY2hBc3luY2Agb3V0cHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gdmlldyBhbGwgb3B0aW9ucy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2hvd01vcmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBpdGVtcyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZW50ZXIgbmV3IHNlYXJjaCBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHJlc3VsdHMgdG8gYmVcbiAgICogcmV0dXJuZWQgdmlhIGFuIG9ic2VydmFibGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiB0ZW1wbGF0ZV9wcm9wZXJ0aWVzXG5cbiAgcHVibGljIGdldCBzZWFyY2hSZXN1bHRzKCk6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFJlc3VsdHMgfHwgW107XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlYXJjaFJlc3VsdHModmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdKSB7XG4gICAgdGhpcy4jX3NlYXJjaFJlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGlnaGxpZ2h0VGV4dCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19oaWdobGlnaHRUZXh0IHx8IFtdO1xuICB9XG5cbiAgcHVibGljIHNldCBoaWdobGlnaHRUZXh0KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuI19oaWdobGlnaHRUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlc3VsdHNMaXN0SWQ6IHN0cmluZztcblxuICBwdWJsaWMgcmVzdWx0c1dyYXBwZXJJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgcHVibGljIGdldCBzaG93QWN0aW9uc0FyZWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zaG93QWRkQnV0dG9uIHx8ICEhdGhpcy5lbmFibGVTaG93TW9yZTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG5cbiAgcHVibGljIHNlYXJjaFJlc3VsdHNDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIEBDb250ZW50Q2hpbGQoU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpXG4gIHB1YmxpYyBzZXQgaW5wdXREaXJlY3RpdmUoXG4gICAgZGlyZWN0aXZlOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgaWYgKCFkaXJlY3RpdmUpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1RoZSBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgcmVxdWlyZXMgYSBDb250ZW50Q2hpbGQgaW5wdXQgb3InLFxuICAgICAgICAgICd0ZXh0YXJlYSBib3VuZCB3aXRoIHRoZSBTa3lBdXRvY29tcGxldGUgZGlyZWN0aXZlLiBGb3IgZXhhbXBsZTonLFxuICAgICAgICAgICdgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2t5QXV0b2NvbXBsZXRlPmAuJyxcbiAgICAgICAgXS5qb2luKCcgJyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNfaW5wdXREaXJlY3RpdmUgIT09IGRpcmVjdGl2ZSkge1xuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvbGQgc3Vic2NyaXB0aW9ucyBvbiBhbnkgcHJldmlvdXMgaW5wdXQgZGlyZWN0aXZlXG4gICAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZGlzcGxheVdpdGggPSB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLnRleHRDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGNoYW5nZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy4jc2VhcmNoVGV4dENoYW5nZWQoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdlIGRlbGF5IHRoaXMgbGlzdGVuZXIgYnkgMjVtcyB0byBnaXZlIHRoaW5ncyB3YXRjaGluZyB0aGUgdmFsdWUgdGltZSB0byByZXNwb25kIChzdWNoIGFzIHRoZSBzZWFyY2ggYnV0dG9uKS5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS5ibHVyXG4gICAgICAgIC5waXBlKGRlbGF5KDI1KSwgdGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICAgICAgICBkaXJlY3RpdmUub25Ub3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy4jaGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZm9jdXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNoYXNGb2N1cyA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXREaXJlY3RpdmUoKTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaW5wdXREaXJlY3RpdmU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdyZXN1bHRzVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyByZXN1bHRzVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCByZXN1bHRzUmVmKHZhbHVlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfcmVzdWx0c1JlZiA9IHZhbHVlO1xuICAgICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHNSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19yZXN1bHRzUmVmO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaE9yRGVmYXVsdDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb247XG5cbiAgcHJvdGVjdGVkIGlzUmVzdWx0c1Zpc2libGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGRlc2NlbmRhbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGhhcyBmb2N1cy5cbiAgICovXG4gICNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlO1xuXG4gICNhZmZpeGVyOiBTa3lBZmZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5ICNlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIHJlYWRvbmx5ICNsaXZlQW5ub3VuY2VTZXJ2aWNlID0gaW5qZWN0KFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSAjbGliUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0KFNreUxpYlJlc291cmNlc1NlcnZpY2UpO1xuXG4gICNoYXNGb2N1cyA9IGZhbHNlO1xuXG4gICNpbnB1dEJveEhvc3RTdmM6IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICAvKipcbiAgICogRWxlbWVudHMgd2l0aGluIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gdGhhdCBhcmUgZm9jdXNhYmxlLlxuICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgYWN0aW9uIGJ1dHRvbnMsIGJ1dCBjb3VsZCBhbHNvIGJlXG4gICAqIGVsZW1lbnRzIHByb3ZpZGVkIGluIHRoZSBjb25zdW1lcidzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gICNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjY3VycmVudFNlYXJjaFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNpc1Jlc3VsdHNWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgI3pJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+IHwgdW5kZWZpbmVkO1xuXG4gICNfZGF0YTogYW55W10gPSBbXTtcblxuICAjX2RlYm91bmNlVGltZSA9IDA7XG5cbiAgI19kZXNjcmlwdG9yUHJvcGVydHkgPSAnbmFtZSc7XG5cbiAgI19lbmFibGVTaG93TW9yZSA9IGZhbHNlO1xuXG4gICNfaGlnaGxpZ2h0VGV4dDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19pbnB1dERpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcblxuICAjX3Byb3BlcnRpZXNUb1NlYXJjaCA9IFsnbmFtZSddO1xuXG4gICNfcmVzdWx0c1JlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hGaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0czogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hSZXN1bHRzTGltaXQgPSAwO1xuXG4gICNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gMTtcblxuICAjX3Nob3dBZGRCdXR0b24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNLWV9TVEFDS0lOR19DT05URVhUKVxuICAgIHN0YWNraW5nQ29udGV4dD86IFNreVN0YWNraW5nQ29udGV4dCxcbiAgKSB7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNhZmZpeFNlcnZpY2UgPSBhZmZpeFNlcnZpY2U7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UgPSBhZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNvdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgIHRoaXMuI2lucHV0Qm94SG9zdFN2YyA9IGlucHV0Qm94SG9zdFN2YztcbiAgICB0aGlzLiN6SW5kZXggPSBzdGFja2luZ0NvbnRleHQ/LnpJbmRleDtcblxuICAgIHRoaXMuc2VhcmNoT3JEZWZhdWx0ID0gc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uKHtcbiAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogWyduYW1lJ10sXG4gICAgICBzZWFyY2hGaWx0ZXJzOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpZCA9ICsrdW5pcXVlSWQ7XG4gICAgdGhpcy5yZXN1bHRzTGlzdElkID0gYHNreS1hdXRvY29tcGxldGUtbGlzdC0ke2lkfWA7XG4gICAgdGhpcy5yZXN1bHRzV3JhcHBlcklkID0gYHNreS1hdXRvY29tcGxldGUtd3JhcHBlci0ke2lkfWA7XG4gICAgdGhpcy5pc1Jlc3VsdHNWaXNpYmxlID0gdGhpcy4jaXNSZXN1bHRzVmlzaWJsZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRkSW5wdXRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jaXNSZXN1bHRzVmlzaWJsZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkQnV0dG9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENsaWNrLmVtaXQoKTtcbiAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICB9XG4gICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKiBTYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuI2dldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRJZCA9IGFjdGl2ZUVsZW1lbnQ/LmlkO1xuICAgICAgY29uc3QgdGFyZ2V0SXNTZWFyY2hSZXN1bHQgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmluZChcbiAgICAgICAgKHIpID0+IHIuZWxlbWVudElkID09PSBhY3RpdmVFbGVtZW50SWQsXG4gICAgICApO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgaWYgKHRhcmdldElzU2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGFjdGl2ZUVsZW1lbnRJZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgaWYgKHRhcmdldElzU2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGFjdGl2ZUVsZW1lbnRJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9PT1cbiAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9XG4gICAgICAgICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNhZGRGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNhbm5vdW5jZVJlc3VsdHMoKTogdm9pZCB7XG4gICAgdGhpcy4jbGliUmVzb3VyY2VTZXJ2aWNlXG4gICAgICAuZ2V0U3RyaW5ncyh7XG4gICAgICAgIG5vUmVzdWx0czogJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyxcbiAgICAgICAgc2luZ2xlQ291bnRSZXN1bHQ6ICdza3l1eF9hdXRvY29tcGxldGVfb25lX3Jlc3VsdCcsXG4gICAgICAgIG11bHRpcGxlQ291bnRSZXN1bHRzOiBbXG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9tdWx0aXBsZV9yZXN1bHRzJyxcbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxpemVkU3RyaW5ncykgPT4ge1xuICAgICAgICBsZXQgYW5ub3VuY2VtZW50U3RyaW5nID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCAmJiB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA+IDApIHtcbiAgICAgICAgICBhbm5vdW5jZW1lbnRTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPT09IDFcbiAgICAgICAgICAgICAgPyBsb2NhbGl6ZWRTdHJpbmdzLnNpbmdsZUNvdW50UmVzdWx0XG4gICAgICAgICAgICAgIDogbG9jYWxpemVkU3RyaW5ncy5tdWx0aXBsZUNvdW50UmVzdWx0cztcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmFubm91bmNlKGFubm91bmNlbWVudFN0cmluZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmFubm91bmNlKGxvY2FsaXplZFN0cmluZ3Mubm9SZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9yZUJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TW9yZUNsaWNrLmVtaXQoeyBpbnB1dFZhbHVlOiB0aGlzLnNlYXJjaFRleHQgfSk7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc3VsdENsaWNrKGlkOiBzdHJpbmcsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChpZCk7XG5cbiAgICBpZiAoIXRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI3Jlc2V0U2VhcmNoKCk7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc3VsdE1vdXNlTW92ZShpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGlkICE9PSB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXgpIHtcbiAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gaWQ7XG4gICAgICB0aGlzLiNhZGRGb2N1c2VkQ2xhc3MoKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VsZW1lbnRGb2N1c2VkKHJlZjogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVmID09PSB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgfVxuXG4gICNzZWFyY2hUZXh0Q2hhbmdlZChzZWFyY2hUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMuI29wZW5Ecm9wZG93bigpO1xuICAgICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICAgICFzZWFyY2hUZXh0IHx8ICFzZWFyY2hUZXh0LnRyaW0oKSB8fCBzZWFyY2hUZXh0Lm1hdGNoKC9eXFxzKyQvKTtcblxuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgLy8gRW1pdCBzZWxlY3Rpb25DaGFuZ2UgaWYgdmFsdWUgaGFzIGJlZW4gY2xlYXJlZC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTG9uZ0Vub3VnaCA9XG4gICAgICAgIHNlYXJjaFRleHQubGVuZ3RoID49IHRoaXMuc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICAgICAgY29uc3QgaXNEaWZmZXJlbnQgPSBzZWFyY2hUZXh0ICE9PSB0aGlzLnNlYXJjaFRleHQ7XG5cbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQudHJpbSgpO1xuICAgICAgdGhpcy4jdXBkYXRlSXNSZXN1bHRzVmlzaWJsZSgpO1xuXG4gICAgICBpZiAoaXNMb25nRW5vdWdoICYmIGlzRGlmZmVyZW50KSB7XG4gICAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcblxuICAgICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdGhpcy4jcGVyZm9ybVNlYXJjaCgpXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0Py5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbSAmJiB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eSBpbiBpdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPVxuICAgICAgICAgICAgICBpdGVtcz8ubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50SWQ6IGAke3RoaXMucmVzdWx0c0xpc3RJZH0taXRlbS0ke2l9YCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPSByZXN1bHQ/LnRvdGFsQ291bnQgfHwgMDtcblxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0ID0gdGhpcy4jZ2V0SGlnaGxpZ2h0VGV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk7XG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgLy8gU2FmZXR5IGNoZWNrXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgIC8vIExldCB0aGUgcmVzdWx0cyBwb3B1bGF0ZSBpbiB0aGUgRE9NIGJlZm9yZSByZWNhbGN1bGF0aW5nIHBsYWNlbWVudC5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICNwZXJmb3JtU2VhcmNoKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQXN5bmNEaXNhYmxlZCAmJiB0aGlzLnNlYXJjaEFzeW5jLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hBc3luY0FyZ3M6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyA9IHtcbiAgICAgICAgZGlzcGxheVR5cGU6ICdwb3BvdmVyJyxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlYXJjaEFzeW5jLmVtaXQoc2VhcmNoQXN5bmNBcmdzKTtcblxuICAgICAgcmV0dXJuIHNlYXJjaEFzeW5jQXJncy5yZXN1bHQgfHwgb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaE9yRGVmYXVsdCh0aGlzLnNlYXJjaFRleHQsIHRoaXMuZGF0YSwge1xuICAgICAgY29udGV4dDogJ3BvcG92ZXInLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBpdGVtczogcmVzdWx0LFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocmVzdWx0KS5waXBlKFxuICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAjY2FuY2VsQ3VycmVudFNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jY3VycmVudFNlYXJjaFN1Yikge1xuICAgICAgdGhpcy4jY3VycmVudFNlYXJjaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy4jY3VycmVudFNlYXJjaFN1YiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dCB0byBoaWdobGlnaHQgYmFzZWQgb24gZXhhY3QgbWF0Y2hlcywgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzLCBhbmQgbWF0Y2hlcyBmb3IgY29ycmVzcG9uZGluZyBkaWFjcml0aWNhbCBjaGFyYWN0ZXJzIChhIHdpbGwgbWF0Y2ggw6ApLlxuICAgKi9cbiAgI2dldEhpZ2hsaWdodFRleHQoc2VhcmNoVGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hUZXh0ID0gbm9ybWFsaXplRGlhY3JpdGljcyhzZWFyY2hUZXh0KVxuICAgICAgLnRvTG9jYWxlVXBwZXJDYXNlKClcbiAgICAgIC50cmltKCk7XG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVGV4dCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCBtYXRjaGVzVG9IaWdobGlnaHQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnNlYXJjaFJlc3VsdHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VhcmNoUmVzdWx0c1tpXS5kYXRhW3RoaXMuZGVzY3JpcHRvclByb3BlcnR5XVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAudG9Mb2NhbGVVcHBlckNhc2UoKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRGF0YVZhbHVlID0gbm9ybWFsaXplRGlhY3JpdGljcyh2YWx1ZSk7XG5cbiAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgbGV0IGluZGV4OiBudW1iZXI7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIChpbmRleCA9IG5vcm1hbGl6ZWREYXRhVmFsdWUuaW5kZXhPZihub3JtYWxpemVkU2VhcmNoVGV4dCwgb2Zmc2V0KSkgPiAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSB2YWx1ZS5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCA9IGluZGV4ICsgc2VhcmNoVGV4dC5sZW5ndGg7XG4gICAgICAgIG1hdGNoZXNUb0hpZ2hsaWdodCA9IG1hdGNoZXNUb0hpZ2hsaWdodC5jb25jYXQobWF0Y2hlZFN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBkdXBsaWNhdGVzIGZyb20gdGhlIGFycmF5LlxuICAgIHJldHVybiBbLi4ubmV3IFNldChtYXRjaGVzVG9IaWdobGlnaHQpXTtcbiAgfVxuXG4gICNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmluZCgocikgPT4gci5lbGVtZW50SWQgPT09IGlkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuZGF0YTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IGRhdGFbdGhpcy5kZXNjcmlwdG9yUHJvcGVydHldO1xuICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSA9IGRhdGE7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBkYXRhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI29wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI292ZXJsYXkgJiYgdGhpcy5yZXN1bHRzVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLiNvdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICBlbmFibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGVuYWJsZVBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuI2Vudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIHdyYXBwZXJDbGFzczogdGhpcy53cmFwcGVyQ2xhc3MsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuI3pJbmRleCkge1xuICAgICAgICB0aGlzLiN6SW5kZXgucGlwZSh0YWtlVW50aWwob3ZlcmxheS5jbG9zZWQpKS5zdWJzY3JpYmUoKHpJbmRleCkgPT4ge1xuICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9IHpJbmRleC50b1N0cmluZygxMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMucmVzdWx0c1RlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLiN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuI3VwZGF0ZUFyaWFDb250cm9scygpO1xuICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgdGhpcy4jYW5ub3VuY2VSZXN1bHRzKCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jdXBkYXRlQXJpYUNvbnRyb2xzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgI3NldEFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9XG4gICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgICAvKiBTYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QWN0aXZlRGVzY2VuZGFudChhY3RpdmVFbGVtZW50LmlkKTtcbiAgICB9XG4gIH1cblxuICAjcmVtb3ZlQWN0aXZlRGVzY2VuZGFudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5zZXRBY3RpdmVEZXNjZW5kYW50KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVBcmlhQ29udHJvbHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QXJpYUNvbnRyb2xzKHRoaXMuI292ZXJsYXk/LmlkIHx8IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gICNyZXNldFNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLmhpZ2hsaWdodFRleHQgPSBbXTtcbiAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgIHRoaXMuI3VwZGF0ZUlzUmVzdWx0c1Zpc2libGUoKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNhZGRJbnB1dEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bihldmVudCk7XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5yZXN1bHRzUmVmKSB7XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RHJvcGRvd25XaWR0aChcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNSZWYsXG4gICAgICAgICAgICAhIXRoaXMuI2lucHV0Qm94SG9zdFN2YyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmMsXG4gICAgICApO1xuXG4gICAgICBhZmZpeGVyLmFmZml4VG8odGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICBlbmFibGVBdXRvRml0OiB0cnVlLFxuICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgcGxhY2VtZW50OiAnYmVsb3cnLFxuICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnbGVmdCcsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jYWZmaXhlciA9IGFmZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lBZmZpeGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhZmZpeGVyKSB7XG4gICAgICB0aGlzLiNhZmZpeGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2FmZml4ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2luaXRNZXNzYWdlU3RyZWFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNtZXNzYWdlU3RyZWFtU3ViKSB7XG4gICAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB0aGlzLm1lc3NhZ2VTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VUeXBlLkNsb3NlRHJvcGRvd246XG4gICAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VUeXBlLlJlcG9zaXRpb25Ecm9wZG93bjpcbiAgICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgIHRoaXMuI2Fubm91bmNlUmVzdWx0cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgI2dldEFjdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgfVxuXG4gICNyZW1vdmVGb2N1c2VkQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVDU1NDbGFzcyhcbiAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF0sXG4gICAgICAgICdza3ktYXV0b2NvbXBsZXRlLWRlc2NlbmRhbnQtZm9jdXMnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjYWRkRm9jdXNlZENsYXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPiAtMSkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuYWRkQ1NTQ2xhc3MoXG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdLFxuICAgICAgICAnc2t5LWF1dG9jb21wbGV0ZS1kZXNjZW5kYW50LWZvY3VzJyxcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZURlZmF1bHRTZWFyY2hPcHRpb25zKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGRlZmF1bHQgc2VhcmNoIGlmIGl0IGlzIHdoYXQgaXMgYmVpbmcgdXNlZC5cbiAgICBpZiAodGhpcy5zZWFyY2ggIT09IHRoaXMuc2VhcmNoT3JEZWZhdWx0KSB7XG4gICAgICB0aGlzLnNlYXJjaE9yRGVmYXVsdCA9IHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVzdWx0c1Zpc2libGUgPVxuICAgICAgISF0aGlzLnNlYXJjaFRleHQgJiZcbiAgICAgICghdGhpcy5zaG93QWN0aW9uc0FyZWEgfHwgdGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApO1xuICAgIGlmIChpc1Jlc3VsdHNWaXNpYmxlICE9PSB0aGlzLiNpc1Jlc3VsdHNWaXNpYmxlLmdldFZhbHVlKCkpIHtcbiAgICAgIHRoaXMuI2lzUmVzdWx0c1Zpc2libGUubmV4dChpc1Jlc3VsdHNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBjbGFzcz1cInNreS1hdXRvY29tcGxldGVcIlxuICByb2xlPVwiY29tYm9ib3hcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIlxuICAgIGlzT3BlbiAmJiAoc2hvd0FjdGlvbnNBcmVhIHx8IChpc1Jlc3VsdHNWaXNpYmxlIHwgYXN5bmMpKVxuICBcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIlxuICAgIGlzT3BlbiAmJiAoc2hvd0FjdGlvbnNBcmVhIHx8IChpc1Jlc3VsdHNWaXNpYmxlIHwgYXN5bmMpKVxuICAgICAgPyByZXN1bHRzTGlzdElkXG4gICAgICA6IG51bGxcbiAgXCJcbiAgW2F0dHIuaWRdPVwicmVzdWx0c1dyYXBwZXJJZFwiXG4+XG4gIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRzVGVtcGxhdGVSZWY+XG4gIDwhLS0gV2UgZG8gbm90IHdhbnQgdGhlIGJsdXIgdG8gZmlyZSBoZXJlIHNvIHRoYXQgdGhlIGRyb3Bkb3duIGRvZXMgbm90IGNsb3NlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgcHJldmVudGluZyB0aGUgbW91c2Vkb3duIGRlZmF1bHQuIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMtY29udGFpbmVyXCJcbiAgICBbYXR0ci5pZF09XCJyZXN1bHRzTGlzdElkXCJcbiAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAnc2t5LXNoYWRvdyc6ICdkZWZhdWx0JyxcbiAgICAgICdza3ktZWxldmF0aW9uLTQnOiAnbW9kZXJuJ1xuICAgIH1cIlxuICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgI3Jlc3VsdHNSZWZcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiaXNTZWFyY2hpbmdBc3luYzsgZWxzZSByZXN1bHRDb250cm9sc1RlbXBsYXRlUmVmXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzLXdhaXRpbmdcIlxuICAgID5cbiAgICAgIDxza3ktd2FpdCBbaXNXYWl0aW5nXT1cInRydWVcIj48L3NreS13YWl0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVzdWx0Q29udHJvbHNUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNSZXN1bHRzVmlzaWJsZSB8IGFzeW5jXCJcbiAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0c1wiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHQgb2Ygc2VhcmNoUmVzdWx0czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICghc2VhcmNoUmVzdWx0c0xpbWl0IHx8IGkgPCBzZWFyY2hSZXN1bHRzTGltaXQpICYmXG4gICAgICAgICAgIShlbmFibGVTaG93TW9yZSAmJiBpID49IDUpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRcIlxuICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0VsZW1lbnRGb2N1c2VkKHNlYXJjaFJlc3VsdEVsKVwiXG4gICAgICAgIFthdHRyLmRhdGEtZGVzY3JpcHRvci12YWx1ZV09XCJyZXN1bHQuZGF0YVtkZXNjcmlwdG9yUHJvcGVydHldXCJcbiAgICAgICAgW2F0dHIuaWRdPVwicmVzdWx0LmVsZW1lbnRJZFwiXG4gICAgICAgIFtza3lIaWdobGlnaHRdPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgIChjbGljayk9XCJvblJlc3VsdENsaWNrKHJlc3VsdC5lbGVtZW50SWQsICRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uUmVzdWx0TW91c2VNb3ZlKGkpXCJcbiAgICAgICAgI3NlYXJjaFJlc3VsdEVsXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0VGVtcGxhdGUgfHwgZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiByZXN1bHQuZGF0YSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkIHNreS1wYWRkaW5nLXNxdWlzaC1kZWZhdWx0XCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbnNBcmVhXCIgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImVuYWJsZVNob3dNb3JlICYmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tbW9yZSBza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJtb3JlQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWRcbiAgICAgICAgICApICYmXG4gICAgICAgICAgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhc2VhcmNoVGV4dFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWQpICYmXG4gICAgICAgICAgIXNlYXJjaFRleHRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsX2NvdW50J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IChkYXRhLmxlbmd0aCB8IHNreU51bWVyaWM6IHsgdHJ1bmNhdGU6IGZhbHNlIH0pXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X21hdGNoZXNfY291bnQnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICA6IChzZWFyY2hSZXN1bHRzQ291bnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgOiAoc2VhcmNoUmVzdWx0c0NvdW50IHwgc2t5TnVtZXJpYzogeyB0cnVuY2F0ZTogZmFsc2UgfSkpXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNlYXJjaFRleHQgJiYgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb25zLW5vLXJlc3VsdHNcIlxuICAgID5cbiAgICAgIHt7XG4gICAgICAgIG5vUmVzdWx0c0ZvdW5kVGV4dCB8fFxuICAgICAgICAgICgnc2t5dXhfYXV0b2NvbXBsZXRlX25vX3Jlc3VsdHMnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNob3dBZGRCdXR0b25cIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbiBza3ktYXV0b2NvbXBsZXRlLWFjdGlvbi1hZGQgc2t5LWJ0biBza3ktYnRuLWxpbmtcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaXNFbGVtZW50Rm9jdXNlZChhZGRCdXR0b25FbClcIlxuICAgICAgKGNsaWNrKT1cImFkZEJ1dHRvbkNsaWNrZWQoKVwiXG4gICAgICAjYWRkQnV0dG9uRWxcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cImFkZFwiIC8+XG4gICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX2FkZCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgI2RlZmF1bHRTZWFyY2hSZXN1bHRUZW1wbGF0ZT5cbiAge3sgaXRlbVtkZXNjcmlwdG9yUHJvcGVydHldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
900
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBR3RCLHVCQUF1QixHQUl4QixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBRVAsSUFBSSxFQUNKLFNBQVMsSUFBSSxtQkFBbUIsRUFDaEMsRUFBRSxHQUNILE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsR0FBRyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sd0NB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Z0JBZUssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWNLLGNBQWM7c0JBRHhCLEtBQUs7Z0JBY0ssYUFBYTtzQkFEdkIsS0FBSztnQkFjQyxZQUFZO3NCQURsQixLQUFLO2dCQVNLLGtCQUFrQjtzQkFENUIsS0FBSztnQkFtQkssTUFBTTtzQkFEaEIsS0FBSztnQkFxQkMsb0JBQW9CO3NCQUQxQixLQUFLO2dCQVVLLDJCQUEyQjtzQkFEckMsS0FBSztnQkFrQkssYUFBYTtzQkFEdkIsS0FBSztnQkFvQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQWVLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBY0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFRQyxRQUFRO3NCQURkLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsTUFBTTtnQkFPQSxlQUFlO3NCQURyQixNQUFNO2dCQVFBLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsVUFBVTtzQkFEaEIsTUFBTTtnQkEwQ0ksY0FBYztzQkFEeEIsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBaUVwQyxrQkFBa0I7c0JBSHhCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUU7d0JBQy9CLElBQUksRUFBRSxXQUFXO3FCQUNsQjtnQkFNVSxVQUFVO3NCQUhwQixTQUFTO3VCQUFDLFlBQVksRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTS1lfU1RBQ0tJTkdfQ09OVEVYVCxcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBZmZpeGVyLFxuICBTa3lMaXZlQW5ub3VuY2VyU2VydmljZSxcbiAgU2t5T3ZlcmxheUluc3RhbmNlLFxuICBTa3lPdmVybGF5U2VydmljZSxcbiAgU2t5U3RhY2tpbmdDb250ZXh0LFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcbmltcG9ydCB7IFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBmcm9tLFxuICBmcm9tRXZlbnQgYXMgb2JzZXJ2YWJsZUZyb21FdmVudCxcbiAgb2YsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgbWFwLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVEaWFjcml0aWNzIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1sb29rdXAtc3RyaW5nLXV0aWxzJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi9hdXRvY29tcGxldGUtZGVmYXVsdC1zZWFyY2gtZnVuY3Rpb24nO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1tZXNzYWdlLXR5cGUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNBcmdzIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWFzeW5jLWFyZ3MnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtcmVzdWx0JztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyIH0gZnJvbSAnLi90eXBlcy9hdXRvY29tcGxldGUtc2VhcmNoLWZ1bmN0aW9uLWZpbHRlcic7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2F1dG9jb21wbGV0ZS1zZWxlY3Rpb24tY2hhbmdlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNob3dNb3JlQXJncyB9IGZyb20gJy4vdHlwZXMvYXV0b2NvbXBsZXRlLXNob3ctbW9yZS1hcmdzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdCB7XG4gIGVsZW1lbnRJZDogc3RyaW5nO1xuICBkYXRhOiBhbnk7XG59XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1hdXRvY29tcGxldGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vI3JlZ2lvbiBwdWJsaWNfYXBpXG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgSUQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHNcbiAgICogdGhlIGF1dG9jb21wbGV0ZSB0ZXh0IGlucHV0LiBUaGlzIHNldHMgdGhlIGlucHV0J3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUsIHNlZSB0aGUgW1dBSS1BUklBIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1sYWJlbGxlZGJ5KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIGRhdGEgc291cmNlIGZvciB0aGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCB0byBzZWFyY2hcbiAgICogd2hlbiB1c2VycyBlbnRlciB0ZXh0LiBGb3IgYSBkeW5hbWljIGRhdGEgc291cmNlIHN1Y2ggYXMgYW4gYXJyYXkgdGhhdFxuICAgKiBjaGFuZ2VzIGR1ZSB0byBzZXJ2ZXIgY2FsbHMsIHVzZSBgc2VhcmNoYCBvciBgc2VhcmNoQXN5bmNgIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RhdGEgPSB2YWx1ZSA/PyBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzZWFyY2hpbmcgd2hpbGUgdXNlcnNcbiAgICogZW50ZXIgdGV4dCBpbiB0aGUgYXV0b2NvbXBsZXRlIGZpZWxkLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX2RlYm91bmNlVGltZSA9IHZhbHVlID8/IDA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNfZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgcHJvcGVydHkgdG8gZGlzcGxheSBpbiB0aGUgdGV4dCBpbnB1dCBhZnRlciB1c2Vyc1xuICAgKiBzZWxlY3QgYW4gaXRlbSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQGRlZmF1bHQgXCJuYW1lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRvclByb3BlcnR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGVzY3JpcHRvclByb3BlcnR5ID0gdmFsdWUgfHwgJ25hbWUnO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdG9yUHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rlc2NyaXB0b3JQcm9wZXJ0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogV2hldGhlciB0byBkaXNwbGF5IGEgYnV0dG9uIGluIHRoZSBkcm9wZG93biB0aGF0IG9wZW5zIGEgcGlja2VyIHdoZXJlIHVzZXJzIGNhbiB2aWV3IGFsbCBvcHRpb25zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbmFibGVTaG93TW9yZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19lbmFibGVTaG93TW9yZSA9ICEhdmFsdWU7XG4gICAgdGhpcy4jdXBkYXRlSXNSZXN1bHRzVmlzaWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlU2hvd01vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19lbmFibGVTaG93TW9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSBvZiBgU2t5QXV0b2NvbXBsZXRlTWVzc2FnZWAgdGhhdCBjYW4gY2xvc2UgdGhlIGRyb3Bkb3duLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWVzc2FnZVN0cmVhbSh2YWx1ZTogU3ViamVjdDxTa3lBdXRvY29tcGxldGVNZXNzYWdlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tZXNzYWdlU3RyZWFtID0gdmFsdWUgPz8gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcbiAgICB0aGlzLiNpbml0TWVzc2FnZVN0cmVhbSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlU3RyZWFtKCk6IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLiNfbWVzc2FnZVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3cmFwcGVyQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIG9iamVjdCBwcm9wZXJ0aWVzIHRvIHNlYXJjaC5cbiAgICogQGRlZmF1bHQgW1wibmFtZVwiXVxuICAgKiBAZGVwcmVjYXRlZCBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LiBUbyBzZWFyY2ggc3BlY2lmaWMgcHJvcGVydGllcywgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHByb3BlcnRpZXNUb1NlYXJjaCh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfcHJvcGVydGllc1RvU2VhcmNoID0gdmFsdWUgPz8gWyduYW1lJ107XG5cbiAgICB0aGlzLiN1cGRhdGVEZWZhdWx0U2VhcmNoT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBwcm9wZXJ0aWVzVG9TZWFyY2goKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNfcHJvcGVydGllc1RvU2VhcmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0aGF0IGR5bmFtaWNhbGx5IG1hbmFnZXMgdGhlIGRhdGEgc291cmNlIHdoZW4gdXNlcnNcbiAgICogY2hhbmdlIHRoZSB0ZXh0IGluIHRoZSBhdXRvY29tcGxldGUgZmllbGQuIFRoZSBzZWFyY2ggZnVuY3Rpb24gbXVzdCByZXR1cm5cbiAgICogYW4gYXJyYXkgb3IgYSBwcm9taXNlIG9mIGFuIGFycmF5LiBUaGUgYHNlYXJjaGAgcHJvcGVydHkgaXMgcGFydGljdWxhcmx5XG4gICAqIHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHNvdXJjZSBkb2VzIG5vdCBsaXZlIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICogQGRlcHJlY2F0ZWQgV2UgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgdGhpcyBwcm9wZXJ0eS4gVG8gY2FsbCBhIHJlbW90ZSBkYXRhIHNvdXJjZSwgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaCh2YWx1ZTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoID0gdmFsdWU7XG4gICAgdGhpcy5zZWFyY2hPckRlZmF1bHQgPVxuICAgICAgdmFsdWUgfHxcbiAgICAgIHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2goKTogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGZvcm1hdHMgZWFjaCBzZWFyY2ggcmVzdWx0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBUaGUgYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBpbmplY3RzIHNlYXJjaCByZXN1bHQgdmFsdWVzIGludG8gdGhlIHRlbXBsYXRlXG4gICAqIGFzIGBpdGVtYCB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgYWxsIG9mIHRoZSBvYmplY3QgcHJvcGVydGllcyBvZiB0aGUgc2VhcmNoIHJlc3VsdHMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoUmVzdWx0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHVzZXJzIG11c3QgZW50ZXIgYmVmb3JlXG4gICAqIHRoZSBhdXRvY29tcGxldGUgY29tcG9uZW50IHNlYXJjaGVzIHRoZSBkYXRhIHNvdXJjZSBhbmQgZGlzcGxheXMgc2VhcmNoXG4gICAqIHJlc3VsdHMgaW4gdGhlIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gdmFsdWUgJiYgdmFsdWUgPiAwID8gdmFsdWUgOiAxO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXJyYXkgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWdhaW5zdCBlYWNoIHNlYXJjaCByZXN1bHQgaW4gb3JkZXJcbiAgICogdG8gZmlsdGVyIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IHNlYXJjaCBmdW5jdGlvbi4gV2hlblxuICAgKiB1c2luZyB0aGUgYHNlYXJjaGAgcHJvcGVydHkgdG8gc3BlY2lmeSBhIGN1c3RvbSBzZWFyY2ggZnVuY3Rpb24sIHlvdSBtdXN0XG4gICAqIG1hbnVhbGx5IGFwcGx5IGZpbHRlcnMgaW5zaWRlIHRoYXQgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBgdHJ1ZWBcbiAgICogb3IgYGZhbHNlYCBmb3IgZWFjaCByZXN1bHQgdG8gaW5kaWNhdGUgd2hldGhlciB0byBkaXNwbGF5IGl0IGluIHRoZSBkcm9wZG93biBsaXN0LlxuICAgKiBAZGVwcmVjYXRlZCBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LiBUbyBmaWx0ZXIgcmVzdWx0cywgdXNlIHRoZSBgc2VhcmNoQXN5bmNgIGV2ZW50IGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlYXJjaEZpbHRlcnMoXG4gICAgdmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEZ1bmN0aW9uRmlsdGVyW10gfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuI19zZWFyY2hGaWx0ZXJzID0gdmFsdWU7XG5cbiAgICB0aGlzLiN1cGRhdGVEZWZhdWx0U2VhcmNoT3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hGaWx0ZXJzKCk6XG4gICAgfCBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2VhcmNoRmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCBkaXNwbGF5cyBhbGwgbWF0Y2hpbmcgcmVzdWx0cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VhcmNoUmVzdWx0c0xpbWl0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfc2VhcmNoUmVzdWx0c0xpbWl0ID0gdmFsdWUgfHwgMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoUmVzdWx0c0xpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zZWFyY2hSZXN1bHRzTGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIGJ1dHRvbiB0aGF0IGxldHMgdXNlcnMgYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzaG93QWRkQnV0dG9uKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3Nob3dBZGRCdXR0b24gPSAhIXZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZUlzUmVzdWx0c1Zpc2libGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dBZGRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19zaG93QWRkQnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBzZWFyY2ggcmVzdWx0cyBhcmUgZm91bmQuXG4gICAqIEBkZWZhdWx0IFwiTm8gbWF0Y2hlcyBmb3VuZFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9SZXN1bHRzRm91bmRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBbGxvd3MgYXN5bmMgc2VhcmNoIHRvIGJlIGRpc2FibGVkIGV2ZW4gd2hlbiBhIGxpc3RlbmVyIGlzIHNwZWNpZmllZCBmb3JcbiAgICogdGhlIGBzZWFyY2hBc3luY2Agb3V0cHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gYWRkIG9wdGlvbnMgdG8gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgc2VsZWN0IHRoZSBidXR0b24gdG8gdmlldyBhbGwgb3B0aW9ucy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2hvd01vcmVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5QXV0b2NvbXBsZXRlU2hvd01vcmVBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBpdGVtcyBpbiB0aGUgZHJvcGRvd24gbGlzdC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgZW50ZXIgbmV3IHNlYXJjaCBpbmZvcm1hdGlvbiBhbmQgYWxsb3dzIHJlc3VsdHMgdG8gYmVcbiAgICogcmV0dXJuZWQgdmlhIGFuIG9ic2VydmFibGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNlYXJjaEFzeW5jID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lBdXRvY29tcGxldGVTZWFyY2hBc3luY0FyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvcGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiB0ZW1wbGF0ZV9wcm9wZXJ0aWVzXG5cbiAgcHVibGljIGdldCBzZWFyY2hSZXN1bHRzKCk6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlYXJjaFJlc3VsdHMgfHwgW107XG4gIH1cblxuICBwdWJsaWMgc2V0IHNlYXJjaFJlc3VsdHModmFsdWU6IFNreUF1dG9jb21wbGV0ZVNlYXJjaFJlc3VsdFtdKSB7XG4gICAgdGhpcy4jX3NlYXJjaFJlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGlnaGxpZ2h0VGV4dCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuI19oaWdobGlnaHRUZXh0IHx8IFtdO1xuICB9XG5cbiAgcHVibGljIHNldCBoaWdobGlnaHRUZXh0KHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuI19oaWdobGlnaHRUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG5cbiAgcHVibGljIHJlc3VsdHNMaXN0SWQ6IHN0cmluZztcblxuICBwdWJsaWMgcmVzdWx0c1dyYXBwZXJJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgcHVibGljIGdldCBzaG93QWN0aW9uc0FyZWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zaG93QWRkQnV0dG9uIHx8ICEhdGhpcy5lbmFibGVTaG93TW9yZTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGluZ0FzeW5jID0gZmFsc2U7XG5cbiAgcHVibGljIHNlYXJjaFJlc3VsdHNDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIEBDb250ZW50Q2hpbGQoU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpXG4gIHB1YmxpYyBzZXQgaW5wdXREaXJlY3RpdmUoXG4gICAgZGlyZWN0aXZlOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgaWYgKCFkaXJlY3RpdmUpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgJ1RoZSBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgcmVxdWlyZXMgYSBDb250ZW50Q2hpbGQgaW5wdXQgb3InLFxuICAgICAgICAgICd0ZXh0YXJlYSBib3VuZCB3aXRoIHRoZSBTa3lBdXRvY29tcGxldGUgZGlyZWN0aXZlLiBGb3IgZXhhbXBsZTonLFxuICAgICAgICAgICdgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2t5QXV0b2NvbXBsZXRlPmAuJyxcbiAgICAgICAgXS5qb2luKCcgJyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNfaW5wdXREaXJlY3RpdmUgIT09IGRpcmVjdGl2ZSkge1xuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBvbGQgc3Vic2NyaXB0aW9ucyBvbiBhbnkgcHJldmlvdXMgaW5wdXQgZGlyZWN0aXZlXG4gICAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZGlzcGxheVdpdGggPSB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eTtcblxuICAgICAgdGhpcy4jX2lucHV0RGlyZWN0aXZlLnRleHRDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGNoYW5nZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy4jc2VhcmNoVGV4dENoYW5nZWQoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIFdlIGRlbGF5IHRoaXMgbGlzdGVuZXIgYnkgMjVtcyB0byBnaXZlIHRoaW5ncyB3YXRjaGluZyB0aGUgdmFsdWUgdGltZSB0byByZXNwb25kIChzdWNoIGFzIHRoZSBzZWFyY2ggYnV0dG9uKS5cbiAgICAgIHRoaXMuI19pbnB1dERpcmVjdGl2ZS5ibHVyXG4gICAgICAgIC5waXBlKGRlbGF5KDI1KSwgdGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBkaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICAgICAgICBkaXJlY3RpdmUub25Ub3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy4jaGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLiNfaW5wdXREaXJlY3RpdmUuZm9jdXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNoYXNGb2N1cyA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5wdXREaXJlY3RpdmUoKTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaW5wdXREaXJlY3RpdmU7XG4gIH1cblxuICBAVmlld0NoaWxkKCdyZXN1bHRzVGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHB1YmxpYyByZXN1bHRzVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc3VsdHNSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgfSlcbiAgcHVibGljIHNldCByZXN1bHRzUmVmKHZhbHVlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNfcmVzdWx0c1JlZiA9IHZhbHVlO1xuICAgICAgdGhpcy4jZGVzdHJveUFmZml4ZXIoKTtcbiAgICAgIHRoaXMuI2NyZWF0ZUFmZml4ZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHNSZWYoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19yZXN1bHRzUmVmO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaE9yRGVmYXVsdDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb247XG5cbiAgcHJvdGVjdGVkIGlzUmVzdWx0c1Zpc2libGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIEluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGRlc2NlbmRhbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGhhcyBmb2N1cy5cbiAgICovXG4gICNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcblxuICAjYWRhcHRlclNlcnZpY2U6IFNreUF1dG9jb21wbGV0ZUFkYXB0ZXJTZXJ2aWNlO1xuXG4gICNhZmZpeGVyOiBTa3lBZmZpeGVyIHwgdW5kZWZpbmVkO1xuXG4gICNhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5ICNlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIHJlYWRvbmx5ICNsaXZlQW5ub3VuY2VTZXJ2aWNlID0gaW5qZWN0KFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSAjbGliUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0KFNreUxpYlJlc291cmNlc1NlcnZpY2UpO1xuXG4gICNoYXNGb2N1cyA9IGZhbHNlO1xuXG4gICNpbnB1dEJveEhvc3RTdmM6IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI2lucHV0RGlyZWN0aXZlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNtZXNzYWdlU3RyZWFtU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICNvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2UgfCB1bmRlZmluZWQ7XG5cbiAgI292ZXJsYXlTZXJ2aWNlOiBTa3lPdmVybGF5U2VydmljZTtcblxuICAvKipcbiAgICogRWxlbWVudHMgd2l0aGluIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gdGhhdCBhcmUgZm9jdXNhYmxlLlxuICAgKiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgYWN0aW9uIGJ1dHRvbnMsIGJ1dCBjb3VsZCBhbHNvIGJlXG4gICAqIGVsZW1lbnRzIHByb3ZpZGVkIGluIHRoZSBjb25zdW1lcidzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gICNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjY3VycmVudFNlYXJjaFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICNpc1Jlc3VsdHNWaXNpYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgI3pJbmRleDogT2JzZXJ2YWJsZTxudW1iZXI+IHwgdW5kZWZpbmVkO1xuXG4gICNfZGF0YTogYW55W10gPSBbXTtcblxuICAjX2RlYm91bmNlVGltZSA9IDA7XG5cbiAgI19kZXNjcmlwdG9yUHJvcGVydHkgPSAnbmFtZSc7XG5cbiAgI19lbmFibGVTaG93TW9yZSA9IGZhbHNlO1xuXG4gICNfaGlnaGxpZ2h0VGV4dDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI19pbnB1dERpcmVjdGl2ZTogU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5QXV0b2NvbXBsZXRlTWVzc2FnZT4oKTtcblxuICAjX3Byb3BlcnRpZXNUb1NlYXJjaCA9IFsnbmFtZSddO1xuXG4gICNfcmVzdWx0c1JlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAjX3NlYXJjaDogU2t5QXV0b2NvbXBsZXRlU2VhcmNoRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hGaWx0ZXJzOiBTa3lBdXRvY29tcGxldGVTZWFyY2hGdW5jdGlvbkZpbHRlcltdIHwgdW5kZWZpbmVkO1xuXG4gICNfc2VhcmNoUmVzdWx0czogU2t5QXV0b2NvbXBsZXRlU2VhcmNoUmVzdWx0W10gfCB1bmRlZmluZWQ7XG5cbiAgI19zZWFyY2hSZXN1bHRzTGltaXQgPSAwO1xuXG4gICNfc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gMTtcblxuICAjX3Nob3dBZGRCdXR0b24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBhZGFwdGVyU2VydmljZTogU2t5QXV0b2NvbXBsZXRlQWRhcHRlclNlcnZpY2UsXG4gICAgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGlucHV0Qm94SG9zdFN2Yz86IFNreUlucHV0Qm94SG9zdFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFNLWV9TVEFDS0lOR19DT05URVhUKVxuICAgIHN0YWNraW5nQ29udGV4dD86IFNreVN0YWNraW5nQ29udGV4dCxcbiAgKSB7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNlbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLiNhZmZpeFNlcnZpY2UgPSBhZmZpeFNlcnZpY2U7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UgPSBhZGFwdGVyU2VydmljZTtcbiAgICB0aGlzLiNvdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xuICAgIHRoaXMuI2lucHV0Qm94SG9zdFN2YyA9IGlucHV0Qm94SG9zdFN2YztcbiAgICB0aGlzLiN6SW5kZXggPSBzdGFja2luZ0NvbnRleHQ/LnpJbmRleDtcblxuICAgIHRoaXMuc2VhcmNoT3JEZWZhdWx0ID0gc2t5QXV0b2NvbXBsZXRlRGVmYXVsdFNlYXJjaEZ1bmN0aW9uKHtcbiAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogWyduYW1lJ10sXG4gICAgICBzZWFyY2hGaWx0ZXJzOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpZCA9ICsrdW5pcXVlSWQ7XG4gICAgdGhpcy5yZXN1bHRzTGlzdElkID0gYHNreS1hdXRvY29tcGxldGUtbGlzdC0ke2lkfWA7XG4gICAgdGhpcy5yZXN1bHRzV3JhcHBlcklkID0gYHNreS1hdXRvY29tcGxldGUtd3JhcHBlci0ke2lkfWA7XG4gICAgdGhpcy5pc1Jlc3VsdHNWaXNpYmxlID0gdGhpcy4jaXNSZXN1bHRzVmlzaWJsZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jYWRkSW5wdXRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNpbnB1dERpcmVjdGl2ZVVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jaXNSZXN1bHRzVmlzaWJsZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNkZXN0cm95QWZmaXhlcigpO1xuICAgIHRoaXMuI2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkQnV0dG9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENsaWNrLmVtaXQoKTtcbiAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5yZXN0b3JlSW5wdXRUZXh0VmFsdWVUb1ByZXZpb3VzU3RhdGUoKTtcbiAgICB9XG4gICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvKiBTYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuI2dldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRJZCA9IGFjdGl2ZUVsZW1lbnQ/LmlkO1xuICAgICAgY29uc3QgdGFyZ2V0SXNTZWFyY2hSZXN1bHQgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmluZChcbiAgICAgICAgKHIpID0+IHIuZWxlbWVudElkID09PSBhY3RpdmVFbGVtZW50SWQsXG4gICAgICApO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgaWYgKHRhcmdldElzU2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGFjdGl2ZUVsZW1lbnRJZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgaWYgKHRhcmdldElzU2VhcmNoUmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGFjdGl2ZUVsZW1lbnRJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0RGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgdGhpcy4jY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9PT1cbiAgICAgICAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI2FkZEZvY3VzZWRDbGFzcygpO1xuICAgICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICBpZiAodGhpcy4jYWN0aXZlRWxlbWVudEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9XG4gICAgICAgICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNhZGRGb2N1c2VkQ2xhc3MoKTtcbiAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICNhbm5vdW5jZVJlc3VsdHMoKTogdm9pZCB7XG4gICAgdGhpcy4jbGliUmVzb3VyY2VTZXJ2aWNlXG4gICAgICAuZ2V0U3RyaW5ncyh7XG4gICAgICAgIG5vUmVzdWx0czogJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyxcbiAgICAgICAgc2luZ2xlQ291bnRSZXN1bHQ6ICdza3l1eF9hdXRvY29tcGxldGVfb25lX3Jlc3VsdCcsXG4gICAgICAgIG11bHRpcGxlQ291bnRSZXN1bHRzOiBbXG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9tdWx0aXBsZV9yZXN1bHRzJyxcbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxpemVkU3RyaW5ncykgPT4ge1xuICAgICAgICBsZXQgYW5ub3VuY2VtZW50U3RyaW5nID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCAmJiB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA+IDApIHtcbiAgICAgICAgICBhbm5vdW5jZW1lbnRTdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPT09IDFcbiAgICAgICAgICAgICAgPyBsb2NhbGl6ZWRTdHJpbmdzLnNpbmdsZUNvdW50UmVzdWx0XG4gICAgICAgICAgICAgIDogbG9jYWxpemVkU3RyaW5ncy5tdWx0aXBsZUNvdW50UmVzdWx0cztcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmFubm91bmNlKGFubm91bmNlbWVudFN0cmluZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLiNsaXZlQW5ub3VuY2VTZXJ2aWNlLmFubm91bmNlKGxvY2FsaXplZFN0cmluZ3Mubm9SZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbW9yZUJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TW9yZUNsaWNrLmVtaXQoeyBpbnB1dFZhbHVlOiB0aGlzLnNlYXJjaFRleHQgfSk7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUucmVzdG9yZUlucHV0VGV4dFZhbHVlVG9QcmV2aW91c1N0YXRlKCk7XG4gICAgfVxuICAgIHRoaXMuI2Nsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc3VsdENsaWNrKGlkOiBzdHJpbmcsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy4jc2VsZWN0U2VhcmNoUmVzdWx0QnlJZChpZCk7XG5cbiAgICBpZiAoIXRoaXMuc2hvd0FjdGlvbnNBcmVhKSB7XG4gICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI3Jlc2V0U2VhcmNoKCk7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc3VsdE1vdXNlTW92ZShpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGlkICE9PSB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXgpIHtcbiAgICAgIHRoaXMuI3JlbW92ZUZvY3VzZWRDbGFzcygpO1xuICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gaWQ7XG4gICAgICB0aGlzLiNhZGRGb2N1c2VkQ2xhc3MoKTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VsZW1lbnRGb2N1c2VkKHJlZjogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVmID09PSB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgfVxuXG4gICNzZWFyY2hUZXh0Q2hhbmdlZChzZWFyY2hUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMuI29wZW5Ecm9wZG93bigpO1xuICAgICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICAgICFzZWFyY2hUZXh0IHx8ICFzZWFyY2hUZXh0LnRyaW0oKSB8fCBzZWFyY2hUZXh0Lm1hdGNoKC9eXFxzKyQvKTtcblxuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgLy8gRW1pdCBzZWxlY3Rpb25DaGFuZ2UgaWYgdmFsdWUgaGFzIGJlZW4gY2xlYXJlZC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUgJiYgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93QWN0aW9uc0FyZWEpIHtcbiAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4jcmVzZXRTZWFyY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTG9uZ0Vub3VnaCA9XG4gICAgICAgIHNlYXJjaFRleHQubGVuZ3RoID49IHRoaXMuc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzO1xuICAgICAgY29uc3QgaXNEaWZmZXJlbnQgPSBzZWFyY2hUZXh0ICE9PSB0aGlzLnNlYXJjaFRleHQ7XG5cbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQudHJpbSgpO1xuICAgICAgdGhpcy4jdXBkYXRlSXNSZXN1bHRzVmlzaWJsZSgpO1xuXG4gICAgICBpZiAoaXNMb25nRW5vdWdoICYmIGlzRGlmZmVyZW50KSB7XG4gICAgICAgIHRoaXMuI2NhbmNlbEN1cnJlbnRTZWFyY2goKTtcblxuICAgICAgICB0aGlzLiNjdXJyZW50U2VhcmNoU3ViID0gdGhpcy4jcGVyZm9ybVNlYXJjaCgpXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0Py5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbSAmJiB0aGlzLmRlc2NyaXB0b3JQcm9wZXJ0eSBpbiBpdGVtO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPVxuICAgICAgICAgICAgICBpdGVtcz8ubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBTa3lBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50SWQ6IGAke3RoaXMucmVzdWx0c0xpc3RJZH0taXRlbS0ke2l9YCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHIsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KSB8fCBbXTtcblxuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzQ291bnQgPSByZXN1bHQ/LnRvdGFsQ291bnQgfHwgMDtcblxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRUZXh0ID0gdGhpcy4jZ2V0SGlnaGxpZ2h0VGV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICAgICAgdGhpcy4jcmVtb3ZlRm9jdXNlZENsYXNzKCk7XG4gICAgICAgICAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4ID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk7XG4gICAgICAgICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgLy8gU2FmZXR5IGNoZWNrXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgIC8vIExldCB0aGUgcmVzdWx0cyBwb3B1bGF0ZSBpbiB0aGUgRE9NIGJlZm9yZSByZWNhbGN1bGF0aW5nIHBsYWNlbWVudC5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2FmZml4ZXIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLiNvcGVuRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzU2VhcmNoaW5nQXN5bmMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmdBc3luYyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gICNwZXJmb3JtU2VhcmNoKCk6IE9ic2VydmFibGU8U2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQXN5bmNEaXNhYmxlZCAmJiB0aGlzLnNlYXJjaEFzeW5jLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hBc3luY0FyZ3M6IFNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jQXJncyA9IHtcbiAgICAgICAgZGlzcGxheVR5cGU6ICdwb3BvdmVyJyxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnNlYXJjaEFzeW5jLmVtaXQoc2VhcmNoQXN5bmNBcmdzKTtcblxuICAgICAgcmV0dXJuIHNlYXJjaEFzeW5jQXJncy5yZXN1bHQgfHwgb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaE9yRGVmYXVsdCh0aGlzLnNlYXJjaFRleHQsIHRoaXMuZGF0YSwge1xuICAgICAgY29udGV4dDogJ3BvcG92ZXInLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBpdGVtczogcmVzdWx0LFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb20ocmVzdWx0KS5waXBlKFxuICAgICAgbWFwKChpdGVtcykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIHRvdGFsQ291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAjY2FuY2VsQ3VycmVudFNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jY3VycmVudFNlYXJjaFN1Yikge1xuICAgICAgdGhpcy4jY3VycmVudFNlYXJjaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy4jY3VycmVudFNlYXJjaFN1YiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGV4dCB0byBoaWdobGlnaHQgYmFzZWQgb24gZXhhY3QgbWF0Y2hlcywgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzLCBhbmQgbWF0Y2hlcyBmb3IgY29ycmVzcG9uZGluZyBkaWFjcml0aWNhbCBjaGFyYWN0ZXJzIChhIHdpbGwgbWF0Y2ggw6ApLlxuICAgKi9cbiAgI2dldEhpZ2hsaWdodFRleHQoc2VhcmNoVGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2hUZXh0ID0gbm9ybWFsaXplRGlhY3JpdGljcyhzZWFyY2hUZXh0KVxuICAgICAgLnRvTG9jYWxlVXBwZXJDYXNlKClcbiAgICAgIC50cmltKCk7XG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoVGV4dCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCBtYXRjaGVzVG9IaWdobGlnaHQ6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSB0aGlzLnNlYXJjaFJlc3VsdHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VhcmNoUmVzdWx0c1tpXS5kYXRhW3RoaXMuZGVzY3JpcHRvclByb3BlcnR5XVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAudG9Mb2NhbGVVcHBlckNhc2UoKSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRGF0YVZhbHVlID0gbm9ybWFsaXplRGlhY3JpdGljcyh2YWx1ZSk7XG5cbiAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgbGV0IGluZGV4OiBudW1iZXI7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIChpbmRleCA9IG5vcm1hbGl6ZWREYXRhVmFsdWUuaW5kZXhPZihub3JtYWxpemVkU2VhcmNoVGV4dCwgb2Zmc2V0KSkgPiAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSB2YWx1ZS5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2hUZXh0Lmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCA9IGluZGV4ICsgc2VhcmNoVGV4dC5sZW5ndGg7XG4gICAgICAgIG1hdGNoZXNUb0hpZ2hsaWdodCA9IG1hdGNoZXNUb0hpZ2hsaWdodC5jb25jYXQobWF0Y2hlZFN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBkdXBsaWNhdGVzIGZyb20gdGhlIGFycmF5LlxuICAgIHJldHVybiBbLi4ubmV3IFNldChtYXRjaGVzVG9IaWdobGlnaHQpXTtcbiAgfVxuXG4gICNzZWxlY3RTZWFyY2hSZXN1bHRCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmluZCgocikgPT4gci5lbGVtZW50SWQgPT09IGlkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuZGF0YTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IGRhdGFbdGhpcy5kZXNjcmlwdG9yUHJvcGVydHldO1xuICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWx1ZSA9IGRhdGE7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBkYXRhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI29wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI292ZXJsYXkgJiYgdGhpcy5yZXN1bHRzVGVtcGxhdGVSZWYpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLiNvdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgICBlbmFibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGVuYWJsZVBvaW50ZXJFdmVudHM6IHRydWUsXG4gICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuI2Vudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIHdyYXBwZXJDbGFzczogdGhpcy53cmFwcGVyQ2xhc3MsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuI3pJbmRleCkge1xuICAgICAgICB0aGlzLiN6SW5kZXgucGlwZSh0YWtlVW50aWwob3ZlcmxheS5jbG9zZWQpKS5zdWJzY3JpYmUoKHpJbmRleCkgPT4ge1xuICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9IHpJbmRleC50b1N0cmluZygxMCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBvdmVybGF5LmF0dGFjaFRlbXBsYXRlKHRoaXMucmVzdWx0c1RlbXBsYXRlUmVmKTtcblxuICAgICAgdGhpcy4jb3ZlcmxheSA9IG92ZXJsYXk7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLiN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuI3VwZGF0ZUFyaWFDb250cm9scygpO1xuICAgICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgICAgdGhpcy4jYW5ub3VuY2VSZXN1bHRzKCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAjY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldFNlYXJjaCgpO1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy4jZGVzdHJveU92ZXJsYXkoKTtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jdXBkYXRlQXJpYUNvbnRyb2xzKCk7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgI3NldEFjdGl2ZURlc2NlbmRhbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9XG4gICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgICAvKiBTYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QWN0aXZlRGVzY2VuZGFudChhY3RpdmVFbGVtZW50LmlkKTtcbiAgICB9XG4gIH1cblxuICAjcmVtb3ZlQWN0aXZlRGVzY2VuZGFudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS5zZXRBY3RpdmVEZXNjZW5kYW50KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVBcmlhQ29udHJvbHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuc2V0QXJpYUNvbnRyb2xzKHRoaXMuI292ZXJsYXk/LmlkIHx8IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gICNyZXNldFNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLmhpZ2hsaWdodFRleHQgPSBbXTtcbiAgICB0aGlzLiNyZW1vdmVGb2N1c2VkQ2xhc3MoKTtcbiAgICB0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPSAtMTtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHNDb3VudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNyZW1vdmVBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgdGhpcy4jaW5pdE92ZXJsYXlGb2N1c2FibGVFbGVtZW50cygpO1xuICAgIHRoaXMuI3VwZGF0ZUlzUmVzdWx0c1Zpc2libGUoKTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gICNhZGRJbnB1dEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bihldmVudCk7XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5yZXN1bHRzUmVmKSB7XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0RHJvcGRvd25XaWR0aChcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNSZWYsXG4gICAgICAgICAgICAhIXRoaXMuI2lucHV0Qm94SG9zdFN2YyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNkZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb3ZlcmxheSkge1xuICAgICAgdGhpcy4jb3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy4jb3ZlcmxheSk7XG4gICAgICB0aGlzLiNvdmVybGF5ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjcmVhdGVBZmZpeGVyKCk6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNhZmZpeGVyICYmIHRoaXMucmVzdWx0c1JlZikge1xuICAgICAgY29uc3QgYWZmaXhlciA9IHRoaXMuI2FmZml4U2VydmljZS5jcmVhdGVBZmZpeGVyKHRoaXMucmVzdWx0c1JlZik7XG5cbiAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLnNldERyb3Bkb3duV2lkdGgoXG4gICAgICAgIHRoaXMuI2VsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMucmVzdWx0c1JlZixcbiAgICAgICAgISF0aGlzLiNpbnB1dEJveEhvc3RTdmMsXG4gICAgICApO1xuXG4gICAgICBhZmZpeGVyLmFmZml4VG8odGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0LlZpZXdwb3J0LFxuICAgICAgICBlbmFibGVBdXRvRml0OiB0cnVlLFxuICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgcGxhY2VtZW50OiAnYmVsb3cnLFxuICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50OiAnbGVmdCcsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4jYWZmaXhlciA9IGFmZml4ZXI7XG4gICAgfVxuICB9XG5cbiAgI2Rlc3Ryb3lBZmZpeGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhZmZpeGVyKSB7XG4gICAgICB0aGlzLiNhZmZpeGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuI2FmZml4ZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgI2luaXRNZXNzYWdlU3RyZWFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNtZXNzYWdlU3RyZWFtU3ViKSB7XG4gICAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIgPSB0aGlzLm1lc3NhZ2VTdHJlYW1cbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VUeXBlLkNsb3NlRHJvcGRvd246XG4gICAgICAgICAgICB0aGlzLiNjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFNreUF1dG9jb21wbGV0ZU1lc3NhZ2VUeXBlLlJlcG9zaXRpb25Ecm9wZG93bjpcbiAgICAgICAgICAgIC8vIFNldHRpbWVvdXQgd2FpdHMgZm9yIGNoYW5nZXMgaW4gRE9NIChlLmcuLCB0b2tlbnMgYmVpbmcgcmVtb3ZlZClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAodGhpcy4jYWZmaXhlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FmZml4ZXIucmVhZmZpeCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gICNpbml0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIC8vIFdhaXQgZm9yIGRyb3Bkb3duIGVsZW1lbnRzIHRvIHJlbmRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLiNvdmVybGF5KSB7XG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50cyA9XG4gICAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZ2V0T3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuI292ZXJsYXkpO1xuICAgICAgICB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRUYWJJbmRleChlbCwgLTEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4jYWRkRm9jdXNlZENsYXNzKCk7XG4gICAgICAgIHRoaXMuI2Fubm91bmNlUmVzdWx0cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgI2dldEFjdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLiNvdmVybGF5Rm9jdXNhYmxlRWxlbWVudHNbdGhpcy4jYWN0aXZlRWxlbWVudEluZGV4XTtcbiAgfVxuXG4gICNyZW1vdmVGb2N1c2VkQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVDU1NDbGFzcyhcbiAgICAgICAgdGhpcy4jb3ZlcmxheUZvY3VzYWJsZUVsZW1lbnRzW3RoaXMuI2FjdGl2ZUVsZW1lbnRJbmRleF0sXG4gICAgICAgICdza3ktYXV0b2NvbXBsZXRlLWRlc2NlbmRhbnQtZm9jdXMnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjYWRkRm9jdXNlZENsYXNzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXggPiAtMSkge1xuICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuYWRkQ1NTQ2xhc3MoXG4gICAgICAgIHRoaXMuI292ZXJsYXlGb2N1c2FibGVFbGVtZW50c1t0aGlzLiNhY3RpdmVFbGVtZW50SW5kZXhdLFxuICAgICAgICAnc2t5LWF1dG9jb21wbGV0ZS1kZXNjZW5kYW50LWZvY3VzJyxcbiAgICAgICk7XG4gICAgICB0aGlzLiNzZXRBY3RpdmVEZXNjZW5kYW50KCk7XG4gICAgfVxuICB9XG5cbiAgI3VwZGF0ZURlZmF1bHRTZWFyY2hPcHRpb25zKCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGRlZmF1bHQgc2VhcmNoIGlmIGl0IGlzIHdoYXQgaXMgYmVpbmcgdXNlZC5cbiAgICBpZiAodGhpcy5zZWFyY2ggIT09IHRoaXMuc2VhcmNoT3JEZWZhdWx0KSB7XG4gICAgICB0aGlzLnNlYXJjaE9yRGVmYXVsdCA9IHNreUF1dG9jb21wbGV0ZURlZmF1bHRTZWFyY2hGdW5jdGlvbih7XG4gICAgICAgIHByb3BlcnRpZXNUb1NlYXJjaDogdGhpcy5wcm9wZXJ0aWVzVG9TZWFyY2gsXG4gICAgICAgIHNlYXJjaEZpbHRlcnM6IHRoaXMuc2VhcmNoRmlsdGVycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICN1cGRhdGVJc1Jlc3VsdHNWaXNpYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzUmVzdWx0c1Zpc2libGUgPVxuICAgICAgISF0aGlzLnNlYXJjaFRleHQgJiZcbiAgICAgICghdGhpcy5zaG93QWN0aW9uc0FyZWEgfHwgdGhpcy5zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApO1xuICAgIGlmIChpc1Jlc3VsdHNWaXNpYmxlICE9PSB0aGlzLiNpc1Jlc3VsdHNWaXNpYmxlLmdldFZhbHVlKCkpIHtcbiAgICAgIHRoaXMuI2lzUmVzdWx0c1Zpc2libGUubmV4dChpc1Jlc3VsdHNWaXNpYmxlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBjbGFzcz1cInNreS1hdXRvY29tcGxldGVcIlxuICByb2xlPVwiY29tYm9ib3hcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIlxuICAgIGlzT3BlbiAmJiAoc2hvd0FjdGlvbnNBcmVhIHx8IChpc1Jlc3VsdHNWaXNpYmxlIHwgYXN5bmMpKVxuICBcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIlxuICAgIGlzT3BlbiAmJiAoc2hvd0FjdGlvbnNBcmVhIHx8IChpc1Jlc3VsdHNWaXNpYmxlIHwgYXN5bmMpKVxuICAgICAgPyByZXN1bHRzTGlzdElkXG4gICAgICA6IG51bGxcbiAgXCJcbiAgW2F0dHIuaWRdPVwicmVzdWx0c1dyYXBwZXJJZFwiXG4+XG4gIDxuZy1jb250ZW50IC8+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNyZXN1bHRzVGVtcGxhdGVSZWY+XG4gIDwhLS0gV2UgZG8gbm90IHdhbnQgdGhlIGJsdXIgdG8gZmlyZSBoZXJlIHNvIHRoYXQgdGhlIGRyb3Bkb3duIGRvZXMgbm90IGNsb3NlLiBUaGlzIGlzIHdoeSB3ZSBhcmUgcHJldmVudGluZyB0aGUgbW91c2Vkb3duIGRlZmF1bHQuIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLXJlc3VsdHMtY29udGFpbmVyXCJcbiAgICBbYXR0ci5pZF09XCJyZXN1bHRzTGlzdElkXCJcbiAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAnc2t5LXNoYWRvdyc6ICdkZWZhdWx0JyxcbiAgICAgICdza3ktZWxldmF0aW9uLTQnOiAnbW9kZXJuJ1xuICAgIH1cIlxuICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgI3Jlc3VsdHNSZWZcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiaXNTZWFyY2hpbmdBc3luYzsgZWxzZSByZXN1bHRDb250cm9sc1RlbXBsYXRlUmVmXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRzLXdhaXRpbmdcIlxuICAgID5cbiAgICAgIDxza3ktd2FpdCBbaXNXYWl0aW5nXT1cInRydWVcIj48L3NreS13YWl0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVzdWx0Q29udHJvbHNUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNSZXN1bHRzVmlzaWJsZSB8IGFzeW5jXCJcbiAgICBjbGFzcz1cInNreS1hdXRvY29tcGxldGUtcmVzdWx0c1wiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHQgb2Ygc2VhcmNoUmVzdWx0czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICghc2VhcmNoUmVzdWx0c0xpbWl0IHx8IGkgPCBzZWFyY2hSZXN1bHRzTGltaXQpICYmXG4gICAgICAgICAgIShlbmFibGVTaG93TW9yZSAmJiBpID49IDUpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1yZXN1bHRcIlxuICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0VsZW1lbnRGb2N1c2VkKHNlYXJjaFJlc3VsdEVsKVwiXG4gICAgICAgIFthdHRyLmRhdGEtZGVzY3JpcHRvci12YWx1ZV09XCJyZXN1bHQuZGF0YVtkZXNjcmlwdG9yUHJvcGVydHldXCJcbiAgICAgICAgW2F0dHIuaWRdPVwicmVzdWx0LmVsZW1lbnRJZFwiXG4gICAgICAgIFtza3lIaWdobGlnaHRdPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgIChjbGljayk9XCJvblJlc3VsdENsaWNrKHJlc3VsdC5lbGVtZW50SWQsICRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlKT1cIm9uUmVzdWx0TW91c2VNb3ZlKGkpXCJcbiAgICAgICAgI3NlYXJjaFJlc3VsdEVsXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0VGVtcGxhdGUgfHwgZGVmYXVsdFNlYXJjaFJlc3VsdFRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiByZXN1bHQuZGF0YSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkIHNreS1wYWRkaW5nLXNxdWlzaC1kZWZhdWx0XCJcbiAgICA+XG4gICAgICB7e1xuICAgICAgICBub1Jlc3VsdHNGb3VuZFRleHQgfHxcbiAgICAgICAgICAoJ3NreXV4X2F1dG9jb21wbGV0ZV9ub19yZXN1bHRzJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbnNBcmVhXCIgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImVuYWJsZVNob3dNb3JlICYmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDApXCJcbiAgICAgIGNsYXNzPVwic2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24gc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb24tbW9yZSBza3ktYnRuIHNreS1idG4tbGlua1wiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJtb3JlQnV0dG9uQ2xpY2tlZCgpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWRcbiAgICAgICAgICApICYmXG4gICAgICAgICAgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhc2VhcmNoVGV4dFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsJyB8IHNreUxpYlJlc291cmNlcyB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNlYXJjaEFzeW5jXG4gICAgICAgICAgICB8IHNreUF1dG9jb21wbGV0ZVNlYXJjaEFzeW5jRGlzYWJsZWQ6IHNlYXJjaEFzeW5jRGlzYWJsZWQpICYmXG4gICAgICAgICAgIXNlYXJjaFRleHRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICAnc2t5dXhfYXV0b2NvbXBsZXRlX3Nob3dfYWxsX2NvdW50J1xuICAgICAgICAgICAgfCBza3lMaWJSZXNvdXJjZXM6IChkYXRhLmxlbmd0aCB8IHNreU51bWVyaWM6IHsgdHJ1bmNhdGU6IGZhbHNlIH0pXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3NreXV4X2F1dG9jb21wbGV0ZV9zaG93X21hdGNoZXNfY291bnQnXG4gICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgICAgICA6IChzZWFyY2hSZXN1bHRzQ291bnQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgOiAoc2VhcmNoUmVzdWx0c0NvdW50IHwgc2t5TnVtZXJpYzogeyB0cnVuY2F0ZTogZmFsc2UgfSkpXG4gICAgICAgIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNlYXJjaFRleHQgJiYgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDBcIlxuICAgICAgY2xhc3M9XCJza3ktZm9udC1kZWVtcGhhc2l6ZWQgc2t5LWF1dG9jb21wbGV0ZS1hY3Rpb25zLW5vLXJlc3VsdHNcIlxuICAgID5cbiAgICAgIHt7XG4gICAgICAgIG5vUmVzdWx0c0ZvdW5kVGV4dCB8fFxuICAgICAgICAgICgnc2t5dXhfYXV0b2NvbXBsZXRlX25vX3Jlc3VsdHMnIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNob3dBZGRCdXR0b25cIlxuICAgICAgY2xhc3M9XCJza3ktYXV0b2NvbXBsZXRlLWFjdGlvbiBza3ktYXV0b2NvbXBsZXRlLWFjdGlvbi1hZGQgc2t5LWJ0biBza3ktYnRuLWxpbmtcIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2NsYXNzLmZvY3VzZWRdPVwiaXNFbGVtZW50Rm9jdXNlZChhZGRCdXR0b25FbClcIlxuICAgICAgKGNsaWNrKT1cImFkZEJ1dHRvbkNsaWNrZWQoKVwiXG4gICAgICAjYWRkQnV0dG9uRWxcbiAgICA+XG4gICAgICA8c2t5LWljb24gaWNvbj1cImFkZFwiIC8+XG4gICAgICB7eyAnc2t5dXhfYXV0b2NvbXBsZXRlX2FkZCcgfCBza3lMaWJSZXNvdXJjZXMgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgI2RlZmF1bHRTZWFyY2hSZXN1bHRUZW1wbGF0ZT5cbiAge3sgaXRlbVtkZXNjcmlwdG9yUHJvcGVydHldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -11,8 +11,8 @@ import { SkyAutocompleteSearchAsyncDisabledPipe } from './autocomplete-search-as
11
11
  import { SkyAutocompleteComponent } from './autocomplete.component';
12
12
  import * as i0 from "@angular/core";
13
13
  export class SkyAutocompleteModule {
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteModule, declarations: [SkyAutocompleteComponent,
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteModule, declarations: [SkyAutocompleteComponent,
16
16
  SkyAutocompleteInputDirective,
17
17
  SkyAutocompleteSearchAsyncDisabledPipe], imports: [CommonModule,
18
18
  FormsModule,
@@ -24,7 +24,7 @@ export class SkyAutocompleteModule {
24
24
  SkyNumericModule,
25
25
  SkyThemeModule,
26
26
  SkyWaitModule], exports: [SkyAutocompleteComponent, SkyAutocompleteInputDirective] }); }
27
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteModule, imports: [CommonModule,
27
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteModule, imports: [CommonModule,
28
28
  FormsModule,
29
29
  SkyAffixModule,
30
30
  SkyTextHighlightModule,
@@ -35,7 +35,7 @@ export class SkyAutocompleteModule {
35
35
  SkyThemeModule,
36
36
  SkyWaitModule] }); }
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyAutocompleteModule, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkyAutocompleteModule, decorators: [{
39
39
  type: NgModule,
40
40
  args: [{
41
41
  declarations: [
@@ -58,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
58
58
  exports: [SkyAutocompleteComponent, SkyAutocompleteInputDirective],
59
59
  }]
60
60
  }] });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQXNCcEUsTUFBTSxPQUFPLHFCQUFxQjs4R0FBckIscUJBQXFCOytHQUFyQixxQkFBcUIsaUJBbEI5Qix3QkFBd0I7WUFDeEIsNkJBQTZCO1lBQzdCLHNDQUFzQyxhQUd0QyxZQUFZO1lBQ1osV0FBVztZQUNYLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsYUFBYTtZQUNiLFdBQVc7WUFDWCx3QkFBd0I7WUFDeEIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxhQUFhLGFBRUwsd0JBQXdCLEVBQUUsNkJBQTZCOytHQUV0RCxxQkFBcUIsWUFiOUIsWUFBWTtZQUNaLFdBQVc7WUFDWCxjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsYUFBYTs7MkZBSUoscUJBQXFCO2tCQXBCakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osd0JBQXdCO3dCQUN4Qiw2QkFBNkI7d0JBQzdCLHNDQUFzQztxQkFDdkM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsNkJBQTZCLENBQUM7aUJBQ25FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFmZml4TW9kdWxlLCBTa3lJZE1vZHVsZSwgU2t5TnVtZXJpY01vZHVsZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUljb25Nb2R1bGUgfSBmcm9tICdAc2t5dXgvaWNvbic7XG5pbXBvcnQgeyBTa3lUZXh0SGlnaGxpZ2h0TW9kdWxlLCBTa3lXYWl0TW9kdWxlIH0gZnJvbSAnQHNreXV4L2luZGljYXRvcnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTa3lMb29rdXBSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWxvb2t1cC1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZFBpcGUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtZGlzYWJsZWQucGlwZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBTa3lBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUsXG4gICAgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZFBpcGUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU2t5QWZmaXhNb2R1bGUsXG4gICAgU2t5VGV4dEhpZ2hsaWdodE1vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreUlkTW9kdWxlLFxuICAgIFNreUxvb2t1cFJlc291cmNlc01vZHVsZSxcbiAgICBTa3lOdW1lcmljTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVdhaXRNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtTa3lBdXRvY29tcGxldGVDb21wb25lbnQsIFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QXV0b2NvbXBsZXRlTW9kdWxlIHt9XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sb29rdXAvc3JjL2xpYi9tb2R1bGVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWpGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQXNCcEUsTUFBTSxPQUFPLHFCQUFxQjsrR0FBckIscUJBQXFCO2dIQUFyQixxQkFBcUIsaUJBbEI5Qix3QkFBd0I7WUFDeEIsNkJBQTZCO1lBQzdCLHNDQUFzQyxhQUd0QyxZQUFZO1lBQ1osV0FBVztZQUNYLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsYUFBYTtZQUNiLFdBQVc7WUFDWCx3QkFBd0I7WUFDeEIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxhQUFhLGFBRUwsd0JBQXdCLEVBQUUsNkJBQTZCO2dIQUV0RCxxQkFBcUIsWUFiOUIsWUFBWTtZQUNaLFdBQVc7WUFDWCxjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsYUFBYTs7NEZBSUoscUJBQXFCO2tCQXBCakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osd0JBQXdCO3dCQUN4Qiw2QkFBNkI7d0JBQzdCLHNDQUFzQztxQkFDdkM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsNkJBQTZCLENBQUM7aUJBQ25FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFmZml4TW9kdWxlLCBTa3lJZE1vZHVsZSwgU2t5TnVtZXJpY01vZHVsZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUljb25Nb2R1bGUgfSBmcm9tICdAc2t5dXgvaWNvbic7XG5pbXBvcnQgeyBTa3lUZXh0SGlnaGxpZ2h0TW9kdWxlLCBTa3lXYWl0TW9kdWxlIH0gZnJvbSAnQHNreXV4L2luZGljYXRvcnMnO1xuaW1wb3J0IHsgU2t5VGhlbWVNb2R1bGUgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgeyBTa3lMb29rdXBSZXNvdXJjZXNNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvc2t5LWxvb2t1cC1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZFBpcGUgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS1zZWFyY2gtYXN5bmMtZGlzYWJsZWQucGlwZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBTa3lBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUsXG4gICAgU2t5QXV0b2NvbXBsZXRlU2VhcmNoQXN5bmNEaXNhYmxlZFBpcGUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgU2t5QWZmaXhNb2R1bGUsXG4gICAgU2t5VGV4dEhpZ2hsaWdodE1vZHVsZSxcbiAgICBTa3lJY29uTW9kdWxlLFxuICAgIFNreUlkTW9kdWxlLFxuICAgIFNreUxvb2t1cFJlc291cmNlc01vZHVsZSxcbiAgICBTa3lOdW1lcmljTW9kdWxlLFxuICAgIFNreVRoZW1lTW9kdWxlLFxuICAgIFNreVdhaXRNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtTa3lBdXRvY29tcGxldGVDb21wb25lbnQsIFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QXV0b2NvbXBsZXRlTW9kdWxlIHt9XG4iXX0=