@fundamental-ngx/core 0.58.0-rc.57 → 0.58.0-rc.58

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../tmp-esm2022/combobox/combobox-item.directive.js","../tmp-esm2022/combobox/combobox.interface.js","../tmp-esm2022/combobox/combobox-mobile/combobox-mobile.component.js","../tmp-esm2022/combobox/list-group.pipe.js","../tmp-esm2022/combobox/tokens.js","../tmp-esm2022/combobox/combobox.component.js","../tmp-esm2022/combobox/combobox.module.js","../tmp-esm2022/combobox/fundamental-ngx-core-combobox.js"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxItemDirective {\n constructor() {\n /** Template reference. */\n this.templateRef = inject((TemplateRef));\n }\n /** @hidden */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ComboboxItemDirective, isStandalone: true, selector: \"[fdComboboxItem]\", inputs: { fdComboboxItemUse: \"fdComboboxItemUse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdComboboxItem]',\n standalone: true\n }]\n }], propDecorators: { fdComboboxItemUse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPdEUsTUFBTSxPQUFPLHFCQUFxQjtJQUpsQztRQVlJLDBCQUEwQjtRQUMxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQTRDLENBQUEsQ0FBQyxDQUFDO0tBU3RFO0lBUEcsY0FBYztJQUNkLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDekIsR0FBNkIsRUFDN0IsR0FBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs4R0FqQlEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU9HLGlCQUFpQjtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkQ29tYm9ib3hJdGVtXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveEl0ZW1EaXJlY3RpdmU8VCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBmb3IgdHlwZSBzdXBwb3J0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmRDb21ib2JveEl0ZW1Vc2U6IFQ7XG5cbiAgICAvKiogVGVtcGxhdGUgcmVmZXJlbmNlLiAqL1xuICAgIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgICAgIGRpcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlPFQ+LFxuICAgICAgICBjdHg6IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD5cbiAgICApOiBjdHggaXMgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBVyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdDb21ib2JveEludGVyZmFjZScpO1xuXG4vKipcbiAqIENvbWJvYm94IEludGVyZmFjZSB0byBoYXZlIHR5cGluZyBhbmQgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuXG4gKiBDb21ib2JveENvbXBvbmVudCA8PT0+IENvbWJvYm94TW9iaWxlQ29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJbnRlcmZhY2UgZXh0ZW5kcyBNb2JpbGVNb2RlIHtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbiAgICBvcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgaW5TaGVsbGJhcjogYm9vbGVhbjtcblxuICAgIGdldFZhbHVlKCk6IGFueTtcbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQ7XG4gICAgZGlhbG9nRGlzbWlzcyhiYWNrdXA6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUID0gdW5rbm93bj4ge1xuICAgICRpbXBsaWNpdDogVDtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, Inject, isDevMode, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT } from '../combobox.interface';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(comboboxComponent) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n this.childContent = null;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiInputOpenChange();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _listenOnMultiInputOpenChange() {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n this._focusInputElementOnceOpened();\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n /** @hidden */\n _focusInputElementOnceOpened() {\n this.dialogRef.afterLoaded\n .pipe(observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n }\n catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxMobileComponent, isStandalone: true, selector: \"fd-combobox-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: TemplateDirective, selector: \"[fdkTemplate]\", inputs: [\"fdkTemplate\"] }, { kind: \"directive\", type: BarMiddleDirective, selector: \"[fd-bar-middle]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIs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QUFFLENBQUM7Z0JBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQTdGUSx1QkFBdUIsa0JBZ0JaLGtCQUFrQjtrR0FoQjdCLHVCQUF1Qix1TkNwRHBDLGtpREFnQ0EsNENESVEsaUJBQWlCLG1GQUNqQixrQkFBa0IsNERBQ2xCLG1CQUFtQixrRkFDbkIsa0JBQWtCLDRIQUNsQixxQkFBcUIsNkRBQ3JCLDBCQUEwQiwrR0FDMUIsZUFBZSxzR0FDZixtQkFBbUIsd0ZBQ25CLHFCQUFxQiw2REFDckIsY0FBYywwSEFHZCxnQkFBZ0Isb0pBQ2hCLHFCQUFxQjs7MkZBR2hCLHVCQUF1QjtrQkF0Qm5DLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ0wsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3hCOzswQkFrQlksTUFBTTsyQkFBQyxrQkFBa0I7eUNBZFQsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5pdGlhbEZvY3VzRGlyZWN0aXZlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJhckVsZW1lbnREaXJlY3RpdmUsIEJhck1pZGRsZURpcmVjdGl2ZSwgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5cbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tYm9ib3guaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveC1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyTWlkZGxlRGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbml0aWFsRm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94TW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8Q29tYm9ib3hJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9yIGludGVybmFsIHVzYWdlXG4gICAgICogQ29udHJvbCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICogTGlzdCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICovXG4gICAgY2hpbGRDb250ZW50OiB7IGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDT01CT0JPWF9DT01QT05FTlQpIGNvbWJvYm94Q29tcG9uZW50OiBDb21ib2JveEludGVyZmFjZSkge1xuICAgICAgICBzdXBlcihjb21ib2JveENvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuQ09NQk9CT1gpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc21pc3MoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0FwcHJvdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaWFsb2dTZXJ2aWNlLmhhc09wZW5EaWFsb2dzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb2N1c0lucHV0RWxlbWVudE9uY2VPcGVuZWQoKTtcblxuICAgICAgICBjb25zdCByZWZTdWIgPSB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6ICh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXRFbGVtZW50T25jZU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJMb2FkZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIC8vIG1ha2luZyB0aGUgbGlzdGVuZXIgYXN5bmNcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwIGlucHV0W3JvbGU9XCJjb21ib2JveFwiXScpO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZvY3VzIGNvbWJvYm94IHNlYXJjaCBpbnB1dCcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwic3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRDb250ZW50Py5jb250cm9sVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/Lmxpc3RUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ListGroupPipe {\n /** Group items */\n transform(items, group) {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, isStandalone: true, name: \"listGroupPipe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'listGroupPipe',\n standalone: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ncm91cC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2xpc3QtZ3JvdXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsa0JBQWtCO0lBQ2xCLFNBQVMsQ0FBQyxLQUFZLEVBQUUsS0FBdUI7UUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQUpRLGFBQWE7NEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBHcm91cEZ1bmN0aW9uPFQgPSBhbnk+ID0gKGl0ZW1zOiBUW10pID0+IHsgW2tleTogc3RyaW5nXTogVFtdIH07XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGlzdEdyb3VwUGlwZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0R3JvdXBQaXBlPFQgPSBhbnk+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEdyb3VwIGl0ZW1zICovXG4gICAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZ3JvdXA6IEdyb3VwRnVuY3Rpb248VD4pOiBLZXlWYWx1ZTxzdHJpbmcsIFRbXT5bXSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cChpdGVtcykpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcbiAgICB9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken('FdComboboxComponent');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFvQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRkRfQ09NQk9CT1hfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94SW50ZXJmYWNlPignRmRDb21ib2JveENvbXBvbmVudCcpO1xuIl19","import { BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { DynamicComponentService, FocusTrapService, KeyUtil, TruncatedTitleDirective } from '@fundamental-ngx/cdk/utils';\nimport { registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { FD_LIST_MESSAGE_DIRECTIVE, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT } from './combobox.interface';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/cdk/overlay\";\nimport * as i2 from \"@fundamental-ngx/cdk/utils\";\nimport * as i3 from \"@fundamental-ngx/core/content-density\";\nimport * as i4 from \"@angular/forms\";\nlet comboboxUniqueId = 0;\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\nexport class ComboboxComponent {\n /** @hidden */\n get _customRenderer() {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n /** @hidden */\n constructor(_overlay, _cdRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService, _contentDensityObserver) {\n this._overlay = _overlay;\n this._cdRef = _cdRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n this._contentDensityObserver = _contentDensityObserver;\n /** Id for the Combobox. */\n this.comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n /** Id attribute for input element inside Combobox component */\n this.inputId = '';\n /** If it is mandatory field */\n this.required = false;\n /** Values to be filtered in the search input. */\n this.dropdownValues = [];\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n this.filterFn = this._defaultFilter;\n /**\n * Whether the Combobox is a Search Field\n */\n this.isSearch = false;\n /** Icon to display in the right-side button. */\n this.glyph = 'navigation-down-arrow';\n /** Glyph font family */\n this.glyphFont = FD_DEFAULT_ICON_FONT_FAMILY;\n /**\n * Whether to show the clear search term button\n */\n this.showClearButton = false;\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n this.triggers = [];\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n this.closeOnOutsideClick = true;\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n this.openOnKeyboardEvent = true;\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n this.maxHeight = '50vh';\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n this.dropDownMaxWidthPx = 640;\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n this.noDropDownMaxWidth = false;\n /** Whether the matching string should be highlighted during filtration. */\n this.highlighting = true;\n /** Whether the popover should close when a user selects a result. */\n this.closeOnSelect = true;\n /** Whether the input field should be populated with the result picked by the user. */\n this.fillOnSelect = true;\n /** Whether the autocomplete should be enabled; Enabled by default */\n this.autoComplete = true;\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n this.fillControlMode = 'at-least';\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n this.communicateByObject = false;\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n this.displayFn = this._defaultDisplay;\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n this.clearButtonFocusable = true;\n /** Whether the combobox is readonly. */\n this.readOnly = false;\n /** Whether the combobox should be built on mobile mode */\n this.mobile = false;\n /** Whether to display the addon button. */\n this.showDropdownButton = true;\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n this.includes = false;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n this.tabOutStrategy = 'closeAndSelect';\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n this.itemClicked = new EventEmitter();\n /** Event emitted, when the combobox's popover body is opened or closed */\n this.openChange = new EventEmitter();\n /** Event emitted when the input text changes. */\n this.inputTextChange = new EventEmitter();\n /** Whether the matching string should be highlighted after combobox value is selected. */\n this.filterHighlight = true;\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n this.nonOpeningKeys = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n /** @hidden */\n this._defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n /** Whether the combobox is opened. */\n this.open = false;\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n this.inShellbar = false;\n /** @hidden */\n this.displayedValues = [];\n /** @hidden */\n this.inputTextValue = '';\n /** @hidden */\n this.clearInputBtnFocused = false;\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n }\n /** @hidden */\n ngOnInit() {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._addShellbarClass();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n this._setupValueSynchronization();\n }\n /** @hidden */\n onInputKeydownHandler(event) {\n if (this.readOnly) {\n return;\n }\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n }\n else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n }\n else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n }\n else if (this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n /** @hidden */\n onItemKeyDownHandler(event, value) {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n /** @hidden */\n onMenuClickHandler(value) {\n if (value || value === 0) {\n const index = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term) {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove() {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n /** If true value empty */\n get isEmptyValue() {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n /** Input text of the input. */\n set inputText(value) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText() {\n return this.inputTextValue;\n }\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue() {\n return this.isSearch ? 'search' : this.glyph;\n }\n /** @hidden */\n _handleClearSearchTerm() {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n writeValue(value) {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** Method passed to list component */\n handleListFocusEscape(direction) {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n /** @hidden */\n handleSearchTermChange() {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n /** @hidden */\n onPrimaryButtonClick() {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /** @hidden */\n isOpenChangeHandle(isOpen) {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event) {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n /** @hidden */\n handleBlur() {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n /** @hidden */\n clearInputBtnFocus() {\n this.clearInputBtnFocused = true;\n }\n /** @hidden */\n clearInputBtnBlur() {\n this.clearInputBtnFocused = false;\n }\n /** Current select value */\n getValue() {\n return this._value;\n }\n /** @hidden */\n _close() {\n this.inputText = this._value ? this.inputText : '';\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n /** @hidden */\n isSelected(term) {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n /** @hidden */\n _getGroupItemIds(groupIndex) {\n if (!this.items?.length) {\n return '';\n }\n const groupItemIds = this.items\n .filter((el) => {\n const idWithGroup = el.nativeElement.getAttribute('id-with-group-index');\n const groupIdx = idWithGroup.split('-')[idWithGroup.split('-').length - 1];\n return groupIdx === String(groupIndex);\n })\n .map((el) => el.nativeElement.getAttribute('id'));\n return groupItemIds?.join(' ');\n }\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n _chooseOtherItem(offset) {\n const activeValue = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n _resetDisplayedValues() {\n this.displayedValues = this.dropdownValues || [];\n }\n /** @hidden */\n _addShellbarClass() {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n /** @hidden */\n _defaultDisplay(str) {\n return `${str}`;\n }\n /** @hidden */\n _defaultFilter(contentArray, searchTerm) {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n }\n else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n /** @hidden */\n _handleClickActions(term) {\n if (this.closeOnSelect) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n if (this.mobile) {\n this._propagateChange();\n }\n }\n this.handleSearchTermChange();\n }\n /** @hidden */\n _getOptionObjectByDisplayedValue(displayValue) {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n /** @hidden */\n _refreshDisplayedValues() {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n }\n else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n /** @hidden */\n _propagateChange() {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n // Do not set new value if theres multiple items that have same label.\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n }\n else if (values.length === 0) {\n this.setValue(this.inputText);\n }\n const thisValue = this.getValue();\n if (typeof thisValue === 'object') {\n this.onChange(thisValue);\n }\n }\n else {\n this.onChange(this.inputText);\n }\n }\n /** @hidden */\n setValue(value) {\n if (this.communicateByObject) {\n this._value = value;\n }\n else {\n this._value = this.displayFn(value);\n }\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {\n containerRef: this._viewContainerRef\n }, {\n injector\n });\n }\n /** @hidden */\n _setupValueSynchronization() {\n if (!this.searchInputElement) {\n return;\n }\n // Listen for focus events to detect programmatic changes\n this._subscriptions.add(fromEvent(this.searchInputElement.nativeElement, 'focus').subscribe(() => {\n this._syncDomValueToModel();\n }));\n }\n /** @hidden */\n _syncDomValueToModel() {\n if (!this.searchInputElement) {\n return;\n }\n const domValue = this.searchInputElement.nativeElement.value;\n if (domValue !== this.inputText) {\n // Update the model and trigger change detection\n this.inputText = domValue;\n this.handleSearchTermChange();\n this._cdRef.detectChanges();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i2.DynamicComponentService }, { token: i2.FocusTrapService }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxComponent, isStandalone: true, selector: \"fd-combobox\", inputs: { comboboxId: \"comboboxId\", inputId: \"inputId\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", required: \"required\", dropdownValues: \"dropdownValues\", filterFn: \"filterFn\", disabled: \"disabled\", placeholder: \"placeholder\", isSearch: \"isSearch\", glyph: \"glyph\", glyphFont: \"glyphFont\", showClearButton: \"showClearButton\", triggers: \"triggers\", closeOnOutsideClick: \"closeOnOutsideClick\", openOnKeyboardEvent: \"openOnKeyboardEvent\", state: \"state\", itemTemplate: \"itemTemplate\", groupFn: \"groupFn\", maxHeight: \"maxHeight\", dropDownMaxWidthPx: \"dropDownMaxWidthPx\", noDropDownMaxWidth: \"noDropDownMaxWidth\", width: \"width\", searchFn: \"searchFn\", highlighting: \"highlighting\", closeOnSelect: \"closeOnSelect\", fillOnSelect: \"fillOnSelect\", autoComplete: \"autoComplete\", fillControlMode: \"fillControlMode\", communicateByObject: \"communicateByObject\", displayFn: \"displayFn\", buttonFocusable: \"buttonFocusable\", clearButtonFocusable: \"clearButtonFocusable\", readOnly: \"readOnly\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", showDropdownButton: \"showDropdownButton\", includes: \"includes\", title: \"title\", byline: \"byline\", tabOutStrategy: \"tabOutStrategy\" }, outputs: { itemClicked: \"itemClicked\", openChange: \"openChange\", inputTextChange: \"inputTextChange\" }, host: { properties: { \"class.fd-combobox-custom-class\": \"true\", \"class.fd-combobox-input\": \"true\", \"class.fd-combobox-custom-class--mobile\": \"mobile\", \"style.width\": \"width\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], queries: [{ propertyName: \"_comboboxItemRenderer\", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: \"listMessages\", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: \"listComponent\", first: true, predicate: ListComponent, descendants: true }, { propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true }, { propertyName: \"popoverComponent\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"inputGroup\", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: \"controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: ListComponent, selector: \"[fd-list], [fdList]\", inputs: [\"dropdownMode\", \"multiInputMode\", \"mobileMode\", \"hasMessage\", \"noBorder\", \"navigationIndicator\", \"selection\", \"keyboardSupport\", \"byline\", \"subline\", \"theme\", \"unreadIndicator\", \"role\", \"settingsList\", \"settingsListFooter\"], outputs: [\"focusEscapeList\"] }, { kind: \"component\", type: ListItemComponent, selector: \"[fdListItem] ,[fd-list-item]\", inputs: [\"selected\", \"noData\", \"action\", \"interactive\", \"growing\", \"counter\", \"active\", \"unread\", \"byline\", \"ariaRole\", \"id\", \"preventClick\", \"settingsListTpl\"], outputs: [\"keyDown\"], exportAs: [\"fdListItem\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AutoCompleteDirective, selector: \"[fdkAutoComplete]\", inputs: [\"options\", \"inputText\", \"enable\", \"displayFn\", \"matcher\"], outputs: [\"onComplete\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: IconComponent, selector: \"fd-icon\", inputs: [\"glyph\", \"font\", \"color\", \"background\", \"class\", \"ariaLabel\", \"ariaHidden\"] }, { kind: \"ngmodule\", type: ContentDensityModule }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: DisplayFnPipe, name: \"displayFnPipe\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: ListGroupPipe, name: \"listGroupPipe\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n ListGroupHeaderDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i2.DynamicComponentService }, { type: i2.FocusTrapService }, { type: i3.ContentDensityObserver }], propDecorators: { comboboxId: [{\n type: Input\n }], inputId: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], required: [{\n type: Input\n }], dropdownValues: [{\n type: Input\n }], filterFn: [{\n type: Input\n }], disabled: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], isSearch: [{\n type: Input\n }], glyph: [{\n type: Input\n }], glyphFont: [{\n type: Input\n }], showClearButton: [{\n type: Input\n }], triggers: [{\n type: Input\n }], closeOnOutsideClick: [{\n type: Input\n }], openOnKeyboardEvent: [{\n type: Input\n }], state: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], groupFn: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], dropDownMaxWidthPx: [{\n type: Input\n }], noDropDownMaxWidth: [{\n type: Input\n }], width: [{\n type: Input\n }], searchFn: [{\n type: Input\n }], highlighting: [{\n type: Input\n }], closeOnSelect: [{\n type: Input\n }], fillOnSelect: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], communicateByObject: [{\n type: Input\n }], displayFn: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], clearButtonFocusable: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], showDropdownButton: [{\n type: Input\n }], includes: [{\n type: Input\n }], title: [{\n type: Input\n }], byline: [{\n type: Input\n }], tabOutStrategy: [{\n type: Input\n }], itemClicked: [{\n type: Output\n }], openChange: [{\n type: Output\n }], inputTextChange: [{\n type: Output\n }], listComponent: [{\n type: ViewChild,\n args: [ListComponent]\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement']\n }], popoverComponent: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], inputGroup: [{\n type: ViewChild,\n args: [InputGroupComponent]\n }], listMessages: [{\n type: ContentChildren,\n args: [FD_LIST_MESSAGE_DIRECTIVE]\n }], controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _comboboxItemRenderer: [{\n type: ContentChild,\n args: [ComboboxItemDirective]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUVILHVCQUF1QixFQUV2QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLHVCQUF1QixFQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdqRSxP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MUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFLNUIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS1IscUJBQXFCO3NCQURyQyxZQUFZO3VCQUFDLHFCQUFxQjtnQkFLbEIsS0FBSztzQkFEckIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFNQQUNFLFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZUV2ZW50LFxuICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIEZvY3VzRXNjYXBlRGlyZWN0aW9uLFxuICAgIEZvY3VzVHJhcFNlcnZpY2UsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTWVudUtleWJvYXJkU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tZW51JztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBPdmVybGF5LCBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMsIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLCBEaXNwbGF5Rm5QaXBlLCBTZWFyY2hIaWdobGlnaHRQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWSwgSWNvbkNvbXBvbmVudCwgSWNvbkZvbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQ29tcG9uZW50LCBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHtcbiAgICBGRF9MSVNUX01FU1NBR0VfRElSRUNUSVZFLFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlLFxuICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgIExpc3RNZXNzYWdlRGlyZWN0aXZlLFxuICAgIExpc3RUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBQb3BvdmVyQm9keUNvbXBvbmVudCwgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IENPTUJPQk9YX0NPTVBPTkVOVCwgQ29tYm9ib3hJbnRlcmZhY2UsIENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uLCBMaXN0R3JvdXBQaXBlIH0gZnJvbSAnLi9saXN0LWdyb3VwLnBpcGUnO1xuaW1wb3J0IHsgRkRfQ09NQk9CT1hfQ09NUE9ORU5UIH0gZnJvbSAnLi90b2tlbnMnO1xuXG5sZXQgY29tYm9ib3hVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogQWxsb3dzIHVzZXJzIHRvIGZpbHRlciB0aHJvdWdoIHJlc3VsdHMgYW5kIHNlbGVjdCBhIHZhbHVlLlxuICpcbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtY29tYm9ib3hcbiAqICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAqICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAqICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHNvbWUgdGV4dC4uLlwiPlxuICogPC9mZC1jb21ib2JveD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNvbWJvYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgICBNZW51S2V5Ym9hcmRTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9DT01CT0JPWF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ29tYm9ib3hDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWN1c3RvbS1jbGFzc10nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MuZmQtY29tYm9ib3gtaW5wdXRdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWN1c3RvbS1jbGFzcy0tbW9iaWxlXSc6ICdtb2JpbGUnLFxuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgICAgIExpc3RDb21wb25lbnQsXG4gICAgICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgICAgICBMaXN0VGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlLFxuICAgICAgICBTZWFyY2hIaWdobGlnaHRQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIExpc3RHcm91cFBpcGUsXG4gICAgICAgIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudDxUID0gYW55PlxuICAgIGltcGxlbWVudHNcbiAgICAgICAgQ29tYm9ib3hJbnRlcmZhY2UsXG4gICAgICAgIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sLFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkNoYW5nZXMsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIElkIGZvciB0aGUgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBjb21ib2JveElkID0gYGZkLWNvbWJvYm94LSR7Y29tYm9ib3hVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBDb21ib2JveCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSAnJztcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhLUxhYmVsbGVkYnkgZm9yIGVsZW1lbnQgZGVzY3JpYmluZyBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBWYWx1ZXMgdG8gYmUgZmlsdGVyZWQgaW4gdGhlIHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duVmFsdWVzOiBUW10gPSBbXTtcblxuICAgIC8qKiBGaWx0ZXIgZnVuY3Rpb24uIEFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgYSBzZWFyY2ggdGVybSBhcyBhcmd1bWVudHNcbiAgICAgKiBhbmQgcmV0dXJucyBhIHN0cmluZy4gU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlckZuID0gdGhpcy5fZGVmYXVsdEZpbHRlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWFyY2ggaW5wdXQgaXMgZGlzYWJsZWQuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgb2YgdGhlIHNlYXJjaCBpbnB1dC4gKiovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgQ29tYm9ib3ggaXMgYSBTZWFyY2ggRmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VhcmNoID0gZmFsc2U7XG5cbiAgICAvKiogSWNvbiB0byBkaXNwbGF5IGluIHRoZSByaWdodC1zaWRlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ25hdmlnYXRpb24tZG93bi1hcnJvdyc7XG5cbiAgICAvKiogR2x5cGggZm9udCBmYW1pbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoRm9udDogSWNvbkZvbnQgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsZWFyIHNlYXJjaCB0ZXJtIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHRyaWdnZXIgZXZlbnRzIHRoYXQgd2lsbCBvcGVuL2Nsb3NlIHRoZSBvcHRpb25zIHBvcG92ZXIuXG4gICAgICogIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIGNsb3NlLCB3aGVuIGEgY2xpY2sgaXMgcGVyZm9ybWVkIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMuIFRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgb3Blbiwgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgaW4gaW5wdXQgKGV4Y2VwdCBFc2NhcGUsIFNwYWNlLCBFbnRlcikuIFRydWUgYnkgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3Blbk9uS2V5Ym9hcmRFdmVudCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEZvcm1TdGF0ZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgd2l0aCB3aGljaCB0byBkaXNwbGF5IHRoZSBpbmRpdmlkdWFsIGxpc3RlZCBpdGVtcy5cbiAgICAgKiBVc2UgaXQgYnkgcGFzc2luZyBhbiBuZy10ZW1wbGF0ZSB3aXRoIGltcGxpY2l0IGNvbnRlbnQuIFNlZSBleGFtcGxlcyBmb3IgbW9yZSBpbmZvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0PFQ+PjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gaGFuZGxlIGdyb3VwaW5nIG9mIGl0ZW1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBGbjogTnVsbGFibGU8R3JvdXBGdW5jdGlvbj47XG5cbiAgICAvKiogTWF4IGhlaWdodCBvZiB0aGUgcG9wb3Zlci4gQW55IG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpbGwgYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHNjcm9sbGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICc1MHZoJztcblxuICAgIC8qKiBNYXggd2lkdGggb2YgdGhlIGRyb3Bkb3duIGluIHBpeGVscy4gRGVmYXVsdCBpcyA2NDBweCAoNDByZW0pLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcERvd25NYXhXaWR0aFB4ID0gNjQwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGhhdmUgbWF4IHdpZHRoLlxuICAgICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBkcm9wZG93biB0byB0YWtlIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiBEZWZhdWx0IGlzIGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBub0Ryb3BEb3duTWF4V2lkdGggPSBmYWxzZTtcblxuICAgIC8qKiBDdXN0b20gd2lkdGggb2YgdGhlIGNvbnRyb2wuICovXG4gICAgQElucHV0KClcbiAgICB3aWR0aDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZWFyY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBFbnRlciBrZXkgaXMgcHJlc3NlZCBvbiB0aGUgbWFpbiBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaEZuOiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG1hdGNoaW5nIHN0cmluZyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgZHVyaW5nIGZpbHRyYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBoaWdobGlnaHRpbmcgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgc2hvdWxkIGNsb3NlIHdoZW4gYSB1c2VyIHNlbGVjdHMgYSByZXN1bHQuICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZU9uU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBmaWVsZCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJlc3VsdCBwaWNrZWQgYnkgdGhlIHVzZXIuICovXG4gICAgQElucHV0KClcbiAgICBmaWxsT25TZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgYmUgZW5hYmxlZDsgRW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBhdXRvQ29tcGxldGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUHJlc2V0IG9wdGlvbnMgZm9yIHRoZSBTZWxlY3QgYm9keSB3aWR0aCwgd2hhdGV2ZXIgaXMgY2hvc2VuLCB0aGUgYm9keSBoYXMgYSA2MDBweCBsaW1pdC5cbiAgICAgKiAqIGBhdC1sZWFzdGAgd2lsbCBhcHBseSBhIG1pbmltdW0gd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuIC0gRGVmYXVsdFxuICAgICAqICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogKiAnZml0LWNvbnRlbnQnIHdpbGwgYXBwbHkgd2lkdGggbmVlZGVkIHRvIHByb3Blcmx5IGRpc3BsYXkgaXRlbXMgaW5zaWRlLCBpbmRlcGVuZGVudCBvZiBjb250cm9sLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsbENvbnRyb2xNb2RlOiBQb3BvdmVyRmlsbE1vZGUgPSAnYXQtbGVhc3QnO1xuXG4gICAgLyoqIERlZmluZXMgaWYgY29tYm9ib3ggc2hvdWxkIGJlaGF2ZSBzYW1lIGFzIGRyb3Bkb3duLiBXaGVuIGl0J3MgZW5hYmxlZCB3cml0aW5nIGluc2lkZSB0ZXh0IGlucHV0IHdvbid0XG4gICAgICogdHJpZ2dlciBvbkNoYW5nZSBmdW5jdGlvbiwgdW50aWwgaXQgbWF0Y2hlcyBvbmUgb2YgZGlzcGxheWVkIGRyb3Bkb3duIHZhbHVlcy4gQWxzbyBjb21tdW5pY2F0aW5nIHdpdGggY29tYm9ib3hcbiAgICAgKiBjYW4gYmUgYWNoaWV2ZWQgb25seSBieSBvYmplY3RzIHdpdGggc2FtZSB0eXBlIGFzIGRyb3Bkb3duVmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbW11bmljYXRlQnlPYmplY3QgPSBmYWxzZTtcblxuICAgIC8qKiBEaXNwbGF5IGZ1bmN0aW9uLiBBY2NlcHRzIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZVxuICAgICAqIGl0ZW1zIHBhc3NlZCB0byBkcm9wZG93blZhbHVlcyBhcyBhcmd1bWVudCwgYW5kIG91dHB1dHMgYSBzdHJpbmcuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlGbiA9IHRoaXMuX2RlZmF1bHREaXNwbGF5O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY2xlYXIgYnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCdXR0b25Gb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIHJlYWRvbmx5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgYmUgYnVpbHQgb24gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIElucHV0IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgYWRkb24gYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Ryb3Bkb3duQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcuIEJ5IGRlZmF1bHQsIG9ubHkgcmVzdWx0cyB0aGF0IHN0YXJ0XG4gICAgICogd2l0aCB0aGUgaW5wdXQgc2VhcmNoIHRlcm0gd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG9vbHRpcCBmb3IgdGhlIG11bHRpLWlucHV0IGljb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBpdGVtIG9wdGlvbnMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGJ5bGluZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJ5bGluZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQWN0aW9uIHRvIHBlcmZvcm0gd2hlbiB1c2VyIHNoaWZ0cyBmb2N1cyBmcm9tIHRoZSBkcm9wZG93bi5cbiAgICAgKiAtIGBjbG9zZWAgd2lsbCBjbG9zZSB0aGUgZHJvcGRvd24gcHJlc2VydmluZyBwcmV2aW91c2x5IHNlbGVjdGVkIHZhbHVlLlxuICAgICAqIC0gYGNsb3NlQW5kU2VsZWN0YCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBhbmQgc2VsZWN0IGxhc3QgZm9jdXNlZCBkcm9wZG93biBpdGVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiT3V0U3RyYXRlZ3k6ICdjbG9zZScgfCAnY2xvc2VBbmRTZWxlY3QnID0gJ2Nsb3NlQW5kU2VsZWN0JztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBjbGlja2VkLiBVc2UgKiRldmVudCogdG8gcmV0cmlldmUgaXQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxDb21ib2JveEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib2JveEl0ZW0+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiB0aGUgY29tYm9ib3gncyBwb3BvdmVyIGJvZHkgaXMgb3BlbmVkIG9yIGNsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG9wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGlucHV0IHRleHQgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbnB1dFRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoTGlzdENvbXBvbmVudClcbiAgICBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dEVsZW1lbnQnKVxuICAgIHNlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChQb3BvdmVyQ29tcG9uZW50KVxuICAgIHBvcG92ZXJDb21wb25lbnQ6IFBvcG92ZXJDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRHcm91cENvbXBvbmVudClcbiAgICBpbnB1dEdyb3VwOiBJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZEX0xJU1RfTUVTU0FHRV9ESVJFQ1RJVkUpXG4gICAgbGlzdE1lc3NhZ2VzOiBRdWVyeUxpc3Q8TGlzdE1lc3NhZ2VEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250cm9sVGVtcGxhdGUnKVxuICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0VGVtcGxhdGUnKVxuICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKENvbWJvYm94SXRlbURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21ib2JveEl0ZW1SZW5kZXJlcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCdpdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG1hdGNoaW5nIHN0cmluZyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgYWZ0ZXIgY29tYm9ib3ggdmFsdWUgaXMgc2VsZWN0ZWQuICovXG4gICAgZmlsdGVySGlnaGxpZ2h0ID0gdHJ1ZTtcblxuICAgIC8qKiBLZXlzLCB0aGF0IHdvbid0IHRyaWdnZXIgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXRlLCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcmVhZG9ubHkgbm9uT3BlbmluZ0tleXM6IG51bWJlcltdID0gW1xuICAgICAgICBFU0NBUEUsXG4gICAgICAgIEVOVEVSLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBSSUdIVF9BUlJPVyxcbiAgICAgICAgRE9XTl9BUlJPVyxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIENPTlRST0wsXG4gICAgICAgIFRBQixcbiAgICAgICAgU0hJRlRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5OiBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3k7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kZWZhdWx0Rm9udEZhbWlseSA9IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBpcyBvcGVuZWQuICovXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGlucHV0IGNvdXAgaXMgaW4gdGhlIHNoZWxsYmFyLiBPbmx5IGZvciBpbnRlcm5hbCB1c2UgYnkgY29tYm9ib3ggY29tcG9uZW50XG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGluU2hlbGxiYXIgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlzcGxheWVkVmFsdWVzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbnB1dFRleHRWYWx1ZSA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuRm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2N1c3RvbVJlbmRlcmVyKCk6IE51bGxhYmxlPFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21ib2JveEl0ZW1SZW5kZXJlcj8udGVtcGxhdGVSZWYgfHwgdGhpcy5pdGVtVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNUcmFwU2VydmljZTogRm9jdXNUcmFwU2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBhdXRvQ2xvc2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5zaG93RHJvcGRvd25CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWZyZXNoRGlzcGxheWVkVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duVmFsdWVzICYmIChjaGFuZ2VzLmRyb3Bkb3duVmFsdWVzIHx8IGNoYW5nZXMuc2VhcmNoVGVybSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU2hlbGxiYXJDbGFzcygpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR1cFZhbHVlU3luY2hyb25pemF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdmcm9tUGFzdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbiAmJiB0aGlzLmxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgtMSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT25LZXlib2FyZEV2ZW50ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLm5vbk9wZW5pbmdLZXlzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlICYmIEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnY29udHJvbCcpICYmICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQkFDS1NQQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KChfdmFsdWUpID0+IF92YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoeyBpdGVtOiB2YWx1ZSwgaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuZGlzcGxheUZuKHRlcm0pO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBJZiB0cnVlIHZhbHVlIGVtcHR5ICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlucHV0VGV4dCB8fCB0aGlzLmlucHV0VGV4dD8udHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogSW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgc2V0IGlucHV0VGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgZ2x5cGggdmFsdWUgYmFzZWQgb24gd2hldGhlciB0aGUgY29tYm9ib3ggaXMgdXNlZCBhcyBhIHNlYXJjaCBmaWVsZCBvciBub3QuICovXG4gICAgZ2V0IGdseXBoVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWFyY2ggPyAnc2VhcmNoJyA6IHRoaXMuZ2x5cGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlQ2xlYXJTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0Q2hhbmdlLmVtaXQoJycpO1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudD8ucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBwcmltYXJ5IGJ1dHRvbiBjbGljayBiZWhhdmlvdXIgb24gbW9iaWxlc1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoIXRoaXMub3Blbik7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogUmVzZXQgZGlzcGxheWVkIHZhbHVlcyBvbiBldmVyeSBtb2JpbGUgb3BlbiAqL1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG5cbiAgICAgICAgICAgIC8qKiBBbGxvdyBjb21ib2JveCB1cCBhbmQgZG93biBhcnJvd3MgdG8gd29yayBwcm9wZXJseSB3aGVuIGNvbWJvYm94IGlzIGluc2lkZSBhIGRpYWxvZyB3aXRoIGEgdHJhcHBlZCBmb2N1cyAqL1xuICAgICAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UudW5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcGVuICYmICF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRlIGV2ZW50IGZyb20gYXV0byBjb21wbGV0ZSBkaXJlY3RpdmUsIHNldHRpbmcgdGhlIG5ldyB2YWx1ZSwgYW5kIGNsb3NpbmcgcG9wb3ZlciAqL1xuICAgIGhhbmRsZUF1dG9Db21wbGV0ZShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0ICE9PSBldmVudC50ZXJtKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGV2ZW50LnRlcm07XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuZm9yY2VDbG9zZSAmJiB0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0b0NvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICB0ZXJtOiB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcmNlQ2xvc2U6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xlYXJJbnB1dEJ0bkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRCdG5Gb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRCdG5Gb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEN1cnJlbnQgc2VsZWN0IHZhbHVlICovXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Nsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX3ZhbHVlID8gdGhpcy5pbnB1dFRleHQgOiAnJztcbiAgICAgICAgaWYgKHRoaXMudGFiT3V0U3RyYXRlZ3kgPT09ICdjbG9zZUFuZFNlbGVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5saXN0Q29tcG9uZW50LmdldEFjdGl2ZUl0ZW0oKTtcbiAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiAhdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja0FjdGlvbnMoZm9jdXNlZEl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzU2VsZWN0ZWQodGVybTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRlcm1WYWx1ZSA9IHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCA/IHRlcm0gOiB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKSA9PT0gdGVybVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldEdyb3VwSXRlbUlkcyhncm91cEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtSWRzID0gdGhpcy5pdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFdpdGhHcm91cCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZC13aXRoLWdyb3VwLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJZHggPSBpZFdpdGhHcm91cC5zcGxpdCgnLScpW2lkV2l0aEdyb3VwLnNwbGl0KCctJykubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwSWR4ID09PSBTdHJpbmcoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoZWwpID0+IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBJdGVtSWRzPy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHBpY2tzIG90aGVyIHZhbHVlIG1vdmVkIGZyb20gY3VycmVudCBvbmUgYnkgb2Zmc2V0LCBjYWxsZWQgb25seSB3aGVuIGNvbWJvYm94IGlzIGNsb3NlZCAqL1xuICAgIHByaXZhdGUgX2Nob29zZU90aGVySXRlbShvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVWYWx1ZTogYW55ID0gdGhpcy5fZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZSh0aGlzLmlucHV0VGV4dFZhbHVlKVswXTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUgPT09IGFjdGl2ZVZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25WYWx1ZXNbaW5kZXggKyBvZmZzZXRdKSB7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih0aGlzLmRyb3Bkb3duVmFsdWVzW2luZGV4ICsgb2Zmc2V0XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmVzZXQgZmlsdGVyaW5nIGZvciBkaXNwbGF5ZWQgdmFsdWVzLiBJdCBvdmVycmlkZXMgZGlzcGxheWVkIHZhbHVlcyBieSBhbGwgcG9zc2libGUgZHJvcGRvd24gdmFsdWVzICovXG4gICAgcHJpdmF0ZSBfcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZFNoZWxsYmFyQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmluU2hlbGxiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWlucHV0Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLnNldEluU2hlbGxiYXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHREaXNwbGF5KHN0cjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEZpbHRlcihjb250ZW50QXJyYXk6IGFueVtdLCBzZWFyY2hUZXJtOiBhbnkpOiBhbnlbXSB7XG4gICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2hUZXJtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2hUZXJtLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLmRpc3BsYXlGbihpdGVtKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmNsdWRlcyA/IHRlcm0uaW5jbHVkZXMoc2VhcmNoTG93ZXIpIDogdGVybS5zdGFydHNXaXRoKHNlYXJjaExvd2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoVGVybSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50QXJyYXkuZmlsdGVyKChpdGVtKSA9PiBpdGVtID09PSBzZWFyY2hUZXJtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudEFycmF5IHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2tBY3Rpb25zKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsbE9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0VGV4dDtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKGRpc3BsYXlWYWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGRvd25WYWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5kaXNwbGF5Rm4odmFsdWUpID09PSBkaXNwbGF5VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaERpc3BsYXllZFZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZmlsdGVyRm4odGhpcy5kcm9wZG93blZhbHVlcywgdGhpcy5pbnB1dFRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmRyb3Bkb3duVmFsdWVzIHx8IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHNldCBuZXcgdmFsdWUgaWYgdGhlcmVzIG11bHRpcGxlIGl0ZW1zIHRoYXQgaGF2ZSBzYW1lIGxhYmVsLlxuICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5kaXNwbGF5Rm4odmFsdWVzWzBdKSAhPT0gdGhpcy5kaXNwbGF5Rm4odGhpcy5nZXRWYWx1ZSgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWVzWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGhpc1ZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDT01CT0JPWF9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH1dLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVEeW5hbWljQ29tcG9uZW50KFxuICAgICAgICAgICAgeyBsaXN0VGVtcGxhdGU6IHRoaXMubGlzdFRlbXBsYXRlLCBjb250cm9sVGVtcGxhdGU6IHRoaXMuY29udHJvbFRlbXBsYXRlIH0sXG4gICAgICAgICAgICBDb21ib2JveE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJSZWY6IHRoaXMuX3ZpZXdDb250YWluZXJSZWZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5qZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwVmFsdWVTeW5jaHJvbml6YXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3RlbiBmb3IgZm9jdXMgZXZlbnRzIHRvIGRldGVjdCBwcm9ncmFtbWF0aWMgY2hhbmdlc1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNEb21WYWx1ZVRvTW9kZWwoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zeW5jRG9tVmFsdWVUb01vZGVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21WYWx1ZSA9IHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmIChkb21WYWx1ZSAhPT0gdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBkb21WYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vYmlsZSA/IG1vYmlsZVRlbXBsYXRlIDogZGVza3RvcFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcFRlbXBsYXRlPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1wb3BvdmVyLWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2NsYXNzLmZkLWNvbWJvYm94LWZ1bGwtd2lkdGhdPVwiaXNTZWFyY2ggfHwgc2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgW2lzT3Blbl09XCJvcGVuICYmIGRpc3BsYXllZFZhbHVlcyAmJiBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgIFtzY3JvbGxTdHJhdGVneV09XCJfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRPbmx5XCJcbiAgICAgICAgW21heFdpZHRoXT1cIiFtb2JpbGUgJiYgbm9Ecm9wRG93bk1heFdpZHRoID8gbnVsbCA6IGRyb3BEb3duTWF4V2lkdGhQeFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCAmJiAnMTAwJSdcIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJjbG9zZU9uT3V0c2lkZUNsaWNrXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2hpZGRlbl09XCIhZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgbGV0LXRlcm09XCJ0ZXJtXCIgI2l0ZW1Tb3VyY2U+XG4gICAgQGlmICghX2N1c3RvbVJlbmRlcmVyKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICBmZFRydW5jYXRlZFRpdGxlXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRlcm0gfCBkaXNwbGF5Rm5QaXBlOiBkaXNwbGF5Rm4gfCBoaWdobGlnaHQ6IGlucHV0VGV4dCA6IGhpZ2hsaWdodGluZyAmJiBmaWx0ZXJIaWdobGlnaHRcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfY3VzdG9tUmVuZGVyZXJcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0ZXJtLCBpbnB1dFRleHQ6IGlucHV0VGV4dCB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgIFtidXR0b25dPVwic2hvd0Ryb3Bkb3duQnV0dG9uXCJcbiAgICAgICAgW2dseXBoXT1cInNob3dEcm9wZG93bkJ1dHRvbiA/IGdseXBoVmFsdWUgOiBudWxsXCJcbiAgICAgICAgW2dseXBoRm9udF09XCJpc1NlYXJjaCA/IF9kZWZhdWx0Rm9udEZhbWlseSA6IGdseXBoRm9udFwiXG4gICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgW3Nob3dGb2N1c109XCIhY2xlYXJJbnB1dEJ0bkZvY3VzZWRcIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCJ0aXRsZSB8fCAoJ3BsYXRmb3JtTXVsdGlDb21ib2JveC5pbnB1dEdseXBoQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwib25QcmltYXJ5QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgIChjbGljayk9XCJtb2JpbGUgJiYgaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpXCJcbiAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3NlYXJjaElucHV0RWxlbWVudFxuICAgICAgICAgICAgZmRrQXV0b0NvbXBsZXRlXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb21ib2JveElkICsgJy1saXN0LXJlc3VsdHMnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gJ2xpc3QnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyBjb21ib2JveElkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGhcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJyZWFkT25seSB8fCBkaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICBbZW5hYmxlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZuXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwiaGFuZGxlQXV0b0NvbXBsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uSW5wdXRLZXlkb3duSGFuZGxlcignZnJvbVBhc3RlJylcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpXCJcbiAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoKGlzU2VhcmNoIHx8IHNob3dDbGVhckJ1dHRvbikgJiYgaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWFkZG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImluU2hlbGxiYXIgPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2J1dHRvbl09XCJpblNoZWxsYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2xlYXJCdXR0b25Gb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJJbnB1dEJ0bkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjbGVhcklucHV0QnRuQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuICAgIDxkaXYgW2lkXT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIiBjbGFzcz1cImZkLWNvbWJvYm94LWNvdW50LWxpc3QtcmVzdWx0c1wiPlxuICAgICAgICB7eyBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoIHx8IDAgfX0gcmVzdWx0IGxpc3QgaXRlbXNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2Ryb3Bkb3duTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2lkXT1cImNvbWJvYm94SWQgKyAnLXJlc3VsdCdcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21ib2JveElkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtoYXNNZXNzYWdlXT1cImxpc3RNZXNzYWdlcyAmJiBsaXN0TWVzc2FnZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cImhhbmRsZUxpc3RGb2N1c0VzY2FwZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgQGlmIChncm91cEZuKSB7XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBkaXNwbGF5ZWRWYWx1ZXMgfCBsaXN0R3JvdXBQaXBlOiBncm91cEZuOyB0cmFjayBncm91cC5rZXk7IGxldCBncm91cEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWdyb3VwLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICBhcmlhUm9sZT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiJ2NvcmVNdWx0aUNvbWJvQm94Lmxpc3RHcm91cEhlYWRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJncm91cC5rZXlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyBncm91cC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGdyb3VwLnZhbHVlOyB0cmFjayAkaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgI2l0ZW09XCJmZExpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFSb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcGxhY2Vob2xkZXJdPVwiZ3JvdXAua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJncm91cC52YWx1ZS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJpbmRleCArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWQtd2l0aC1ncm91cC1pbmRleF09XCJpdGVtLmlkICsgJy1ncm91cC0nICsgZ3JvdXBJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZCh0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1lbnVDbGlja0hhbmRsZXIodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHRlcm0gb2YgZGlzcGxheWVkVmFsdWVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\nexport class ComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe], exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBS0gsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSGIsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxhQUN2RCxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhOytHQUV4RCxjQUFjLFlBSGIsaUJBQWlCOzsyRkFHbEIsY0FBYztrQkFKMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUM7b0JBQ2xFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztpQkFDckUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RHcm91cFBpcGUgfSBmcm9tICcuL2xpc3QtZ3JvdXAucGlwZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBgQ29tYm9ib3hDb21wb25lbnRgIGltcG9ydCBpbnN0ZWFkLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtRGlyZWN0aXZlLCBMaXN0R3JvdXBQaXBlXSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hDb21wb25lbnQsIENvbWJvYm94SXRlbURpcmVjdGl2ZSwgTGlzdEdyb3VwUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../tmp-esm2022/combobox/combobox-item.directive.js","../tmp-esm2022/combobox/combobox.interface.js","../tmp-esm2022/combobox/combobox-mobile/combobox-mobile.component.js","../tmp-esm2022/combobox/list-group.pipe.js","../tmp-esm2022/combobox/tokens.js","../tmp-esm2022/combobox/combobox.component.js","../tmp-esm2022/combobox/combobox.module.js","../tmp-esm2022/combobox/fundamental-ngx-core-combobox.js"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxItemDirective {\n constructor() {\n /** Template reference. */\n this.templateRef = inject((TemplateRef));\n }\n /** @hidden */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ComboboxItemDirective, isStandalone: true, selector: \"[fdComboboxItem]\", inputs: { fdComboboxItemUse: \"fdComboboxItemUse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdComboboxItem]',\n standalone: true\n }]\n }], propDecorators: { fdComboboxItemUse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPdEUsTUFBTSxPQUFPLHFCQUFxQjtJQUpsQztRQVlJLDBCQUEwQjtRQUMxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQTRDLENBQUEsQ0FBQyxDQUFDO0tBU3RFO0lBUEcsY0FBYztJQUNkLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDekIsR0FBNkIsRUFDN0IsR0FBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs4R0FqQlEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU9HLGlCQUFpQjtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkQ29tYm9ib3hJdGVtXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveEl0ZW1EaXJlY3RpdmU8VCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBmb3IgdHlwZSBzdXBwb3J0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmRDb21ib2JveEl0ZW1Vc2U6IFQ7XG5cbiAgICAvKiogVGVtcGxhdGUgcmVmZXJlbmNlLiAqL1xuICAgIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgICAgIGRpcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlPFQ+LFxuICAgICAgICBjdHg6IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD5cbiAgICApOiBjdHggaXMgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBVyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdDb21ib2JveEludGVyZmFjZScpO1xuXG4vKipcbiAqIENvbWJvYm94IEludGVyZmFjZSB0byBoYXZlIHR5cGluZyBhbmQgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuXG4gKiBDb21ib2JveENvbXBvbmVudCA8PT0+IENvbWJvYm94TW9iaWxlQ29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJbnRlcmZhY2UgZXh0ZW5kcyBNb2JpbGVNb2RlIHtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbiAgICBvcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgaW5TaGVsbGJhcjogYm9vbGVhbjtcblxuICAgIGdldFZhbHVlKCk6IGFueTtcbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQ7XG4gICAgZGlhbG9nRGlzbWlzcyhiYWNrdXA6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUID0gdW5rbm93bj4ge1xuICAgICRpbXBsaWNpdDogVDtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, Inject, isDevMode, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT } from '../combobox.interface';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(comboboxComponent) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n this.childContent = null;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiInputOpenChange();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _listenOnMultiInputOpenChange() {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n this._focusInputElementOnceOpened();\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n /** @hidden */\n _focusInputElementOnceOpened() {\n this.dialogRef.afterLoaded\n .pipe(observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n }\n catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxMobileComponent, isStandalone: true, selector: \"fd-combobox-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: TemplateDirective, selector: \"[fdkTemplate]\", inputs: [\"fdkTemplate\"] }, { kind: \"directive\", type: BarMiddleDirective, selector: \"[fd-bar-middle]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIs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QUFFLENBQUM7Z0JBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQTdGUSx1QkFBdUIsa0JBZ0JaLGtCQUFrQjtrR0FoQjdCLHVCQUF1Qix1TkNwRHBDLGtpREFnQ0EsNENESVEsaUJBQWlCLG1GQUNqQixrQkFBa0IsNERBQ2xCLG1CQUFtQixrRkFDbkIsa0JBQWtCLDRIQUNsQixxQkFBcUIsNkRBQ3JCLDBCQUEwQiwrR0FDMUIsZUFBZSxzR0FDZixtQkFBbUIsd0ZBQ25CLHFCQUFxQiw2REFDckIsY0FBYywwSEFHZCxnQkFBZ0Isb0pBQ2hCLHFCQUFxQjs7MkZBR2hCLHVCQUF1QjtrQkF0Qm5DLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ0wsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3hCOzswQkFrQlksTUFBTTsyQkFBQyxrQkFBa0I7eUNBZFQsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5pdGlhbEZvY3VzRGlyZWN0aXZlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJhckVsZW1lbnREaXJlY3RpdmUsIEJhck1pZGRsZURpcmVjdGl2ZSwgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5cbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tYm9ib3guaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveC1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyTWlkZGxlRGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbml0aWFsRm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94TW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8Q29tYm9ib3hJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9yIGludGVybmFsIHVzYWdlXG4gICAgICogQ29udHJvbCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICogTGlzdCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICovXG4gICAgY2hpbGRDb250ZW50OiB7IGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDT01CT0JPWF9DT01QT05FTlQpIGNvbWJvYm94Q29tcG9uZW50OiBDb21ib2JveEludGVyZmFjZSkge1xuICAgICAgICBzdXBlcihjb21ib2JveENvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuQ09NQk9CT1gpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc21pc3MoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0FwcHJvdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaWFsb2dTZXJ2aWNlLmhhc09wZW5EaWFsb2dzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb2N1c0lucHV0RWxlbWVudE9uY2VPcGVuZWQoKTtcblxuICAgICAgICBjb25zdCByZWZTdWIgPSB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6ICh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXRFbGVtZW50T25jZU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJMb2FkZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIC8vIG1ha2luZyB0aGUgbGlzdGVuZXIgYXN5bmNcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwIGlucHV0W3JvbGU9XCJjb21ib2JveFwiXScpO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZvY3VzIGNvbWJvYm94IHNlYXJjaCBpbnB1dCcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwic3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRDb250ZW50Py5jb250cm9sVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/Lmxpc3RUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ListGroupPipe {\n /** Group items */\n transform(items, group) {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, isStandalone: true, name: \"listGroupPipe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'listGroupPipe',\n standalone: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ncm91cC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2xpc3QtZ3JvdXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsa0JBQWtCO0lBQ2xCLFNBQVMsQ0FBQyxLQUFZLEVBQUUsS0FBdUI7UUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQUpRLGFBQWE7NEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBHcm91cEZ1bmN0aW9uPFQgPSBhbnk+ID0gKGl0ZW1zOiBUW10pID0+IHsgW2tleTogc3RyaW5nXTogVFtdIH07XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGlzdEdyb3VwUGlwZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0R3JvdXBQaXBlPFQgPSBhbnk+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEdyb3VwIGl0ZW1zICovXG4gICAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZ3JvdXA6IEdyb3VwRnVuY3Rpb248VD4pOiBLZXlWYWx1ZTxzdHJpbmcsIFRbXT5bXSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cChpdGVtcykpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcbiAgICB9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken('FdComboboxComponent');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFvQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRkRfQ09NQk9CT1hfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94SW50ZXJmYWNlPignRmRDb21ib2JveENvbXBvbmVudCcpO1xuIl19","import { BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { DynamicComponentService, FocusTrapService, KeyUtil, TruncatedTitleDirective } from '@fundamental-ngx/cdk/utils';\nimport { registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { FD_LIST_MESSAGE_DIRECTIVE, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT } from './combobox.interface';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/cdk/overlay\";\nimport * as i2 from \"@fundamental-ngx/cdk/utils\";\nimport * as i3 from \"@fundamental-ngx/core/content-density\";\nimport * as i4 from \"@angular/forms\";\nlet comboboxUniqueId = 0;\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\nexport class ComboboxComponent {\n /** @hidden */\n get _customRenderer() {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n /** @hidden */\n constructor(_overlay, _cdRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService, _contentDensityObserver) {\n this._overlay = _overlay;\n this._cdRef = _cdRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n this._contentDensityObserver = _contentDensityObserver;\n /** Id for the Combobox. */\n this.comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n /** Id attribute for input element inside Combobox component */\n this.inputId = '';\n /** If it is mandatory field */\n this.required = false;\n /** Values to be filtered in the search input. */\n this.dropdownValues = [];\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n this.filterFn = this._defaultFilter;\n /**\n * Whether the Combobox is a Search Field\n */\n this.isSearch = false;\n /** Icon to display in the right-side button. */\n this.glyph = 'navigation-down-arrow';\n /** Glyph font family */\n this.glyphFont = FD_DEFAULT_ICON_FONT_FAMILY;\n /**\n * Whether to show the clear search term button\n */\n this.showClearButton = false;\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n this.triggers = [];\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n this.closeOnOutsideClick = true;\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n this.openOnKeyboardEvent = true;\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n this.maxHeight = '50vh';\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n this.dropDownMaxWidthPx = 640;\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n this.noDropDownMaxWidth = false;\n /** Whether the matching string should be highlighted during filtration. */\n this.highlighting = true;\n /** Whether the popover should close when a user selects a result. */\n this.closeOnSelect = true;\n /** Whether the input field should be populated with the result picked by the user. */\n this.fillOnSelect = true;\n /** Whether the autocomplete should be enabled; Enabled by default */\n this.autoComplete = true;\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n this.fillControlMode = 'at-least';\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n this.communicateByObject = false;\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n this.displayFn = this._defaultDisplay;\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n this.clearButtonFocusable = true;\n /** Whether the combobox is readonly. */\n this.readOnly = false;\n /** Whether the combobox should be built on mobile mode */\n this.mobile = false;\n /** Whether to display the addon button. */\n this.showDropdownButton = true;\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n this.includes = false;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n this.tabOutStrategy = 'closeAndSelect';\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n this.itemClicked = new EventEmitter();\n /** Event emitted, when the combobox's popover body is opened or closed */\n this.openChange = new EventEmitter();\n /** Event emitted when the input text changes. */\n this.inputTextChange = new EventEmitter();\n /** Whether the matching string should be highlighted after combobox value is selected. */\n this.filterHighlight = true;\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n this.nonOpeningKeys = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n /** @hidden */\n this._defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n /** Whether the combobox is opened. */\n this.open = false;\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n this.inShellbar = false;\n /** @hidden */\n this.displayedValues = [];\n /** @hidden */\n this.inputTextValue = '';\n /** @hidden */\n this.clearInputBtnFocused = false;\n /** @hidden */\n this._itemMousedown = false;\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n }\n /** @hidden */\n ngOnInit() {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._addShellbarClass();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n this._setupValueSynchronization();\n }\n /** @hidden */\n onInputKeydownHandler(event) {\n if (this.readOnly) {\n return;\n }\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n }\n else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n }\n else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n }\n else if (this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n /** @hidden */\n onItemKeyDownHandler(event, value) {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n this._itemMousedown = true;\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n /** @hidden */\n onItemFocused(value) {\n if (!this._itemMousedown && !this.mobile) {\n this.onMenuClickHandler(value, false);\n }\n this._itemMousedown = false;\n }\n /** @hidden */\n onMenuClickHandler(value, shouldClosePopover = true) {\n if (value || value === 0) {\n const index = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value, shouldClosePopover);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term) {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove() {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n /** If true value empty */\n get isEmptyValue() {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n /** Input text of the input. */\n set inputText(value) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText() {\n return this.inputTextValue;\n }\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue() {\n return this.isSearch ? 'search' : this.glyph;\n }\n /** @hidden */\n _handleClearSearchTerm() {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n writeValue(value) {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** Method passed to list component */\n handleListFocusEscape(direction) {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n /** @hidden */\n handleSearchTermChange() {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n /** @hidden */\n onPrimaryButtonClick() {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /** @hidden */\n isOpenChangeHandle(isOpen) {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event) {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n /** @hidden */\n handleBlur() {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n /** @hidden */\n clearInputBtnFocus() {\n this.clearInputBtnFocused = true;\n }\n /** @hidden */\n clearInputBtnBlur() {\n this.clearInputBtnFocused = false;\n }\n /** Current select value */\n getValue() {\n return this._value;\n }\n /** @hidden */\n _close() {\n this.inputText = this._value ? this.inputText : '';\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n /** @hidden */\n isSelected(term) {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n /** @hidden */\n _getGroupItemIds(groupIndex) {\n if (!this.items?.length) {\n return '';\n }\n const groupItemIds = this.items\n .filter((el) => {\n const idWithGroup = el.nativeElement.getAttribute('id-with-group-index');\n const groupIdx = idWithGroup.split('-')[idWithGroup.split('-').length - 1];\n return groupIdx === String(groupIndex);\n })\n .map((el) => el.nativeElement.getAttribute('id'));\n return groupItemIds?.join(' ');\n }\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n _chooseOtherItem(offset) {\n const activeValue = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n _resetDisplayedValues() {\n this.displayedValues = this.dropdownValues || [];\n }\n /** @hidden */\n _addShellbarClass() {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n /** @hidden */\n _defaultDisplay(str) {\n return `${str}`;\n }\n /** @hidden */\n _defaultFilter(contentArray, searchTerm) {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n }\n else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n /** @hidden */\n _handleClickActions(term, shouldClosePopover = true) {\n if (this.closeOnSelect && shouldClosePopover) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n if (this.mobile) {\n this._propagateChange();\n }\n }\n if (shouldClosePopover) {\n this.handleSearchTermChange();\n }\n }\n /** @hidden */\n _getOptionObjectByDisplayedValue(displayValue) {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n /** @hidden */\n _refreshDisplayedValues() {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n }\n else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n /** @hidden */\n _propagateChange() {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n // Do not set new value if theres multiple items that have same label.\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n }\n else if (values.length === 0) {\n this.setValue(this.inputText);\n }\n const thisValue = this.getValue();\n if (typeof thisValue === 'object') {\n this.onChange(thisValue);\n }\n }\n else {\n this.onChange(this.inputText);\n }\n }\n /** @hidden */\n setValue(value) {\n if (this.communicateByObject) {\n this._value = value;\n }\n else {\n this._value = this.displayFn(value);\n }\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {\n containerRef: this._viewContainerRef\n }, {\n injector\n });\n }\n /** @hidden */\n _setupValueSynchronization() {\n if (!this.searchInputElement) {\n return;\n }\n // Listen for focus events to detect programmatic changes\n this._subscriptions.add(fromEvent(this.searchInputElement.nativeElement, 'focus').subscribe(() => {\n this._syncDomValueToModel();\n }));\n }\n /** @hidden */\n _syncDomValueToModel() {\n if (!this.searchInputElement) {\n return;\n }\n const domValue = this.searchInputElement.nativeElement.value;\n if (domValue !== this.inputText) {\n // Update the model and trigger change detection\n this.inputText = domValue;\n this.handleSearchTermChange();\n this._cdRef.detectChanges();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i2.DynamicComponentService }, { token: i2.FocusTrapService }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxComponent, isStandalone: true, selector: \"fd-combobox\", inputs: { comboboxId: \"comboboxId\", inputId: \"inputId\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", required: \"required\", dropdownValues: \"dropdownValues\", filterFn: \"filterFn\", disabled: \"disabled\", placeholder: \"placeholder\", isSearch: \"isSearch\", glyph: \"glyph\", glyphFont: \"glyphFont\", showClearButton: \"showClearButton\", triggers: \"triggers\", closeOnOutsideClick: \"closeOnOutsideClick\", openOnKeyboardEvent: \"openOnKeyboardEvent\", state: \"state\", itemTemplate: \"itemTemplate\", groupFn: \"groupFn\", maxHeight: \"maxHeight\", dropDownMaxWidthPx: \"dropDownMaxWidthPx\", noDropDownMaxWidth: \"noDropDownMaxWidth\", width: \"width\", searchFn: \"searchFn\", highlighting: \"highlighting\", closeOnSelect: \"closeOnSelect\", fillOnSelect: \"fillOnSelect\", autoComplete: \"autoComplete\", fillControlMode: \"fillControlMode\", communicateByObject: \"communicateByObject\", displayFn: \"displayFn\", buttonFocusable: \"buttonFocusable\", clearButtonFocusable: \"clearButtonFocusable\", readOnly: \"readOnly\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", showDropdownButton: \"showDropdownButton\", includes: \"includes\", title: \"title\", byline: \"byline\", tabOutStrategy: \"tabOutStrategy\" }, outputs: { itemClicked: \"itemClicked\", openChange: \"openChange\", inputTextChange: \"inputTextChange\" }, host: { properties: { \"class.fd-combobox-custom-class\": \"true\", \"class.fd-combobox-input\": \"true\", \"class.fd-combobox-custom-class--mobile\": \"mobile\", \"style.width\": \"width\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], queries: [{ propertyName: \"_comboboxItemRenderer\", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: \"listMessages\", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: \"listComponent\", first: true, predicate: ListComponent, descendants: true }, { propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true }, { propertyName: \"popoverComponent\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"inputGroup\", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: \"controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (mousedown)=\\\"_itemMousedown = true\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n (focus)=\\\"onItemFocused(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n ariaRole=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (mousedown)=\\\"_itemMousedown = true\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n (focus)=\\\"onItemFocused(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: ListComponent, selector: \"[fd-list], [fdList]\", inputs: [\"dropdownMode\", \"multiInputMode\", \"mobileMode\", \"hasMessage\", \"noBorder\", \"navigationIndicator\", \"selection\", \"keyboardSupport\", \"byline\", \"subline\", \"theme\", \"unreadIndicator\", \"role\", \"settingsList\", \"settingsListFooter\"], outputs: [\"focusEscapeList\"] }, { kind: \"component\", type: ListItemComponent, selector: \"[fdListItem] ,[fd-list-item]\", inputs: [\"selected\", \"noData\", \"action\", \"interactive\", \"growing\", \"counter\", \"active\", \"unread\", \"byline\", \"ariaRole\", \"id\", \"preventClick\", \"settingsListTpl\"], outputs: [\"keyDown\"], exportAs: [\"fdListItem\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AutoCompleteDirective, selector: \"[fdkAutoComplete]\", inputs: [\"options\", \"inputText\", \"enable\", \"displayFn\", \"matcher\"], outputs: [\"onComplete\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: IconComponent, selector: \"fd-icon\", inputs: [\"glyph\", \"font\", \"color\", \"background\", \"class\", \"ariaLabel\", \"ariaHidden\"] }, { kind: \"ngmodule\", type: ContentDensityModule }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: DisplayFnPipe, name: \"displayFnPipe\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: ListGroupPipe, name: \"listGroupPipe\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n ListGroupHeaderDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (mousedown)=\\\"_itemMousedown = true\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n (focus)=\\\"onItemFocused(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n ariaRole=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (mousedown)=\\\"_itemMousedown = true\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n (focus)=\\\"onItemFocused(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i2.DynamicComponentService }, { type: i2.FocusTrapService }, { type: i3.ContentDensityObserver }], propDecorators: { comboboxId: [{\n type: Input\n }], inputId: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], required: [{\n type: Input\n }], dropdownValues: [{\n type: Input\n }], filterFn: [{\n type: Input\n }], disabled: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], isSearch: [{\n type: Input\n }], glyph: [{\n type: Input\n }], glyphFont: [{\n type: Input\n }], showClearButton: [{\n type: Input\n }], triggers: [{\n type: Input\n }], closeOnOutsideClick: [{\n type: Input\n }], openOnKeyboardEvent: [{\n type: Input\n }], state: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], groupFn: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], dropDownMaxWidthPx: [{\n type: Input\n }], noDropDownMaxWidth: [{\n type: Input\n }], width: [{\n type: Input\n }], searchFn: [{\n type: Input\n }], highlighting: [{\n type: Input\n }], closeOnSelect: [{\n type: Input\n }], fillOnSelect: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], communicateByObject: [{\n type: Input\n }], displayFn: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], clearButtonFocusable: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], showDropdownButton: [{\n type: Input\n }], includes: [{\n type: Input\n }], title: [{\n type: Input\n }], byline: [{\n type: Input\n }], tabOutStrategy: [{\n type: Input\n }], itemClicked: [{\n type: Output\n }], openChange: [{\n type: Output\n }], inputTextChange: [{\n type: Output\n }], listComponent: [{\n type: ViewChild,\n args: [ListComponent]\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement']\n }], popoverComponent: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], inputGroup: [{\n type: ViewChild,\n args: [InputGroupComponent]\n }], listMessages: [{\n type: ContentChildren,\n args: [FD_LIST_MESSAGE_DIRECTIVE]\n }], controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _comboboxItemRenderer: [{\n type: ContentChild,\n args: [ComboboxItemDirective]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUVILHVCQUF1QixFQUV2QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLHVCQUF1QixFQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdqRSxP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TixZQUFZO3NCQURYLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUsvQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSzlCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBSzFDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBS2xCLEtBQUs7c0JBRHJCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQkFDS1NQQUNFLFxuICAgIENPTlRST0wsXG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTlRFUixcbiAgICBFU0NBUEUsXG4gICAgTEVGVF9BUlJPVyxcbiAgICBSSUdIVF9BUlJPVyxcbiAgICBTSElGVCxcbiAgICBTUEFDRSxcbiAgICBUQUIsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVFdmVudCxcbiAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBGb2N1c0VzY2FwZURpcmVjdGlvbixcbiAgICBGb2N1c1RyYXBTZXJ2aWNlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgVHJ1bmNhdGVkVGl0bGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db250cm9sLCByZWdpc3RlckZvcm1JdGVtQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IE1lbnVLZXlib2FyZFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgT3ZlcmxheSwgUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtU3RhdGVzLCBTaW5nbGVEcm9wZG93blZhbHVlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IEF1dG9Db21wbGV0ZURpcmVjdGl2ZSwgRGlzcGxheUZuUGlwZSwgU2VhcmNoSGlnaGxpZ2h0UGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZHVsZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFksIEljb25Db21wb25lbnQsIEljb25Gb250IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7XG4gICAgRkRfTElTVF9NRVNTQUdFX0RJUkVDVElWRSxcbiAgICBMaXN0Q29tcG9uZW50LFxuICAgIExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSxcbiAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICBMaXN0TWVzc2FnZURpcmVjdGl2ZSxcbiAgICBMaXN0VGl0bGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlDb21wb25lbnQsIFBvcG92ZXJDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENvbWJvYm94SXRlbSB9IGZyb20gJy4vY29tYm9ib3gtaXRlbSc7XG5pbXBvcnQgeyBDb21ib2JveEl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuL2NvbWJvYm94LWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbWJvYm94TW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlLCBDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0IH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JvdXBGdW5jdGlvbiwgTGlzdEdyb3VwUGlwZSB9IGZyb20gJy4vbGlzdC1ncm91cC5waXBlJztcbmltcG9ydCB7IEZEX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4vdG9rZW5zJztcblxubGV0IGNvbWJvYm94VW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIEFsbG93cyB1c2VycyB0byBmaWx0ZXIgdGhyb3VnaCByZXN1bHRzIGFuZCBzZWxlY3QgYSB2YWx1ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWNvbWJvYm94XG4gKiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gKiAgICAgIFtkcm9wZG93blZhbHVlc109XCJkcm9wZG93blZhbHVlc1wiXG4gKiAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBzb21lIHRleHQuLi5cIj5cbiAqIDwvZmQtY29tYm9ib3g+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKENvbWJvYm94Q29tcG9uZW50KSxcbiAgICAgICAgTWVudUtleWJvYXJkU2VydmljZSxcbiAgICAgICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfQ09NQk9CT1hfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IENvbWJvYm94Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3NdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWlucHV0XSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1jdXN0b20tY2xhc3MtLW1vYmlsZV0nOiAnbW9iaWxlJyxcbiAgICAgICAgJ1tzdHlsZS53aWR0aF0nOiAnd2lkdGgnXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgICAgICBMaXN0Q29tcG9uZW50LFxuICAgICAgICBMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgTGlzdFRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Db21wbGV0ZURpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBDb250ZW50RGVuc2l0eU1vZHVsZSxcbiAgICAgICAgRGlzcGxheUZuUGlwZSxcbiAgICAgICAgU2VhcmNoSGlnaGxpZ2h0UGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBMaXN0R3JvdXBQaXBlLFxuICAgICAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hDb21wb25lbnQ8VCA9IGFueT5cbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIENvbWJvYm94SW50ZXJmYWNlLFxuICAgICAgICBTaW5nbGVEcm9wZG93blZhbHVlQ29udHJvbCxcbiAgICAgICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICAgIE9uSW5pdCxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBPbkRlc3Ryb3ksXG4gICAgICAgIEZvcm1JdGVtQ29udHJvbFxue1xuICAgIC8qKiBJZCBmb3IgdGhlIENvbWJvYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tYm9ib3hJZCA9IGBmZC1jb21ib2JveC0ke2NvbWJvYm94VW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIElkIGF0dHJpYnV0ZSBmb3IgaW5wdXQgZWxlbWVudCBpbnNpZGUgQ29tYm9ib3ggY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkID0gJyc7XG5cbiAgICAvKiogQXJpYS1sYWJlbCBmb3IgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQXJpYS1MYWJlbGxlZGJ5IGZvciBlbGVtZW50IGRlc2NyaWJpbmcgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogVmFsdWVzIHRvIGJlIGZpbHRlcmVkIGluIHRoZSBzZWFyY2ggaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBkcm9wZG93blZhbHVlczogVFtdID0gW107XG5cbiAgICAvKiogRmlsdGVyIGZ1bmN0aW9uLiBBY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgYW5kIGEgc2VhcmNoIHRlcm0gYXMgYXJndW1lbnRzXG4gICAgICogYW5kIHJldHVybnMgYSBzdHJpbmcuIFNlZSBzZWFyY2ggaW5wdXQgZXhhbXBsZXMgZm9yIGRldGFpbHMuICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJGbiA9IHRoaXMuX2RlZmF1bHRGaWx0ZXI7XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2VhcmNoIGlucHV0IGlzIGRpc2FibGVkLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIFBsYWNlaG9sZGVyIG9mIHRoZSBzZWFyY2ggaW5wdXQuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIENvbWJvYm94IGlzIGEgU2VhcmNoIEZpZWxkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1NlYXJjaCA9IGZhbHNlO1xuXG4gICAgLyoqIEljb24gdG8gZGlzcGxheSBpbiB0aGUgcmlnaHQtc2lkZSBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaCA9ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnO1xuXG4gICAgLyoqIEdseXBoIGZvbnQgZmFtaWx5ICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaEZvbnQ6IEljb25Gb250ID0gRkRfREVGQVVMVF9JQ09OX0ZPTlRfRkFNSUxZO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBzaG93IHRoZSBjbGVhciBzZWFyY2ggdGVybSBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dDbGVhckJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgb3B0aW9ucyBwb3BvdmVyLlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyaWdnZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBjbG9zZSwgd2hlbiBhIGNsaWNrIGlzIHBlcmZvcm1lZCBvdXRzaWRlIGl0cyBib3VuZGFyaWVzLiBUcnVlIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25PdXRzaWRlQ2xpY2sgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIG9wZW4sIHdoZW4gYW55IGtleSBpcyBwcmVzc2VkIGluIGlucHV0IChleGNlcHQgRXNjYXBlLCBTcGFjZSwgRW50ZXIpLiBUcnVlIGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG9wZW5PbktleWJvYXJkRXZlbnQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBjb250cm9sIC0gYXBwbGllcyBjc3MgY2xhc3Nlcy5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdGU/OiBGb3JtU3RhdGVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRlbXBsYXRlIHdpdGggd2hpY2ggdG8gZGlzcGxheSB0aGUgaW5kaXZpZHVhbCBsaXN0ZWQgaXRlbXMuXG4gICAgICogVXNlIGl0IGJ5IHBhc3NpbmcgYW4gbmctdGVtcGxhdGUgd2l0aCBpbXBsaWNpdCBjb250ZW50LiBTZWUgZXhhbXBsZXMgZm9yIG1vcmUgaW5mby5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPj47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGhhbmRsZSBncm91cGluZyBvZiBpdGVtcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwRm46IE51bGxhYmxlPEdyb3VwRnVuY3Rpb24+O1xuXG4gICAgLyoqIE1heCBoZWlnaHQgb2YgdGhlIHBvcG92ZXIuIEFueSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aWxsIGJlIGFjY2Vzc2libGUgdGhyb3VnaCBzY3JvbGxpbmcuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQgPSAnNTB2aCc7XG5cbiAgICAvKiogTWF4IHdpZHRoIG9mIHRoZSBkcm9wZG93biBpbiBwaXhlbHMuIERlZmF1bHQgaXMgNjQwcHggKDQwcmVtKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BEb3duTWF4V2lkdGhQeCA9IDY0MDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBoYXZlIG1heCB3aWR0aC5cbiAgICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGUgZHJvcGRvd24gdG8gdGFrZSB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogRGVmYXVsdCBpcyBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Ecm9wRG93bk1heFdpZHRoID0gZmFsc2U7XG5cbiAgICAvKiogQ3VzdG9tIHdpZHRoIG9mIHRoZSBjb250cm9sLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2VhcmNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgRW50ZXIga2V5IGlzIHByZXNzZWQgb24gdGhlIG1haW4gaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hGbjogKCkgPT4gdm9pZDtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBtYXRjaGluZyBzdHJpbmcgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGR1cmluZyBmaWx0cmF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0aW5nID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIHNob3VsZCBjbG9zZSB3aGVuIGEgdXNlciBzZWxlY3RzIGEgcmVzdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPblNlbGVjdCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSByZXN1bHQgcGlja2VkIGJ5IHRoZSB1c2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsbE9uU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIGJlIGVuYWJsZWQ7IEVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b0NvbXBsZXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogKiBgYXQtbGVhc3RgIHdpbGwgYXBwbHkgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLiAtIERlZmF1bHRcbiAgICAgKiAqIGBlcXVhbGAgd2lsbCBhcHBseSBhIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKiBEZWZpbmVzIGlmIGNvbWJvYm94IHNob3VsZCBiZWhhdmUgc2FtZSBhcyBkcm9wZG93bi4gV2hlbiBpdCdzIGVuYWJsZWQgd3JpdGluZyBpbnNpZGUgdGV4dCBpbnB1dCB3b24ndFxuICAgICAqIHRyaWdnZXIgb25DaGFuZ2UgZnVuY3Rpb24sIHVudGlsIGl0IG1hdGNoZXMgb25lIG9mIGRpc3BsYXllZCBkcm9wZG93biB2YWx1ZXMuIEFsc28gY29tbXVuaWNhdGluZyB3aXRoIGNvbWJvYm94XG4gICAgICogY2FuIGJlIGFjaGlldmVkIG9ubHkgYnkgb2JqZWN0cyB3aXRoIHNhbWUgdHlwZSBhcyBkcm9wZG93blZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBjb21tdW5pY2F0ZUJ5T2JqZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogRGlzcGxheSBmdW5jdGlvbi4gQWNjZXB0cyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGVcbiAgICAgKiBpdGVtcyBwYXNzZWQgdG8gZHJvcGRvd25WYWx1ZXMgYXMgYXJndW1lbnQsIGFuZCBvdXRwdXRzIGEgc3RyaW5nLlxuICAgICAqIEFuIGFycm93IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgKnRoaXMqIGtleXdvcmQgaW4gdGhlIGNhbGxpbmcgY29tcG9uZW50LlxuICAgICAqIFNlZSBzZWFyY2ggaW5wdXQgZXhhbXBsZXMgZm9yIGRldGFpbHMuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Rm4gPSB0aGlzLl9kZWZhdWx0RGlzcGxheTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgQWRkT24gQnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGVcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGNsZWFyIGJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsZWFyQnV0dG9uRm9jdXNhYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBpcyByZWFkb25seS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIGJlIGJ1aWx0IG9uIG1vYmlsZSBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBNdWx0aSBJbnB1dCBNb2JpbGUgQ29uZmlndXJhdGlvbiwgaXQncyBhcHBsaWVkIG9ubHksIHdoZW4gbW9iaWxlIGlzIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGFkZG9uIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dEcm9wZG93bkJ1dHRvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJldHVybiByZXN1bHRzIHdoZXJlIHRoZSBpbnB1dCBtYXRjaGVzIHRoZSBlbnRpcmUgc3RyaW5nLiBCeSBkZWZhdWx0LCBvbmx5IHJlc3VsdHMgdGhhdCBzdGFydFxuICAgICAqIHdpdGggdGhlIGlucHV0IHNlYXJjaCB0ZXJtIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbmNsdWRlcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvb2x0aXAgZm9yIHRoZSBtdWx0aS1pbnB1dCBpY29uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXRlbSBvcHRpb25zIHNob3VsZCBiZSByZW5kZXJlZCBhcyBieWxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBieWxpbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0byBwZXJmb3JtIHdoZW4gdXNlciBzaGlmdHMgZm9jdXMgZnJvbSB0aGUgZHJvcGRvd24uXG4gICAgICogLSBgY2xvc2VgIHdpbGwgY2xvc2UgdGhlIGRyb3Bkb3duIHByZXNlcnZpbmcgcHJldmlvdXNseSBzZWxlY3RlZCB2YWx1ZS5cbiAgICAgKiAtIGBjbG9zZUFuZFNlbGVjdGAgd2lsbCBjbG9zZSB0aGUgZHJvcGRvd24gYW5kIHNlbGVjdCBsYXN0IGZvY3VzZWQgZHJvcGRvd24gaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhYk91dFN0cmF0ZWd5OiAnY2xvc2UnIHwgJ2Nsb3NlQW5kU2VsZWN0JyA9ICdjbG9zZUFuZFNlbGVjdCc7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgY2xpY2tlZC4gVXNlICokZXZlbnQqIHRvIHJldHJpZXZlIGl0LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGl0ZW1DbGlja2VkOiBFdmVudEVtaXR0ZXI8Q29tYm9ib3hJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tYm9ib3hJdGVtPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gdGhlIGNvbWJvYm94J3MgcG9wb3ZlciBib2R5IGlzIG9wZW5lZCBvciBjbG9zZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBvcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBpbnB1dCB0ZXh0IGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgaW5wdXRUZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKExpc3RDb21wb25lbnQpXG4gICAgbGlzdENvbXBvbmVudDogTGlzdENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXRFbGVtZW50JylcbiAgICBzZWFyY2hJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgICBwb3BvdmVyQ29tcG9uZW50OiBQb3BvdmVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKElucHV0R3JvdXBDb21wb25lbnQpXG4gICAgaW5wdXRHcm91cDogSW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGRF9MSVNUX01FU1NBR0VfRElSRUNUSVZFKVxuICAgIGxpc3RNZXNzYWdlczogUXVlcnlMaXN0PExpc3RNZXNzYWdlRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY29udHJvbFRlbXBsYXRlJylcbiAgICBjb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGlzdFRlbXBsYXRlJylcbiAgICBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChDb21ib2JveEl0ZW1EaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tYm9ib3hJdGVtUmVuZGVyZXI6IENvbWJvYm94SXRlbURpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbignaXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBtYXRjaGluZyBzdHJpbmcgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGFmdGVyIGNvbWJvYm94IHZhbHVlIGlzIHNlbGVjdGVkLiAqL1xuICAgIGZpbHRlckhpZ2hsaWdodCA9IHRydWU7XG5cbiAgICAvKiogS2V5cywgdGhhdCB3b24ndCB0cmlnZ2VyIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0ZSwgd2hlbiBkaXNwYXRjaGVkIG9uIHNlYXJjaCBpbnB1dCAqL1xuICAgIHJlYWRvbmx5IG5vbk9wZW5pbmdLZXlzOiBudW1iZXJbXSA9IFtcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgTEVGVF9BUlJPVyxcbiAgICAgICAgUklHSFRfQVJST1csXG4gICAgICAgIERPV05fQVJST1csXG4gICAgICAgIFVQX0FSUk9XLFxuICAgICAgICBDT05UUk9MLFxuICAgICAgICBUQUIsXG4gICAgICAgIFNISUZUXG4gICAgXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3JlcG9zaXRpb25TY3JvbGxTdHJhdGVneTogUmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZGVmYXVsdEZvbnRGYW1pbHkgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggaXMgb3BlbmVkLiAqL1xuICAgIG9wZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBjb3VwIGlzIGluIHRoZSBzaGVsbGJhci4gT25seSBmb3IgaW50ZXJuYWwgdXNlIGJ5IGNvbWJvYm94IGNvbXBvbmVudFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpblNoZWxsYmFyID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpc3BsYXllZFZhbHVlczogYW55W10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaW5wdXRUZXh0VmFsdWUgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xlYXJJbnB1dEJ0bkZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jdXN0b21SZW5kZXJlcigpOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0PFQ+Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tYm9ib3hJdGVtUmVuZGVyZXI/LnRlbXBsYXRlUmVmIHx8IHRoaXMuaXRlbVRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1Nb3VzZWRvd24gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2U6IEZvY3VzVHJhcFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3JlcG9zaXRpb25TY3JvbGxTdHJhdGVneSA9IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgYXV0b0Nsb3NlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVmcmVzaERpc3BsYXllZFZhbHVlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93blZhbHVlcyAmJiAoY2hhbmdlcy5kcm9wZG93blZhbHVlcyB8fCBjaGFuZ2VzLnNlYXJjaFRlcm0pKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoRGlzcGxheWVkVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZFNoZWxsYmFyQ2xhc3MoKTtcblxuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0dXBWYWx1ZVN5bmNocm9uaXphdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnZnJvbVBhc3RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3Blbk9uS2V5Ym9hcmRFdmVudCAmJlxuICAgICAgICAgICAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAgICAgICAgICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5ub25PcGVuaW5nS2V5cylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZSAmJiBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2NvbnRyb2wnKSAmJiAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEJBQ0tTUEFDRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkl0ZW1LZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtTW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUZvY3VzZWQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2l0ZW1Nb3VzZWRvd24gJiYgIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2l0ZW1Nb3VzZWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZTogYW55LCBzaG91bGRDbG9zZVBvcG92ZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KChfdmFsdWUpID0+IF92YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKHZhbHVlLCBzaG91bGRDbG9zZVBvcG92ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQuZW1pdCh7IGl0ZW06IHZhbHVlLCBpbmRleCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBIYW5kbGUgZGlhbG9nIGRpc21pc3NpbmcsIGNsb3NlcyBwb3BvdmVyIGFuZCBzZXRzIGJhY2t1cCBkYXRhLiAqL1xuICAgIGRpYWxvZ0Rpc21pc3ModGVybTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5kaXNwbGF5Rm4odGVybSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGVybSk7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGRpYWxvZyBhcHByb3ZhbCwgY2xvc2VzIHBvcG92ZXIgYW5kIHByb3BhZ2F0ZXMgZGF0YSBjaGFuZ2VzLiAqL1xuICAgIGRpYWxvZ0FwcHJvdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIHRydWUgdmFsdWUgZW1wdHkgKi9cbiAgICBnZXQgaXNFbXB0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaW5wdXRUZXh0IHx8IHRoaXMuaW5wdXRUZXh0Py50cmltKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKiBJbnB1dCB0ZXh0IG9mIHRoZSBpbnB1dC4gKi9cbiAgICBzZXQgaW5wdXRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0VGV4dENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGlucHV0VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFRleHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRoZSBnbHlwaCB2YWx1ZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjb21ib2JveCBpcyB1c2VkIGFzIGEgc2VhcmNoIGZpZWxkIG9yIG5vdC4gKi9cbiAgICBnZXQgZ2x5cGhWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NlYXJjaCA/ICdzZWFyY2gnIDogdGhpcy5nbHlwaDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5pbnB1dFRleHRDaGFuZ2UuZW1pdCgnJyk7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHRWYWx1ZSA9IHRoaXMuZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudCAqL1xuICAgIGhhbmRsZUxpc3RGb2N1c0VzY2FwZShkaXJlY3Rpb246IEZvY3VzRXNjYXBlRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmZpbHRlckZuKHRoaXMuZHJvcGRvd25WYWx1ZXMsIHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50Py5yZWZyZXNoUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uUHJpbWFyeUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICAvLyBQcmV2ZW50IHByaW1hcnkgYnV0dG9uIGNsaWNrIGJlaGF2aW91ciBvbiBtb2JpbGVzXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXNldERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSghdGhpcy5vcGVuKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmZpbHRlckhpZ2hsaWdodCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc09wZW5DaGFuZ2VIYW5kbGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIC8qKiBSZXNldCBkaXNwbGF5ZWQgdmFsdWVzIG9uIGV2ZXJ5IG1vYmlsZSBvcGVuICovXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSAmJiAhdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuID0gaXNPcGVuO1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoaXNPcGVuKTtcblxuICAgICAgICAgICAgLyoqIEFsbG93IGNvbWJvYm94IHVwIGFuZCBkb3duIGFycm93cyB0byB3b3JrIHByb3Blcmx5IHdoZW4gY29tYm9ib3ggaXMgaW5zaWRlIGEgZGlhbG9nIHdpdGggYSB0cmFwcGVkIGZvY3VzICovXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZS5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZS51bnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9wZW4gJiYgIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IGhhbmRsZXMgY29tcGxldGUgZXZlbnQgZnJvbSBhdXRvIGNvbXBsZXRlIGRpcmVjdGl2ZSwgc2V0dGluZyB0aGUgbmV3IHZhbHVlLCBhbmQgY2xvc2luZyBwb3BvdmVyICovXG4gICAgaGFuZGxlQXV0b0NvbXBsZXRlKGV2ZW50OiBBdXRvQ29tcGxldGVFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQgIT09IGV2ZW50LnRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gZXZlbnQudGVybTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5mb3JjZUNsb3NlICYmIHRoaXMuaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRvQ29tcGxldGUoe1xuICAgICAgICAgICAgICAgIHRlcm06IHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsXG4gICAgICAgICAgICAgICAgZm9yY2VDbG9zZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEJ0bkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xlYXJJbnB1dEJ0bkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJJbnB1dEJ0bkZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQ3VycmVudCBzZWxlY3QgdmFsdWUgKi9cbiAgICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5fdmFsdWUgPyB0aGlzLmlucHV0VGV4dCA6ICcnO1xuICAgICAgICBpZiAodGhpcy50YWJPdXRTdHJhdGVneSA9PT0gJ2Nsb3NlQW5kU2VsZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB0aGlzLmxpc3RDb21wb25lbnQuZ2V0QWN0aXZlSXRlbSgpO1xuICAgICAgICAgICAgaWYgKGZvY3VzZWRJdGVtICYmICF0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrQWN0aW9ucyhmb2N1c2VkSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNTZWxlY3RlZCh0ZXJtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGVybVZhbHVlID0gdGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0ID8gdGVybSA6IHRoaXMuZGlzcGxheUZuKHRlcm0pO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpID09PSB0ZXJtVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cEl0ZW1JZHMgPSB0aGlzLml0ZW1zXG4gICAgICAgICAgICAuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkV2l0aEdyb3VwID0gZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkLXdpdGgtZ3JvdXAtaW5kZXgnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cElkeCA9IGlkV2l0aEdyb3VwLnNwbGl0KCctJylbaWRXaXRoR3JvdXAuc3BsaXQoJy0nKS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBJZHggPT09IFN0cmluZyhncm91cEluZGV4KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKChlbCkgPT4gZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xuXG4gICAgICAgIHJldHVybiBncm91cEl0ZW1JZHM/LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcGlja3Mgb3RoZXIgdmFsdWUgbW92ZWQgZnJvbSBjdXJyZW50IG9uZSBieSBvZmZzZXQsIGNhbGxlZCBvbmx5IHdoZW4gY29tYm9ib3ggaXMgY2xvc2VkICovXG4gICAgcHJpdmF0ZSBfY2hvb3NlT3RoZXJJdGVtKG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlOiBhbnkgPSB0aGlzLl9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKHRoaXMuaW5wdXRUZXh0VmFsdWUpWzBdO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gdGhpcy5kcm9wZG93blZhbHVlcy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gYWN0aXZlVmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5kcm9wZG93blZhbHVlc1tpbmRleCArIG9mZnNldF0pIHtcbiAgICAgICAgICAgIHRoaXMub25NZW51Q2xpY2tIYW5kbGVyKHRoaXMuZHJvcGRvd25WYWx1ZXNbaW5kZXggKyBvZmZzZXRdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXNldCBmaWx0ZXJpbmcgZm9yIGRpc3BsYXllZCB2YWx1ZXMuIEl0IG92ZXJyaWRlcyBkaXNwbGF5ZWQgdmFsdWVzIGJ5IGFsbCBwb3NzaWJsZSBkcm9wZG93biB2YWx1ZXMgKi9cbiAgICBwcml2YXRlIF9yZXNldERpc3BsYXllZFZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmRyb3Bkb3duVmFsdWVzIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkU2hlbGxiYXJDbGFzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5TaGVsbGJhcikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC1zaGVsbGJhcl9faW5wdXQtZ3JvdXAtaW5wdXQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuc2V0SW5TaGVsbGJhcih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdERpc3BsYXkoc3RyOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7c3RyfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0RmlsdGVyKGNvbnRlbnRBcnJheTogYW55W10sIHNlYXJjaFRlcm06IGFueSk6IGFueVtdIHtcbiAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHNlYXJjaFRlcm0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaFRlcm0udG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50QXJyYXkuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVybSA9IHRoaXMuZGlzcGxheUZuKGl0ZW0pLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluY2x1ZGVzID8gdGVybS5pbmNsdWRlcyhzZWFyY2hMb3dlcikgOiB0ZXJtLnN0YXJ0c1dpdGgoc2VhcmNoTG93ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWFyY2hUZXJtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gPT09IHNlYXJjaFRlcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50QXJyYXkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVDbGlja0FjdGlvbnModGVybTogYW55LCBzaG91bGRDbG9zZVBvcG92ZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QgJiYgc2hvdWxkQ2xvc2VQb3BvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsbE9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0VGV4dDtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZENsb3NlUG9wb3Zlcikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUoZGlzcGxheVZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wZG93blZhbHVlcy5maWx0ZXIoKHZhbHVlKSA9PiB0aGlzLmRpc3BsYXlGbih2YWx1ZSkgPT09IGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoRGlzcGxheWVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5fZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgICAgICAvLyBEbyBub3Qgc2V0IG5ldyB2YWx1ZSBpZiB0aGVyZXMgbXVsdGlwbGUgaXRlbXMgdGhhdCBoYXZlIHNhbWUgbGFiZWwuXG4gICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmRpc3BsYXlGbih2YWx1ZXNbMF0pICE9PSB0aGlzLmRpc3BsYXlGbih0aGlzLmdldFZhbHVlKCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZXNbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aGlzVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXNWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGlzcGxheUZuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0VXBNb2JpbGVNb2RlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTUJPQk9YX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7IGxpc3RUZW1wbGF0ZTogdGhpcy5saXN0VGVtcGxhdGUsIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5jb250cm9sVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIENvbWJvYm94TW9iaWxlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lclJlZjogdGhpcy5fdmlld0NvbnRhaW5lclJlZlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBWYWx1ZVN5bmNocm9uaXphdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTGlzdGVuIGZvciBmb2N1cyBldmVudHMgdG8gZGV0ZWN0IHByb2dyYW1tYXRpYyBjaGFuZ2VzXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY0RvbVZhbHVlVG9Nb2RlbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N5bmNEb21WYWx1ZVRvTW9kZWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvbVZhbHVlID0gdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYgKGRvbVZhbHVlICE9PSB0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RlbCBhbmQgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGRvbVZhbHVlO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9iaWxlID8gbW9iaWxlVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXBvcG92ZXItY3VzdG9tLWxpc3RcIlxuICAgICAgICBbY2xhc3MuZmQtY29tYm9ib3gtZnVsbC13aWR0aF09XCJpc1NlYXJjaCB8fCBzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBbaXNPcGVuXT1cIm9wZW4gJiYgZGlzcGxheWVkVmFsdWVzICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGUoJGV2ZW50KVwiXG4gICAgICAgIFtmaWxsQ29udHJvbE1vZGVdPVwiZmlsbENvbnRyb2xNb2RlXCJcbiAgICAgICAgW3Njcm9sbFN0cmF0ZWd5XT1cIl9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3lcIlxuICAgICAgICBbZm9jdXNUcmFwcGVkXT1cInRydWVcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwidHJpZ2dlcnNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZE9ubHlcIlxuICAgICAgICBbbWF4V2lkdGhdPVwiIW1vYmlsZSAmJiBub0Ryb3BEb3duTWF4V2lkdGggPyBudWxsIDogZHJvcERvd25NYXhXaWR0aFB4XCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoICYmICcxMDAlJ1wiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImNsb3NlT25PdXRzaWRlQ2xpY2tcIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keSBbaGlkZGVuXT1cIiFkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSBsZXQtdGVybT1cInRlcm1cIiAjaXRlbVNvdXJjZT5cbiAgICBAaWYgKCFfY3VzdG9tUmVuZGVyZXIpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGZkLWxpc3QtdGl0bGVcbiAgICAgICAgICAgIGZkVHJ1bmNhdGVkVGl0bGVcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidGVybSB8IGRpc3BsYXlGblBpcGU6IGRpc3BsYXlGbiB8IGhpZ2hsaWdodDogaW5wdXRUZXh0IDogaGlnaGxpZ2h0aW5nICYmIGZpbHRlckhpZ2hsaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9jdXN0b21SZW5kZXJlclwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRlcm0sIGlucHV0VGV4dDogaW5wdXRUZXh0IH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgW2J1dHRvbl09XCJzaG93RHJvcGRvd25CdXR0b25cIlxuICAgICAgICBbZ2x5cGhdPVwic2hvd0Ryb3Bkb3duQnV0dG9uID8gZ2x5cGhWYWx1ZSA6IG51bGxcIlxuICAgICAgICBbZ2x5cGhGb250XT1cImlzU2VhcmNoID8gX2RlZmF1bHRGb250RmFtaWx5IDogZ2x5cGhGb250XCJcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aCA+IDBcIlxuICAgICAgICBbc2hvd0ZvY3VzXT1cIiFjbGVhcklucHV0QnRuRm9jdXNlZFwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJhcmlhTGFiZWwgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBbaWNvblRpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJvblByaW1hcnlCdXR0b25DbGljaygpXCJcbiAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBpc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSlcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjc2VhcmNoSW5wdXRFbGVtZW50XG4gICAgICAgICAgICBmZGtBdXRvQ29tcGxldGVcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1hdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyAnbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhbW9iaWxlICYmIG9wZW4gJiYgZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJlYWRPbmx5IHx8IGRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgIFtlbmFibGVdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5Rm5cIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgICAgW2lucHV0VGV4dF09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAob25Db21wbGV0ZSk9XCJoYW5kbGVBdXRvQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCdmcm9tUGFzdGUnKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgICAgLz5cbiAgICAgICAgQGlmICgoaXNTZWFyY2ggfHwgc2hvd0NsZWFyQnV0dG9uKSAmJiBpbnB1dFRleHQgJiYgaW5wdXRUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYWRkb24gZmQtaW5wdXQtZ3JvdXBfX2FkZG9uLS1idXR0b25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zaGVsbGJhcl9faW5wdXQtZ3JvdXAtYWRkb25dPVwiaW5TaGVsbGJhclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dC1ncm91cF9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiaW5TaGVsbGJhciA/ICdzdGFuZGFyZCcgOiAndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zaGVsbGJhcl9fYnV0dG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjbGVhckJ1dHRvbkZvY3VzYWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhcklucHV0QnRuRm9jdXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cImNsZWFySW5wdXRCdG5CbHVyKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZUNsZWFyU2VhcmNoVGVybSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiZGVjbGluZVwiPjwvZmQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG4gICAgPGRpdiBbaWRdPVwiY29tYm9ib3hJZCArICctbGlzdC1yZXN1bHRzJ1wiIGNsYXNzPVwiZmQtY29tYm9ib3gtY291bnQtbGlzdC1yZXN1bHRzXCI+XG4gICAgICAgIHt7IGRpc3BsYXllZFZhbHVlcy5sZW5ndGggfHwgMCB9fSByZXN1bHQgbGlzdCBpdGVtc1xuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRlbXBsYXRlPlxuICAgIDx1bFxuICAgICAgICBmZC1saXN0XG4gICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtY3VzdG9tLWxpc3RcIlxuICAgICAgICBbZHJvcGRvd25Nb2RlXT1cInRydWVcIlxuICAgICAgICBbaWRdPVwiY29tYm9ib3hJZCArICctcmVzdWx0J1wiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImNvbWJvYm94SWQgKyAnLXNlYXJjaCdcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0XT1cIiFtb2JpbGUgJiYgbWF4SGVpZ2h0XCJcbiAgICAgICAgW2hhc01lc3NhZ2VdPVwibGlzdE1lc3NhZ2VzICYmIGxpc3RNZXNzYWdlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgW2J5bGluZV09XCJieWxpbmVcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIChrZXlkb3duLnRhYik9XCJfY2xvc2UoKVwiXG4gICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJfY2xvc2UoKVwiXG4gICAgICAgIChmb2N1c0VzY2FwZUxpc3QpPVwiaGFuZGxlTGlzdEZvY3VzRXNjYXBlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICBAaWYgKGdyb3VwRm4pIHtcbiAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIGRpc3BsYXllZFZhbHVlcyB8IGxpc3RHcm91cFBpcGU6IGdyb3VwRm47IHRyYWNrIGdyb3VwLmtleTsgbGV0IGdyb3VwSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtZ3JvdXAtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFSb2xlPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZU11bHRpQ29tYm9Cb3gubGlzdEdyb3VwSGVhZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cIl9nZXRHcm91cEl0ZW1JZHMoZ3JvdXBJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdyb3VwLmtleVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IGdyb3VwLmtleSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIEBmb3IgKHRlcm0gb2YgZ3JvdXAudmFsdWU7IHRyYWNrICRpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAjaXRlbT1cImZkTGlzdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYVJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wbGFjZWhvbGRlcl09XCJncm91cC5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cImdyb3VwLnZhbHVlLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT1cImluZGV4ICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZC13aXRoLWdyb3VwLWluZGV4XT1cIml0ZW0uaWQgKyAnLWdyb3VwLScgKyBncm91cEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJpc1NlbGVjdGVkKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgdGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJfaXRlbU1vdXNlZG93biA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JdGVtRm9jdXNlZCh0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1Tb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRlcm06IHRlcm0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGZvciAodGVybSBvZiBkaXNwbGF5ZWRWYWx1ZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgYXJpYVJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJfaXRlbU1vdXNlZG93biA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NZW51Q2xpY2tIYW5kbGVyKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRlcm1cIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JdGVtRm9jdXNlZCh0ZXJtKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1Tb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdGVybTogdGVybSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuIl19","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\nexport class ComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe], exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBS0gsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSGIsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxhQUN2RCxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhOytHQUV4RCxjQUFjLFlBSGIsaUJBQWlCOzsyRkFHbEIsY0FBYztrQkFKMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUM7b0JBQ2xFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztpQkFDckUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RHcm91cFBpcGUgfSBmcm9tICcuL2xpc3QtZ3JvdXAucGlwZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBgQ29tYm9ib3hDb21wb25lbnRgIGltcG9ydCBpbnN0ZWFkLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtRGlyZWN0aXZlLCBMaXN0R3JvdXBQaXBlXSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hDb21wb25lbnQsIENvbWJvYm94SXRlbURpcmVjdGl2ZSwgTGlzdEdyb3VwUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}