@fundamental-ngx/core 0.58.0-rc.69 → 0.58.0-rc.70
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.
- package/button/index.d.ts +1 -1
- package/card/index.d.ts +8 -4
- package/dialog/index.d.ts +2 -2
- package/feed-input/index.d.ts +1 -1
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/form/index.d.ts +2 -2
- package/input-group/index.d.ts +1 -1
- package/list/index.d.ts +4 -4
- package/menu/index.d.ts +2 -2
- package/message-box/index.d.ts +1 -1
- package/multi-combobox/index.d.ts +2 -2
- package/multi-input/index.d.ts +1 -1
- package/nested-list/index.d.ts +11 -11
- package/overflow-layout/index.d.ts +4 -4
- package/package.json +40 -40
- package/popover/index.d.ts +2 -2
- package/segmented-button/index.d.ts +3 -3
- package/table/index.d.ts +2 -2
- package/tabs/index.d.ts +3 -3
- package/time/index.d.ts +1 -1
- package/time-picker/index.d.ts +1 -1
- package/toolbar/index.d.ts +1 -1
- package/tree/index.d.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-multi-combobox.mjs","sources":["../tmp-esm2022/multi-combobox/multi-announcer/multi-announcer.directive.js","../tmp-esm2022/multi-combobox/helpers.js","../tmp-esm2022/multi-combobox/models/selection-change.event.js","../tmp-esm2022/multi-combobox/multi-combobox-config.js","../tmp-esm2022/multi-combobox/base-multi-combobox.class.js","../tmp-esm2022/multi-combobox/multi-combobox.token.js","../tmp-esm2022/multi-combobox/mobile/mobile-multi-combobox.component.js","../tmp-esm2022/multi-combobox/data-source/multi-combobox-data-source.js","../tmp-esm2022/multi-combobox/data-source/multi-combobox-data-source-parser.js","../tmp-esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.js","../tmp-esm2022/multi-combobox/multi-combobox.component.js","../tmp-esm2022/multi-combobox/multi-combobox.module.js","../tmp-esm2022/multi-combobox/fundamental-ngx-core-multi-combobox.js"],"sourcesContent":["import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentChildren, Directive, HostListener, inject, Input, QueryList } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent } from '@fundamental-ngx/core/token';\nimport { resolveTranslationSyncFn } from '@fundamental-ngx/i18n';\nimport * as i0 from \"@angular/core\";\nexport class MultiAnnouncerDirective {\n constructor() {\n /** @hidden */\n this._noResultsAnnounced = false;\n /** @hidden */\n this._resultsAnnounced = false;\n /** @hidden */\n this._announcement = '';\n /** @hidden */\n this._liveAnnouncer = inject(LiveAnnouncer);\n /** @hidden */\n this._resolveTranslation = resolveTranslationSyncFn();\n }\n /** @hidden */\n _makeSearchTermChangeAnnouncements(event) {\n if (KeyUtil.isKeyType(event, 'alphabetical') || KeyUtil.isKeyType(event, 'numeric')) {\n this._liveAnnouncer.clear();\n const count = this.multiAnnouncerOptions?.length;\n if (!count && !this._noResultsAnnounced) {\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.noResults'));\n this._noResultsAnnounced = true;\n this._resultsAnnounced = false;\n }\n else if (count) {\n const trKey = count === 1 ? 'coreMultiInput.countListResultsSingular' : 'coreMultiInput.countListResultsPlural';\n this._buildAnnouncement(this._resolveTranslation(trKey, { count }));\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.navigateSelectionsWithArrows'));\n if (!this._resultsAnnounced) {\n this._noResultsAnnounced = false;\n this._resultsAnnounced = true;\n }\n }\n if (this._tokens?.length) {\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.escapeNavigateTokens'));\n }\n this._makeAnnouncement(this._announcement);\n }\n }\n /** @hidden */\n _buildAnnouncement(message) {\n this._announcement = this._announcement + message + ' ';\n }\n /** @hidden */\n async _makeAnnouncement(message) {\n await this._liveAnnouncer.announce(message, 'assertive').then(() => {\n this._announcement = '';\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiAnnouncerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: MultiAnnouncerDirective, isStandalone: true, selector: \"[fdMultiAnnouncer]\", inputs: { multiAnnouncerOptions: \"multiAnnouncerOptions\" }, host: { listeners: { \"keyup\": \"_makeSearchTermChangeAnnouncements($event)\" } }, queries: [{ propertyName: \"_tokens\", predicate: TokenComponent, descendants: true }], exportAs: [\"fdMultiAnnouncer\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiAnnouncerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdMultiAnnouncer]',\n exportAs: 'fdMultiAnnouncer',\n standalone: true\n }]\n }], propDecorators: { multiAnnouncerOptions: [{\n type: Input\n }], _tokens: [{\n type: ContentChildren,\n args: [TokenComponent, { descendants: true }]\n }], _makeSearchTermChangeAnnouncements: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tdWx0aS1hbm5vdW5jZXIvbXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUEyQix3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU8xRixNQUFNLE9BQU8sdUJBQXVCO0lBTHBDO1FBY0ksY0FBYztRQUNOLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQyxjQUFjO1FBQ04sc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLGNBQWM7UUFDTixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUUzQixjQUFjO1FBQ0csbUJBQWMsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZFLGNBQWM7UUFDTix3QkFBbUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0tBd0M1RDtJQXRDRyxjQUFjO0lBRU4sa0NBQWtDLENBQUMsS0FBb0I7UUFDM0QsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLEtBQUssR0FDUCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDZDQUE2QyxDQUFDLENBQUMsQ0FBQztnQkFDakcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO29CQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7WUFDN0YsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sa0JBQWtCLENBQUMsT0FBZTtRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUM1RCxDQUFDO0lBRUQsY0FBYztJQUNOLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTdEUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixrUEFNZixjQUFjOzsyRkFOdEIsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFJRyxxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS0UsT0FBTztzQkFEZCxlQUFlO3VCQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBb0I5QyxrQ0FBa0M7c0JBRHpDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyLCByZXNvbHZlVHJhbnNsYXRpb25TeW5jRm4gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZE11bHRpQW5ub3VuY2VyXScsXG4gICAgZXhwb3J0QXM6ICdmZE11bHRpQW5ub3VuY2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlBbm5vdW5jZXJPcHRpb25zOiB1bmtub3duW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVG9rZW5Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcml2YXRlIF90b2tlbnM6IFF1ZXJ5TGlzdDxUb2tlbkNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vUmVzdWx0c0Fubm91bmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXN1bHRzQW5ub3VuY2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Fubm91bmNlbWVudCA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyID0gaW5qZWN0KExpdmVBbm5vdW5jZXIpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNvbHZlVHJhbnNsYXRpb24gPSByZXNvbHZlVHJhbnNsYXRpb25TeW5jRm4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgX21ha2VTZWFyY2hUZXJtQ2hhbmdlQW5ub3VuY2VtZW50cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdhbHBoYWJldGljYWwnKSB8fCBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ251bWVyaWMnKSkge1xuICAgICAgICAgICAgdGhpcy5fbGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLm11bHRpQW5ub3VuY2VyT3B0aW9ucz8ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCFjb3VudCAmJiAhdGhpcy5fbm9SZXN1bHRzQW5ub3VuY2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRBbm5vdW5jZW1lbnQodGhpcy5fcmVzb2x2ZVRyYW5zbGF0aW9uKCdjb3JlTXVsdGlJbnB1dC5ub1Jlc3VsdHMnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm9SZXN1bHRzQW5ub3VuY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN1bHRzQW5ub3VuY2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJLZXk6IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyID1cbiAgICAgICAgICAgICAgICAgICAgY291bnQgPT09IDEgPyAnY29yZU11bHRpSW5wdXQuY291bnRMaXN0UmVzdWx0c1Npbmd1bGFyJyA6ICdjb3JlTXVsdGlJbnB1dC5jb3VudExpc3RSZXN1bHRzUGx1cmFsJztcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZEFubm91bmNlbWVudCh0aGlzLl9yZXNvbHZlVHJhbnNsYXRpb24odHJLZXksIHsgY291bnQgfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkQW5ub3VuY2VtZW50KHRoaXMuX3Jlc29sdmVUcmFuc2xhdGlvbignY29yZU11bHRpSW5wdXQubmF2aWdhdGVTZWxlY3Rpb25zV2l0aEFycm93cycpKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Jlc3VsdHNBbm5vdW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9SZXN1bHRzQW5ub3VuY2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3VsdHNBbm5vdW5jZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90b2tlbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkQW5ub3VuY2VtZW50KHRoaXMuX3Jlc29sdmVUcmFuc2xhdGlvbignY29yZU11bHRpSW5wdXQuZXNjYXBlTmF2aWdhdGVUb2tlbnMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYWtlQW5ub3VuY2VtZW50KHRoaXMuX2Fubm91bmNlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkQW5ub3VuY2VtZW50KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hbm5vdW5jZW1lbnQgPSB0aGlzLl9hbm5vdW5jZW1lbnQgKyBtZXNzYWdlICsgJyAnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfbWFrZUFubm91bmNlbWVudChtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZShtZXNzYWdlLCAnYXNzZXJ0aXZlJykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hbm5vdW5jZW1lbnQgPSAnJztcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19","import { isSelectItem } from '@fundamental-ngx/cdk/forms';\nimport { isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport equal from 'fast-deep-equal';\n/** @hidden */\nexport function lookupValue(item, lookupKey) {\n if (isSelectItem(item)) {\n return lookupKey && item ? item.value[lookupKey] : item.value;\n }\n else {\n return lookupKey && item ? item[lookupKey] : item;\n }\n}\n/** @hidden */\nexport function displayValue(item, displayKey) {\n if (isSelectItem(item)) {\n return item.label;\n }\n else if (isJsObject(item) && displayKey) {\n const currentItem = objectGet(item, displayKey);\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n else {\n return item;\n }\n}\n/** @hidden */\nexport function objectGet(obj, is) {\n if (!isJsObject(obj)) {\n return obj;\n }\n else if (isString(is)) {\n return objectGet(obj, is.split('.'));\n }\n else if (!is?.length) {\n return obj;\n }\n else {\n return objectGet(obj[is[0]], is.slice(1));\n }\n}\n/** @hidden */\nexport function getSelectItemByInputValue(suggestions, needleValue) {\n return suggestions.find((value) => value.label === needleValue);\n}\n/** @hidden\n * Map grouped values to array. */\nexport function flattenGroups(items) {\n return items.reduce((result, item) => result.concat(item.children ?? []), []);\n}\n/** @hidden */\nexport function getTokenIndexByIdlOrValue(item, suggestions) {\n return suggestions.findIndex((token) => token.id === item.id || equal(token.value, item.value));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQXdCLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFFcEMsY0FBYztBQUNkLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBYSxFQUFFLFNBQWlCO0lBQ3hELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xFLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQWUsQ0FBQztJQUNsRSxDQUFDO0FBQ0wsQ0FBQztBQUVELGNBQWM7QUFDZCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWEsRUFBRSxVQUFrQjtJQUMxRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO1NBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVoRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNqRSxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sSUFBYyxDQUFDO0lBQzFCLENBQUM7QUFDTCxDQUFDO0FBRUQsY0FBYztBQUNkLE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBWSxFQUFFLEVBQWlDO0lBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNMLENBQUM7QUFFRCxjQUFjO0FBQ2QsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxXQUFzQyxFQUN0QyxXQUFtQjtJQUVuQixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVEO21DQUNtQztBQUNuQyxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBMEIsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELGNBQWM7QUFDZCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBMEIsRUFBRSxXQUFtQztJQUNyRyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTZWxlY3RJdGVtLCBTZWxlY3RhYmxlT3B0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSnNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwVmFsdWUoaXRlbTogdW5rbm93biwgbG9va3VwS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc1NlbGVjdEl0ZW0oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cEtleSAmJiBpdGVtID8gaXRlbS52YWx1ZVtsb29rdXBLZXldIDogaXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9va3VwS2V5ICYmIGl0ZW0gPyBpdGVtW2xvb2t1cEtleV0gOiAoaXRlbSBhcyBzdHJpbmcpO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5VmFsdWUoaXRlbTogdW5rbm93biwgZGlzcGxheUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNTZWxlY3RJdGVtKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdChpdGVtKSAmJiBkaXNwbGF5S2V5KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gb2JqZWN0R2V0KGl0ZW0sIGRpc3BsYXlLZXkpO1xuXG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGN1cnJlbnRJdGVtKSA/IGN1cnJlbnRJdGVtKCkgOiBjdXJyZW50SXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXRlbSBhcyBzdHJpbmc7XG4gICAgfVxufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEdldChvYmo6IHVua25vd24sIGlzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IGFueSB7XG4gICAgaWYgKCFpc0pzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGlzKSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0R2V0KG9iaiwgaXMuc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIGlmICghaXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvYmplY3RHZXQob2JqW2lzWzBdXSwgaXMuc2xpY2UoMSkpO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RJdGVtQnlJbnB1dFZhbHVlPFQ+KFxuICAgIHN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdLFxuICAgIG5lZWRsZVZhbHVlOiBzdHJpbmdcbik6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmluZCgodmFsdWUpID0+IHZhbHVlLmxhYmVsID09PSBuZWVkbGVWYWx1ZSk7XG59XG5cbi8qKiBAaGlkZGVuXG4gKiAgTWFwIGdyb3VwZWQgdmFsdWVzIHRvIGFycmF5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5Hcm91cHMoaXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHJlc3VsdC5jb25jYXQoaXRlbS5jaGlsZHJlbiA/PyBbXSksIDxTZWxlY3RhYmxlT3B0aW9uSXRlbVtdPltdKTtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtLCBzdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmlkID09PSBpdGVtLmlkIHx8IGVxdWFsKHRva2VuLnZhbHVlLCBpdGVtLnZhbHVlKSk7XG59XG4iXX0=","export class MultiComboboxSelectionChangeEvent {\n /**\n * Multi Combobox selection change event\n * @param source Multi Combobox component\n * @param selectedItems Selected items\n */\n constructor(source, selectedItems // Contains selected items\n ) {\n this.source = source;\n this.selectedItems = selectedItems;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWNoYW5nZS5ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2RlbHMvc2VsZWN0aW9uLWNoYW5nZS5ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8saUNBQWlDO0lBQzFDOzs7O09BSUc7SUFDSCxZQUNXLE1BQXlCLEVBQ3pCLGFBQTRDLENBQUMsMEJBQTBCOztRQUR2RSxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBK0I7SUFDcEQsQ0FBQztDQUNQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0YWJsZU9wdGlvbkl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlTXVsdGlDb21ib2JveCB9IGZyb20gJy4uL2Jhc2UtbXVsdGktY29tYm9ib3guY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBNdWx0aSBDb21ib2JveCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHNvdXJjZSBNdWx0aSBDb21ib2JveCBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRJdGVtcyBTZWxlY3RlZCBpdGVtc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc291cmNlOiBCYXNlTXVsdGlDb21ib2JveCxcbiAgICAgICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtWyd2YWx1ZSddIC8vIENvbnRhaW5zIHNlbGVjdGVkIGl0ZW1zXG4gICAgKSB7fVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport * as i0 from \"@angular/core\";\n// import { PlatformConfig } from '@fundamental-ngx/platform/shared';\n/**\n * Default options for Multi-Combobox\n */\nexport class MultiComboboxConfig {\n constructor() {\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n this.matchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n /**\n * Maps data providers\n */\n this.providers = new Map();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFHbEYscUVBQXFFO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQU9JOztXQUVHO1FBQ0gscUJBQWdCLEdBQXFCLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBRTNFOztXQUVHO1FBQ0gsY0FBUyxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBaUJoRTs4R0EvQlksbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFQcm92aWRlciwgTWF0Y2hpbmdTdHJhdGVneSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcblxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG4vLyBpbXBvcnQgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcblxuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIE11bHRpLUNvbWJvYm94XG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveENvbmZpZyB7XG4gICAgLyoqXG4gICAgICogQ29udGVudCBEZW5zaXR5IG9mIGVsZW1lbnQuICdjb3p5JyB8ICdjb21wYWN0J1xuICAgICAqL1xuICAgIGNvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eTtcblxuICAgIC8qKlxuICAgICAqIFN0cmluZyBtYXRjaGluZyBzdHJhdGVneSBmb3IgdHlwZWFoZWFkIGxpc3QuIERlZmF1bHQ6ICdzdGFydHMgd2l0aCBwZXIgdGVybSdcbiAgICAgKi9cbiAgICBtYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID0gTWF0Y2hpbmdTdHJhdGVneS5TVEFSVFNfV0lUSF9QRVJfVEVSTTtcblxuICAgIC8qKlxuICAgICAqIE1hcHMgZGF0YSBwcm92aWRlcnNcbiAgICAgKi9cbiAgICBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIERhdGFQcm92aWRlcjxhbnk+PiB8IG51bGwgPSBuZXcgTWFwKCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgUHJvdmlkZXIgZmFjdG9yeSBmdW5jdGlvblxuICAgICAqL1xuICAgIC8vIHN0YXRpYyBjcmVhdGVQcm92aWRlckZhY3RvcnkoXG4gICAgLy8gICAgIG9iajogUGFydGlhbDxNdWx0aUNvbWJvYm94Q29uZmlnPlxuICAgIC8vICk6IChwbGF0Zm9ybUNvbmZpZzogUGxhdGZvcm1Db25maWcpID0+IE11bHRpQ29tYm9ib3hDb25maWcge1xuICAgIC8vICAgICBjb25zdCB1c2VGYWN0b3J5ID0gKHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybUNvbmZpZyk6IE11bHRpQ29tYm9ib3hDb25maWcgPT5cbiAgICAvLyAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3IE11bHRpQ29tYm9ib3hDb25maWcocGxhdGZvcm1Db25maWcpLCBvYmopO1xuICAgIC8vICAgICByZXR1cm4gdXNlRmFjdG9yeTtcbiAgICAvLyB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGNvbnN0cnVjdG9yKHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybUNvbmZpZykge1xuICAgIC8vICAgICB0aGlzLmNvbnRlbnREZW5zaXR5ID0gcGxhdGZvcm1Db25maWcuY29udGVudERlbnNpdHk7XG4gICAgLy8gfVxufVxuIl19","import { ALT, BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectorRef, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport { CvaControl, CvaDirective, isOptionItem, isSelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector, coerceArraySafe, isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport equal from 'fast-deep-equal';\nimport { BehaviorSubject, Subscription, skip, startWith, timer } from 'rxjs';\nimport { displayValue, flattenGroups, lookupValue, objectGet } from './helpers';\nimport { MultiComboboxSelectionChangeEvent } from './models/selection-change.event';\nimport { MultiComboboxConfig } from './multi-combobox-config';\nimport { FD_MAP_LIMIT } from './multi-combobox.component';\nimport * as i0 from \"@angular/core\";\nexport class BaseMultiCombobox {\n constructor() {\n // Injection section\n /** @hidden */\n this.cvaControl = inject(CvaControl);\n /** @hidden */\n this.dataSourceDirective = inject(DataSourceDirective);\n /** Control Value Accessor directive for forms support. */\n this._cva = inject((CvaDirective), {\n self: true\n });\n /** Multi combobox config. */\n this._multiComboboxConfig = inject(MultiComboboxConfig, {\n optional: true\n });\n /** Content Density Observer */\n this.contentDensityObserver = inject(ContentDensityObserver);\n /**\n * @hidden\n * List of selected suggestions\n */\n this._selectedSuggestions = [];\n /**\n * @hidden\n * Grouped suggestions mapped to array.\n */\n this._flatSuggestions = [];\n /** @hidden */\n this._fullFlatSuggestions = [];\n /** @hidden */\n this.selectedShown$ = new BehaviorSubject(false);\n /** @Hidden */\n this._elmRef = inject((ElementRef));\n /** @hidden */\n this._cd = inject(ChangeDetectorRef);\n /** @hidden */\n this._mapLimit = inject(FD_MAP_LIMIT);\n /** @Hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._matchingStrategy = this._multiComboboxConfig?.matchingStrategy ?? MatchingStrategy.CONTAINS;\n /** @hidden */\n this._dsSubscription = null;\n /** @hidden */\n this._element = this._elmRef.nativeElement;\n /**\n * @hidden\n * Keys, that won't trigger the popover's open state, when dispatched on search input.\n */\n this._nonOpeningKeys = [\n BACKSPACE,\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n /** @hidden */\n this._rangeSelector = new RangeSelector();\n /** @hidden */\n this._dataSourceChanged = false;\n /** @hidden */\n this._displayFn = (value) => displayValue(value, this.displayKey);\n /** @hidden */\n this._secondaryFn = (value) => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n }\n else if (isJsObject(value) && this.secondaryKey) {\n const currentItem = objectGet(value, this.secondaryKey);\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n else {\n return value;\n }\n };\n }\n /** @hidden */\n writeValue(value) {\n this.selectedItems = coerceArraySafe(value);\n this._cva.writeValue(this.selectedItems);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n /**\n * Used to change the value of a control.\n * @param value the value to be applied\n * @param emitOnChange whether to emit \"onChange\" event.\n * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n */\n setValue(value, emitOnChange = true) {\n this.selectedItems = coerceArraySafe(value);\n this._cva.setValue(this.selectedItems, emitOnChange);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n /**\n * @hidden\n * Method to emit change event\n */\n _emitChangeEvent() {\n const event = new MultiComboboxSelectionChangeEvent(this, this.selectedItems);\n this.selectionChange.emit(event);\n }\n /** @hidden */\n _setSelectedSuggestions() {\n this._selectedSuggestions = [];\n if (!this.selectedItems?.length) {\n return;\n }\n for (let i = 0; i <= this.selectedItems.length; i++) {\n const selectedItem = this.selectedItems[i];\n const idx = this._fullFlatSuggestions.findIndex((item) => item.label === selectedItem || item.value === selectedItem);\n if (idx !== -1) {\n this._selectedSuggestions.push(this._fullFlatSuggestions[idx]);\n this._fullFlatSuggestions[idx].selected = true;\n }\n }\n this._cd.detectChanges();\n }\n /**\n * Convert original data to SelectableOptionItems Interface\n * @hidden\n */\n _convertToOptionItems(items) {\n const item = items[0];\n const elementTypeIsOptionItem = isSelectableOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items;\n }\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n return [];\n }\n /**\n * Convert data to SelectableOptionItems Interface\n * @hidden\n */\n _convertObjectsToOptionItems(items) {\n if (this.isGroup) {\n return this._convertObjectsToGroupOptionItems(items);\n }\n else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n }\n else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n _convertObjectsToGroupOptionItems(items) {\n const group = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n group[keyValue].push(item);\n }\n return Object.keys(group).map((key) => {\n const selectItem = {\n label: key,\n value: null,\n isGroup: true\n };\n const currentGroup = group[key];\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n }\n else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n return selectItem;\n });\n }\n /**\n * Convert T[] data to Secondary SelectableOptionItems<T> Interface\n * @hidden\n */\n _convertObjectsToSecondaryOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: displayValue(value, this.displayKey),\n id: lookupValue(value, this.lookupKey),\n secondaryText: objectGet(value, this.secondaryKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /**\n * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n * @hidden\n */\n _convertPrimitiveToOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: value,\n id: lookupValue(value, this.lookupKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /**\n * Convert T[] to SelectableOptionItems<T> Interface (Default)\n * @hidden\n */\n _convertObjectsToDefaultOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: displayValue(value, this.displayKey),\n id: lookupValue(value, this.lookupKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /** @hidden */\n _setInvalidEntry() {\n if (this._previousState || this._previousStateMessage) {\n return;\n }\n this._previousState = this._cva.state;\n this._cva.state = 'error';\n this._previousStateMessage = this._cva.stateMessage;\n this._cva.stateMessage = this.invalidEntryMessage;\n this._cd.markForCheck();\n }\n /** @hidden */\n _unsetInvalidEntry() {\n this._cva.state = this._previousState;\n this._previousState = undefined;\n this._cva.stateMessage = this._previousStateMessage;\n this._previousStateMessage = undefined;\n this._cd.markForCheck();\n }\n /** @hidden */\n _focusToSearchField() {\n this.searchInputElement?.nativeElement.focus();\n }\n /** @hidden */\n _mapAndUpdateModel() {\n const selectedItems = this._selectedSuggestions.map(({ value }) => value);\n const shouldEmitChangeEvent = !equal(this.selectedItems, selectedItems);\n if (!shouldEmitChangeEvent) {\n return;\n }\n this.writeValue(selectedItems);\n this._cva.onChange(selectedItems);\n this._emitChangeEvent();\n }\n /**\n * @hidden\n * Prepares the data stream and subscribes to it.\n */\n _openDataStream(matchingStrategy) {\n const dataSourceProvider = this.dataSourceDirective.dataSourceProvider;\n if (!dataSourceProvider) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n dataSourceProvider.limitless = this.limitless;\n dataSourceProvider.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy = {\n firstBy: this._displayFn\n };\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n dataSourceProvider.dataProvider.setMatchingBy(matchingBy);\n dataSourceProvider.dataProvider.setMatchingStrategy(matchingStrategy);\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n }\n else {\n dataSourceProvider.dataProvider['defaultLimit'] = Number.MAX_SAFE_INTEGER;\n }\n dataSourceProvider.match(map);\n this._dsSubscription = new Subscription();\n this._dsSubscription.add(this.dataSourceDirective.dataSourceProvider?.dataRequested.subscribe(this.dataRequested));\n this._dsSubscription.add(this.dataSourceDirective.dataSourceProvider?.dataReceived.subscribe(this.dataReceived));\n this.dataSourceDirective.dataSourceChanged\n .pipe(startWith(true), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._dataSourceChanged = true;\n });\n this.dataSourceDirective.dataChanged$.pipe(skip(0), takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n if (data.length === 0) {\n this._processingEmptyData();\n return;\n }\n this._previousInputText = this.inputText;\n this._parseDataSourceValue(data);\n this._cva.stateChanges.next('initDataSource.open().');\n this._cd.markForCheck();\n });\n }\n /**\n * Parses the data from the data stream and updates the model if needed.\n * @param data array of objects from the data stream.\n */\n _parseDataSourceValue(data) {\n this._convertDataSourceSuggestions(data);\n const selectedSuggestionsLength = this._selectedSuggestions.length;\n if (selectedSuggestionsLength > 0) {\n for (let i = 0; i < selectedSuggestionsLength; i++) {\n const selectedSuggestion = this._selectedSuggestions[i];\n const idx = this._suggestions.findIndex((item) => equal(item.value, selectedSuggestion.value));\n if (idx !== -1) {\n this._suggestions[idx].selected = true;\n }\n }\n }\n if (this._dataSourceChanged) {\n this._flatSuggestions = this.isGroup ? flattenGroups(this._suggestions) : this._suggestions;\n this._fullFlatSuggestions = this._flatSuggestions;\n this._setSelectedSuggestions();\n this._mapAndUpdateModel();\n this._dataSourceChanged = false;\n }\n }\n /**\n * Transforms plain array into `SelectableOptionItem<T>`\n * @param data\n */\n _convertDataSourceSuggestions(data) {\n this._suggestions = this._convertToOptionItems(data).map((optionItem) => {\n const selectedElement = this._selectedSuggestions.find((selectedItem) => selectedItem.id === optionItem.id);\n if (selectedElement) {\n optionItem.selected = selectedElement.selected;\n }\n return optionItem;\n });\n }\n /** @hidden */\n _processingEmptyData() {\n if (this._cva.disabled) {\n return;\n }\n if (this._cva.controlInvalid && this._cva.ngControl?.hasError) {\n this._setInvalidEntry();\n if (this._timerSub$) {\n this._timerSub$.unsubscribe();\n }\n }\n this.inputText = this._previousInputText;\n this._timerSub$ = timer(this.invalidEntryDisplayTime).subscribe(() => this._unsetInvalidEntry());\n this._cd.detectChanges();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: BaseMultiCombobox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: BaseMultiCombobox, isStandalone: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: BaseMultiCombobox, decorators: [{\n type: Directive\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1jb21ib2JveC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9iYXNlLW11bHRpLWNvbWJvYm94LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNYLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFnQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFjLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckcsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBR1osWUFBWSxFQUNaLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBWSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRixPQUFP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LENBQUM7WUFDNUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUV6QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBbmdCaUIsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRHRDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFMVCxcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERhdGFTb3VyY2VEaXJlY3RpdmUsIE1hdGNoaW5nQnksIE1hdGNoaW5nU3RyYXRlZ3kgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1xuICAgIEN2YUNvbnRyb2wsXG4gICAgQ3ZhRGlyZWN0aXZlLFxuICAgIEZvcm1TdGF0ZXMsXG4gICAgU2VsZWN0YWJsZU9wdGlvbkl0ZW0sXG4gICAgaXNPcHRpb25JdGVtLFxuICAgIGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgTnVsbGFibGUsIFJhbmdlU2VsZWN0b3IsIGNvZXJjZUFycmF5U2FmZSwgaXNGdW5jdGlvbiwgaXNKc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBza2lwLCBzdGFydFdpdGgsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEZkTXVsdGlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2Vcbn0gZnJvbSAnLi9kYXRhLXNvdXJjZS9tdWx0aS1jb21ib2JveC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBkaXNwbGF5VmFsdWUsIGZsYXR0ZW5Hcm91cHMsIGxvb2t1cFZhbHVlLCBvYmplY3RHZXQgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0aW9uLWNoYW5nZS5ldmVudCc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94Q29uZmlnIH0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC1jb25maWcnO1xuaW1wb3J0IHsgRkRfTUFQX0xJTUlUIH0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBUZXh0QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU11bHRpQ29tYm9ib3g8VCA9IGFueT4ge1xuICAgIGFic3RyYWN0IHNlbGVjdGVkSXRlbXM6IFRbXTtcbiAgICBhYnN0cmFjdCBncm91cDogYm9vbGVhbjtcbiAgICBhYnN0cmFjdCBncm91cEtleTogc3RyaW5nO1xuICAgIGFic3RyYWN0IGRpc3BsYXlLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBzZWNvbmRhcnlLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBzaG93U2Vjb25kYXJ5VGV4dDogYm9vbGVhbjtcbiAgICBhYnN0cmFjdCBsb29rdXBLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBpbnZhbGlkRW50cnlNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuICAgIGFic3RyYWN0IGludmFsaWRFbnRyeURpc3BsYXlUaW1lOiBudW1iZXI7XG4gICAgYWJzdHJhY3QgbGltaXRsZXNzOiBib29sZWFuO1xuICAgIGFic3RyYWN0IGlzR3JvdXA6IGJvb2xlYW47XG4gICAgYWJzdHJhY3QgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBzZWFyY2hJbnB1dEVsZW1lbnQ6IE51bGxhYmxlPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xuXG4gICAgYWJzdHJhY3Qgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50PjtcbiAgICBhYnN0cmFjdCBkYXRhUmVjZWl2ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcbiAgICBhYnN0cmFjdCBkYXRhUmVxdWVzdGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgLy8gSW5qZWN0aW9uIHNlY3Rpb25cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgY3ZhQ29udHJvbDogQ3ZhQ29udHJvbDxUPiA9IGluamVjdChDdmFDb250cm9sKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgZGF0YVNvdXJjZURpcmVjdGl2ZTogRGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+PiA9IGluamVjdChEYXRhU291cmNlRGlyZWN0aXZlKTtcblxuICAgIC8qKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIGRpcmVjdGl2ZSBmb3IgZm9ybXMgc3VwcG9ydC4gKi9cbiAgICByZWFkb25seSBfY3ZhID0gaW5qZWN0KEN2YURpcmVjdGl2ZTxUPiwge1xuICAgICAgICBzZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogTXVsdGkgY29tYm9ib3ggY29uZmlnLiAqL1xuICAgIHJlYWRvbmx5IF9tdWx0aUNvbWJvYm94Q29uZmlnID0gaW5qZWN0KE11bHRpQ29tYm9ib3hDb25maWcsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBDb250ZW50IERlbnNpdHkgT2JzZXJ2ZXIgKi9cbiAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyID0gaW5qZWN0KENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2Ygc2VsZWN0ZWQgc3VnZ2VzdGlvbnNcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWRTdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW08VD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHcm91cGVkIHN1Z2dlc3Rpb25zIG1hcHBlZCB0byBhcnJheS5cbiAgICAgKi9cbiAgICBfZmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mdWxsRmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkU2hvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQEhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWxtUmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbWFwTGltaXQgPSBpbmplY3QoRkRfTUFQX0xJTUlUKTtcblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkTXVsdGlDb21ib2JveEFjY2VwdGFibGVEYXRhU291cmNlPFQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2lucHV0VGV4dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfcHJldmlvdXNJbnB1dFRleHQ6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID1cbiAgICAgICAgdGhpcy5fbXVsdGlDb21ib2JveENvbmZpZz8ubWF0Y2hpbmdTdHJhdGVneSA/PyBNYXRjaGluZ1N0cmF0ZWd5LkNPTlRBSU5TO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEtleXMsIHRoYXQgd29uJ3QgdHJpZ2dlciB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdGUsIHdoZW4gZGlzcGF0Y2hlZCBvbiBzZWFyY2ggaW5wdXQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEJBQ0tTUEFDRSxcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVCxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBBTFRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3RpbWVyU3ViJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzU3RhdGU/OiBGb3JtU3RhdGVzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzU3RhdGVNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3ZhLndyaXRlVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBjb250cm9sLlxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgYXBwbGllZFxuICAgICAqIEBwYXJhbSBlbWl0T25DaGFuZ2Ugd2hldGhlciB0byBlbWl0IFwib25DaGFuZ2VcIiBldmVudC5cbiAgICAgKiBTaG91bGQgYmUgXCJmYWxzZVwiLCBpZiB0aGUgY2hhbmdlIGlzIG1hZGUgcHJvZ3JhbW1hdGljYWxseSAoaW50ZXJuYWxseSkgYnkgdGhlIGNvbnRyb2wsIFwidHJ1ZVwiIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHNldFZhbHVlKHZhbHVlOiBUW10sIGVtaXRPbkNoYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3ZhLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcywgZW1pdE9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGlzcGxheUZuID0gKHZhbHVlOiBUKTogc3RyaW5nID0+IGRpc3BsYXlWYWx1ZSh2YWx1ZSwgdGhpcy5kaXNwbGF5S2V5KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZWNvbmRhcnlGbiA9ICh2YWx1ZTogVCk6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChpc09wdGlvbkl0ZW0odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kYXJ5VGV4dCA/PyAnJztcbiAgICAgICAgfSBlbHNlIGlmIChpc0pzT2JqZWN0KHZhbHVlKSAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW0gPSBvYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIGVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9lbWl0Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCh0aGlzLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZXRTZWxlY3RlZFN1Z2dlc3Rpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5sYWJlbCA9PT0gc2VsZWN0ZWRJdGVtIHx8IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkSXRlbVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKHRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnNbaWR4XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9uc1tpZHhdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9yaWdpbmFsIGRhdGEgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRUb09wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtID0gaXNTZWxlY3RhYmxlT3B0aW9uSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMgYXMgU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPYmplY3QgPSBpc0pzT2JqZWN0KGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzU3RyaW5nID0gaXNTdHJpbmcoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0YSB0byBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9Hcm91cE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gZGF0YSB0byBHcm91cCBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtczxLIGV4dGVuZHMgVD4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgS1tdPiA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gaXRlbVt0aGlzLmdyb3VwS2V5XTtcbiAgICAgICAgICAgIGlmICgha2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncm91cFtrZXlWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBUW10gZGF0YSB0byBTZWNvbmRhcnkgU2VsZWN0YWJsZU9wdGlvbkl0ZW1zPFQ+IEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtczxLIGV4dGVuZHMgVD4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbXNbaV07XG4gICAgICAgICAgICBzZWxlY3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogZGlzcGxheVZhbHVlKHZhbHVlLCB0aGlzLmRpc3BsYXlLZXkpLFxuICAgICAgICAgICAgICAgIGlkOiBsb29rdXBWYWx1ZSh2YWx1ZSwgdGhpcy5sb29rdXBLZXkpLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVRleHQ6IG9iamVjdEdldCh2YWx1ZSwgdGhpcy5zZWNvbmRhcnlLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXM/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBQcmltaXRpdmUgZGF0YShCb29sZWFuLCBTdHJpbmcsIE51bWJlcikgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiBsb29rdXBWYWx1ZSh2YWx1ZSwgdGhpcy5sb29rdXBLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXM/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBUW10gdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zPFQ+IEludGVyZmFjZSAoRGVmYXVsdClcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGRpc3BsYXlWYWx1ZSh2YWx1ZSwgdGhpcy5kaXNwbGF5S2V5KSxcbiAgICAgICAgICAgICAgICBpZDogbG9va3VwVmFsdWUodmFsdWUsIHRoaXMubG9va3VwS2V5KSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1N0YXRlIHx8IHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlID0gdGhpcy5fY3ZhLnN0YXRlO1xuICAgICAgICB0aGlzLl9jdmEuc3RhdGUgPSAnZXJyb3InO1xuXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZTtcbiAgICAgICAgdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZSA9IHRoaXMuaW52YWxpZEVudHJ5TWVzc2FnZTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfdW5zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N2YS5zdGF0ZSA9IHRoaXMuX3ByZXZpb3VzU3RhdGU7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZSA9IHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlTWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZm9jdXNUb1NlYXJjaEZpZWxkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXBBbmRVcGRhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICBjb25zdCBzaG91bGRFbWl0Q2hhbmdlRXZlbnQgPSAhZXF1YWwodGhpcy5zZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICBpZiAoIXNob3VsZEVtaXRDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2N2YS5vbkNoYW5nZShzZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJlcGFyZXMgdGhlIGRhdGEgc3RyZWFtIGFuZCBzdWJzY3JpYmVzIHRvIGl0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb3BlbkRhdGFTdHJlYW0obWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlUHJvdmlkZXIgPSB0aGlzLmRhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyO1xuXG4gICAgICAgIGlmICghZGF0YVNvdXJjZVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmxpbWl0bGVzcyA9IHRoaXMubGltaXRsZXNzO1xuXG4gICAgICAgIGRhdGFTb3VyY2VQcm92aWRlci5kYXRhUHJvdmlkZXIuc2V0TG9va3VwS2V5KHRoaXMubG9va3VwS2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSA9IHtcbiAgICAgICAgICAgIGZpcnN0Qnk6IHRoaXMuX2Rpc3BsYXlGblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdCeS5zZWNvbmRhcnlCeSA9IHRoaXMuX3NlY29uZGFyeUZuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ0J5KG1hdGNoaW5nQnkpO1xuICAgICAgICBkYXRhU291cmNlUHJvdmlkZXIuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nU3RyYXRlZ3kobWF0Y2hpbmdTdHJhdGVneSk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCAnKicpO1xuXG4gICAgICAgIGlmICghdGhpcy5saW1pdGxlc3MpIHtcbiAgICAgICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgdGhpcy5fbWFwTGltaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmRhdGFQcm92aWRlclsnZGVmYXVsdExpbWl0J10gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFTb3VyY2VQcm92aWRlci5tYXRjaChtYXApO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/LmRhdGFSZXF1ZXN0ZWQuc3Vic2NyaWJlKHRoaXMuZGF0YVJlcXVlc3RlZClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkLnN1YnNjcmliZSh0aGlzLmRhdGFSZWNlaXZlZClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZUNoYW5nZWRcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0cnVlKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFDaGFuZ2VkJC5waXBlKHNraXAoMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nRW1wdHlEYXRhKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0lucHV0VGV4dCA9IHRoaXMuaW5wdXRUZXh0O1xuXG4gICAgICAgICAgICB0aGlzLl9wYXJzZURhdGFTb3VyY2VWYWx1ZShkYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5fY3ZhLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzdHJlYW0gYW5kIHVwZGF0ZXMgdGhlIG1vZGVsIGlmIG5lZWRlZC5cbiAgICAgKiBAcGFyYW0gZGF0YSBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIGRhdGEgc3RyZWFtLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFyc2VEYXRhU291cmNlVmFsdWUoZGF0YTogVFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnZlcnREYXRhU291cmNlU3VnZ2VzdGlvbnMoZGF0YSk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGVxdWFsKGl0ZW0udmFsdWUsIHNlbGVjdGVkU3VnZ2VzdGlvbi52YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNbaWR4XS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMgPSB0aGlzLmlzR3JvdXAgPyBmbGF0dGVuR3JvdXBzKHRoaXMuX3N1Z2dlc3Rpb25zKSA6IHRoaXMuX3N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucyA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9ucztcblxuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuXG4gICAgICAgICAgICB0aGlzLl9tYXBBbmRVcGRhdGVNb2RlbCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBwbGFpbiBhcnJheSBpbnRvIGBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPmBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydERhdGFTb3VyY2VTdWdnZXN0aW9ucyhkYXRhOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKS5tYXAoKG9wdGlvbkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmluZCgoc2VsZWN0ZWRJdGVtKSA9PiBzZWxlY3RlZEl0ZW0uaWQgPT09IG9wdGlvbkl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbkl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZEVsZW1lbnQuc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uSXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3Byb2Nlc3NpbmdFbXB0eURhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jdmEuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jdmEuY29udHJvbEludmFsaWQgJiYgdGhpcy5fY3ZhLm5nQ29udHJvbD8uaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEludmFsaWRFbnRyeSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fdGltZXJTdWIkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZXJTdWIkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9wcmV2aW91c0lucHV0VGV4dDtcblxuICAgICAgICB0aGlzLl90aW1lclN1YiQgPSB0aW1lcih0aGlzLmludmFsaWRFbnRyeURpc3BsYXlUaW1lKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdW5zZXRJbnZhbGlkRW50cnkoKSk7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const MULTI_COMBOBOX_COMPONENT = new InjectionToken('FdMultiComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbignRmRNdWx0aUNvbWJvYm94SW50ZXJmYWNlJyk7XG4iXX0=","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, Inject, TemplateRef, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TemplateDirective, TemplateModule } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { MULTI_COMBOBOX_COMPONENT } from '../multi-combobox.token';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class MobileMultiComboboxComponent extends MobileModeBase {\n /** @hidden */\n constructor(multiComboboxComponent) {\n super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\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 /** @hidden */\n this.selectedShown$ = this._component.selectedShown$;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiComboboxOpenChange();\n }\n /** @hidden */\n showSelected() {\n const isSelectedShown = this.selectedShown$.getValue();\n if (isSelectedShown) {\n this._component._searchTermChanged();\n this.selectedShown$.next(false);\n return;\n }\n this._component._moreClicked();\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 return;\n }\n this._selectedBackup = this._component._selectedSuggestions?.length\n ? [...this._component._selectedSuggestions]\n : [];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n /** @hidden */\n _listenOnMultiComboboxOpenChange() {\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 escKeyCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MobileMultiComboboxComponent, deps: [{ token: MULTI_COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: MobileMultiComboboxComponent, isStandalone: true, selector: \"fd-mobile-multi-combobox\", 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 fd-dialog-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button 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 @if (selectedShown$ | async) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"emphasized\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\n @if ((selectedShown$ | async) === false) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"transparent\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\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 [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\"> </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: TemplateModule }, { kind: \"directive\", type: i1.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: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MobileMultiComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-mobile-multi-combobox', imports: [\n TemplateModule,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n NgTemplateOutlet,\n ButtonComponent,\n ButtonBarComponent,\n FdTranslatePipe,\n AsyncPipe,\n DialogComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogBodyComponent,\n DialogFooterComponent\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 fd-dialog-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button 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 @if (selectedShown$ | async) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"emphasized\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\n @if ((selectedShown$ | async) === false) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"transparent\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\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 [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\"> </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: [MULTI_COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2JpbGUvbW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2JpbGUvbW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUNILG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FB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R0FDMUIsbUJBQW1CLHdGQUNuQixxQkFBcUIsd0RBTnJCLGVBQWUsK0NBQ2YsU0FBUzs7MkZBUUosNEJBQTRCO2tCQTFCeEMsU0FBUzsrQkFDSSwwQkFBMEIsV0FHM0I7d0JBQ0wsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixTQUFTO3dCQUNULGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3FCQUN4Qjs7MEJBdUJZLE1BQU07MkJBQUMsd0JBQXdCO3lDQW5CZixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlT3B0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IE51bGxhYmxlLCBUZW1wbGF0ZURpcmVjdGl2ZSwgVGVtcGxhdGVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJFbGVtZW50RGlyZWN0aXZlLCBCYXJNaWRkbGVEaXJlY3RpdmUsIEJ1dHRvbkJhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9iYXInO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgRGlhbG9nQ29tcG9uZW50LFxuICAgIERpYWxvZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBEaWFsb2dIZWFkZXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQmFzZSwgTW9iaWxlTW9kZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IE1vYmlsZU11bHRpQ29tYm9ib3hJbnRlcmZhY2UgfSBmcm9tICcuLi9tb2RlbHMvbXVsdGktY29tYm9ib3guaW50ZXJmYWNlJztcbmltcG9ydCB7IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1tb2JpbGUtbXVsdGktY29tYm9ib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGVtcGxhdGVNb2R1bGUsXG4gICAgICAgIEJhck1pZGRsZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQmFyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBCYXJNaWRkbGVEaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQmFyQ29tcG9uZW50LFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgICAgICBEaWFsb2dGb290ZXJDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQgZXh0ZW5kcyBNb2JpbGVNb2RlQmFzZTxNb2JpbGVNdWx0aUNvbWJvYm94SW50ZXJmYWNlPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScpIGRpYWxvZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBGb3IgaW50ZXJuYWwgdXNhZ2VcbiAgICAgKiBDb250cm9sIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIGRpYWxvZy5cbiAgICAgKiBMaXN0IGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBjaGlsZENvbnRlbnQ6IE51bGxhYmxlPHtcbiAgICAgICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgICAgICBjb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgfT4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWxlY3RlZFNob3duJCA9IHRoaXMuX2NvbXBvbmVudC5zZWxlY3RlZFNob3duJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IFNlbGVjdGFibGVPcHRpb25JdGVtW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTVVMVElfQ09NQk9CT1hfQ09NUE9ORU5UKSBtdWx0aUNvbWJvYm94Q29tcG9uZW50OiBNb2JpbGVNdWx0aUNvbWJvYm94SW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpQ29tYm9ib3hDb21wb25lbnQsIE1vYmlsZU1vZGVDb250cm9sLk1VTFRJX0NPTUJPQk9YKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Pbk11bHRpQ29tYm9ib3hPcGVuQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaG93U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRTaG93biA9IHRoaXMuc2VsZWN0ZWRTaG93biQuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3RlZFNob3duKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuX3NlYXJjaFRlcm1DaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hvd24kLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9tb3JlQ2xpY2tlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuX2RpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9kaWFsb2dBcHByb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVEaWFsb2cob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIW9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQmFja3VwID0gdGhpcy5fY29tcG9uZW50Ll9zZWxlY3RlZFN1Z2dlc3Rpb25zPy5sZW5ndGhcbiAgICAgICAgICAgID8gWy4uLnRoaXMuX2NvbXBvbmVudC5fc2VsZWN0ZWRTdWdnZXN0aW9uc11cbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlDb21ib2JveE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBkaXNhYmxlUGFkZGluZ3M6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtmZERpYWxvZ1RlbXBsYXRlXSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjZGlhbG9nVGVtcGxhdGU+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCI+XG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDEgZmQtdGl0bGUgZmQtZGlhbG9nLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gZmQtZGlhbG9nLWNsb3NlLWJ1dHRvbiBbbW9iaWxlXT1cInRydWVcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJzdWJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1taWRkbGU+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudCBbZnVsbFdpZHRoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/LmNvbnRyb2xUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRTaG93biQgfCBhc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibXVsdGlzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dBbGxJdGVtc0J1dHRvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtTXVsdGlDb21ib2JveC5tb2JpbGVTaG93QWxsSXRlbXNCdXR0b24nIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW1hcmdpbi1iZWdpbi0tdGlueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoc2VsZWN0ZWRTaG93biQgfCBhc3luYykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJtdWx0aXNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dTZWxlY3RlZEl0ZW1zQnV0dG9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dTZWxlY3RlZEl0ZW1zQnV0dG9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tYXJnaW4tYmVnaW4tLXRpbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkQ29udGVudD8ubGlzdFRlbXBsYXRlIHx8IG51bGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRUeXBlPVwiZW1waGFzaXplZFwiIFtsYWJlbF09XCJtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZUFwcHJvdmUoKVwiPlxuICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPiA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICA8L2ZkLWRpYWxvZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { BaseDataSource, DataProvider } from '@fundamental-ngx/cdk/data-source';\nexport class FdMultiComboBoxDataSource extends BaseDataSource {\n /** @hidden */\n constructor(dataProvider) {\n super(dataProvider);\n this.dataProvider = dataProvider;\n /** @hidden */\n this.limitless = false;\n }\n}\nexport class ArrayMultiComboBoxDataSource extends FdMultiComboBoxDataSource {\n /** @hidden */\n constructor(data) {\n super(new DataProvider(data));\n }\n}\nexport class ObservableMultiComboBoxDataSource extends FdMultiComboBoxDataSource {\n /** @hidden */\n constructor(data) {\n super(new DataProvider(data));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvZGF0YS1zb3VyY2UvbXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHdEcsTUFBTSxPQUFPLHlCQUE2QixTQUFRLGNBQWlCO0lBRy9ELGNBQWM7SUFDZCxZQUFtQixZQUFxQztRQUNwRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFETCxpQkFBWSxHQUFaLFlBQVksQ0FBeUI7UUFIeEQsY0FBYztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFJbEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDRCQUFnQyxTQUFRLHlCQUE0QjtJQUM3RSxjQUFjO0lBQ2QsWUFBWSxJQUFTO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQ0FBcUMsU0FBUSx5QkFBNEI7SUFDbEYsY0FBYztJQUNkLFlBQVksSUFBcUI7UUFDN0IsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3REYXRhUHJvdmlkZXIsIEJhc2VEYXRhU291cmNlLCBEYXRhUHJvdmlkZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IGV4dGVuZHMgQmFzZURhdGFTb3VyY2U8VD4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGltaXRsZXNzID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVByb3ZpZGVyOiBBYnN0cmFjdERhdGFQcm92aWRlcjxUPikge1xuICAgICAgICBzdXBlcihkYXRhUHJvdmlkZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4gZXh0ZW5kcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFRbXSkge1xuICAgICAgICBzdXBlcihuZXcgRGF0YVByb3ZpZGVyKGRhdGEpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4gZXh0ZW5kcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IE9ic2VydmFibGU8VFtdPikge1xuICAgICAgICBzdXBlcihuZXcgRGF0YVByb3ZpZGVyKGRhdGEpKTtcbiAgICB9XG59XG5cbi8qKlxuICogVHlwZSBvZiBhY2NlcHRhYmxlIG9iamVjdHMgYXMgYSBkYXRhc291cmNlIGZvciB0aGUgTXVsdGktQ29tYm8gQm94IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2U8VD4gPSBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgVFtdO1xuIl19","import { isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport { ArrayMultiComboBoxDataSource, ObservableMultiComboBoxDataSource } from './multi-combobox-data-source';\nexport class MultiComboboxDataSourceParser {\n /**\n * Transforms plain array or observable into DataSource class.\n * @param source\n */\n parse(source) {\n if (isDataSource(source)) {\n return source;\n }\n if (Array.isArray(source)) {\n return new ArrayMultiComboBoxDataSource(source);\n }\n if (isObservable(source)) {\n return new ObservableMultiComboBoxDataSource(source);\n }\n return undefined;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L2RhdGEtc291cmNlL211bHRpLWNvbWJvYm94LWRhdGEtc291cmNlLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUNILDRCQUE0QixFQUc1QixpQ0FBaUMsRUFDcEMsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLE9BQU8sNkJBQTZCO0lBQ3RDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUE4QztRQUNoRCxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sTUFBc0MsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLDRCQUE0QixDQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxpQ0FBaUMsQ0FBSSxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZVBhcnNlciwgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgRmRNdWx0aUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBGZE11bHRpQ29tYm9ib3hBY2NlcHRhYmxlRGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2Vcbn0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC1kYXRhLXNvdXJjZSc7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZVBhcnNlcjxUPiBpbXBsZW1lbnRzIERhdGFTb3VyY2VQYXJzZXI8VCwgRmRNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxUPj4ge1xuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgcGxhaW4gYXJyYXkgb3Igb2JzZXJ2YWJsZSBpbnRvIERhdGFTb3VyY2UgY2xhc3MuXG4gICAgICogQHBhcmFtIHNvdXJjZVxuICAgICAqL1xuICAgIHBhcnNlKHNvdXJjZTogRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2U8VD4pOiBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlIGFzIEZkTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, HostListener, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { ListFocusItem } from '@fundamental-ngx/core/list';\nimport { ToolbarComponent } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Observable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class SelectAllTogglerComponent extends ListFocusItem {\n constructor() {\n super(...arguments);\n /** @hidden */\n this.selectedItems = [];\n /** @hidden */\n this.flatItems = [];\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this.changeDetector = inject(ChangeDetectorRef);\n }\n /** @hidden */\n get allAreSelected() {\n return this.selectedItems.length === this.flatItems.length;\n }\n /** @hidden */\n get someAreSelected() {\n return this.selectedItems.length > 0 && !this.allAreSelected;\n }\n /** @hidden */\n get checkboxValue() {\n if (this.allAreSelected) {\n return true;\n }\n if (this.someAreSelected) {\n return null;\n }\n return false;\n }\n /** @hidden */\n onKeyDown($event) {\n $event.preventDefault();\n this.change(!this.checkboxValue);\n }\n /** @hidden */\n onClick() {\n this.elementRef.nativeElement.focus();\n this.change(!this.checkboxValue);\n }\n /** @hidden */\n ngOnInit() {\n this.tabindex = 0;\n this.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.changeDetector.detectChanges();\n });\n }\n /** @hidden */\n change(value) {\n this.selectAllHandler(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: SelectAllTogglerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.4\", type: SelectAllTogglerComponent, isStandalone: true, selector: \"fd-multi-combobox-select-all-toggler\", inputs: { selectAllHandler: \"selectAllHandler\", valueChanges: \"valueChanges\", selectedItems: \"selectedItems\", flatItems: \"flatItems\" }, host: { listeners: { \"keydown.enter\": \"onKeyDown($event)\", \"keydown.space\": \"onKeyDown($event)\", \"click\": \"onClick()\" } }, providers: [\n {\n provide: ListFocusItem,\n useExisting: SelectAllTogglerComponent\n }\n ], usesInheritance: true, ngImport: i0, template: `\n <fd-toolbar>\n <div fd-form-item class=\"fd-multi-combobox-select-all__form-item\">\n <fd-checkbox tabIndexValue=\"-1\" [ngModel]=\"checkboxValue\" [tristate]=\"true\">\n {{\n 'coreMultiComboBox.selectAllLabel'\n | fdTranslate: { selectedItems: selectedItems.length, totalItems: flatItems.length }\n }}\n </fd-checkbox>\n </div>\n </fd-toolbar>\n `, isInline: true, styles: [\"fd-multi-combobox-select-all-toggler{display:block;background-color:var(--sapBackgroundColor);cursor:pointer;position:sticky;top:0;z-index:1}fd-multi-combobox-select-all-toggler:focus,fd-multi-combobox-select-all-toggler.is-focus{outline-offset:-.1875rem;outline-width:var(--sapContent_FocusWidth);outline-style:var(--sapContent_FocusStyle);outline-color:var(--sapContent_FocusColor)}fd-multi-combobox-select-all-toggler .fd-toolbar{padding-left:0;padding-right:0}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item{display:flex;flex-direction:row;align-items:center;font-weight:700}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox{pointer-events:none}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__checkmark{margin-inline-end:.5rem}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__text{font-weight:700!important}\\n\"], dependencies: [{ kind: \"component\", type: ToolbarComponent, selector: \"fd-toolbar\", inputs: [\"titleId\", \"class\", \"shouldOverflow\", \"fdType\", \"title\", \"active\", \"clearBorder\", \"forceOverflow\", \"tabindex\", \"headingLevel\", \"ariaLabel\", \"ariaLabelledBy\"] }, { kind: \"component\", type: FormItemComponent, selector: \"[fd-form-item]\", inputs: [\"isInline\", \"horizontal\"] }, { kind: \"component\", type: CheckboxComponent, selector: \"fd-checkbox\", inputs: [\"wrapLabel\", \"valignLabel\", \"ariaLabel\", \"role\", \"value\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"title\", \"inputId\", \"state\", \"name\", \"label\", \"disabled\", \"readonly\", \"tristate\", \"tristateSelectable\", \"labelClass\", \"required\", \"displayOnly\", \"values\", \"standalone\"], outputs: [\"focusChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: SelectAllTogglerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-multi-combobox-select-all-toggler', template: `\n <fd-toolbar>\n <div fd-form-item class=\"fd-multi-combobox-select-all__form-item\">\n <fd-checkbox tabIndexValue=\"-1\" [ngModel]=\"checkboxValue\" [tristate]=\"true\">\n {{\n 'coreMultiComboBox.selectAllLabel'\n | fdTranslate: { selectedItems: selectedItems.length, totalItems: flatItems.length }\n }}\n </fd-checkbox>\n </div>\n </fd-toolbar>\n `, providers: [\n {\n provide: ListFocusItem,\n useExisting: SelectAllTogglerComponent\n }\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ToolbarComponent, FormItemComponent, CheckboxComponent, FormsModule, FdTranslatePipe], styles: [\"fd-multi-combobox-select-all-toggler{display:block;background-color:var(--sapBackgroundColor);cursor:pointer;position:sticky;top:0;z-index:1}fd-multi-combobox-select-all-toggler:focus,fd-multi-combobox-select-all-toggler.is-focus{outline-offset:-.1875rem;outline-width:var(--sapContent_FocusWidth);outline-style:var(--sapContent_FocusStyle);outline-color:var(--sapContent_FocusColor)}fd-multi-combobox-select-all-toggler .fd-toolbar{padding-left:0;padding-right:0}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item{display:flex;flex-direction:row;align-items:center;font-weight:700}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox{pointer-events:none}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__checkmark{margin-inline-end:.5rem}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__text{font-weight:700!important}\\n\"] }]\n }], propDecorators: { selectAllHandler: [{\n type: Input\n }], valueChanges: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], flatItems: [{\n type: Input\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.space', ['$event']]\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUEyQmxDLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxhQUFhO0lBekI1RDs7UUFvQ0ksY0FBYztRQUVkLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxjQUFjO1FBRWQsY0FBUyxHQUFtQixFQUFFLENBQUM7UUF1Qi9CLGNBQWM7UUFDTixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QyxjQUFjO1FBQ04sbUJBQWMsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0E2QnpFO0lBdERHLGNBQWM7SUFDZCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9ELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBUUQsY0FBYztJQUdkLFNBQVMsQ0FBQyxNQUFxQjtRQUMzQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUVkLE9BQU87UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ2QsTUFBTSxDQUFDLEtBQWM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBeEVRLHlCQUF5QjtrR0FBekIseUJBQXlCLHNWQVZ2QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDO1NBQ0osaURBbEJTOzs7Ozs7Ozs7OztLQVdULDRpQ0FVUyxnQkFBZ0IsK05BQUUsaUJBQWlCLCtGQUFFLGlCQUFpQixtV0FBRSxXQUFXLDBWQUFFLGVBQWU7OzJGQUVyRix5QkFBeUI7a0JBekJyQyxTQUFTOytCQUNJLHNDQUFzQyxZQUN0Qzs7Ozs7Ozs7Ozs7S0FXVCxhQUVVO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLDJCQUEyQjt5QkFDekM7cUJBQ0osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUM7OEJBTXRGLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBaUNOLFNBQVM7c0JBRlIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN4QyxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRekMsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jaGVja2JveCc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IExpc3RGb2N1c0l0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1tdWx0aS1jb21ib2JveC1zZWxlY3QtYWxsLXRvZ2dsZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxmZC10b29sYmFyPlxuICAgICAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0gY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveC1zZWxlY3QtYWxsX19mb3JtLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3ggdGFiSW5kZXhWYWx1ZT1cIi0xXCIgW25nTW9kZWxdPVwiY2hlY2tib3hWYWx1ZVwiIFt0cmlzdGF0ZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY29yZU11bHRpQ29tYm9Cb3guc2VsZWN0QWxsTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZTogeyBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCwgdG90YWxJdGVtczogZmxhdEl0ZW1zLmxlbmd0aCB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgYCxcbiAgICBzdHlsZVVybDogJy4vc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTGlzdEZvY3VzSXRlbSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1Rvb2xiYXJDb21wb25lbnQsIEZvcm1JdGVtQ29tcG9uZW50LCBDaGVja2JveENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0QWxsVG9nZ2xlckNvbXBvbmVudCBleHRlbmRzIExpc3RGb2N1c0l0ZW0gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIEhhbmRsZXIgZm9yIHRoZSBzZWxlY3QgYWxsIGl0ZW1zXG4gICAgICogKi9cbiAgICBASW5wdXQoKSBzZWxlY3RBbGxIYW5kbGVyOiAoc2VsZWN0OiBib29sZWFuKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIGZvciByZWNlaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbHVlIGNoYW5nZXMsXG4gICAgICovXG4gICAgQElucHV0KCkgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPHVua25vd24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEFycmF5PHVua25vd24+ID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmxhdEl0ZW1zOiBBcnJheTx1bmtub3duPiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgYWxsQXJlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSB0aGlzLmZsYXRJdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc29tZUFyZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWxsQXJlU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY2hlY2tib3hWYWx1ZSgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmFsbEFyZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zb21lQXJlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZScsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2UoIXRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2UoIXRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSGFuZGxlcih2YWx1ZSk7XG4gICAgfVxufVxuIl19","import { A, CONTROL, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, InjectionToken, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, inject } from '@angular/core';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport { CvaControl, CvaDirective } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteDirective, DynamicComponentService, FocusTrapService, KeyUtil, SearchHighlightPipe, TemplateDirective, TruncatedTitleDirective, coerceArraySafe, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { FD_LIST_COMPONENT, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListSecondaryDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport equal from 'fast-deep-equal';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { BaseMultiCombobox } from './base-multi-combobox.class';\nimport { MobileMultiComboboxComponent } from './mobile/mobile-multi-combobox.component';\nimport { MULTI_COMBOBOX_COMPONENT } from './multi-combobox.token';\nimport { MultiComboboxDataSourceParser } from './data-source/multi-combobox-data-source-parser';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FD_LANGUAGE, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { getSelectItemByInputValue, getTokenIndexByIdlOrValue } from './helpers';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nimport * as i2 from \"@fundamental-ngx/cdk/forms\";\nimport * as i3 from \"@fundamental-ngx/cdk/data-source\";\nimport * as i4 from \"@angular/forms\";\nexport const FD_MAP_LIMIT = new InjectionToken('Map limit≥', { factory: () => 12 });\nexport class MultiComboboxComponent extends BaseMultiCombobox {\n /** Provides selected items. */\n set selectedItems(value) {\n this._selectedItems = coerceArraySafe(value);\n }\n get selectedItems() {\n return this._selectedItems;\n }\n /** @hidden */\n get _popoverMaxWidth() {\n if (this.bodyMaxWidth === 'none') {\n return null;\n }\n if (typeof this.bodyMaxWidth === 'number') {\n return this.bodyMaxWidth;\n }\n return this._elementRef.nativeElement.getBoundingClientRect().width;\n }\n /** Value of the multi combobox */\n set value(value) {\n this.setValue(value, true);\n }\n get value() {\n return this._cva.value;\n }\n /** Set the input text of the input. */\n set inputText(value) {\n this._inputTextValue = value;\n this._cva.onTouched();\n }\n /** Get the input text of the input. */\n get inputText() {\n return this._inputTextValue || '';\n }\n /** Is empty search field. */\n get isEmptyValue() {\n return this.inputText.trim().length === 0;\n }\n /** @hidden */\n get isGroup() {\n return !!(this.group && this.groupKey);\n }\n /** @hidden */\n constructor(_elementRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService) {\n super();\n this._elementRef = _elementRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n /**\n * Show select all checkbox\n */\n this.showSelectAll = false;\n /** Provides maximum height for the optionPanel. */\n this.maxHeight = '250px';\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /** Whether the autocomplete should be enabled; Enabled by default. */\n this.autoComplete = true;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Max width of multi combobox dropdown body.\n * `none` will not limit width of the dropdown.\n * `container` will limit width of the dropdown to the width of the multi-input itself.\n * `number` will limit width of the dropdown by provided number in pixels.\n */\n this.bodyMaxWidth = 'none';\n /** Whether the multi-combobox should be built on mobile mode. */\n this.mobile = false;\n /** Tells the multi-combobox if we need to group items. */\n this.group = false;\n /** Show the second column (applicable for two columns layout). */\n this.showSecondaryText = false;\n /** Horizontally align text inside the second column (applicable for two columns layout). */\n this.secondaryTextAlignment = 'right';\n /** Turns on/off Adjustable Width feature. */\n this.autoResize = true;\n /** Whether to open the dropdown when the addon button is clicked. */\n this.openDropdownOnAddOnClicked = 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 /** Time in ms for how long message of invalid entry should be displayed. */\n this.invalidEntryDisplayTime = 3000;\n /**\n * String matching strategy for typeahead list.\n * Available options: 'starts with per term', 'starts with', 'contains'\n * Default: 'starts with per term' */\n this.matchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n /** Event emitted when item is selected. */\n this.selectionChange = new EventEmitter();\n /** @hidden Emits event when the menu is opened/closed. */\n this.isOpenChange = new EventEmitter();\n /** Emits event when the addon button is clicked. */\n this.addOnButtonClicked = new EventEmitter();\n /** Event emitted when data loading is started. */\n this.dataRequested = new EventEmitter();\n /** Event emitted when data loading is finished. */\n this.dataReceived = new EventEmitter();\n /** @hidden */\n this._contentDensity = this._multiComboboxConfig?.contentDensity ?? 'cozy';\n /** Whether the Multi Input is opened. */\n this.isOpen = false;\n /**\n * @hidden\n * Need for opening mobile version\n */\n this.openChange = new Subject();\n /** @hidden */\n this._selectedItems = [];\n /** @hidden */\n this._lang$ = inject(FD_LANGUAGE);\n /** @hidden */\n this._translationResolver = new TranslationResolver();\n /**\n * @hidden\n * Method that selects all possible options.\n * *select* attribute – if *true* select all, if *false* unselect all\n * */\n this._handleSelectAllItems = (select) => {\n this._flatSuggestions.forEach((item) => (item.selected = select));\n this._onEveryItem(this._suggestions, (item) => (item.selected = select));\n this._selectedSuggestions = select ? [...this._flatSuggestions] : [];\n this._rangeSelector.reset();\n this.inputText = '';\n this._propagateChange();\n };\n this.contentDensityObserver.subscribe();\n }\n /** @hidden */\n ngOnInit() {\n this.cvaControl.listenToChanges();\n this._openDataStream(this.matchingStrategy);\n this._lang$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((lang) => {\n this.invalidEntryMessage = this._translationResolver.resolve(lang, 'platformMultiCombobox.invalidEntryError');\n });\n }\n /** @hidden */\n async ngAfterViewInit() {\n if (this.mobile) {\n await this._setUpMobileMode();\n }\n this._assignCustomTemplates();\n this._initWindowResize();\n }\n /** @hidden */\n _toggleSelection(item, fromTokenCloseClick = false) {\n const idx = getTokenIndexByIdlOrValue(item, this._selectedSuggestions);\n if (idx === -1) {\n this._selectedSuggestions.push(item);\n }\n else {\n this._selectedSuggestions.splice(idx, 1);\n }\n item.selected = !item.selected;\n this._propagateChange(fromTokenCloseClick);\n if (!this._selectedSuggestions.length) {\n this._focusToSearchField();\n }\n this._cd.detectChanges();\n }\n /** @hidden */\n _onOptionCheckboxClicked(event, index) {\n event.stopPropagation();\n this._onListElementClicked(event, index);\n this.inputText = '';\n this._searchTermChanged('');\n }\n /** @hidden */\n _onCompleteTerm(event) {\n if (event.forceClose) {\n this._toggleSelectionByInputText(event.term);\n this.close();\n }\n }\n /** @hidden */\n _navigateByTokens(event) {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n this.listComponent.items?.first.focus();\n }\n }\n /** @hidden */\n _removeToken(token, event) {\n if (event) {\n event.preventDefault();\n }\n const optionItem = this._flatSuggestions.find((s) => s.value === token.value);\n if (optionItem) {\n this._toggleSelection(optionItem, true);\n this._rangeSelector.reset();\n }\n }\n /** @hidden */\n _moreClicked() {\n this._suggestions = this.isGroup\n ? this._convertObjectsToGroupOptionItems(this._selectedSuggestions.map(({ value }) => value))\n : this._suggestions.filter((value) => this._selectedSuggestions.some((item) => equal(item.value, value.value)));\n this._showList(true);\n this.selectedShown$.next(true);\n this._cd.markForCheck();\n }\n /** @hidden */\n _onBlur(event) {\n const target = event.relatedTarget;\n if (target) {\n const isList = !!target.closest('.fd-multi-combobox__list-container');\n if (isList) {\n return;\n }\n if (this._suggestions?.length === 1 &&\n this._suggestions[0].label === this.inputText &&\n !this._suggestions[0].selected) {\n this._toggleSelection(this._suggestions[0]);\n }\n this._showList(false);\n this.inputText = '';\n }\n this._cva.onTouched();\n }\n /** @hidden */\n _onItemKeyDownHandler(event) {\n if (KeyUtil.isKeyCode(event, ESCAPE)) {\n this._focusToSearchField();\n }\n else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this._handleSelectAllItems(false);\n }\n else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this._handleSelectAllItems(true);\n }\n else if (KeyUtil.isKeyCode(event, ENTER)) {\n if (!this.mobile) {\n this.close();\n }\n this._rangeSelector.reset();\n }\n else if (KeyUtil.isKeyCode(event, SPACE)) {\n this._rangeSelector.reset();\n }\n }\n /** @hidden */\n _onOptionClicked(event, index) {\n this._onListElementClicked(event, index);\n this.close();\n }\n /**\n * @hidden\n * Handle dialog dismissing, closes popover and sets backup data.\n */\n _dialogDismiss(backup) {\n this._selectedSuggestions = [...backup];\n this.inputText = '';\n this._showList(false);\n this.selectedShown$.next(false);\n }\n /**\n * @hidden\n * Handle dialog approval, closes popover and propagates data changes.\n */\n _dialogApprove() {\n this.inputText = '';\n this._showList(false);\n this._propagateChange(true);\n }\n /** @hidden */\n _popoverOpenChangeHandle(isOpen) {\n this.isOpen = isOpen;\n /** Allow combobox up and down arrows to work properly when multi combobox is inside a dialog with a trapped focus */\n if (this.isOpen) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n this._rangeSelector.reset();\n if (!isOpen) {\n this._cva.onTouched();\n }\n }\n /** Opens the select popover body. */\n open() {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this._cd.markForCheck();\n }\n /** Closes the select popover body. */\n close() {\n this._focusToSearchField();\n this._rangeSelector.reset();\n this.selectedShown$.next(false);\n this.inputText = '';\n this.isOpen = false;\n this.isOpenChange.emit(this.isOpen);\n this._cva.onTouched();\n this._cd.markForCheck();\n }\n /** @hidden */\n _showList(isOpen) {\n if (this.isOpen !== isOpen) {\n this.isOpen = isOpen;\n this._cva.onTouched();\n this.openChange.next(isOpen);\n }\n if (!this.isOpen) {\n this._searchTermChanged('');\n }\n this._cd.markForCheck();\n }\n /** @hidden */\n _searchTermChanged(text = this.inputText) {\n const map = new Map();\n map.set('query', text);\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n }\n else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n this.dataSourceDirective.dataSourceProvider?.match(map);\n if (text) {\n this.open();\n }\n this._cd.markForCheck();\n }\n /**\n * Handle Click on Button\n * @hidden\n */\n _onPrimaryButtonClick(isOpen) {\n if (!isOpen) {\n this._searchTermChanged('');\n }\n if (this.openDropdownOnAddOnClicked) {\n this._showList(!isOpen);\n }\n else if (this.isOpen) {\n this._showList(false);\n }\n if (this.isOpen) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /**\n * Handle Keydown on Input\n * @hidden\n */\n _onInputKeydownHandler(event) {\n if (this._cva.readonly) {\n return;\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n if (event.altKey) {\n this._showList(true);\n }\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n this._chooseOtherItem(-1);\n }\n else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._toggleSelectionByInputText();\n }\n else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n this._showList(true);\n const acceptedKeys = !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime');\n if (acceptedKeys) {\n // SetTimeout is needed for input to receive new value.\n setTimeout(() => {\n if (this.isEmptyValue) {\n this.listComponent?.setItemActive(0);\n }\n });\n }\n }\n }\n /**\n * @hidden\n * Method passed to list component.\n */\n _handleListFocusEscape(direction) {\n if (direction === 'up') {\n this._focusToSearchField();\n }\n }\n /**\n * @hidden\n */\n _addOnClicked($event) {\n this.addOnButtonClicked.emit($event);\n if (!this.mobile) {\n this._onPrimaryButtonClick(this.isOpen);\n }\n }\n /** @hidden */\n _setLimitless(limitless) {\n this.limitless = limitless;\n }\n /** @hidden */\n _getMapLimit() {\n return this.limitless ? this.dataSourceDirective.dataSource.length : this._mapLimit;\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 /**\n * @hidden\n * Iterate over every item and perform callback\n */\n _onEveryItem(items, callback) {\n items.forEach((item) => {\n callback(item);\n if (item.children && item.children.length > 0) {\n this._onEveryItem(item.children, callback);\n }\n });\n }\n /** @hidden */\n _toggleSelectionByInputText(text = this.inputText) {\n const item = getSelectItemByInputValue(this._fullFlatSuggestions, text);\n if (item) {\n this._toggleSelection(item);\n this.inputText = '';\n }\n this._searchTermChanged();\n }\n /**\n * @hidden\n * Method to set input text as item label.\n */\n _setInputTextFromOptionItem(item) {\n this.inputText = item.label;\n if (this.mobile) {\n return;\n }\n this._showList(false);\n }\n /**\n * @hidden\n * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n */\n _onListElementClicked(event, index) {\n // value has been changed at this point, so it can be safely used\n const selectionState = this._flatSuggestions[index].selected;\n this._rangeSelector.onRangeElementToggled(index, event);\n const toRemoveSet = new Set();\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const current = this._flatSuggestions[idx];\n if (current.selected !== selectionState) {\n if (current.selected) {\n // removing from \"_selectedSuggestions\" list\n toRemoveSet.add(current.value);\n }\n else {\n // adding current item to \"_selectedSuggestions\"\n this._selectedSuggestions.push(current);\n }\n current.selected = selectionState;\n }\n });\n this._selectedSuggestions = this._selectedSuggestions.filter((s) => !toRemoveSet.has(s.value));\n this._propagateChange();\n this._tokenizer.onResize();\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n }\n /** @hidden */\n _propagateChange(emitInMobile) {\n if (!this.mobile || emitInMobile) {\n this._mapAndUpdateModel();\n }\n }\n /** @hidden */\n async _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: MULTI_COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.mobileControlTemplate }, MobileMultiComboboxComponent, {\n containerRef: this._viewContainerRef\n }, { injector });\n }\n /**\n * @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed.\n */\n _chooseOtherItem(offset) {\n if (this._selectedSuggestions?.length === this._flatSuggestions.length) {\n this.inputText = '';\n return;\n }\n const activeValue = getSelectItemByInputValue(this._fullFlatSuggestions, this.inputText);\n const index = this._flatSuggestions.findIndex((value) => value === activeValue);\n const position = !this.inputText && offset === -1 ? this._flatSuggestions.length - 1 : index + offset;\n const item = this._flatSuggestions[position];\n if (item) {\n this._setInputTextFromOptionItem(item);\n }\n const selectedIndex = this._selectedSuggestions.findIndex((value) => value.label === item?.label);\n if (selectedIndex !== -1) {\n this._chooseOtherItem(offset);\n }\n }\n /** @hidden */\n _initWindowResize() {\n this._getOptionsListWidth();\n if (!this.autoResize) {\n return;\n }\n resizeObservable(this._inputGroup.nativeElement)\n .pipe(debounceTime(30), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._getOptionsListWidth());\n }\n /** @hidden */\n _getOptionsListWidth() {\n const body = document.body;\n const rect = this._inputGroup.nativeElement.getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n this._cd.detectChanges();\n }\n /**\n * @hidden\n * Assign custom templates\n */\n _assignCustomTemplates() {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i1.DynamicComponentService }, { token: i1.FocusTrapService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: MultiComboboxComponent, isStandalone: true, selector: \"fd-multi-combobox\", inputs: { showSelectAll: \"showSelectAll\", selectedItems: \"selectedItems\", maxHeight: \"maxHeight\", buttonFocusable: \"buttonFocusable\", autoComplete: \"autoComplete\", byline: \"byline\", bodyMaxWidth: \"bodyMaxWidth\", entityClass: \"entityClass\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", group: \"group\", groupKey: \"groupKey\", secondaryKey: \"secondaryKey\", showSecondaryText: \"showSecondaryText\", secondaryTextAlignment: \"secondaryTextAlignment\", autoResize: \"autoResize\", openDropdownOnAddOnClicked: \"openDropdownOnAddOnClicked\", value: \"value\", fillControlMode: \"fillControlMode\", addonIconTitle: \"addonIconTitle\", invalidEntryMessage: \"invalidEntryMessage\", limitless: \"limitless\", lookupKey: \"lookupKey\", displayKey: \"displayKey\", list: \"list\", invalidEntryDisplayTime: \"invalidEntryDisplayTime\", matchingStrategy: \"matchingStrategy\" }, outputs: { selectionChange: \"selectionChange\", isOpenChange: \"isOpenChange\", addOnButtonClicked: \"addOnButtonClicked\", dataRequested: \"dataRequested\", dataReceived: \"dataReceived\" }, providers: [\n CvaControl,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: MultiComboboxDataSourceParser\n },\n {\n provide: MULTI_COMBOBOX_COMPONENT,\n useExisting: MultiComboboxComponent\n }\n ], queries: [{ propertyName: \"customTemplates\", predicate: TemplateDirective }], viewQueries: [{ propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true, read: ElementRef }, { propertyName: \"listComponent\", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: \"mobileControlTemplate\", first: true, predicate: [\"mobileControlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"_tokenizer\", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: \"_inputGroup\", first: true, predicate: [\"inputGroup\"], descendants: true, read: ElementRef }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2.CvaDirective, inputs: [\"id\", \"inputId\", \"placeholder\", \"placeholder\", \"state\", \"state\", \"stateMessage\", \"stateMessage\", \"disabled\", \"disabled\", \"readonly\", \"readonly\", \"name\", \"name\"] }, { directive: i3.DataSourceDirective, inputs: [\"dataSource\", \"dataSource\"], outputs: [\"dataChanged\", \"dataChanged\"] }], ngImport: i0, template: \"<div class=\\\"fd-multi-combobox\\\">\\n @if (mobile) {\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n } @else {\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list fd-multi-combobox__list-container\\\"\\n (isOpenChange)=\\\"_popoverOpenChangeHandle($event)\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [maxWidth]=\\\"_popoverMaxWidth\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [style.width.%]=\\\"!autoResize && 100\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n }\\n</div>\\n<ng-template #controlTemplate>\\n <fd-form-input-message-group>\\n <fd-input-group\\n #inputGroup\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [button]=\\\"!_cva.readonly\\\"\\n [glyph]=\\\"!_cva.readonly ? 'navigation-down-arrow' : ' '\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"_addOnClicked($event)\\\"\\n (click)=\\\"mobile && !isOpen && _onPrimaryButtonClick(false)\\\"\\n (keydown)=\\\"_navigateByTokens($event)\\\"\\n >\\n <fd-tokenizer\\n [tokenizerFocusable]=\\\"false\\\"\\n [compactCollapse]=\\\"true\\\"\\n [showOverflowPopover]=\\\"false\\\"\\n #tokenizer\\n class=\\\"fd-multi-combobox-tokenizer-custom\\\"\\n (moreClickedEvent)=\\\"_moreClicked()\\\"\\n fdMultiAnnouncer\\n [multiAnnouncerOptions]=\\\"_suggestions\\\"\\n >\\n @for (token of _selectedSuggestions; track token) {\\n <fd-token [readOnly]=\\\"_cva.disabled\\\" (onCloseClick)=\\\"_removeToken(token, $event)\\\">\\n {{ token.label }}\\n </fd-token>\\n }\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [attr.placeholder]=\\\"_selectedSuggestions.length ? null : _cva.placeholder\\\"\\n (focus)=\\\"tokenizer._showAllTokens()\\\"\\n (blur)=\\\"!mobile && _onBlur($event); tokenizer._hideTokens()\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-required]=\\\"_cva.required\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n class=\\\"fd-tokenizer__input fd-input-group__input\\\"\\n />\\n </fd-tokenizer>\\n </fd-input-group>\\n @if (mobile && isOpen ? false : !!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n </fd-form-input-message-group>\\n</ng-template>\\n<ng-template #mobileControlTemplate>\\n <fd-input-group\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n class=\\\"fd-multi-combobox-input-group-custom\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"false\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel\\\"\\n >\\n <input\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [placeholder]=\\\"_cva.placeholder\\\"\\n (focus)=\\\"_cva.onTouched()\\\"\\n (blur)=\\\"!mobile && _onBlur($event)\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n [byline]=\\\"byline\\\"\\n [selection]=\\\"byline\\\"\\n (focusEscapeList)=\\\"_handleListFocusEscape($event)\\\"\\n class=\\\"fd-multi-combobox__list fd-list--multi-input\\\"\\n [id]=\\\"_cva.id + '-result'\\\"\\n role=\\\"listbox\\\"\\n [style.max-height]=\\\"!mobile && maxHeight\\\"\\n [style.min-width.px]=\\\"!mobile && minWidth\\\"\\n [style.max-width.px]=\\\"autoResize && maxWidth\\\"\\n [attr.aria-labelledby]=\\\"_cva.id + '-search'\\\"\\n aria-multiselectable=\\\"true\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"close()\\\"\\n (keydown.shift.tab)=\\\"close()\\\"\\n (keydown.escape)=\\\"close()\\\"\\n >\\n @if (!!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n @if (showSelectAll) {\\n <fd-multi-combobox-select-all-toggler\\n [selectAllHandler]=\\\"_handleSelectAllItems\\\"\\n [valueChanges]=\\\"selectionChange\\\"\\n [selectedItems]=\\\"_selectedSuggestions\\\"\\n [flatItems]=\\\"_flatSuggestions\\\"\\n ></fd-multi-combobox-select-all-toggler>\\n }\\n <ng-content></ng-content>\\n @if (isGroup) {\\n @for (group of _suggestions; track group; let groupIndex = $index) {\\n @if (!groupItemTemplate) {\\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.label\\\"\\n >\\n <span fd-list-title>{{ group.label }}</span>\\n </li>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"groupItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: { label: group.label } }\\\"\\n ></ng-template>\\n }\\n @for (optionItem of group.children; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n role=\\\"option\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n [attr.aria-setsize]=\\\"group.children?.length\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #listItem>\\n @if (optionItem.selected && !!selectedItemTemplate) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"selectedItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n @if (!(optionItem.selected && selectedItemTemplate)) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: index }\\\"\\n ></ng-template>\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryTextSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #optionItemSource>\\n @if (!optionItemTemplate) {\\n <span\\n fd-list-title\\n [attr.title]=\\\"optionItem.label\\\"\\n [innerHTML]=\\\"optionItem.label | highlight: inputText\\\"\\n fdTruncatedTitle\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" #secondaryTextSource>\\n @if (showSecondaryText) {\\n @if (!secondaryItemTemplate) {\\n <span\\n [style.text-align]=\\\"secondaryTextAlignment\\\"\\n fd-list-secondary\\n [attr.title]=\\\"optionItem.secondaryText\\\"\\n [innerHTML]=\\\"optionItem.secondaryText | highlight: inputText\\\"\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value }\\\"\\n ></ng-template>\\n }\\n }\\n</ng-template>\\n\", styles: [\".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=--cozy]):not([class*=--condensed]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/margins.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\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: FormInputMessageGroupComponent, selector: \"fd-form-input-message-group\", inputs: [\"triggers\", \"closeOnOutsideClick\", \"fillControlMode\", \"noArrow\", \"closeOnEscapeKey\", \"placement\", \"placementContainer\", \"isOpen\", \"preventSpaceKeyScroll\"], outputs: [\"isOpenChange\"] }, { 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: \"component\", type: TokenizerComponent, selector: \"fd-tokenizer\", inputs: [\"class\", \"disableKeyboardDeletion\", \"compactCollapse\", \"tokenizerFocusable\", \"inputValue\", \"glyph\", \"glyphFont\", \"moreTerm\", \"open\", \"showOverflowPopover\"], outputs: [\"moreClickedEvent\"] }, { kind: \"component\", type: TokenComponent, selector: \"fd-token\", inputs: [\"disabled\", \"selected\", \"readOnly\"], outputs: [\"onCloseClick\", \"onRemove\", \"onTokenClick\", \"onTokenKeydown\", \"elementFocused\"] }, { 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: FormControlComponent, selector: \"input[fd-form-control], textarea[fd-form-control]\", inputs: [\"state\", \"type\", \"class\", \"ariaLabel\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { 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: SelectAllTogglerComponent, selector: \"fd-multi-combobox-select-all-toggler\", inputs: [\"selectAllHandler\", \"valueChanges\", \"selectedItems\", \"flatItems\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { 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: \"component\", type: CheckboxComponent, selector: \"fd-checkbox\", inputs: [\"wrapLabel\", \"valignLabel\", \"ariaLabel\", \"role\", \"value\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"title\", \"inputId\", \"state\", \"name\", \"label\", \"disabled\", \"readonly\", \"tristate\", \"tristateSelectable\", \"labelClass\", \"required\", \"displayOnly\", \"values\", \"standalone\"], outputs: [\"focusChange\"] }, { kind: \"directive\", type: ListSecondaryDirective, selector: \"[fd-list-secondary], [fdListSecondary]\", inputs: [\"type\"] }, { kind: \"directive\", type: MultiAnnouncerDirective, selector: \"[fdMultiAnnouncer]\", inputs: [\"multiAnnouncerOptions\"], exportAs: [\"fdMultiAnnouncer\"] }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-multi-combobox', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [\n {\n directive: CvaDirective,\n inputs: ['id:inputId', 'placeholder', 'state', 'stateMessage', 'disabled', 'readonly', 'name']\n },\n {\n directive: DataSourceDirective,\n inputs: ['dataSource'],\n outputs: ['dataChanged']\n }\n ], providers: [\n CvaControl,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: MultiComboboxDataSourceParser\n },\n {\n provide: MULTI_COMBOBOX_COMPONENT,\n useExisting: MultiComboboxComponent\n }\n ], imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupComponent,\n TokenizerComponent,\n TokenComponent,\n FormsModule,\n AutoCompleteDirective,\n FormControlComponent,\n InputGroupInputDirective,\n FormMessageComponent,\n ListComponent,\n SelectAllTogglerComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n CheckboxComponent,\n NgClass,\n ListSecondaryDirective,\n FdTranslatePipe,\n SearchHighlightPipe,\n MultiAnnouncerDirective,\n TruncatedTitleDirective\n ], template: \"<div class=\\\"fd-multi-combobox\\\">\\n @if (mobile) {\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n } @else {\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list fd-multi-combobox__list-container\\\"\\n (isOpenChange)=\\\"_popoverOpenChangeHandle($event)\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [maxWidth]=\\\"_popoverMaxWidth\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [style.width.%]=\\\"!autoResize && 100\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n }\\n</div>\\n<ng-template #controlTemplate>\\n <fd-form-input-message-group>\\n <fd-input-group\\n #inputGroup\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [button]=\\\"!_cva.readonly\\\"\\n [glyph]=\\\"!_cva.readonly ? 'navigation-down-arrow' : ' '\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"_addOnClicked($event)\\\"\\n (click)=\\\"mobile && !isOpen && _onPrimaryButtonClick(false)\\\"\\n (keydown)=\\\"_navigateByTokens($event)\\\"\\n >\\n <fd-tokenizer\\n [tokenizerFocusable]=\\\"false\\\"\\n [compactCollapse]=\\\"true\\\"\\n [showOverflowPopover]=\\\"false\\\"\\n #tokenizer\\n class=\\\"fd-multi-combobox-tokenizer-custom\\\"\\n (moreClickedEvent)=\\\"_moreClicked()\\\"\\n fdMultiAnnouncer\\n [multiAnnouncerOptions]=\\\"_suggestions\\\"\\n >\\n @for (token of _selectedSuggestions; track token) {\\n <fd-token [readOnly]=\\\"_cva.disabled\\\" (onCloseClick)=\\\"_removeToken(token, $event)\\\">\\n {{ token.label }}\\n </fd-token>\\n }\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [attr.placeholder]=\\\"_selectedSuggestions.length ? null : _cva.placeholder\\\"\\n (focus)=\\\"tokenizer._showAllTokens()\\\"\\n (blur)=\\\"!mobile && _onBlur($event); tokenizer._hideTokens()\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-required]=\\\"_cva.required\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n class=\\\"fd-tokenizer__input fd-input-group__input\\\"\\n />\\n </fd-tokenizer>\\n </fd-input-group>\\n @if (mobile && isOpen ? false : !!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n </fd-form-input-message-group>\\n</ng-template>\\n<ng-template #mobileControlTemplate>\\n <fd-input-group\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n class=\\\"fd-multi-combobox-input-group-custom\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"false\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel\\\"\\n >\\n <input\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [placeholder]=\\\"_cva.placeholder\\\"\\n (focus)=\\\"_cva.onTouched()\\\"\\n (blur)=\\\"!mobile && _onBlur($event)\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n [byline]=\\\"byline\\\"\\n [selection]=\\\"byline\\\"\\n (focusEscapeList)=\\\"_handleListFocusEscape($event)\\\"\\n class=\\\"fd-multi-combobox__list fd-list--multi-input\\\"\\n [id]=\\\"_cva.id + '-result'\\\"\\n role=\\\"listbox\\\"\\n [style.max-height]=\\\"!mobile && maxHeight\\\"\\n [style.min-width.px]=\\\"!mobile && minWidth\\\"\\n [style.max-width.px]=\\\"autoResize && maxWidth\\\"\\n [attr.aria-labelledby]=\\\"_cva.id + '-search'\\\"\\n aria-multiselectable=\\\"true\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"close()\\\"\\n (keydown.shift.tab)=\\\"close()\\\"\\n (keydown.escape)=\\\"close()\\\"\\n >\\n @if (!!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n @if (showSelectAll) {\\n <fd-multi-combobox-select-all-toggler\\n [selectAllHandler]=\\\"_handleSelectAllItems\\\"\\n [valueChanges]=\\\"selectionChange\\\"\\n [selectedItems]=\\\"_selectedSuggestions\\\"\\n [flatItems]=\\\"_flatSuggestions\\\"\\n ></fd-multi-combobox-select-all-toggler>\\n }\\n <ng-content></ng-content>\\n @if (isGroup) {\\n @for (group of _suggestions; track group; let groupIndex = $index) {\\n @if (!groupItemTemplate) {\\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.label\\\"\\n >\\n <span fd-list-title>{{ group.label }}</span>\\n </li>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"groupItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: { label: group.label } }\\\"\\n ></ng-template>\\n }\\n @for (optionItem of group.children; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n role=\\\"option\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n [attr.aria-setsize]=\\\"group.children?.length\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #listItem>\\n @if (optionItem.selected && !!selectedItemTemplate) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"selectedItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n @if (!(optionItem.selected && selectedItemTemplate)) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: index }\\\"\\n ></ng-template>\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryTextSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #optionItemSource>\\n @if (!optionItemTemplate) {\\n <span\\n fd-list-title\\n [attr.title]=\\\"optionItem.label\\\"\\n [innerHTML]=\\\"optionItem.label | highlight: inputText\\\"\\n fdTruncatedTitle\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" #secondaryTextSource>\\n @if (showSecondaryText) {\\n @if (!secondaryItemTemplate) {\\n <span\\n [style.text-align]=\\\"secondaryTextAlignment\\\"\\n fd-list-secondary\\n [attr.title]=\\\"optionItem.secondaryText\\\"\\n [innerHTML]=\\\"optionItem.secondaryText | highlight: inputText\\\"\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value }\\\"\\n ></ng-template>\\n }\\n }\\n</ng-template>\\n\", styles: [\".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=--cozy]):not([class*=--condensed]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/margins.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1.DynamicComponentService }, { type: i1.FocusTrapService }], propDecorators: { showSelectAll: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], byline: [{\n type: Input\n }], bodyMaxWidth: [{\n type: Input\n }], entityClass: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], group: [{\n type: Input\n }], groupKey: [{\n type: Input\n }], secondaryKey: [{\n type: Input\n }], showSecondaryText: [{\n type: Input\n }], secondaryTextAlignment: [{\n type: Input\n }], autoResize: [{\n type: Input\n }], openDropdownOnAddOnClicked: [{\n type: Input\n }], value: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], addonIconTitle: [{\n type: Input\n }], invalidEntryMessage: [{\n type: Input\n }], limitless: [{\n type: Input\n }], lookupKey: [{\n type: Input\n }], displayKey: [{\n type: Input\n }], list: [{\n type: Input\n }], invalidEntryDisplayTime: [{\n type: Input\n }], matchingStrategy: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], isOpenChange: [{\n type: Output\n }], addOnButtonClicked: [{\n type: Output\n }], dataRequested: [{\n type: Output\n }], dataReceived: [{\n type: Output\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement', { read: ElementRef }]\n }], listComponent: [{\n type: ViewChild,\n args: [FD_LIST_COMPONENT]\n }], customTemplates: [{\n type: ContentChildren,\n args: [TemplateDirective]\n }], mobileControlTemplate: [{\n type: ViewChild,\n args: ['mobileControlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _tokenizer: [{\n type: ViewChild,\n args: [TokenizerComponent]\n }], _inputGroup: [{\n type: ViewChild,\n args: ['inputGroup', { read: ElementRef }]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tdWx0aS1jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBZ0QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSCxPQUFPLEVBQ0gscUJBQXFCLEVBR3JCLHVCQUF1QixFQUV2QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFFYix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFD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RGpCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLRSxrQkFBa0I7c0JBRDFCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtwQyxhQUFhO3NCQUQ3QixTQUFTO3VCQUFDLGlCQUFpQjtnQkFLWCxlQUFlO3NCQUQvQixlQUFlO3VCQUFDLGlCQUFpQjtnQkFLakIscUJBQXFCO3NCQURyQyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFLakIsWUFBWTtzQkFENUIsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUtaLFdBQVc7c0JBRDNCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLNUIsS0FBSztzQkFEckIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQSwgQ09OVFJPTCwgRE9XTl9BUlJPVywgRU5URVIsIEVTQ0FQRSwgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlRGlyZWN0aXZlLCBGRF9EQVRBX1NPVVJDRV9UUkFOU0ZPUk1FUiwgTWF0Y2hpbmdTdHJhdGVneSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7IEN2YUNvbnRyb2wsIEN2YURpcmVjdGl2ZSwgT3B0aW9uSXRlbSwgU2VsZWN0SXRlbSwgU2VsZWN0YWJsZU9wdGlvbkl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZURpcmVjdGl2ZSxcbiAgICBBdXRvQ29tcGxldGVFdmVudCxcbiAgICBDb250ZW50RGVuc2l0eSxcbiAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBGb2N1c0VzY2FwZURpcmVjdGlvbixcbiAgICBGb2N1c1RyYXBTZXJ2aWNlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgU2VhcmNoSGlnaGxpZ2h0UGlwZSxcbiAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZSxcbiAgICBjb2VyY2VBcnJheVNhZmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIEZEX0xJU1RfQ09NUE9ORU5ULFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTGlzdENvbXBvbmVudEludGVyZmFjZSxcbiAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgTGlzdFNlY29uZGFyeURpcmVjdGl2ZSxcbiAgICBMaXN0VGl0bGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVG9rZW5Db21wb25lbnQsIFRva2VuaXplckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b2tlbic7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VNdWx0aUNvbWJvYm94IH0gZnJvbSAnLi9iYXNlLW11bHRpLWNvbWJvYm94LmNsYXNzJztcbmltcG9ydCB7IE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tICcuL21vYmlsZS9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4vbXVsdGktY29tYm9ib3gudG9rZW4nO1xuXG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZVBhcnNlciB9IGZyb20gJy4vZGF0YS1zb3VyY2UvbXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UtcGFyc2VyJztcblxuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsIEZvcm1NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBGZFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSwgZ2V0VG9rZW5JbmRleEJ5SWRsT3JWYWx1ZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscy9zZWxlY3Rpb24tY2hhbmdlLmV2ZW50JztcbmltcG9ydCB7IE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aS1hbm5vdW5jZXIvbXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBGRF9NQVBfTElNSVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTWFwIGxpbWl04omlJywgeyBmYWN0b3J5OiAoKSA9PiAxMiB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1tdWx0aS1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWNvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbXVsdGktY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBDdmFEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnaWQ6aW5wdXRJZCcsICdwbGFjZWhvbGRlcicsICdzdGF0ZScsICdzdGF0ZU1lc3NhZ2UnLCAnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAnbmFtZSddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJ10sXG4gICAgICAgICAgICBvdXRwdXRzOiBbJ2RhdGFDaGFuZ2VkJ11cbiAgICAgICAgfVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEN2YUNvbnRyb2wsXG4gICAgICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RBVEFfU09VUkNFX1RSQU5TRk9STUVSLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IE11bHRpQ29tYm9ib3hEYXRhU291cmNlUGFyc2VyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBNdWx0aUNvbWJvYm94Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgICAgICBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIFRva2VuaXplckNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5Db21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvQ29tcGxldGVEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBMaXN0Q29tcG9uZW50LFxuICAgICAgICBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50LFxuICAgICAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIExpc3RUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBMaXN0U2Vjb25kYXJ5RGlyZWN0aXZlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIFNlYXJjaEhpZ2hsaWdodFBpcGUsXG4gICAgICAgIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlLFxuICAgICAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIEJhc2VNdWx0aUNvbWJvYm94PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBTaG93IHNlbGVjdCBhbGwgY2hlY2tib3hcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAgIC8qKiBQcm92aWRlcyBzZWxlY3RlZCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZEl0ZW1zKHZhbHVlOiBUW10pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IGNvZXJjZUFycmF5U2FmZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zO1xuICAgIH1cbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBoZWlnaHQgZm9yIHRoZSBvcHRpb25QYW5lbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgYmUgZW5hYmxlZDsgRW5hYmxlZCBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b0NvbXBsZXRlID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXRlbSBvcHRpb25zIHNob3VsZCBiZSByZW5kZXJlZCBhcyBieWxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBieWxpbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1heCB3aWR0aCBvZiBtdWx0aSBjb21ib2JveCBkcm9wZG93biBib2R5LlxuICAgICAqIGBub25lYCB3aWxsIG5vdCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24uXG4gICAgICogYGNvbnRhaW5lcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gdG8gdGhlIHdpZHRoIG9mIHRoZSBtdWx0aS1pbnB1dCBpdHNlbGYuXG4gICAgICogYG51bWJlcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gYnkgcHJvdmlkZWQgbnVtYmVyIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlNYXhXaWR0aDogJ25vbmUnIHwgJ2NvbnRhaW5lcicgfCBudW1iZXIgPSAnbm9uZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3Zlck1heFdpZHRoKCk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5TWF4V2lkdGggPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9keU1heFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keU1heFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIENvbWJvYm94IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBUZWxscyB0aGUgbXVsdGktY29tYm9ib3ggaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikuICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeUtleTogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKGFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkuICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoYXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBhdXRvUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIG9wZW4gdGhlIGRyb3Bkb3duIHdoZW4gdGhlIGFkZG9uIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQgPSB0cnVlO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBtdWx0aSBjb21ib2JveCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBUW10pIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdmEudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogKiBgYXQtbGVhc3RgIHdpbGwgYXBwbHkgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLiAtIERlZmF1bHRcbiAgICAgKiAqIGBlcXVhbGAgd2lsbCBhcHBseSBhIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKiBTZXRzIHRpdGxlIGF0dHJpYnV0ZSB0byBhZGRvbiBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBhZGRvbkljb25UaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBpMThuIG1vZHVsZSB0byBtb2RpZnkgdGhlIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZy5cbiAgICAgKiBTZXRzIGludmFsaWQgZW50cnkgbWVzc2FnZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW52YWxpZEVudHJ5TWVzc2FnZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUdXJucyBsaW1pdGxlc3MgbW9kZSwgT04gb3IgT0ZGICovXG4gICAgQElucHV0KClcbiAgICBsaW1pdGxlc3M6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGluIGZpbHRlcnMgYW5kIGFueSBraW5kIG9mIGNvbXBhcmF0b3JzIHdoZW4gd2Ugd29yayB3aXRoIG9iamVjdHMgYW5kIHRoaXMgaWRlbnRpZnlcbiAgICAgKiB1bmlxdWUgZmllbGQgbmFtZSBiYXNlZCBvbiB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZG8gdGhlIGpvYlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9va3VwS2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIGRlYWwgd2l0aCB1bmtub3duIG9iamVjdCB3ZSBjYW4gdXNlIGBkaXNwbGF5S2V5YCB0byByZXRyaWV2ZSB2YWx1ZSBmcm9tIHNwZWNpZmljXG4gICAgICogcHJvcGVydHkgb2YgdGhlIG9iamVjdCB0byBhY3QgYXMgZGlzcGxheSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBTZWUgQ29tYm9Cb3gsIFNlbGVjdCwgUmFkaW9Hcm91cCwgQ2hlY2tCb3ggR3JvdXBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlLZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgdmFsdWVzLCBpdCBjYW4gYmUgb2YgdHlwZSBTZWxlY3RJdGVtLCBzdHJpbmcgb3IgYW55IG9iamVjdC5cbiAgICAgKiBHZW5lcmljIG9iamVjdCB0eXBlIGlzIGFtb25nIHRoZSBsaXN0IG9mIHR5cGVzLFxuICAgICAqIGJlY2F1c2Ugd2UgYWxsb3cgdG8gZ2V0IGxhYmVscyBhbmQgdmFsdWVzIHVzaW5nIGBkaXNwbGF5S2V5YCBhbmQgYGxvb2t1cEtleWAgaW5wdXRzIGFjY29yZGluZ2x5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdDogQXJyYXk8U2VsZWN0SXRlbSB8IHN0cmluZyB8IG9iamVjdD47XG5cbiAgICAvKiogVGltZSBpbiBtcyBmb3IgaG93IGxvbmcgbWVzc2FnZSBvZiBpbnZhbGlkIGVudHJ5IHNob3VsZCBiZSBkaXNwbGF5ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbnZhbGlkRW50cnlEaXNwbGF5VGltZSA9IDMwMDA7XG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgbWF0Y2hpbmcgc3RyYXRlZ3kgZm9yIHR5cGVhaGVhZCBsaXN0LlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOiAnc3RhcnRzIHdpdGggcGVyIHRlcm0nLCAnc3RhcnRzIHdpdGgnLCAnY29udGFpbnMnXG4gICAgICogRGVmYXVsdDogJ3N0YXJ0cyB3aXRoIHBlciB0ZXJtJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF0Y2hpbmdTdHJhdGVneSA9IE1hdGNoaW5nU3RyYXRlZ3kuU1RBUlRTX1dJVEhfUEVSX1RFUk07XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBFbWl0cyBldmVudCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZC9jbG9zZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaXNPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkT25CdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgc2VhcmNoSW5wdXRFbGVtZW50OiBOdWxsYWJsZTxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGRF9MSVNUX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnRJbnRlcmZhY2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ21vYmlsZUNvbnRyb2xUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2JpbGVDb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoVG9rZW5pemVyQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuaXplcjogVG9rZW5pemVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEdyb3VwJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRHcm91cDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2l0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIG9wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gR3JvdXAgSGVhZGVyIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIHNlY29uZGFyeUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHkgPSB0aGlzLl9tdWx0aUNvbWJvYm94Q29uZmlnPy5jb250ZW50RGVuc2l0eSA/PyAnY296eSc7XG5cbiAgICAvKiogU2V0IHRoZSBpbnB1dCB0ZXh0IG9mIHRoZSBpbnB1dC4gKi9cbiAgICBzZXQgaW5wdXRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9jdmEub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgaW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgZ2V0IGlucHV0VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0VmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIElzIGVtcHR5IHNlYXJjaCBmaWVsZC4gKi9cbiAgICBnZXQgaXNFbXB0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgTXVsdGkgSW5wdXQgaXMgb3BlbmVkLiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqL1xuICAgIG1heFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICovXG4gICAgbWluV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uXG4gICAgICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sYW5nJCA9IGluamVjdChGRF9MQU5HVUFHRSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2U6IEZvY3VzVHJhcFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdmFDb250cm9sLmxpc3RlblRvQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9vcGVuRGF0YVN0cmVhbSh0aGlzLm1hdGNoaW5nU3RyYXRlZ3kpO1xuXG4gICAgICAgIHRoaXMuX2xhbmckLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGxhbmc6IEZkTGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEVudHJ5TWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW52YWxpZEVudHJ5RXJyb3InXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpO1xuXG4gICAgICAgIHRoaXMuX2luaXRXaW5kb3dSZXNpemUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90b2dnbGVTZWxlY3Rpb24oaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0sIGZyb21Ub2tlbkNsb3NlQ2xpY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHggPSBnZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW0sIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMpO1xuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZDtcblxuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoZnJvbVRva2VuQ2xvc2VDbGljayk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcHRpb25DaGVja2JveENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNvbXBsZXRlVGVybShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KGV2ZW50LnRlcm0pO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHNlbGVjdHMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuXG4gICAgICogKnNlbGVjdCogYXR0cmlidXRlIOKAkyBpZiAqdHJ1ZSogc2VsZWN0IGFsbCwgaWYgKmZhbHNlKiB1bnNlbGVjdCBhbGxcbiAgICAgKiAqL1xuICAgIF9oYW5kbGVTZWxlY3RBbGxJdGVtcyA9IChzZWxlY3Q6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLnNlbGVjdGVkID0gc2VsZWN0KSk7XG4gICAgICAgIHRoaXMuX29uRXZlcnlJdGVtKHRoaXMuX3N1Z2dlc3Rpb25zLCAoaXRlbSkgPT4gKGl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3QpKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IHNlbGVjdCA/IFsuLi50aGlzLl9mbGF0U3VnZ2VzdGlvbnNdIDogW107XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcblxuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVCeVRva2VucyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtET1dOX0FSUk9XLCBVUF9BUlJPV10pICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaXRlbXM/LmZpcnN0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yZW1vdmVUb2tlbih0b2tlbjogU2VsZWN0YWJsZU9wdGlvbkl0ZW0sIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uSXRlbSA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLnZhbHVlID09PSB0b2tlbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tb3JlQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLmlzR3JvdXBcbiAgICAgICAgICAgID8gdGhpcy5fY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXModGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKVxuICAgICAgICAgICAgOiB0aGlzLl9zdWdnZXN0aW9ucy5maWx0ZXIoKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zb21lKChpdGVtKSA9PiBlcXVhbChpdGVtLnZhbHVlLCB2YWx1ZS52YWx1ZSkpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9ICEhdGFyZ2V0LmNsb3Nlc3QoJy5mZC1tdWx0aS1jb21ib2JveF9fbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zWzBdLmxhYmVsID09PSB0aGlzLmlucHV0VGV4dCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLl9zdWdnZXN0aW9uc1swXS5zZWxlY3RlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uKHRoaXMuX3N1Z2dlc3Rpb25zWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Nob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEEpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0QWxsSXRlbXMoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdEFsbEl0ZW1zKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcHRpb25DbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS5cbiAgICAgKi9cbiAgICBfZGlhbG9nRGlzbWlzcyhiYWNrdXA6IFNlbGVjdGFibGVPcHRpb25JdGVtW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IFsuLi5iYWNrdXBdO1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLl9zaG93TGlzdChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBfZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9wb3Zlck9wZW5DaGFuZ2VIYW5kbGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuXG4gICAgICAgIC8qKiBBbGxvdyBjb21ib2JveCB1cCBhbmQgZG93biBhcnJvd3MgdG8gd29yayBwcm9wZXJseSB3aGVuIG11bHRpIGNvbWJvYm94IGlzIGluc2lkZSBhIGRpYWxvZyB3aXRoIGEgdHJhcHBlZCBmb2N1cyAqL1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlLnVucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9jdmEub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIHNlbGVjdCBwb3BvdmVyIGJvZHkuICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgc2VsZWN0IHBvcG92ZXIgYm9keS4gKi9cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNob3duJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93TGlzdChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLm5leHQoaXNPcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaFRlcm1DaGFuZ2VkKHRleHQ6IHN0cmluZyA9IHRoaXMuaW5wdXRUZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCB0ZXh0KTtcblxuICAgICAgICBpZiAoIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIHRoaXMuX21hcExpbWl0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8ubWF0Y2gobWFwKTtcblxuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgQ2xpY2sgb24gQnV0dG9uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9vblByaW1hcnlCdXR0b25DbGljayhpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bk9uQWRkT25DbGlja2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TGlzdCghaXNPcGVuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIEtleWRvd24gb24gSW5wdXRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX29uSW5wdXRLZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3ZhLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgtMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFsuLi50aGlzLl9ub25PcGVuaW5nS2V5cywgQ09OVFJPTF0pKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TGlzdCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY2VwdGVkS2V5cyA9XG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnYWxwaGFiZXRpY2FsJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdudW1lcmljJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdpbWUnKTtcbiAgICAgICAgICAgIGlmIChhY2NlcHRlZEtleXMpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXRUaW1lb3V0IGlzIG5lZWRlZCBmb3IgaW5wdXQgdG8gcmVjZWl2ZSBuZXcgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Py5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBfaGFuZGxlTGlzdEZvY3VzRXNjYXBlKGRpcmVjdGlvbjogRm9jdXNFc2NhcGVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2FkZE9uQ2xpY2tlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkT25CdXR0b25DbGlja2VkLmVtaXQoJGV2ZW50KTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fb25QcmltYXJ5QnV0dG9uQ2xpY2sodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0TGltaXRsZXNzKGxpbWl0bGVzczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbWl0bGVzcyA9IGxpbWl0bGVzcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRNYXBMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5saW1pdGxlc3MgPyAodGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgYXMgYW55W10pLmxlbmd0aCA6IHRoaXMuX21hcExpbWl0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldEdyb3VwSXRlbUlkcyhncm91cEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtSWRzID0gdGhpcy5pdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFdpdGhHcm91cCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZC13aXRoLWdyb3VwLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJZHggPSBpZFdpdGhHcm91cC5zcGxpdCgnLScpW2lkV2l0aEdyb3VwLnNwbGl0KCctJykubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwSWR4ID09PSBTdHJpbmcoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoZWwpID0+IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBJdGVtSWRzPy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEl0ZXJhdGUgb3ZlciBldmVyeSBpdGVtIGFuZCBwZXJmb3JtIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25FdmVyeUl0ZW0oaXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10sIGNhbGxiYWNrOiAoaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soaXRlbSk7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkV2ZXJ5SXRlbShpdGVtLmNoaWxkcmVuLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQodGV4dCA9IHRoaXMuaW5wdXRUZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBnZXRTZWxlY3RJdGVtQnlJbnB1dFZhbHVlPFQ+KHRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnMsIHRleHQpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBzZXQgaW5wdXQgdGV4dCBhcyBpdGVtIGxhYmVsLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldElucHV0VGV4dEZyb21PcHRpb25JdGVtKGl0ZW06IE9wdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBpdGVtLmxhYmVsO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBhcHBseWluZyByYW5nZSBzZWxlY3Rpb24uIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgY29tYm9ib3ggaXRlbSdzIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkxpc3RFbGVtZW50Q2xpY2tlZChldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGF0IHRoaXMgcG9pbnQsIHNvIGl0IGNhbiBiZSBzYWZlbHkgdXNlZFxuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9uc1tpbmRleF0uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKGluZGV4LCBldmVudCk7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9mbGF0U3VnZ2VzdGlvbnNbaWR4XTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LnNlbGVjdGVkICE9PSBzZWxlY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92aW5nIGZyb20gXCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmVTZXQuYWRkKGN1cnJlbnQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZGluZyBjdXJyZW50IGl0ZW0gdG8gXCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZCA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmlsdGVyKChzKSA9PiAhdG9SZW1vdmVTZXQuaGFzKHMudmFsdWUpKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLm9uUmVzaXplKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UoZW1pdEluTW9iaWxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGVtaXRJbk1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwQW5kVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7IGxpc3RUZW1wbGF0ZTogdGhpcy5saXN0VGVtcGxhdGUsIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5tb2JpbGVDb250cm9sVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyUmVmOiB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBpbmplY3RvciB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHBpY2tzIG90aGVyIHZhbHVlIG1vdmVkIGZyb20gY3VycmVudCBvbmUgYnkgb2Zmc2V0LCBjYWxsZWQgb25seSB3aGVuIE11bHRpIENvbWJvYm94IGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlID0gZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZTxUPih0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaW5wdXRUZXh0ICYmIG9mZnNldCA9PT0gLTEgPyB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA6IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zW3Bvc2l0aW9uXTtcblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5wdXRUZXh0RnJvbU9wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gaXRlbT8ubGFiZWwpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbShvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0V2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmF1dG9SZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5faW5wdXRHcm91cC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uc0xpc3RXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9pbnB1dEdyb3VwLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gYm9keS5vZmZzZXRXaWR0aCAtIGJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLmF1dG9SZXNpemUgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbEJhcldpZHRoIC0gcmVjdC5sZWZ0IDogdGhpcy5taW5XaWR0aDtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBc3NpZ24gY3VzdG9tIHRlbXBsYXRlc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuZm9yRWFjaCgodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGUubmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbkl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwSXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmRhcnlJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RlZEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveFwiPlxuICAgIEBpZiAobW9iaWxlKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXBvcG92ZXItY3VzdG9tLWxpc3QgZmQtbXVsdGktY29tYm9ib3hfX2xpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiX3BvcG92ZXJPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICAgICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfY3ZhLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFttYXhXaWR0aF09XCJfcG9wb3Zlck1heFdpZHRoXCJcbiAgICAgICAgICAgIFtmaWxsQ29udHJvbE1vZGVdPVwiZmlsbENvbnRyb2xNb2RlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keSBbc3R5bGUud2lkdGguJV09XCIhYXV0b1Jlc2l6ZSAmJiAxMDBcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICAgICAjaW5wdXRHcm91cFxuICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWQgKyAnLWlucHV0LWdyb3VwLWNvbnRhaW5lcidcIlxuICAgICAgICAgICAgW3N0YXRlXT1cIl9jdmEuc3RhdGVcIlxuICAgICAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCIhX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiIV9jdmEucmVhZG9ubHkgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICcgJ1wiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCIhbW9iaWxlICYmIGlzT3BlbiAmJiBfc3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cIl9jdmEuYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiYWRkb25JY29uVGl0bGUgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJfYWRkT25DbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiAhaXNPcGVuICYmIF9vblByaW1hcnlCdXR0b25DbGljayhmYWxzZSlcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiX25hdmlnYXRlQnlUb2tlbnMoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC10b2tlbml6ZXJcbiAgICAgICAgICAgICAgICBbdG9rZW5pemVyRm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY29tcGFjdENvbGxhcHNlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93T3ZlcmZsb3dQb3BvdmVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAjdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveC10b2tlbml6ZXItY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAobW9yZUNsaWNrZWRFdmVudCk9XCJfbW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICAgICAgICAgZmRNdWx0aUFubm91bmNlclxuICAgICAgICAgICAgICAgIFttdWx0aUFubm91bmNlck9wdGlvbnNdPVwiX3N1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yICh0b2tlbiBvZiBfc2VsZWN0ZWRTdWdnZXN0aW9uczsgdHJhY2sgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuIFtyZWFkT25seV09XCJfY3ZhLmRpc2FibGVkXCIgKG9uQ2xvc2VDbGljayk9XCJfcmVtb3ZlVG9rZW4odG9rZW4sICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRva2VuLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAob25Db21wbGV0ZSk9XCJfb25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIl9zdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlTXVsdGlDb21ib0JveC5tdWx0aUNvbWJvQm94QXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9jdmEuYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/ICdsaXN0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyBfY3ZhLmlkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJfY3ZhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3NlYXJjaFRlcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJfc2VsZWN0ZWRTdWdnZXN0aW9ucy5sZW5ndGggPyBudWxsIDogX2N2YS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJ0b2tlbml6ZXIuX3Nob3dBbGxUb2tlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIiFtb2JpbGUgJiYgX29uQmx1cigkZXZlbnQpOyB0b2tlbml6ZXIuX2hpZGVUb2tlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cIl9jdmEucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZuXT1cIl9kaXNwbGF5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplcl9faW5wdXQgZmQtaW5wdXQtZ3JvdXBfX2lucHV0XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG4gICAgICAgIEBpZiAobW9iaWxlICYmIGlzT3BlbiA/IGZhbHNlIDogISFfY3ZhLnN0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJfY3ZhLnN0YXRlXCIgW2lubmVySHRtbF09XCJfY3ZhLnN0YXRlTWVzc2FnZVwiPjwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICB9XG4gICAgPC9mZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVDb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgIFtpZF09XCJfY3ZhLmlkICsgJy1pbnB1dC1ncm91cC1jb250YWluZXInXCJcbiAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICBbc3RhdGVdPVwiX2N2YS5zdGF0ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiZmFsc2VcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZCB8fCBfY3ZhLnJlYWRvbmx5XCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBpc09wZW4gJiYgX3N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwiX2N2YS5yZWFkb25seVwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJfY3ZhLmFyaWFMYWJlbFwiXG4gICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwiX29uQ29tcGxldGVUZXJtKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiX3N1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZU11bHRpQ29tYm9Cb3gubXVsdGlDb21ib0JveEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2N2YS5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/ICdsaXN0JyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gX2N2YS5pZCArICctcmVzdWx0JyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWRcIlxuICAgICAgICAgICAgW25hbWVdPVwiX2N2YS5uYW1lXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfc2VhcmNoVGVybUNoYW5nZWQoKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiX2N2YS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiX2N2YS5vblRvdWNoZWQoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCIhbW9iaWxlICYmIF9vbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJfZGlzcGxheUZuXCJcbiAgICAgICAgLz5cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRlbXBsYXRlPlxuICAgIDx1bFxuICAgICAgICBmZC1saXN0XG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgW3NlbGVjdGlvbl09XCJieWxpbmVcIlxuICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cIl9oYW5kbGVMaXN0Rm9jdXNFc2NhcGUoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiZmQtbXVsdGktY29tYm9ib3hfX2xpc3QgZmQtbGlzdC0tbXVsdGktaW5wdXRcIlxuICAgICAgICBbaWRdPVwiX2N2YS5pZCArICctcmVzdWx0J1wiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiIW1vYmlsZSAmJiBtYXhIZWlnaHRcIlxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIiFtb2JpbGUgJiYgbWluV2lkdGhcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImF1dG9SZXNpemUgJiYgbWF4V2lkdGhcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2N2YS5pZCArICctc2VhcmNoJ1wiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgKGtleWRvd24udGFiKT1cImNsb3NlKClcIlxuICAgICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwiY2xvc2UoKVwiXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZSgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoISFfY3ZhLnN0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJfY3ZhLnN0YXRlXCIgW2lubmVySHRtbF09XCJfY3ZhLnN0YXRlTWVzc2FnZVwiPjwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2hvd1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgPGZkLW11bHRpLWNvbWJvYm94LXNlbGVjdC1hbGwtdG9nZ2xlclxuICAgICAgICAgICAgICAgIFtzZWxlY3RBbGxIYW5kbGVyXT1cIl9oYW5kbGVTZWxlY3RBbGxJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlQ2hhbmdlc109XCJzZWxlY3Rpb25DaGFuZ2VcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbZmxhdEl0ZW1zXT1cIl9mbGF0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgPjwvZmQtbXVsdGktY29tYm9ib3gtc2VsZWN0LWFsbC10b2dnbGVyPlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgQGlmIChpc0dyb3VwKSB7XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBfc3VnZ2VzdGlvbnM7IHRyYWNrIGdyb3VwOyBsZXQgZ3JvdXBJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAoIWdyb3VwSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWdyb3VwLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYVJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZU11bHRpQ29tYm9Cb3gubGlzdEdyb3VwSGVhZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ3JvdXAubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IGdyb3VwLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBsYWJlbDogZ3JvdXAubGFiZWwgfSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbkl0ZW0gb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrIG9wdGlvbkl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAjaXRlbT1cImZkTGlzdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiIW1vYmlsZSAmJiBfb25PcHRpb25DbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uSXRlbUtleURvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhb3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZC13aXRoLWdyb3VwLWluZGV4XT1cIml0ZW0uaWQgKyAnLWdyb3VwLScgKyBncm91cEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJncm91cC5jaGlsZHJlbj8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAZm9yIChvcHRpb25JdGVtIG9mIF9zdWdnZXN0aW9uczsgdHJhY2sgb3B0aW9uSXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIhbW9iaWxlICYmIF9vbk9wdGlvbkNsaWNrZWQoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhb3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbk9wdGlvbkNoZWNrYm94Q2xpY2tlZCgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI2xpc3RJdGVtPlxuICAgIEBpZiAob3B0aW9uSXRlbS5zZWxlY3RlZCAmJiAhIXNlbGVjdGVkSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb25JdGVtLnZhbHVlLCBpbmRleDogaW5kZXggfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIH1cbiAgICBAaWYgKCEob3B0aW9uSXRlbS5zZWxlY3RlZCAmJiBzZWxlY3RlZEl0ZW1UZW1wbGF0ZSkpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtU291cmNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpbmRleCB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2Vjb25kYXJ5VGV4dFNvdXJjZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI29wdGlvbkl0ZW1Tb3VyY2U+XG4gICAgQGlmICghb3B0aW9uSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJvcHRpb25JdGVtLmxhYmVsXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9uSXRlbS5sYWJlbCB8IGhpZ2hsaWdodDogaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIGZkVHJ1bmNhdGVkVGl0bGVcbiAgICAgICAgPjwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb25JdGVtLnZhbHVlLCBpbmRleDogaW5kZXggfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgbGV0LW9wdGlvbkl0ZW09XCJvcHRpb25JdGVtXCIgI3NlY29uZGFyeVRleHRTb3VyY2U+XG4gICAgQGlmIChzaG93U2Vjb25kYXJ5VGV4dCkge1xuICAgICAgICBAaWYgKCFzZWNvbmRhcnlJdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwic2Vjb25kYXJ5VGV4dEFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1zZWNvbmRhcnlcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJvcHRpb25JdGVtLnNlY29uZGFyeVRleHRcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9uSXRlbS5zZWNvbmRhcnlUZXh0IHwgaGlnaGxpZ2h0OiBpbnB1dFRleHRcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWNvbmRhcnlJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uSXRlbS52YWx1ZSB9XCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { MultiComboboxComponent } from './multi-combobox.component';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\nimport * as i0 from \"@angular/core\";\nexport class MultiComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, imports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective], exports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, imports: [MultiComboboxComponent, SelectAllTogglerComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective],\n exports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQU05RixNQUFNLE9BQU8sbUJBQW1COzhHQUFuQixtQkFBbUI7K0dBQW5CLG1CQUFtQixZQUhsQixzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsYUFDMUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCOytHQUUzRSxtQkFBbUIsWUFIbEIsc0JBQXNCLEVBQUUseUJBQXlCOzsyRkFHbEQsbUJBQW1CO2tCQUovQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixDQUFDO29CQUNyRixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsQ0FBQztpQkFDeEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXVsdGlBbm5vdW5jZXJEaXJlY3RpdmUgfSBmcm9tICcuL211bHRpLWFubm91bmNlci9tdWx0aS1hbm5vdW5jZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE11bHRpQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tICcuL211bHRpLWNvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW011bHRpQ29tYm9ib3hDb21wb25lbnQsIFNlbGVjdEFsbFRvZ2dsZXJDb21wb25lbnQsIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbTXVsdGlDb21ib2JveENvbXBvbmVudCwgU2VsZWN0QWxsVG9nZ2xlckNvbXBvbmVudCwgTXVsdGlBbm5vdW5jZXJEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtbXVsdGktY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtbXVsdGktY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-multi-combobox.mjs","sources":["../tmp-esm2022/multi-combobox/multi-announcer/multi-announcer.directive.js","../tmp-esm2022/multi-combobox/helpers.js","../tmp-esm2022/multi-combobox/models/selection-change.event.js","../tmp-esm2022/multi-combobox/multi-combobox-config.js","../tmp-esm2022/multi-combobox/base-multi-combobox.class.js","../tmp-esm2022/multi-combobox/multi-combobox.token.js","../tmp-esm2022/multi-combobox/mobile/mobile-multi-combobox.component.js","../tmp-esm2022/multi-combobox/data-source/multi-combobox-data-source.js","../tmp-esm2022/multi-combobox/data-source/multi-combobox-data-source-parser.js","../tmp-esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.js","../tmp-esm2022/multi-combobox/multi-combobox.component.js","../tmp-esm2022/multi-combobox/multi-combobox.module.js","../tmp-esm2022/multi-combobox/fundamental-ngx-core-multi-combobox.js"],"sourcesContent":["import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentChildren, Directive, HostListener, inject, Input, QueryList } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent } from '@fundamental-ngx/core/token';\nimport { resolveTranslationSyncFn } from '@fundamental-ngx/i18n';\nimport * as i0 from \"@angular/core\";\nexport class MultiAnnouncerDirective {\n constructor() {\n /** @hidden */\n this._noResultsAnnounced = false;\n /** @hidden */\n this._resultsAnnounced = false;\n /** @hidden */\n this._announcement = '';\n /** @hidden */\n this._liveAnnouncer = inject(LiveAnnouncer);\n /** @hidden */\n this._resolveTranslation = resolveTranslationSyncFn();\n }\n /** @hidden */\n _makeSearchTermChangeAnnouncements(event) {\n if (KeyUtil.isKeyType(event, 'alphabetical') || KeyUtil.isKeyType(event, 'numeric')) {\n this._liveAnnouncer.clear();\n const count = this.multiAnnouncerOptions?.length;\n if (!count && !this._noResultsAnnounced) {\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.noResults'));\n this._noResultsAnnounced = true;\n this._resultsAnnounced = false;\n }\n else if (count) {\n const trKey = count === 1 ? 'coreMultiInput.countListResultsSingular' : 'coreMultiInput.countListResultsPlural';\n this._buildAnnouncement(this._resolveTranslation(trKey, { count }));\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.navigateSelectionsWithArrows'));\n if (!this._resultsAnnounced) {\n this._noResultsAnnounced = false;\n this._resultsAnnounced = true;\n }\n }\n if (this._tokens?.length) {\n this._buildAnnouncement(this._resolveTranslation('coreMultiInput.escapeNavigateTokens'));\n }\n this._makeAnnouncement(this._announcement);\n }\n }\n /** @hidden */\n _buildAnnouncement(message) {\n this._announcement = this._announcement + message + ' ';\n }\n /** @hidden */\n async _makeAnnouncement(message) {\n await this._liveAnnouncer.announce(message, 'assertive').then(() => {\n this._announcement = '';\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiAnnouncerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: MultiAnnouncerDirective, isStandalone: true, selector: \"[fdMultiAnnouncer]\", inputs: { multiAnnouncerOptions: \"multiAnnouncerOptions\" }, host: { listeners: { \"keyup\": \"_makeSearchTermChangeAnnouncements($event)\" } }, queries: [{ propertyName: \"_tokens\", predicate: TokenComponent, descendants: true }], exportAs: [\"fdMultiAnnouncer\"], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiAnnouncerDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdMultiAnnouncer]',\n exportAs: 'fdMultiAnnouncer',\n standalone: true\n }]\n }], propDecorators: { multiAnnouncerOptions: [{\n type: Input\n }], _tokens: [{\n type: ContentChildren,\n args: [TokenComponent, { descendants: true }]\n }], _makeSearchTermChangeAnnouncements: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tdWx0aS1hbm5vdW5jZXIvbXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUEyQix3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU8xRixNQUFNLE9BQU8sdUJBQXVCO0lBTHBDO1FBY0ksY0FBYztRQUNOLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQyxjQUFjO1FBQ04sc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLGNBQWM7UUFDTixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUUzQixjQUFjO1FBQ0csbUJBQWMsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZFLGNBQWM7UUFDTix3QkFBbUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0tBd0M1RDtJQXRDRyxjQUFjO0lBRUosa0NBQWtDLENBQUMsS0FBb0I7UUFDN0QsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLEtBQUssR0FDUCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDZDQUE2QyxDQUFDLENBQUMsQ0FBQztnQkFDakcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO29CQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7WUFDN0YsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sa0JBQWtCLENBQUMsT0FBZTtRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUM1RCxDQUFDO0lBRUQsY0FBYztJQUNOLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQzNDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTdEUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixrUEFNZixjQUFjOzsyRkFOdEIsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFJRyxxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS0UsT0FBTztzQkFEZCxlQUFlO3VCQUFDLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBb0I1QyxrQ0FBa0M7c0JBRDNDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbnRlbnRDaGlsZHJlbiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyLCByZXNvbHZlVHJhbnNsYXRpb25TeW5jRm4gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZE11bHRpQW5ub3VuY2VyXScsXG4gICAgZXhwb3J0QXM6ICdmZE11bHRpQW5ub3VuY2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlBbm5vdW5jZXJPcHRpb25zOiB1bmtub3duW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVG9rZW5Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcml2YXRlIF90b2tlbnM6IFF1ZXJ5TGlzdDxUb2tlbkNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vUmVzdWx0c0Fubm91bmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXN1bHRzQW5ub3VuY2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Fubm91bmNlbWVudCA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyID0gaW5qZWN0KExpdmVBbm5vdW5jZXIpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNvbHZlVHJhbnNsYXRpb24gPSByZXNvbHZlVHJhbnNsYXRpb25TeW5jRm4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBfbWFrZVNlYXJjaFRlcm1DaGFuZ2VBbm5vdW5jZW1lbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpIHx8IEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnbnVtZXJpYycpKSB7XG4gICAgICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubXVsdGlBbm5vdW5jZXJPcHRpb25zPy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIWNvdW50ICYmICF0aGlzLl9ub1Jlc3VsdHNBbm5vdW5jZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZEFubm91bmNlbWVudCh0aGlzLl9yZXNvbHZlVHJhbnNsYXRpb24oJ2NvcmVNdWx0aUlucHV0Lm5vUmVzdWx0cycpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub1Jlc3VsdHNBbm5vdW5jZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc3VsdHNBbm5vdW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cktleTogRmRMYW5ndWFnZUtleUlkZW50aWZpZXIgPVxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9PT0gMSA/ICdjb3JlTXVsdGlJbnB1dC5jb3VudExpc3RSZXN1bHRzU2luZ3VsYXInIDogJ2NvcmVNdWx0aUlucHV0LmNvdW50TGlzdFJlc3VsdHNQbHVyYWwnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkQW5ub3VuY2VtZW50KHRoaXMuX3Jlc29sdmVUcmFuc2xhdGlvbih0cktleSwgeyBjb3VudCB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRBbm5vdW5jZW1lbnQodGhpcy5fcmVzb2x2ZVRyYW5zbGF0aW9uKCdjb3JlTXVsdGlJbnB1dC5uYXZpZ2F0ZVNlbGVjdGlvbnNXaXRoQXJyb3dzJykpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcmVzdWx0c0Fubm91bmNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub1Jlc3VsdHNBbm5vdW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzdWx0c0Fubm91bmNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3Rva2Vucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRBbm5vdW5jZW1lbnQodGhpcy5fcmVzb2x2ZVRyYW5zbGF0aW9uKCdjb3JlTXVsdGlJbnB1dC5lc2NhcGVOYXZpZ2F0ZVRva2VucycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21ha2VBbm5vdW5jZW1lbnQodGhpcy5fYW5ub3VuY2VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYnVpbGRBbm5vdW5jZW1lbnQobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Fubm91bmNlbWVudCA9IHRoaXMuX2Fubm91bmNlbWVudCArIG1lc3NhZ2UgKyAnICc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9tYWtlQW5ub3VuY2VtZW50KG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKG1lc3NhZ2UsICdhc3NlcnRpdmUnKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Fubm91bmNlbWVudCA9ICcnO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=","import { isSelectItem } from '@fundamental-ngx/cdk/forms';\nimport { isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport equal from 'fast-deep-equal';\n/** @hidden */\nexport function lookupValue(item, lookupKey) {\n if (isSelectItem(item)) {\n return lookupKey && item ? item.value[lookupKey] : item.value;\n }\n else {\n return lookupKey && item ? item[lookupKey] : item;\n }\n}\n/** @hidden */\nexport function displayValue(item, displayKey) {\n if (isSelectItem(item)) {\n return item.label;\n }\n else if (isJsObject(item) && displayKey) {\n const currentItem = objectGet(item, displayKey);\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n else {\n return item;\n }\n}\n/** @hidden */\nexport function objectGet(obj, is) {\n if (!isJsObject(obj)) {\n return obj;\n }\n else if (isString(is)) {\n return objectGet(obj, is.split('.'));\n }\n else if (!is?.length) {\n return obj;\n }\n else {\n return objectGet(obj[is[0]], is.slice(1));\n }\n}\n/** @hidden */\nexport function getSelectItemByInputValue(suggestions, needleValue) {\n return suggestions.find((value) => value.label === needleValue);\n}\n/** @hidden\n * Map grouped values to array. */\nexport function flattenGroups(items) {\n return items.reduce((result, item) => result.concat(item.children ?? []), []);\n}\n/** @hidden */\nexport function getTokenIndexByIdlOrValue(item, suggestions) {\n return suggestions.findIndex((token) => token.id === item.id || equal(token.value, item.value));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQXdCLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFFcEMsY0FBYztBQUNkLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBYSxFQUFFLFNBQWlCO0lBQ3hELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xFLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQWUsQ0FBQztJQUNsRSxDQUFDO0FBQ0wsQ0FBQztBQUVELGNBQWM7QUFDZCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWEsRUFBRSxVQUFrQjtJQUMxRCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO1NBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVoRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNqRSxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sSUFBYyxDQUFDO0lBQzFCLENBQUM7QUFDTCxDQUFDO0FBRUQsY0FBYztBQUNkLE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBWSxFQUFFLEVBQWlDO0lBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNMLENBQUM7QUFFRCxjQUFjO0FBQ2QsTUFBTSxVQUFVLHlCQUF5QixDQUNyQyxXQUFzQyxFQUN0QyxXQUFtQjtJQUVuQixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVEO21DQUNtQztBQUNuQyxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBMEIsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELGNBQWM7QUFDZCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBMEIsRUFBRSxXQUFtQztJQUNyRyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTZWxlY3RJdGVtLCBTZWxlY3RhYmxlT3B0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSnNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwVmFsdWUoaXRlbTogdW5rbm93biwgbG9va3VwS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc1NlbGVjdEl0ZW0oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cEtleSAmJiBpdGVtID8gaXRlbS52YWx1ZVtsb29rdXBLZXldIDogaXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9va3VwS2V5ICYmIGl0ZW0gPyBpdGVtW2xvb2t1cEtleV0gOiAoaXRlbSBhcyBzdHJpbmcpO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5VmFsdWUoaXRlbTogdW5rbm93biwgZGlzcGxheUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNTZWxlY3RJdGVtKGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdChpdGVtKSAmJiBkaXNwbGF5S2V5KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gb2JqZWN0R2V0KGl0ZW0sIGRpc3BsYXlLZXkpO1xuXG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGN1cnJlbnRJdGVtKSA/IGN1cnJlbnRJdGVtKCkgOiBjdXJyZW50SXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXRlbSBhcyBzdHJpbmc7XG4gICAgfVxufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEdldChvYmo6IHVua25vd24sIGlzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IGFueSB7XG4gICAgaWYgKCFpc0pzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGlzKSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0R2V0KG9iaiwgaXMuc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIGlmICghaXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvYmplY3RHZXQob2JqW2lzWzBdXSwgaXMuc2xpY2UoMSkpO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RJdGVtQnlJbnB1dFZhbHVlPFQ+KFxuICAgIHN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdLFxuICAgIG5lZWRsZVZhbHVlOiBzdHJpbmdcbik6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmluZCgodmFsdWUpID0+IHZhbHVlLmxhYmVsID09PSBuZWVkbGVWYWx1ZSk7XG59XG5cbi8qKiBAaGlkZGVuXG4gKiAgTWFwIGdyb3VwZWQgdmFsdWVzIHRvIGFycmF5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5Hcm91cHMoaXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHJlc3VsdC5jb25jYXQoaXRlbS5jaGlsZHJlbiA/PyBbXSksIDxTZWxlY3RhYmxlT3B0aW9uSXRlbVtdPltdKTtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtLCBzdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmlkID09PSBpdGVtLmlkIHx8IGVxdWFsKHRva2VuLnZhbHVlLCBpdGVtLnZhbHVlKSk7XG59XG4iXX0=","export class MultiComboboxSelectionChangeEvent {\n /**\n * Multi Combobox selection change event\n * @param source Multi Combobox component\n * @param selectedItems Selected items\n */\n constructor(source, selectedItems // Contains selected items\n ) {\n this.source = source;\n this.selectedItems = selectedItems;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWNoYW5nZS5ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2RlbHMvc2VsZWN0aW9uLWNoYW5nZS5ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8saUNBQWlDO0lBQzFDOzs7O09BSUc7SUFDSCxZQUNXLE1BQXlCLEVBQ3pCLGFBQTRDLENBQUMsMEJBQTBCOztRQUR2RSxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBK0I7SUFDcEQsQ0FBQztDQUNQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0YWJsZU9wdGlvbkl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlTXVsdGlDb21ib2JveCB9IGZyb20gJy4uL2Jhc2UtbXVsdGktY29tYm9ib3guY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBNdWx0aSBDb21ib2JveCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50XG4gICAgICogQHBhcmFtIHNvdXJjZSBNdWx0aSBDb21ib2JveCBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRJdGVtcyBTZWxlY3RlZCBpdGVtc1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc291cmNlOiBCYXNlTXVsdGlDb21ib2JveCxcbiAgICAgICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtWyd2YWx1ZSddIC8vIENvbnRhaW5zIHNlbGVjdGVkIGl0ZW1zXG4gICAgKSB7fVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport * as i0 from \"@angular/core\";\n// import { PlatformConfig } from '@fundamental-ngx/platform/shared';\n/**\n * Default options for Multi-Combobox\n */\nexport class MultiComboboxConfig {\n constructor() {\n /**\n * String matching strategy for typeahead list. Default: 'starts with per term'\n */\n this.matchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n /**\n * Maps data providers\n */\n this.providers = new Map();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFHbEYscUVBQXFFO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQU9JOztXQUVHO1FBQ0gscUJBQWdCLEdBQXFCLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBRTNFOztXQUVHO1FBQ0gsY0FBUyxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBaUJoRTs4R0EvQlksbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFQcm92aWRlciwgTWF0Y2hpbmdTdHJhdGVneSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcblxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG4vLyBpbXBvcnQgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcblxuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIE11bHRpLUNvbWJvYm94XG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveENvbmZpZyB7XG4gICAgLyoqXG4gICAgICogQ29udGVudCBEZW5zaXR5IG9mIGVsZW1lbnQuICdjb3p5JyB8ICdjb21wYWN0J1xuICAgICAqL1xuICAgIGNvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eTtcblxuICAgIC8qKlxuICAgICAqIFN0cmluZyBtYXRjaGluZyBzdHJhdGVneSBmb3IgdHlwZWFoZWFkIGxpc3QuIERlZmF1bHQ6ICdzdGFydHMgd2l0aCBwZXIgdGVybSdcbiAgICAgKi9cbiAgICBtYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID0gTWF0Y2hpbmdTdHJhdGVneS5TVEFSVFNfV0lUSF9QRVJfVEVSTTtcblxuICAgIC8qKlxuICAgICAqIE1hcHMgZGF0YSBwcm92aWRlcnNcbiAgICAgKi9cbiAgICBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIERhdGFQcm92aWRlcjxhbnk+PiB8IG51bGwgPSBuZXcgTWFwKCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgUHJvdmlkZXIgZmFjdG9yeSBmdW5jdGlvblxuICAgICAqL1xuICAgIC8vIHN0YXRpYyBjcmVhdGVQcm92aWRlckZhY3RvcnkoXG4gICAgLy8gICAgIG9iajogUGFydGlhbDxNdWx0aUNvbWJvYm94Q29uZmlnPlxuICAgIC8vICk6IChwbGF0Zm9ybUNvbmZpZzogUGxhdGZvcm1Db25maWcpID0+IE11bHRpQ29tYm9ib3hDb25maWcge1xuICAgIC8vICAgICBjb25zdCB1c2VGYWN0b3J5ID0gKHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybUNvbmZpZyk6IE11bHRpQ29tYm9ib3hDb25maWcgPT5cbiAgICAvLyAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3IE11bHRpQ29tYm9ib3hDb25maWcocGxhdGZvcm1Db25maWcpLCBvYmopO1xuICAgIC8vICAgICByZXR1cm4gdXNlRmFjdG9yeTtcbiAgICAvLyB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGNvbnN0cnVjdG9yKHBsYXRmb3JtQ29uZmlnOiBQbGF0Zm9ybUNvbmZpZykge1xuICAgIC8vICAgICB0aGlzLmNvbnRlbnREZW5zaXR5ID0gcGxhdGZvcm1Db25maWcuY29udGVudERlbnNpdHk7XG4gICAgLy8gfVxufVxuIl19","import { ALT, BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectorRef, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport { CvaControl, CvaDirective, isOptionItem, isSelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector, coerceArraySafe, isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport equal from 'fast-deep-equal';\nimport { BehaviorSubject, Subscription, skip, startWith, timer } from 'rxjs';\nimport { displayValue, flattenGroups, lookupValue, objectGet } from './helpers';\nimport { MultiComboboxSelectionChangeEvent } from './models/selection-change.event';\nimport { MultiComboboxConfig } from './multi-combobox-config';\nimport { FD_MAP_LIMIT } from './multi-combobox.component';\nimport * as i0 from \"@angular/core\";\nexport class BaseMultiCombobox {\n constructor() {\n // Injection section\n /** @hidden */\n this.cvaControl = inject(CvaControl);\n /** @hidden */\n this.dataSourceDirective = inject(DataSourceDirective);\n /** Control Value Accessor directive for forms support. */\n this._cva = inject((CvaDirective), {\n self: true\n });\n /** Multi combobox config. */\n this._multiComboboxConfig = inject(MultiComboboxConfig, {\n optional: true\n });\n /** Content Density Observer */\n this.contentDensityObserver = inject(ContentDensityObserver);\n /**\n * @hidden\n * List of selected suggestions\n */\n this._selectedSuggestions = [];\n /**\n * @hidden\n * Grouped suggestions mapped to array.\n */\n this._flatSuggestions = [];\n /** @hidden */\n this._fullFlatSuggestions = [];\n /** @hidden */\n this.selectedShown$ = new BehaviorSubject(false);\n /** @Hidden */\n this._elmRef = inject((ElementRef));\n /** @hidden */\n this._cd = inject(ChangeDetectorRef);\n /** @hidden */\n this._mapLimit = inject(FD_MAP_LIMIT);\n /** @Hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._matchingStrategy = this._multiComboboxConfig?.matchingStrategy ?? MatchingStrategy.CONTAINS;\n /** @hidden */\n this._dsSubscription = null;\n /** @hidden */\n this._element = this._elmRef.nativeElement;\n /**\n * @hidden\n * Keys, that won't trigger the popover's open state, when dispatched on search input.\n */\n this._nonOpeningKeys = [\n BACKSPACE,\n ESCAPE,\n ENTER,\n CONTROL,\n TAB,\n SHIFT,\n UP_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n LEFT_ARROW,\n ALT\n ];\n /** @hidden */\n this._rangeSelector = new RangeSelector();\n /** @hidden */\n this._dataSourceChanged = false;\n /** @hidden */\n this._displayFn = (value) => displayValue(value, this.displayKey);\n /** @hidden */\n this._secondaryFn = (value) => {\n if (isOptionItem(value)) {\n return value.secondaryText ?? '';\n }\n else if (isJsObject(value) && this.secondaryKey) {\n const currentItem = objectGet(value, this.secondaryKey);\n return isFunction(currentItem) ? currentItem() : currentItem;\n }\n else {\n return value;\n }\n };\n }\n /** @hidden */\n writeValue(value) {\n this.selectedItems = coerceArraySafe(value);\n this._cva.writeValue(this.selectedItems);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n /**\n * Used to change the value of a control.\n * @param value the value to be applied\n * @param emitOnChange whether to emit \"onChange\" event.\n * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n */\n setValue(value, emitOnChange = true) {\n this.selectedItems = coerceArraySafe(value);\n this._cva.setValue(this.selectedItems, emitOnChange);\n this._setSelectedSuggestions();\n this._emitChangeEvent();\n }\n /**\n * @hidden\n * Method to emit change event\n */\n _emitChangeEvent() {\n const event = new MultiComboboxSelectionChangeEvent(this, this.selectedItems);\n this.selectionChange.emit(event);\n }\n /** @hidden */\n _setSelectedSuggestions() {\n this._selectedSuggestions = [];\n if (!this.selectedItems?.length) {\n return;\n }\n for (let i = 0; i <= this.selectedItems.length; i++) {\n const selectedItem = this.selectedItems[i];\n const idx = this._fullFlatSuggestions.findIndex((item) => item.label === selectedItem || item.value === selectedItem);\n if (idx !== -1) {\n this._selectedSuggestions.push(this._fullFlatSuggestions[idx]);\n this._fullFlatSuggestions[idx].selected = true;\n }\n }\n this._cd.detectChanges();\n }\n /**\n * Convert original data to SelectableOptionItems Interface\n * @hidden\n */\n _convertToOptionItems(items) {\n const item = items[0];\n const elementTypeIsOptionItem = isSelectableOptionItem(item);\n if (elementTypeIsOptionItem) {\n return items;\n }\n const elementTypeIsObject = isJsObject(item);\n if (elementTypeIsObject) {\n return this._convertObjectsToOptionItems(items);\n }\n const elementTypeIsString = isString(item);\n if (elementTypeIsString) {\n return this._convertPrimitiveToOptionItems(items);\n }\n return [];\n }\n /**\n * Convert data to SelectableOptionItems Interface\n * @hidden\n */\n _convertObjectsToOptionItems(items) {\n if (this.isGroup) {\n return this._convertObjectsToGroupOptionItems(items);\n }\n else if (this.showSecondaryText && this.secondaryKey) {\n return this._convertObjectsToSecondaryOptionItems(items);\n }\n else {\n return this._convertObjectsToDefaultOptionItems(items);\n }\n }\n /**\n * Convert object[] data to Group OptionItems Interface\n * @hidden\n */\n _convertObjectsToGroupOptionItems(items) {\n const group = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const keyValue = item[this.groupKey];\n if (!keyValue) {\n continue;\n }\n if (!group[keyValue]) {\n group[keyValue] = [];\n }\n group[keyValue].push(item);\n }\n return Object.keys(group).map((key) => {\n const selectItem = {\n label: key,\n value: null,\n isGroup: true\n };\n const currentGroup = group[key];\n if (this.showSecondaryText && this.secondaryKey) {\n selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n }\n else {\n selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n }\n return selectItem;\n });\n }\n /**\n * Convert T[] data to Secondary SelectableOptionItems<T> Interface\n * @hidden\n */\n _convertObjectsToSecondaryOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: displayValue(value, this.displayKey),\n id: lookupValue(value, this.lookupKey),\n secondaryText: objectGet(value, this.secondaryKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /**\n * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n * @hidden\n */\n _convertPrimitiveToOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: value,\n id: lookupValue(value, this.lookupKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /**\n * Convert T[] to SelectableOptionItems<T> Interface (Default)\n * @hidden\n */\n _convertObjectsToDefaultOptionItems(items) {\n const selectItems = [];\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n selectItems.push({\n label: displayValue(value, this.displayKey),\n id: lookupValue(value, this.lookupKey),\n value,\n selected: this.selectedItems?.includes(value) || false\n });\n }\n return selectItems;\n }\n /** @hidden */\n _setInvalidEntry() {\n if (this._previousState || this._previousStateMessage) {\n return;\n }\n this._previousState = this._cva.state;\n this._cva.state = 'error';\n this._previousStateMessage = this._cva.stateMessage;\n this._cva.stateMessage = this.invalidEntryMessage;\n this._cd.markForCheck();\n }\n /** @hidden */\n _unsetInvalidEntry() {\n this._cva.state = this._previousState;\n this._previousState = undefined;\n this._cva.stateMessage = this._previousStateMessage;\n this._previousStateMessage = undefined;\n this._cd.markForCheck();\n }\n /** @hidden */\n _focusToSearchField() {\n this.searchInputElement?.nativeElement.focus();\n }\n /** @hidden */\n _mapAndUpdateModel() {\n const selectedItems = this._selectedSuggestions.map(({ value }) => value);\n const shouldEmitChangeEvent = !equal(this.selectedItems, selectedItems);\n if (!shouldEmitChangeEvent) {\n return;\n }\n this.writeValue(selectedItems);\n this._cva.onChange(selectedItems);\n this._emitChangeEvent();\n }\n /**\n * @hidden\n * Prepares the data stream and subscribes to it.\n */\n _openDataStream(matchingStrategy) {\n const dataSourceProvider = this.dataSourceDirective.dataSourceProvider;\n if (!dataSourceProvider) {\n throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n }\n dataSourceProvider.limitless = this.limitless;\n dataSourceProvider.dataProvider.setLookupKey(this.lookupKey);\n const matchingBy = {\n firstBy: this._displayFn\n };\n if (this.secondaryKey) {\n matchingBy.secondaryBy = this._secondaryFn;\n }\n dataSourceProvider.dataProvider.setMatchingBy(matchingBy);\n dataSourceProvider.dataProvider.setMatchingStrategy(matchingStrategy);\n // initial data fetch\n const map = new Map();\n map.set('query', '*');\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n }\n else {\n dataSourceProvider.dataProvider['defaultLimit'] = Number.MAX_SAFE_INTEGER;\n }\n dataSourceProvider.match(map);\n this._dsSubscription = new Subscription();\n this._dsSubscription.add(this.dataSourceDirective.dataSourceProvider?.dataRequested.subscribe(this.dataRequested));\n this._dsSubscription.add(this.dataSourceDirective.dataSourceProvider?.dataReceived.subscribe(this.dataReceived));\n this.dataSourceDirective.dataSourceChanged\n .pipe(startWith(true), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this._dataSourceChanged = true;\n });\n this.dataSourceDirective.dataChanged$.pipe(skip(0), takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n if (data.length === 0) {\n this._processingEmptyData();\n return;\n }\n this._previousInputText = this.inputText;\n this._parseDataSourceValue(data);\n this._cva.stateChanges.next('initDataSource.open().');\n this._cd.markForCheck();\n });\n }\n /**\n * Parses the data from the data stream and updates the model if needed.\n * @param data array of objects from the data stream.\n */\n _parseDataSourceValue(data) {\n this._convertDataSourceSuggestions(data);\n const selectedSuggestionsLength = this._selectedSuggestions.length;\n if (selectedSuggestionsLength > 0) {\n for (let i = 0; i < selectedSuggestionsLength; i++) {\n const selectedSuggestion = this._selectedSuggestions[i];\n const idx = this._suggestions.findIndex((item) => equal(item.value, selectedSuggestion.value));\n if (idx !== -1) {\n this._suggestions[idx].selected = true;\n }\n }\n }\n if (this._dataSourceChanged) {\n this._flatSuggestions = this.isGroup ? flattenGroups(this._suggestions) : this._suggestions;\n this._fullFlatSuggestions = this._flatSuggestions;\n this._setSelectedSuggestions();\n this._mapAndUpdateModel();\n this._dataSourceChanged = false;\n }\n }\n /**\n * Transforms plain array into `SelectableOptionItem<T>`\n * @param data\n */\n _convertDataSourceSuggestions(data) {\n this._suggestions = this._convertToOptionItems(data).map((optionItem) => {\n const selectedElement = this._selectedSuggestions.find((selectedItem) => selectedItem.id === optionItem.id);\n if (selectedElement) {\n optionItem.selected = selectedElement.selected;\n }\n return optionItem;\n });\n }\n /** @hidden */\n _processingEmptyData() {\n if (this._cva.disabled) {\n return;\n }\n if (this._cva.controlInvalid && this._cva.ngControl?.hasError) {\n this._setInvalidEntry();\n if (this._timerSub$) {\n this._timerSub$.unsubscribe();\n }\n }\n this.inputText = this._previousInputText;\n this._timerSub$ = timer(this.invalidEntryDisplayTime).subscribe(() => this._unsetInvalidEntry());\n this._cd.detectChanges();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: BaseMultiCombobox, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: BaseMultiCombobox, isStandalone: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: BaseMultiCombobox, decorators: [{\n type: Directive\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1jb21ib2JveC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9iYXNlLW11bHRpLWNvbWJvYm94LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxHQUFHLEVBQ0gsUUFBUSxFQUNYLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFnQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFjLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckcsT0FBTyxFQUNILFVBQVUsRUFDVixZQUFZLEVBR1osWUFBWSxFQUNaLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBWSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRixPQUFP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LENBQUM7WUFDNUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUV6QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OEdBbmdCaUIsaUJBQWlCO2tHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRHRDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFMVCxcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERhdGFTb3VyY2VEaXJlY3RpdmUsIE1hdGNoaW5nQnksIE1hdGNoaW5nU3RyYXRlZ3kgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1xuICAgIEN2YUNvbnRyb2wsXG4gICAgQ3ZhRGlyZWN0aXZlLFxuICAgIEZvcm1TdGF0ZXMsXG4gICAgU2VsZWN0YWJsZU9wdGlvbkl0ZW0sXG4gICAgaXNPcHRpb25JdGVtLFxuICAgIGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgTnVsbGFibGUsIFJhbmdlU2VsZWN0b3IsIGNvZXJjZUFycmF5U2FmZSwgaXNGdW5jdGlvbiwgaXNKc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBza2lwLCBzdGFydFdpdGgsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEZkTXVsdGlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2Vcbn0gZnJvbSAnLi9kYXRhLXNvdXJjZS9tdWx0aS1jb21ib2JveC1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBkaXNwbGF5VmFsdWUsIGZsYXR0ZW5Hcm91cHMsIGxvb2t1cFZhbHVlLCBvYmplY3RHZXQgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0aW9uLWNoYW5nZS5ldmVudCc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94Q29uZmlnIH0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC1jb25maWcnO1xuaW1wb3J0IHsgRkRfTUFQX0xJTUlUIH0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBUZXh0QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU11bHRpQ29tYm9ib3g8VCA9IGFueT4ge1xuICAgIGFic3RyYWN0IHNlbGVjdGVkSXRlbXM6IFRbXTtcbiAgICBhYnN0cmFjdCBncm91cDogYm9vbGVhbjtcbiAgICBhYnN0cmFjdCBncm91cEtleTogc3RyaW5nO1xuICAgIGFic3RyYWN0IGRpc3BsYXlLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBzZWNvbmRhcnlLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBzaG93U2Vjb25kYXJ5VGV4dDogYm9vbGVhbjtcbiAgICBhYnN0cmFjdCBsb29rdXBLZXk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBpbnZhbGlkRW50cnlNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuICAgIGFic3RyYWN0IGludmFsaWRFbnRyeURpc3BsYXlUaW1lOiBudW1iZXI7XG4gICAgYWJzdHJhY3QgbGltaXRsZXNzOiBib29sZWFuO1xuICAgIGFic3RyYWN0IGlzR3JvdXA6IGJvb2xlYW47XG4gICAgYWJzdHJhY3QgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBzZWFyY2hJbnB1dEVsZW1lbnQ6IE51bGxhYmxlPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xuXG4gICAgYWJzdHJhY3Qgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TXVsdGlDb21ib2JveFNlbGVjdGlvbkNoYW5nZUV2ZW50PjtcbiAgICBhYnN0cmFjdCBkYXRhUmVjZWl2ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcbiAgICBhYnN0cmFjdCBkYXRhUmVxdWVzdGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgLy8gSW5qZWN0aW9uIHNlY3Rpb25cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgY3ZhQ29udHJvbDogQ3ZhQ29udHJvbDxUPiA9IGluamVjdChDdmFDb250cm9sKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgZGF0YVNvdXJjZURpcmVjdGl2ZTogRGF0YVNvdXJjZURpcmVjdGl2ZTxULCBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+PiA9IGluamVjdChEYXRhU291cmNlRGlyZWN0aXZlKTtcblxuICAgIC8qKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIGRpcmVjdGl2ZSBmb3IgZm9ybXMgc3VwcG9ydC4gKi9cbiAgICByZWFkb25seSBfY3ZhID0gaW5qZWN0KEN2YURpcmVjdGl2ZTxUPiwge1xuICAgICAgICBzZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogTXVsdGkgY29tYm9ib3ggY29uZmlnLiAqL1xuICAgIHJlYWRvbmx5IF9tdWx0aUNvbWJvYm94Q29uZmlnID0gaW5qZWN0KE11bHRpQ29tYm9ib3hDb25maWcsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBDb250ZW50IERlbnNpdHkgT2JzZXJ2ZXIgKi9cbiAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyID0gaW5qZWN0KENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2Ygc2VsZWN0ZWQgc3VnZ2VzdGlvbnNcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWRTdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW08VD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHcm91cGVkIHN1Z2dlc3Rpb25zIG1hcHBlZCB0byBhcnJheS5cbiAgICAgKi9cbiAgICBfZmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mdWxsRmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkU2hvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQEhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZWxtUmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbWFwTGltaXQgPSBpbmplY3QoRkRfTUFQX0xJTUlUKTtcblxuICAgIC8qKiBASGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkTXVsdGlDb21ib2JveEFjY2VwdGFibGVEYXRhU291cmNlPFQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2lucHV0VGV4dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfcHJldmlvdXNJbnB1dFRleHQ6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID1cbiAgICAgICAgdGhpcy5fbXVsdGlDb21ib2JveENvbmZpZz8ubWF0Y2hpbmdTdHJhdGVneSA/PyBNYXRjaGluZ1N0cmF0ZWd5LkNPTlRBSU5TO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsbVJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEtleXMsIHRoYXQgd29uJ3QgdHJpZ2dlciB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdGUsIHdoZW4gZGlzcGF0Y2hlZCBvbiBzZWFyY2ggaW5wdXQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEJBQ0tTUEFDRSxcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVCxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBBTFRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3RpbWVyU3ViJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzU3RhdGU/OiBGb3JtU3RhdGVzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3ByZXZpb3VzU3RhdGVNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3ZhLndyaXRlVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBjb250cm9sLlxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgYXBwbGllZFxuICAgICAqIEBwYXJhbSBlbWl0T25DaGFuZ2Ugd2hldGhlciB0byBlbWl0IFwib25DaGFuZ2VcIiBldmVudC5cbiAgICAgKiBTaG91bGQgYmUgXCJmYWxzZVwiLCBpZiB0aGUgY2hhbmdlIGlzIG1hZGUgcHJvZ3JhbW1hdGljYWxseSAoaW50ZXJuYWxseSkgYnkgdGhlIGNvbnRyb2wsIFwidHJ1ZVwiIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHNldFZhbHVlKHZhbHVlOiBUW10sIGVtaXRPbkNoYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3ZhLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcywgZW1pdE9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGlzcGxheUZuID0gKHZhbHVlOiBUKTogc3RyaW5nID0+IGRpc3BsYXlWYWx1ZSh2YWx1ZSwgdGhpcy5kaXNwbGF5S2V5KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZWNvbmRhcnlGbiA9ICh2YWx1ZTogVCk6IHN0cmluZyA9PiB7XG4gICAgICAgIGlmIChpc09wdGlvbkl0ZW0odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2Vjb25kYXJ5VGV4dCA/PyAnJztcbiAgICAgICAgfSBlbHNlIGlmIChpc0pzT2JqZWN0KHZhbHVlKSAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW0gPSBvYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIGVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9lbWl0Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCh0aGlzLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZXRTZWxlY3RlZFN1Z2dlc3Rpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5sYWJlbCA9PT0gc2VsZWN0ZWRJdGVtIHx8IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkSXRlbVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKHRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnNbaWR4XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9uc1tpZHhdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9yaWdpbmFsIGRhdGEgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRUb09wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtID0gaXNTZWxlY3RhYmxlT3B0aW9uSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXMgYXMgU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPYmplY3QgPSBpc0pzT2JqZWN0KGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzU3RyaW5nID0gaXNTdHJpbmcoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0YSB0byBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9Hcm91cE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gZGF0YSB0byBHcm91cCBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtczxLIGV4dGVuZHMgVD4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgS1tdPiA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gaXRlbVt0aGlzLmdyb3VwS2V5XTtcbiAgICAgICAgICAgIGlmICgha2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncm91cFtrZXlWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBUW10gZGF0YSB0byBTZWNvbmRhcnkgU2VsZWN0YWJsZU9wdGlvbkl0ZW1zPFQ+IEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtczxLIGV4dGVuZHMgVD4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbXNbaV07XG4gICAgICAgICAgICBzZWxlY3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogZGlzcGxheVZhbHVlKHZhbHVlLCB0aGlzLmRpc3BsYXlLZXkpLFxuICAgICAgICAgICAgICAgIGlkOiBsb29rdXBWYWx1ZSh2YWx1ZSwgdGhpcy5sb29rdXBLZXkpLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVRleHQ6IG9iamVjdEdldCh2YWx1ZSwgdGhpcy5zZWNvbmRhcnlLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXM/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBQcmltaXRpdmUgZGF0YShCb29sZWFuLCBTdHJpbmcsIE51bWJlcikgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtPFQ+W10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiBsb29rdXBWYWx1ZSh2YWx1ZSwgdGhpcy5sb29rdXBLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkSXRlbXM/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBUW10gdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zPFQ+IEludGVyZmFjZSAoRGVmYXVsdClcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBUW10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPltdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGRpc3BsYXlWYWx1ZSh2YWx1ZSwgdGhpcy5kaXNwbGF5S2V5KSxcbiAgICAgICAgICAgICAgICBpZDogbG9va3VwVmFsdWUodmFsdWUsIHRoaXMubG9va3VwS2V5KSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1N0YXRlIHx8IHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlID0gdGhpcy5fY3ZhLnN0YXRlO1xuICAgICAgICB0aGlzLl9jdmEuc3RhdGUgPSAnZXJyb3InO1xuXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZTtcbiAgICAgICAgdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZSA9IHRoaXMuaW52YWxpZEVudHJ5TWVzc2FnZTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfdW5zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N2YS5zdGF0ZSA9IHRoaXMuX3ByZXZpb3VzU3RhdGU7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fY3ZhLnN0YXRlTWVzc2FnZSA9IHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlTWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZm9jdXNUb1NlYXJjaEZpZWxkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXBBbmRVcGRhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICBjb25zdCBzaG91bGRFbWl0Q2hhbmdlRXZlbnQgPSAhZXF1YWwodGhpcy5zZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICBpZiAoIXNob3VsZEVtaXRDaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2N2YS5vbkNoYW5nZShzZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJlcGFyZXMgdGhlIGRhdGEgc3RyZWFtIGFuZCBzdWJzY3JpYmVzIHRvIGl0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb3BlbkRhdGFTdHJlYW0obWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlUHJvdmlkZXIgPSB0aGlzLmRhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZVByb3ZpZGVyO1xuXG4gICAgICAgIGlmICghZGF0YVNvdXJjZVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmxpbWl0bGVzcyA9IHRoaXMubGltaXRsZXNzO1xuXG4gICAgICAgIGRhdGFTb3VyY2VQcm92aWRlci5kYXRhUHJvdmlkZXIuc2V0TG9va3VwS2V5KHRoaXMubG9va3VwS2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSA9IHtcbiAgICAgICAgICAgIGZpcnN0Qnk6IHRoaXMuX2Rpc3BsYXlGblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdCeS5zZWNvbmRhcnlCeSA9IHRoaXMuX3NlY29uZGFyeUZuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ0J5KG1hdGNoaW5nQnkpO1xuICAgICAgICBkYXRhU291cmNlUHJvdmlkZXIuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nU3RyYXRlZ3kobWF0Y2hpbmdTdHJhdGVneSk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCAnKicpO1xuXG4gICAgICAgIGlmICghdGhpcy5saW1pdGxlc3MpIHtcbiAgICAgICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgdGhpcy5fbWFwTGltaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZVByb3ZpZGVyLmRhdGFQcm92aWRlclsnZGVmYXVsdExpbWl0J10gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFTb3VyY2VQcm92aWRlci5tYXRjaChtYXApO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZURpcmVjdGl2ZS5kYXRhU291cmNlUHJvdmlkZXI/LmRhdGFSZXF1ZXN0ZWQuc3Vic2NyaWJlKHRoaXMuZGF0YVJlcXVlc3RlZClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8uZGF0YVJlY2VpdmVkLnN1YnNjcmliZSh0aGlzLmRhdGFSZWNlaXZlZClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZUNoYW5nZWRcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0cnVlKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFDaGFuZ2VkJC5waXBlKHNraXAoMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nRW1wdHlEYXRhKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c0lucHV0VGV4dCA9IHRoaXMuaW5wdXRUZXh0O1xuXG4gICAgICAgICAgICB0aGlzLl9wYXJzZURhdGFTb3VyY2VWYWx1ZShkYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5fY3ZhLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgdGhlIGRhdGEgZnJvbSB0aGUgZGF0YSBzdHJlYW0gYW5kIHVwZGF0ZXMgdGhlIG1vZGVsIGlmIG5lZWRlZC5cbiAgICAgKiBAcGFyYW0gZGF0YSBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIGRhdGEgc3RyZWFtLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFyc2VEYXRhU291cmNlVmFsdWUoZGF0YTogVFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnZlcnREYXRhU291cmNlU3VnZ2VzdGlvbnMoZGF0YSk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLl9zdWdnZXN0aW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGVxdWFsKGl0ZW0udmFsdWUsIHNlbGVjdGVkU3VnZ2VzdGlvbi52YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNbaWR4XS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMgPSB0aGlzLmlzR3JvdXAgPyBmbGF0dGVuR3JvdXBzKHRoaXMuX3N1Z2dlc3Rpb25zKSA6IHRoaXMuX3N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucyA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9ucztcblxuICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuXG4gICAgICAgICAgICB0aGlzLl9tYXBBbmRVcGRhdGVNb2RlbCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBwbGFpbiBhcnJheSBpbnRvIGBTZWxlY3RhYmxlT3B0aW9uSXRlbTxUPmBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydERhdGFTb3VyY2VTdWdnZXN0aW9ucyhkYXRhOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKS5tYXAoKG9wdGlvbkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmluZCgoc2VsZWN0ZWRJdGVtKSA9PiBzZWxlY3RlZEl0ZW0uaWQgPT09IG9wdGlvbkl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbkl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZEVsZW1lbnQuc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uSXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX3Byb2Nlc3NpbmdFbXB0eURhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jdmEuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jdmEuY29udHJvbEludmFsaWQgJiYgdGhpcy5fY3ZhLm5nQ29udHJvbD8uaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEludmFsaWRFbnRyeSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fdGltZXJTdWIkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZXJTdWIkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9wcmV2aW91c0lucHV0VGV4dDtcblxuICAgICAgICB0aGlzLl90aW1lclN1YiQgPSB0aW1lcih0aGlzLmludmFsaWRFbnRyeURpc3BsYXlUaW1lKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdW5zZXRJbnZhbGlkRW50cnkoKSk7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const MULTI_COMBOBOX_COMPONENT = new InjectionToken('FdMultiComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvbXVsdGktY29tYm9ib3gudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbignRmRNdWx0aUNvbWJvYm94SW50ZXJmYWNlJyk7XG4iXX0=","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, Inject, TemplateRef, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TemplateDirective, TemplateModule } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { MULTI_COMBOBOX_COMPONENT } from '../multi-combobox.token';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class MobileMultiComboboxComponent extends MobileModeBase {\n /** @hidden */\n constructor(multiComboboxComponent) {\n super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\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 /** @hidden */\n this.selectedShown$ = this._component.selectedShown$;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiComboboxOpenChange();\n }\n /** @hidden */\n showSelected() {\n const isSelectedShown = this.selectedShown$.getValue();\n if (isSelectedShown) {\n this._component._searchTermChanged();\n this.selectedShown$.next(false);\n return;\n }\n this._component._moreClicked();\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 return;\n }\n this._selectedBackup = this._component._selectedSuggestions?.length\n ? [...this._component._selectedSuggestions]\n : [];\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n /** @hidden */\n _listenOnMultiComboboxOpenChange() {\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 escKeyCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MobileMultiComboboxComponent, deps: [{ token: MULTI_COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: MobileMultiComboboxComponent, isStandalone: true, selector: \"fd-mobile-multi-combobox\", 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 fd-dialog-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button 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 @if (selectedShown$ | async) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"emphasized\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\n @if ((selectedShown$ | async) === false) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"transparent\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\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 [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\"> </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: TemplateModule }, { kind: \"directive\", type: i1.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: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MobileMultiComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-mobile-multi-combobox', imports: [\n TemplateModule,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n NgTemplateOutlet,\n ButtonComponent,\n ButtonBarComponent,\n FdTranslatePipe,\n AsyncPipe,\n DialogComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogBodyComponent,\n DialogFooterComponent\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 fd-dialog-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button 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 @if (selectedShown$ | async) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"emphasized\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\n @if ((selectedShown$ | async) === false) {\\n <button\\n fd-button\\n glyph=\\\"multiselect-all\\\"\\n fdType=\\\"transparent\\\"\\n [title]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n [attr.aria-label]=\\\"'platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate\\\"\\n class=\\\"fd-margin-begin--tiny\\\"\\n (click)=\\\"showSelected()\\\"\\n ></button>\\n }\\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 [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\"> </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: [MULTI_COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2JpbGUvbW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tb2JpbGUvbW9iaWxlLW11bHRpLWNvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUNILG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FB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R0FDMUIsbUJBQW1CLHdGQUNuQixxQkFBcUIsd0RBTnJCLGVBQWUsK0NBQ2YsU0FBUzs7MkZBUUosNEJBQTRCO2tCQTFCeEMsU0FBUzsrQkFDSSwwQkFBMEIsV0FHM0I7d0JBQ0wsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixTQUFTO3dCQUNULGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLG1CQUFtQjt3QkFDbkIscUJBQXFCO3FCQUN4Qjs7MEJBdUJZLE1BQU07MkJBQUMsd0JBQXdCO3lDQW5CZixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlT3B0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IE51bGxhYmxlLCBUZW1wbGF0ZURpcmVjdGl2ZSwgVGVtcGxhdGVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJFbGVtZW50RGlyZWN0aXZlLCBCYXJNaWRkbGVEaXJlY3RpdmUsIEJ1dHRvbkJhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9iYXInO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgRGlhbG9nQ29tcG9uZW50LFxuICAgIERpYWxvZ0Zvb3RlckNvbXBvbmVudCxcbiAgICBEaWFsb2dIZWFkZXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQmFzZSwgTW9iaWxlTW9kZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IE1vYmlsZU11bHRpQ29tYm9ib3hJbnRlcmZhY2UgfSBmcm9tICcuLi9tb2RlbHMvbXVsdGktY29tYm9ib3guaW50ZXJmYWNlJztcbmltcG9ydCB7IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LnRva2VuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1tb2JpbGUtbXVsdGktY29tYm9ib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGVtcGxhdGVNb2R1bGUsXG4gICAgICAgIEJhck1pZGRsZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQmFyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBCYXJNaWRkbGVEaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQmFyQ29tcG9uZW50LFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgICAgICBEaWFsb2dGb290ZXJDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQgZXh0ZW5kcyBNb2JpbGVNb2RlQmFzZTxNb2JpbGVNdWx0aUNvbWJvYm94SW50ZXJmYWNlPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdkaWFsb2dUZW1wbGF0ZScpIGRpYWxvZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBGb3IgaW50ZXJuYWwgdXNhZ2VcbiAgICAgKiBDb250cm9sIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIGRpYWxvZy5cbiAgICAgKiBMaXN0IGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBjaGlsZENvbnRlbnQ6IE51bGxhYmxlPHtcbiAgICAgICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgICAgICBjb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgfT4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWxlY3RlZFNob3duJCA9IHRoaXMuX2NvbXBvbmVudC5zZWxlY3RlZFNob3duJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IFNlbGVjdGFibGVPcHRpb25JdGVtW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTVVMVElfQ09NQk9CT1hfQ09NUE9ORU5UKSBtdWx0aUNvbWJvYm94Q29tcG9uZW50OiBNb2JpbGVNdWx0aUNvbWJvYm94SW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpQ29tYm9ib3hDb21wb25lbnQsIE1vYmlsZU1vZGVDb250cm9sLk1VTFRJX0NPTUJPQk9YKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Pbk11bHRpQ29tYm9ib3hPcGVuQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaG93U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRTaG93biA9IHRoaXMuc2VsZWN0ZWRTaG93biQuZ2V0VmFsdWUoKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3RlZFNob3duKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuX3NlYXJjaFRlcm1DaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hvd24kLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9tb3JlQ2xpY2tlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuX2RpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Ll9kaWFsb2dBcHByb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVEaWFsb2cob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIW9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQmFja3VwID0gdGhpcy5fY29tcG9uZW50Ll9zZWxlY3RlZFN1Z2dlc3Rpb25zPy5sZW5ndGhcbiAgICAgICAgICAgID8gWy4uLnRoaXMuX2NvbXBvbmVudC5fc2VsZWN0ZWRTdWdnZXN0aW9uc11cbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlDb21ib2JveE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBkaXNhYmxlUGFkZGluZ3M6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtmZERpYWxvZ1RlbXBsYXRlXSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjZGlhbG9nVGVtcGxhdGU+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCI+XG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDEgZmQtdGl0bGUgZmQtZGlhbG9nLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gZmQtZGlhbG9nLWNsb3NlLWJ1dHRvbiBbbW9iaWxlXT1cInRydWVcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJzdWJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1taWRkbGU+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudCBbZnVsbFdpZHRoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/LmNvbnRyb2xUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRTaG93biQgfCBhc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibXVsdGlzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dBbGxJdGVtc0J1dHRvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtTXVsdGlDb21ib2JveC5tb2JpbGVTaG93QWxsSXRlbXNCdXR0b24nIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW1hcmdpbi1iZWdpbi0tdGlueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoc2VsZWN0ZWRTaG93biQgfCBhc3luYykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJtdWx0aXNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dTZWxlY3RlZEl0ZW1zQnV0dG9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1NdWx0aUNvbWJvYm94Lm1vYmlsZVNob3dTZWxlY3RlZEl0ZW1zQnV0dG9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tYXJnaW4tYmVnaW4tLXRpbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkQ29udGVudD8ubGlzdFRlbXBsYXRlIHx8IG51bGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRUeXBlPVwiZW1waGFzaXplZFwiIFtsYWJlbF09XCJtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZUFwcHJvdmUoKVwiPlxuICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPiA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICA8L2ZkLWRpYWxvZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { BaseDataSource, DataProvider } from '@fundamental-ngx/cdk/data-source';\nexport class FdMultiComboBoxDataSource extends BaseDataSource {\n /** @hidden */\n constructor(dataProvider) {\n super(dataProvider);\n this.dataProvider = dataProvider;\n /** @hidden */\n this.limitless = false;\n }\n}\nexport class ArrayMultiComboBoxDataSource extends FdMultiComboBoxDataSource {\n /** @hidden */\n constructor(data) {\n super(new DataProvider(data));\n }\n}\nexport class ObservableMultiComboBoxDataSource extends FdMultiComboBoxDataSource {\n /** @hidden */\n constructor(data) {\n super(new DataProvider(data));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvZGF0YS1zb3VyY2UvbXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHdEcsTUFBTSxPQUFPLHlCQUE2QixTQUFRLGNBQWlCO0lBRy9ELGNBQWM7SUFDZCxZQUFtQixZQUFxQztRQUNwRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFETCxpQkFBWSxHQUFaLFlBQVksQ0FBeUI7UUFIeEQsY0FBYztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFJbEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDRCQUFnQyxTQUFRLHlCQUE0QjtJQUM3RSxjQUFjO0lBQ2QsWUFBWSxJQUFTO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQ0FBcUMsU0FBUSx5QkFBNEI7SUFDbEYsY0FBYztJQUNkLFlBQVksSUFBcUI7UUFDN0IsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3REYXRhUHJvdmlkZXIsIEJhc2VEYXRhU291cmNlLCBEYXRhUHJvdmlkZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IGV4dGVuZHMgQmFzZURhdGFTb3VyY2U8VD4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGltaXRsZXNzID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVByb3ZpZGVyOiBBYnN0cmFjdERhdGFQcm92aWRlcjxUPikge1xuICAgICAgICBzdXBlcihkYXRhUHJvdmlkZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4gZXh0ZW5kcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFRbXSkge1xuICAgICAgICBzdXBlcihuZXcgRGF0YVByb3ZpZGVyKGRhdGEpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4gZXh0ZW5kcyBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IE9ic2VydmFibGU8VFtdPikge1xuICAgICAgICBzdXBlcihuZXcgRGF0YVByb3ZpZGVyKGRhdGEpKTtcbiAgICB9XG59XG5cbi8qKlxuICogVHlwZSBvZiBhY2NlcHRhYmxlIG9iamVjdHMgYXMgYSBkYXRhc291cmNlIGZvciB0aGUgTXVsdGktQ29tYm8gQm94IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2U8VD4gPSBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHwgT2JzZXJ2YWJsZTxUW10+IHwgVFtdO1xuIl19","import { isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport { ArrayMultiComboBoxDataSource, ObservableMultiComboBoxDataSource } from './multi-combobox-data-source';\nexport class MultiComboboxDataSourceParser {\n /**\n * Transforms plain array or observable into DataSource class.\n * @param source\n */\n parse(source) {\n if (isDataSource(source)) {\n return source;\n }\n if (Array.isArray(source)) {\n return new ArrayMultiComboBoxDataSource(source);\n }\n if (isObservable(source)) {\n return new ObservableMultiComboBoxDataSource(source);\n }\n return undefined;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L2RhdGEtc291cmNlL211bHRpLWNvbWJvYm94LWRhdGEtc291cmNlLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUNILDRCQUE0QixFQUc1QixpQ0FBaUMsRUFDcEMsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxNQUFNLE9BQU8sNkJBQTZCO0lBQ3RDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUE4QztRQUNoRCxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sTUFBc0MsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLDRCQUE0QixDQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxpQ0FBaUMsQ0FBSSxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZVBhcnNlciwgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgRmRNdWx0aUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBGZE11bHRpQ29tYm9ib3hBY2NlcHRhYmxlRGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2Vcbn0gZnJvbSAnLi9tdWx0aS1jb21ib2JveC1kYXRhLXNvdXJjZSc7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZVBhcnNlcjxUPiBpbXBsZW1lbnRzIERhdGFTb3VyY2VQYXJzZXI8VCwgRmRNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxUPj4ge1xuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgcGxhaW4gYXJyYXkgb3Igb2JzZXJ2YWJsZSBpbnRvIERhdGFTb3VyY2UgY2xhc3MuXG4gICAgICogQHBhcmFtIHNvdXJjZVxuICAgICAqL1xuICAgIHBhcnNlKHNvdXJjZTogRmRNdWx0aUNvbWJvYm94QWNjZXB0YWJsZURhdGFTb3VyY2U8VD4pOiBGZE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlIGFzIEZkTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTXVsdGlDb21ib0JveERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, HostListener, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { ListFocusItem } from '@fundamental-ngx/core/list';\nimport { ToolbarComponent } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Observable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class SelectAllTogglerComponent extends ListFocusItem {\n constructor() {\n super(...arguments);\n /** @hidden */\n this.selectedItems = [];\n /** @hidden */\n this.flatItems = [];\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this.changeDetector = inject(ChangeDetectorRef);\n }\n /** @hidden */\n get allAreSelected() {\n return this.selectedItems.length === this.flatItems.length;\n }\n /** @hidden */\n get someAreSelected() {\n return this.selectedItems.length > 0 && !this.allAreSelected;\n }\n /** @hidden */\n get checkboxValue() {\n if (this.allAreSelected) {\n return true;\n }\n if (this.someAreSelected) {\n return null;\n }\n return false;\n }\n /** @hidden */\n onKeyDown($event) {\n $event.preventDefault();\n this.change(!this.checkboxValue);\n }\n /** @hidden */\n onClick() {\n this.elementRef.nativeElement.focus();\n this.change(!this.checkboxValue);\n }\n /** @hidden */\n ngOnInit() {\n this.tabindex = 0;\n this.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.changeDetector.detectChanges();\n });\n }\n /** @hidden */\n change(value) {\n this.selectAllHandler(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: SelectAllTogglerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.4\", type: SelectAllTogglerComponent, isStandalone: true, selector: \"fd-multi-combobox-select-all-toggler\", inputs: { selectAllHandler: \"selectAllHandler\", valueChanges: \"valueChanges\", selectedItems: \"selectedItems\", flatItems: \"flatItems\" }, host: { listeners: { \"keydown.enter\": \"onKeyDown($event)\", \"keydown.space\": \"onKeyDown($event)\", \"click\": \"onClick()\" } }, providers: [\n {\n provide: ListFocusItem,\n useExisting: SelectAllTogglerComponent\n }\n ], usesInheritance: true, ngImport: i0, template: `\n <fd-toolbar>\n <div fd-form-item class=\"fd-multi-combobox-select-all__form-item\">\n <fd-checkbox tabIndexValue=\"-1\" [ngModel]=\"checkboxValue\" [tristate]=\"true\">\n {{\n 'coreMultiComboBox.selectAllLabel'\n | fdTranslate: { selectedItems: selectedItems.length, totalItems: flatItems.length }\n }}\n </fd-checkbox>\n </div>\n </fd-toolbar>\n `, isInline: true, styles: [\"fd-multi-combobox-select-all-toggler{display:block;background-color:var(--sapBackgroundColor);cursor:pointer;position:sticky;top:0;z-index:1}fd-multi-combobox-select-all-toggler:focus,fd-multi-combobox-select-all-toggler.is-focus{outline-offset:-.1875rem;outline-width:var(--sapContent_FocusWidth);outline-style:var(--sapContent_FocusStyle);outline-color:var(--sapContent_FocusColor)}fd-multi-combobox-select-all-toggler .fd-toolbar{padding-left:0;padding-right:0}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item{display:flex;flex-direction:row;align-items:center;font-weight:700}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox{pointer-events:none}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__checkmark{margin-inline-end:.5rem}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__text{font-weight:700!important}\\n\"], dependencies: [{ kind: \"component\", type: ToolbarComponent, selector: \"fd-toolbar\", inputs: [\"titleId\", \"class\", \"shouldOverflow\", \"fdType\", \"title\", \"active\", \"clearBorder\", \"forceOverflow\", \"tabindex\", \"headingLevel\", \"ariaLabel\", \"ariaLabelledBy\"] }, { kind: \"component\", type: FormItemComponent, selector: \"[fd-form-item]\", inputs: [\"isInline\", \"horizontal\"] }, { kind: \"component\", type: CheckboxComponent, selector: \"fd-checkbox\", inputs: [\"wrapLabel\", \"valignLabel\", \"ariaLabel\", \"role\", \"value\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"title\", \"inputId\", \"state\", \"name\", \"label\", \"disabled\", \"readonly\", \"tristate\", \"tristateSelectable\", \"labelClass\", \"required\", \"displayOnly\", \"values\", \"standalone\"], outputs: [\"focusChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: SelectAllTogglerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-multi-combobox-select-all-toggler', template: `\n <fd-toolbar>\n <div fd-form-item class=\"fd-multi-combobox-select-all__form-item\">\n <fd-checkbox tabIndexValue=\"-1\" [ngModel]=\"checkboxValue\" [tristate]=\"true\">\n {{\n 'coreMultiComboBox.selectAllLabel'\n | fdTranslate: { selectedItems: selectedItems.length, totalItems: flatItems.length }\n }}\n </fd-checkbox>\n </div>\n </fd-toolbar>\n `, providers: [\n {\n provide: ListFocusItem,\n useExisting: SelectAllTogglerComponent\n }\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ToolbarComponent, FormItemComponent, CheckboxComponent, FormsModule, FdTranslatePipe], styles: [\"fd-multi-combobox-select-all-toggler{display:block;background-color:var(--sapBackgroundColor);cursor:pointer;position:sticky;top:0;z-index:1}fd-multi-combobox-select-all-toggler:focus,fd-multi-combobox-select-all-toggler.is-focus{outline-offset:-.1875rem;outline-width:var(--sapContent_FocusWidth);outline-style:var(--sapContent_FocusStyle);outline-color:var(--sapContent_FocusColor)}fd-multi-combobox-select-all-toggler .fd-toolbar{padding-left:0;padding-right:0}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item{display:flex;flex-direction:row;align-items:center;font-weight:700}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox{pointer-events:none}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__checkmark{margin-inline-end:.5rem}fd-multi-combobox-select-all-toggler .fd-multi-combobox-select-all__form-item fd-checkbox .fd-checkbox__text{font-weight:700!important}\\n\"] }]\n }], propDecorators: { selectAllHandler: [{\n type: Input\n }], valueChanges: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], flatItems: [{\n type: Input\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown.enter', ['$event']]\n }, {\n type: HostListener,\n args: ['keydown.space', ['$event']]\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUEyQmxDLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxhQUFhO0lBekI1RDs7UUFvQ0ksY0FBYztRQUVkLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxjQUFjO1FBRWQsY0FBUyxHQUFtQixFQUFFLENBQUM7UUF1Qi9CLGNBQWM7UUFDTixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QyxjQUFjO1FBQ04sbUJBQWMsR0FBc0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0E2QnpFO0lBdERHLGNBQWM7SUFDZCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQy9ELENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBSSxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBUUQsY0FBYztJQUdkLFNBQVMsQ0FBQyxNQUFhO1FBQ25CLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBRWQsT0FBTztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN4RSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDZCxNQUFNLENBQUMsS0FBYztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs4R0F4RVEseUJBQXlCO2tHQUF6Qix5QkFBeUIsc1ZBVnZCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSx5QkFBeUI7YUFDekM7U0FDSixpREFsQlM7Ozs7Ozs7Ozs7O0tBV1QsNGlDQVVTLGdCQUFnQiwrTkFBRSxpQkFBaUIsK0ZBQUUsaUJBQWlCLG1XQUFFLFdBQVcsMFZBQUUsZUFBZTs7MkZBRXJGLHlCQUF5QjtrQkF6QnJDLFNBQVM7K0JBQ0ksc0NBQXNDLFlBQ3RDOzs7Ozs7Ozs7OztLQVdULGFBRVU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsMkJBQTJCO3lCQUN6QztxQkFDSixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQzs4QkFNdEYsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFpQ04sU0FBUztzQkFGUixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3hDLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVF6QyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IEZvcm1JdGVtQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTGlzdEZvY3VzSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdG9vbGJhcic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW11bHRpLWNvbWJvYm94LXNlbGVjdC1hbGwtdG9nZ2xlcicsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGZkLXRvb2xiYXI+XG4gICAgICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbSBjbGFzcz1cImZkLW11bHRpLWNvbWJvYm94LXNlbGVjdC1hbGxfX2Zvcm0taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveCB0YWJJbmRleFZhbHVlPVwiLTFcIiBbbmdNb2RlbF09XCJjaGVja2JveFZhbHVlXCIgW3RyaXN0YXRlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb3JlTXVsdGlDb21ib0JveC5zZWxlY3RBbGxMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlOiB7IHNlbGVjdGVkSXRlbXM6IHNlbGVjdGVkSXRlbXMubGVuZ3RoLCB0b3RhbEl0ZW1zOiBmbGF0SXRlbXMubGVuZ3RoIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2ZkLWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtdG9vbGJhcj5cbiAgICBgLFxuICAgIHN0eWxlVXJsOiAnLi9zZWxlY3QtYWxsLXRvZ2dsZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBMaXN0Rm9jdXNJdGVtLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNlbGVjdEFsbFRvZ2dsZXJDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbVG9vbGJhckNvbXBvbmVudCwgRm9ybUl0ZW1Db21wb25lbnQsIENoZWNrYm94Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50IGV4dGVuZHMgTGlzdEZvY3VzSXRlbSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogSGFuZGxlciBmb3IgdGhlIHNlbGVjdCBhbGwgaXRlbXNcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdEFsbEhhbmRsZXI6IChzZWxlY3Q6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gZm9yIHJlY2VpdmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsdWUgY2hhbmdlcyxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtczogQXJyYXk8dW5rbm93bj4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBmbGF0SXRlbXM6IEFycmF5PHVua25vd24+ID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBhbGxBcmVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IHRoaXMuZmxhdEl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzb21lQXJlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiAhdGhpcy5hbGxBcmVTZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBjaGVja2JveFZhbHVlKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsQXJlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNvbWVBcmVTZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgICBvbktleURvd24oJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2UoIXRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2UoIXRoaXMuY2hlY2tib3hWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSGFuZGxlcih2YWx1ZSk7XG4gICAgfVxufVxuIl19","import { A, CONTROL, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, InjectionToken, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, inject } from '@angular/core';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport { CvaControl, CvaDirective } from '@fundamental-ngx/cdk/forms';\nimport { AutoCompleteDirective, DynamicComponentService, FocusTrapService, KeyUtil, SearchHighlightPipe, TemplateDirective, TruncatedTitleDirective, coerceArraySafe, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { FD_LIST_COMPONENT, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListSecondaryDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport equal from 'fast-deep-equal';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { BaseMultiCombobox } from './base-multi-combobox.class';\nimport { MobileMultiComboboxComponent } from './mobile/mobile-multi-combobox.component';\nimport { MULTI_COMBOBOX_COMPONENT } from './multi-combobox.token';\nimport { MultiComboboxDataSourceParser } from './data-source/multi-combobox-data-source-parser';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FD_LANGUAGE, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { getSelectItemByInputValue, getTokenIndexByIdlOrValue } from './helpers';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nimport * as i2 from \"@fundamental-ngx/cdk/forms\";\nimport * as i3 from \"@fundamental-ngx/cdk/data-source\";\nimport * as i4 from \"@angular/forms\";\nexport const FD_MAP_LIMIT = new InjectionToken('Map limit≥', { factory: () => 12 });\nexport class MultiComboboxComponent extends BaseMultiCombobox {\n /** Provides selected items. */\n set selectedItems(value) {\n this._selectedItems = coerceArraySafe(value);\n }\n get selectedItems() {\n return this._selectedItems;\n }\n /** @hidden */\n get _popoverMaxWidth() {\n if (this.bodyMaxWidth === 'none') {\n return null;\n }\n if (typeof this.bodyMaxWidth === 'number') {\n return this.bodyMaxWidth;\n }\n return this._elementRef.nativeElement.getBoundingClientRect().width;\n }\n /** Value of the multi combobox */\n set value(value) {\n this.setValue(value, true);\n }\n get value() {\n return this._cva.value;\n }\n /** Set the input text of the input. */\n set inputText(value) {\n this._inputTextValue = value;\n this._cva.onTouched();\n }\n /** Get the input text of the input. */\n get inputText() {\n return this._inputTextValue || '';\n }\n /** Is empty search field. */\n get isEmptyValue() {\n return this.inputText.trim().length === 0;\n }\n /** @hidden */\n get isGroup() {\n return !!(this.group && this.groupKey);\n }\n /** @hidden */\n constructor(_elementRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService) {\n super();\n this._elementRef = _elementRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n /**\n * Show select all checkbox\n */\n this.showSelectAll = false;\n /** Provides maximum height for the optionPanel. */\n this.maxHeight = '250px';\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /** Whether the autocomplete should be enabled; Enabled by default. */\n this.autoComplete = true;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Max width of multi combobox dropdown body.\n * `none` will not limit width of the dropdown.\n * `container` will limit width of the dropdown to the width of the multi-input itself.\n * `number` will limit width of the dropdown by provided number in pixels.\n */\n this.bodyMaxWidth = 'none';\n /** Whether the multi-combobox should be built on mobile mode. */\n this.mobile = false;\n /** Tells the multi-combobox if we need to group items. */\n this.group = false;\n /** Show the second column (applicable for two columns layout). */\n this.showSecondaryText = false;\n /** Horizontally align text inside the second column (applicable for two columns layout). */\n this.secondaryTextAlignment = 'right';\n /** Turns on/off Adjustable Width feature. */\n this.autoResize = true;\n /** Whether to open the dropdown when the addon button is clicked. */\n this.openDropdownOnAddOnClicked = 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 /** Time in ms for how long message of invalid entry should be displayed. */\n this.invalidEntryDisplayTime = 3000;\n /**\n * String matching strategy for typeahead list.\n * Available options: 'starts with per term', 'starts with', 'contains'\n * Default: 'starts with per term' */\n this.matchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n /** Event emitted when item is selected. */\n this.selectionChange = new EventEmitter();\n /** @hidden Emits event when the menu is opened/closed. */\n this.isOpenChange = new EventEmitter();\n /** Emits event when the addon button is clicked. */\n this.addOnButtonClicked = new EventEmitter();\n /** Event emitted when data loading is started. */\n this.dataRequested = new EventEmitter();\n /** Event emitted when data loading is finished. */\n this.dataReceived = new EventEmitter();\n /** @hidden */\n this._contentDensity = this._multiComboboxConfig?.contentDensity ?? 'cozy';\n /** Whether the Multi Input is opened. */\n this.isOpen = false;\n /**\n * @hidden\n * Need for opening mobile version\n */\n this.openChange = new Subject();\n /** @hidden */\n this._selectedItems = [];\n /** @hidden */\n this._lang$ = inject(FD_LANGUAGE);\n /** @hidden */\n this._translationResolver = new TranslationResolver();\n /**\n * @hidden\n * Method that selects all possible options.\n * *select* attribute – if *true* select all, if *false* unselect all\n * */\n this._handleSelectAllItems = (select) => {\n this._flatSuggestions.forEach((item) => (item.selected = select));\n this._onEveryItem(this._suggestions, (item) => (item.selected = select));\n this._selectedSuggestions = select ? [...this._flatSuggestions] : [];\n this._rangeSelector.reset();\n this.inputText = '';\n this._propagateChange();\n };\n this.contentDensityObserver.subscribe();\n }\n /** @hidden */\n ngOnInit() {\n this.cvaControl.listenToChanges();\n this._openDataStream(this.matchingStrategy);\n this._lang$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((lang) => {\n this.invalidEntryMessage = this._translationResolver.resolve(lang, 'platformMultiCombobox.invalidEntryError');\n });\n }\n /** @hidden */\n async ngAfterViewInit() {\n if (this.mobile) {\n await this._setUpMobileMode();\n }\n this._assignCustomTemplates();\n this._initWindowResize();\n }\n /** @hidden */\n _toggleSelection(item, fromTokenCloseClick = false) {\n const idx = getTokenIndexByIdlOrValue(item, this._selectedSuggestions);\n if (idx === -1) {\n this._selectedSuggestions.push(item);\n }\n else {\n this._selectedSuggestions.splice(idx, 1);\n }\n item.selected = !item.selected;\n this._propagateChange(fromTokenCloseClick);\n if (!this._selectedSuggestions.length) {\n this._focusToSearchField();\n }\n this._cd.detectChanges();\n }\n /** @hidden */\n _onOptionCheckboxClicked(event, index) {\n event.stopPropagation();\n this._onListElementClicked(event, index);\n this.inputText = '';\n this._searchTermChanged('');\n }\n /** @hidden */\n _onCompleteTerm(event) {\n if (event.forceClose) {\n this._toggleSelectionByInputText(event.term);\n this.close();\n }\n }\n /** @hidden */\n _navigateByTokens(event) {\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n this.listComponent.items?.first.focus();\n }\n }\n /** @hidden */\n _removeToken(token, event) {\n if (event) {\n event.preventDefault();\n }\n const optionItem = this._flatSuggestions.find((s) => s.value === token.value);\n if (optionItem) {\n this._toggleSelection(optionItem, true);\n this._rangeSelector.reset();\n }\n }\n /** @hidden */\n _moreClicked() {\n this._suggestions = this.isGroup\n ? this._convertObjectsToGroupOptionItems(this._selectedSuggestions.map(({ value }) => value))\n : this._suggestions.filter((value) => this._selectedSuggestions.some((item) => equal(item.value, value.value)));\n this._showList(true);\n this.selectedShown$.next(true);\n this._cd.markForCheck();\n }\n /** @hidden */\n _onBlur(event) {\n const target = event.relatedTarget;\n if (target) {\n const isList = !!target.closest('.fd-multi-combobox__list-container');\n if (isList) {\n return;\n }\n if (this._suggestions?.length === 1 &&\n this._suggestions[0].label === this.inputText &&\n !this._suggestions[0].selected) {\n this._toggleSelection(this._suggestions[0]);\n }\n this._showList(false);\n this.inputText = '';\n }\n this._cva.onTouched();\n }\n /** @hidden */\n _onItemKeyDownHandler(event) {\n if (KeyUtil.isKeyCode(event, ESCAPE)) {\n this._focusToSearchField();\n }\n else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this._handleSelectAllItems(false);\n }\n else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n event.preventDefault();\n this._handleSelectAllItems(true);\n }\n else if (KeyUtil.isKeyCode(event, ENTER)) {\n if (!this.mobile) {\n this.close();\n }\n this._rangeSelector.reset();\n }\n else if (KeyUtil.isKeyCode(event, SPACE)) {\n this._rangeSelector.reset();\n }\n }\n /** @hidden */\n _onOptionClicked(event, index) {\n this._onListElementClicked(event, index);\n this.close();\n }\n /**\n * @hidden\n * Handle dialog dismissing, closes popover and sets backup data.\n */\n _dialogDismiss(backup) {\n this._selectedSuggestions = [...backup];\n this.inputText = '';\n this._showList(false);\n this.selectedShown$.next(false);\n }\n /**\n * @hidden\n * Handle dialog approval, closes popover and propagates data changes.\n */\n _dialogApprove() {\n this.inputText = '';\n this._showList(false);\n this._propagateChange(true);\n }\n /** @hidden */\n _popoverOpenChangeHandle(isOpen) {\n this.isOpen = isOpen;\n /** Allow combobox up and down arrows to work properly when multi combobox is inside a dialog with a trapped focus */\n if (this.isOpen) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n this._rangeSelector.reset();\n if (!isOpen) {\n this._cva.onTouched();\n }\n }\n /** Opens the select popover body. */\n open() {\n this.isOpen = true;\n this.isOpenChange.emit(this.isOpen);\n this._cd.markForCheck();\n }\n /** Closes the select popover body. */\n close() {\n this._focusToSearchField();\n this._rangeSelector.reset();\n this.selectedShown$.next(false);\n this.inputText = '';\n this.isOpen = false;\n this.isOpenChange.emit(this.isOpen);\n this._cva.onTouched();\n this._cd.markForCheck();\n }\n /** @hidden */\n _showList(isOpen) {\n if (this.isOpen !== isOpen) {\n this.isOpen = isOpen;\n this._cva.onTouched();\n this.openChange.next(isOpen);\n }\n if (!this.isOpen) {\n this._searchTermChanged('');\n }\n this._cd.markForCheck();\n }\n /** @hidden */\n _searchTermChanged(text = this.inputText) {\n const map = new Map();\n map.set('query', text);\n if (!this.limitless) {\n map.set('limit', this._mapLimit);\n }\n else {\n map.set('limit', Number.MAX_SAFE_INTEGER);\n }\n this.dataSourceDirective.dataSourceProvider?.match(map);\n if (text) {\n this.open();\n }\n this._cd.markForCheck();\n }\n /**\n * Handle Click on Button\n * @hidden\n */\n _onPrimaryButtonClick(isOpen) {\n if (!isOpen) {\n this._searchTermChanged('');\n }\n if (this.openDropdownOnAddOnClicked) {\n this._showList(!isOpen);\n }\n else if (this.isOpen) {\n this._showList(false);\n }\n if (this.isOpen) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /**\n * Handle Keydown on Input\n * @hidden\n */\n _onInputKeydownHandler(event) {\n if (this._cva.readonly) {\n return;\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n event.preventDefault();\n if (event.altKey) {\n this._showList(true);\n }\n if (this.isOpen && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.isOpen) {\n this._chooseOtherItem(1);\n }\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n event.preventDefault();\n this._chooseOtherItem(-1);\n }\n else if (KeyUtil.isKeyCode(event, ENTER)) {\n this._toggleSelectionByInputText();\n }\n else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n this._showList(true);\n const acceptedKeys = !KeyUtil.isKeyType(event, 'alphabetical') &&\n !KeyUtil.isKeyType(event, 'numeric') &&\n !KeyUtil.isKeyType(event, 'ime');\n if (acceptedKeys) {\n // SetTimeout is needed for input to receive new value.\n setTimeout(() => {\n if (this.isEmptyValue) {\n this.listComponent?.setItemActive(0);\n }\n });\n }\n }\n }\n /**\n * @hidden\n * Method passed to list component.\n */\n _handleListFocusEscape(direction) {\n if (direction === 'up') {\n this._focusToSearchField();\n }\n }\n /**\n * @hidden\n */\n _addOnClicked($event) {\n this.addOnButtonClicked.emit($event);\n if (!this.mobile) {\n this._onPrimaryButtonClick(this.isOpen);\n }\n }\n /** @hidden */\n _setLimitless(limitless) {\n this.limitless = limitless;\n }\n /** @hidden */\n _getMapLimit() {\n return this.limitless ? this.dataSourceDirective.dataSource.length : this._mapLimit;\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 /**\n * @hidden\n * Iterate over every item and perform callback\n */\n _onEveryItem(items, callback) {\n items.forEach((item) => {\n callback(item);\n if (item.children && item.children.length > 0) {\n this._onEveryItem(item.children, callback);\n }\n });\n }\n /** @hidden */\n _toggleSelectionByInputText(text = this.inputText) {\n const item = getSelectItemByInputValue(this._fullFlatSuggestions, text);\n if (item) {\n this._toggleSelection(item);\n this.inputText = '';\n }\n this._searchTermChanged();\n }\n /**\n * @hidden\n * Method to set input text as item label.\n */\n _setInputTextFromOptionItem(item) {\n this.inputText = item.label;\n if (this.mobile) {\n return;\n }\n this._showList(false);\n }\n /**\n * @hidden\n * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n */\n _onListElementClicked(event, index) {\n // value has been changed at this point, so it can be safely used\n const selectionState = this._flatSuggestions[index].selected;\n this._rangeSelector.onRangeElementToggled(index, event);\n const toRemoveSet = new Set();\n this._rangeSelector.applyValueToEachInRange((idx) => {\n const current = this._flatSuggestions[idx];\n if (current.selected !== selectionState) {\n if (current.selected) {\n // removing from \"_selectedSuggestions\" list\n toRemoveSet.add(current.value);\n }\n else {\n // adding current item to \"_selectedSuggestions\"\n this._selectedSuggestions.push(current);\n }\n current.selected = selectionState;\n }\n });\n this._selectedSuggestions = this._selectedSuggestions.filter((s) => !toRemoveSet.has(s.value));\n this._propagateChange();\n this._tokenizer.onResize();\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n this._tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n }\n /** @hidden */\n _propagateChange(emitInMobile) {\n if (!this.mobile || emitInMobile) {\n this._mapAndUpdateModel();\n }\n }\n /** @hidden */\n async _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: MULTI_COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.mobileControlTemplate }, MobileMultiComboboxComponent, {\n containerRef: this._viewContainerRef\n }, { injector });\n }\n /**\n * @hidden\n * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed.\n */\n _chooseOtherItem(offset) {\n if (this._selectedSuggestions?.length === this._flatSuggestions.length) {\n this.inputText = '';\n return;\n }\n const activeValue = getSelectItemByInputValue(this._fullFlatSuggestions, this.inputText);\n const index = this._flatSuggestions.findIndex((value) => value === activeValue);\n const position = !this.inputText && offset === -1 ? this._flatSuggestions.length - 1 : index + offset;\n const item = this._flatSuggestions[position];\n if (item) {\n this._setInputTextFromOptionItem(item);\n }\n const selectedIndex = this._selectedSuggestions.findIndex((value) => value.label === item?.label);\n if (selectedIndex !== -1) {\n this._chooseOtherItem(offset);\n }\n }\n /** @hidden */\n _initWindowResize() {\n this._getOptionsListWidth();\n if (!this.autoResize) {\n return;\n }\n resizeObservable(this._inputGroup.nativeElement)\n .pipe(debounceTime(30), takeUntilDestroyed(this._destroyRef))\n .subscribe(() => this._getOptionsListWidth());\n }\n /** @hidden */\n _getOptionsListWidth() {\n const body = document.body;\n const rect = this._inputGroup.nativeElement.getBoundingClientRect();\n const scrollBarWidth = body.offsetWidth - body.clientWidth;\n this.maxWidth = this.autoResize ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n this._cd.detectChanges();\n }\n /**\n * @hidden\n * Assign custom templates\n */\n _assignCustomTemplates() {\n this.customTemplates.forEach((template) => {\n switch (template.name) {\n case 'optionItemTemplate':\n this.optionItemTemplate = template.templateRef;\n break;\n case 'groupItemTemplate':\n this.groupItemTemplate = template.templateRef;\n break;\n case 'secondaryItemTemplate':\n this.secondaryItemTemplate = template.templateRef;\n break;\n case 'selectedItemTemplate':\n this.selectedItemTemplate = template.templateRef;\n break;\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i1.DynamicComponentService }, { token: i1.FocusTrapService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: MultiComboboxComponent, isStandalone: true, selector: \"fd-multi-combobox\", inputs: { showSelectAll: \"showSelectAll\", selectedItems: \"selectedItems\", maxHeight: \"maxHeight\", buttonFocusable: \"buttonFocusable\", autoComplete: \"autoComplete\", byline: \"byline\", bodyMaxWidth: \"bodyMaxWidth\", entityClass: \"entityClass\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", group: \"group\", groupKey: \"groupKey\", secondaryKey: \"secondaryKey\", showSecondaryText: \"showSecondaryText\", secondaryTextAlignment: \"secondaryTextAlignment\", autoResize: \"autoResize\", openDropdownOnAddOnClicked: \"openDropdownOnAddOnClicked\", value: \"value\", fillControlMode: \"fillControlMode\", addonIconTitle: \"addonIconTitle\", invalidEntryMessage: \"invalidEntryMessage\", limitless: \"limitless\", lookupKey: \"lookupKey\", displayKey: \"displayKey\", list: \"list\", invalidEntryDisplayTime: \"invalidEntryDisplayTime\", matchingStrategy: \"matchingStrategy\" }, outputs: { selectionChange: \"selectionChange\", isOpenChange: \"isOpenChange\", addOnButtonClicked: \"addOnButtonClicked\", dataRequested: \"dataRequested\", dataReceived: \"dataReceived\" }, providers: [\n CvaControl,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: MultiComboboxDataSourceParser\n },\n {\n provide: MULTI_COMBOBOX_COMPONENT,\n useExisting: MultiComboboxComponent\n }\n ], queries: [{ propertyName: \"customTemplates\", predicate: TemplateDirective }], viewQueries: [{ propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true, read: ElementRef }, { propertyName: \"listComponent\", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: \"mobileControlTemplate\", first: true, predicate: [\"mobileControlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"_tokenizer\", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: \"_inputGroup\", first: true, predicate: [\"inputGroup\"], descendants: true, read: ElementRef }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2.CvaDirective, inputs: [\"id\", \"inputId\", \"placeholder\", \"placeholder\", \"state\", \"state\", \"stateMessage\", \"stateMessage\", \"disabled\", \"disabled\", \"readonly\", \"readonly\", \"name\", \"name\"] }, { directive: i3.DataSourceDirective, inputs: [\"dataSource\", \"dataSource\"], outputs: [\"dataChanged\", \"dataChanged\"] }], ngImport: i0, template: \"<div class=\\\"fd-multi-combobox\\\">\\n @if (mobile) {\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n } @else {\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list fd-multi-combobox__list-container\\\"\\n (isOpenChange)=\\\"_popoverOpenChangeHandle($event)\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [maxWidth]=\\\"_popoverMaxWidth\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [style.width.%]=\\\"!autoResize && 100\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n }\\n</div>\\n<ng-template #controlTemplate>\\n <fd-form-input-message-group>\\n <fd-input-group\\n #inputGroup\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [button]=\\\"!_cva.readonly\\\"\\n [glyph]=\\\"!_cva.readonly ? 'navigation-down-arrow' : ' '\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"_addOnClicked($event)\\\"\\n (click)=\\\"mobile && !isOpen && _onPrimaryButtonClick(false)\\\"\\n (keydown)=\\\"_navigateByTokens($event)\\\"\\n >\\n <fd-tokenizer\\n [tokenizerFocusable]=\\\"false\\\"\\n [compactCollapse]=\\\"true\\\"\\n [showOverflowPopover]=\\\"false\\\"\\n #tokenizer\\n class=\\\"fd-multi-combobox-tokenizer-custom\\\"\\n (moreClickedEvent)=\\\"_moreClicked()\\\"\\n fdMultiAnnouncer\\n [multiAnnouncerOptions]=\\\"_suggestions\\\"\\n >\\n @for (token of _selectedSuggestions; track token) {\\n <fd-token [readOnly]=\\\"_cva.disabled\\\" (onCloseClick)=\\\"_removeToken(token, $event)\\\">\\n {{ token.label }}\\n </fd-token>\\n }\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [attr.placeholder]=\\\"_selectedSuggestions.length ? null : _cva.placeholder\\\"\\n (focus)=\\\"tokenizer._showAllTokens()\\\"\\n (blur)=\\\"!mobile && _onBlur($event); tokenizer._hideTokens()\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-required]=\\\"_cva.required\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n class=\\\"fd-tokenizer__input fd-input-group__input\\\"\\n />\\n </fd-tokenizer>\\n </fd-input-group>\\n @if (mobile && isOpen ? false : !!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n </fd-form-input-message-group>\\n</ng-template>\\n<ng-template #mobileControlTemplate>\\n <fd-input-group\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n class=\\\"fd-multi-combobox-input-group-custom\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"false\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel\\\"\\n >\\n <input\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [placeholder]=\\\"_cva.placeholder\\\"\\n (focus)=\\\"_cva.onTouched()\\\"\\n (blur)=\\\"!mobile && _onBlur($event)\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n [byline]=\\\"byline\\\"\\n [selection]=\\\"byline\\\"\\n (focusEscapeList)=\\\"_handleListFocusEscape($event)\\\"\\n class=\\\"fd-multi-combobox__list fd-list--multi-input\\\"\\n [id]=\\\"_cva.id + '-result'\\\"\\n role=\\\"listbox\\\"\\n [style.max-height]=\\\"!mobile && maxHeight\\\"\\n [style.min-width.px]=\\\"!mobile && minWidth\\\"\\n [style.max-width.px]=\\\"autoResize && maxWidth\\\"\\n [attr.aria-labelledby]=\\\"_cva.id + '-search'\\\"\\n aria-multiselectable=\\\"true\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"close()\\\"\\n (keydown.shift.tab)=\\\"close()\\\"\\n (keydown.escape)=\\\"close()\\\"\\n >\\n @if (!!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n @if (showSelectAll) {\\n <fd-multi-combobox-select-all-toggler\\n [selectAllHandler]=\\\"_handleSelectAllItems\\\"\\n [valueChanges]=\\\"selectionChange\\\"\\n [selectedItems]=\\\"_selectedSuggestions\\\"\\n [flatItems]=\\\"_flatSuggestions\\\"\\n ></fd-multi-combobox-select-all-toggler>\\n }\\n <ng-content></ng-content>\\n @if (isGroup) {\\n @for (group of _suggestions; track group; let groupIndex = $index) {\\n @if (!groupItemTemplate) {\\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.label\\\"\\n >\\n <span fd-list-title>{{ group.label }}</span>\\n </li>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"groupItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: { label: group.label } }\\\"\\n ></ng-template>\\n }\\n @for (optionItem of group.children; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n role=\\\"option\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n [attr.aria-setsize]=\\\"group.children?.length\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #listItem>\\n @if (optionItem.selected && !!selectedItemTemplate) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"selectedItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n @if (!(optionItem.selected && selectedItemTemplate)) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: index }\\\"\\n ></ng-template>\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryTextSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #optionItemSource>\\n @if (!optionItemTemplate) {\\n <span\\n fd-list-title\\n [attr.title]=\\\"optionItem.label\\\"\\n [innerHTML]=\\\"optionItem.label | highlight: inputText\\\"\\n fdTruncatedTitle\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" #secondaryTextSource>\\n @if (showSecondaryText) {\\n @if (!secondaryItemTemplate) {\\n <span\\n [style.text-align]=\\\"secondaryTextAlignment\\\"\\n fd-list-secondary\\n [attr.title]=\\\"optionItem.secondaryText\\\"\\n [innerHTML]=\\\"optionItem.secondaryText | highlight: inputText\\\"\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value }\\\"\\n ></ng-template>\\n }\\n }\\n</ng-template>\\n\", styles: [\".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=--cozy]):not([class*=--condensed]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/margins.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\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: FormInputMessageGroupComponent, selector: \"fd-form-input-message-group\", inputs: [\"triggers\", \"closeOnOutsideClick\", \"fillControlMode\", \"noArrow\", \"closeOnEscapeKey\", \"placement\", \"placementContainer\", \"isOpen\", \"preventSpaceKeyScroll\"], outputs: [\"isOpenChange\"] }, { 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: \"component\", type: TokenizerComponent, selector: \"fd-tokenizer\", inputs: [\"class\", \"disableKeyboardDeletion\", \"compactCollapse\", \"tokenizerFocusable\", \"inputValue\", \"glyph\", \"glyphFont\", \"moreTerm\", \"open\", \"showOverflowPopover\"], outputs: [\"moreClickedEvent\"] }, { kind: \"component\", type: TokenComponent, selector: \"fd-token\", inputs: [\"disabled\", \"selected\", \"readOnly\"], outputs: [\"onCloseClick\", \"onRemove\", \"onTokenClick\", \"onTokenKeydown\", \"elementFocused\"] }, { 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: FormControlComponent, selector: \"input[fd-form-control], textarea[fd-form-control]\", inputs: [\"state\", \"type\", \"class\", \"ariaLabel\", \"ariaLabelledBy\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { 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: SelectAllTogglerComponent, selector: \"fd-multi-combobox-select-all-toggler\", inputs: [\"selectAllHandler\", \"valueChanges\", \"selectedItems\", \"flatItems\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { 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: \"component\", type: CheckboxComponent, selector: \"fd-checkbox\", inputs: [\"wrapLabel\", \"valignLabel\", \"ariaLabel\", \"role\", \"value\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"title\", \"inputId\", \"state\", \"name\", \"label\", \"disabled\", \"readonly\", \"tristate\", \"tristateSelectable\", \"labelClass\", \"required\", \"displayOnly\", \"values\", \"standalone\"], outputs: [\"focusChange\"] }, { kind: \"directive\", type: ListSecondaryDirective, selector: \"[fd-list-secondary], [fdListSecondary]\", inputs: [\"type\"] }, { kind: \"directive\", type: MultiAnnouncerDirective, selector: \"[fdMultiAnnouncer]\", inputs: [\"multiAnnouncerOptions\"], exportAs: [\"fdMultiAnnouncer\"] }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-multi-combobox', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [\n {\n directive: CvaDirective,\n inputs: ['id:inputId', 'placeholder', 'state', 'stateMessage', 'disabled', 'readonly', 'name']\n },\n {\n directive: DataSourceDirective,\n inputs: ['dataSource'],\n outputs: ['dataChanged']\n }\n ], providers: [\n CvaControl,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: MultiComboboxDataSourceParser\n },\n {\n provide: MULTI_COMBOBOX_COMPONENT,\n useExisting: MultiComboboxComponent\n }\n ], imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n FormInputMessageGroupComponent,\n InputGroupComponent,\n TokenizerComponent,\n TokenComponent,\n FormsModule,\n AutoCompleteDirective,\n FormControlComponent,\n InputGroupInputDirective,\n FormMessageComponent,\n ListComponent,\n SelectAllTogglerComponent,\n ListGroupHeaderDirective,\n ListTitleDirective,\n ListItemComponent,\n CheckboxComponent,\n NgClass,\n ListSecondaryDirective,\n FdTranslatePipe,\n SearchHighlightPipe,\n MultiAnnouncerDirective,\n TruncatedTitleDirective\n ], template: \"<div class=\\\"fd-multi-combobox\\\">\\n @if (mobile) {\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n } @else {\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list fd-multi-combobox__list-container\\\"\\n (isOpenChange)=\\\"_popoverOpenChangeHandle($event)\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [triggers]=\\\"[]\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [maxWidth]=\\\"_popoverMaxWidth\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [style.width.%]=\\\"!autoResize && 100\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n }\\n</div>\\n<ng-template #controlTemplate>\\n <fd-form-input-message-group>\\n <fd-input-group\\n #inputGroup\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [button]=\\\"!_cva.readonly\\\"\\n [glyph]=\\\"!_cva.readonly ? 'navigation-down-arrow' : ' '\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"_addOnClicked($event)\\\"\\n (click)=\\\"mobile && !isOpen && _onPrimaryButtonClick(false)\\\"\\n (keydown)=\\\"_navigateByTokens($event)\\\"\\n >\\n <fd-tokenizer\\n [tokenizerFocusable]=\\\"false\\\"\\n [compactCollapse]=\\\"true\\\"\\n [showOverflowPopover]=\\\"false\\\"\\n #tokenizer\\n class=\\\"fd-multi-combobox-tokenizer-custom\\\"\\n (moreClickedEvent)=\\\"_moreClicked()\\\"\\n fdMultiAnnouncer\\n [multiAnnouncerOptions]=\\\"_suggestions\\\"\\n >\\n @for (token of _selectedSuggestions; track token) {\\n <fd-token [readOnly]=\\\"_cva.disabled\\\" (onCloseClick)=\\\"_removeToken(token, $event)\\\">\\n {{ token.label }}\\n </fd-token>\\n }\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [attr.placeholder]=\\\"_selectedSuggestions.length ? null : _cva.placeholder\\\"\\n (focus)=\\\"tokenizer._showAllTokens()\\\"\\n (blur)=\\\"!mobile && _onBlur($event); tokenizer._hideTokens()\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-required]=\\\"_cva.required\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n class=\\\"fd-tokenizer__input fd-input-group__input\\\"\\n />\\n </fd-tokenizer>\\n </fd-input-group>\\n @if (mobile && isOpen ? false : !!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n </fd-form-input-message-group>\\n</ng-template>\\n<ng-template #mobileControlTemplate>\\n <fd-input-group\\n [id]=\\\"_cva.id + '-input-group-container'\\\"\\n class=\\\"fd-multi-combobox-input-group-custom\\\"\\n [state]=\\\"_cva.state\\\"\\n [buttonFocusable]=\\\"false\\\"\\n [isControl]=\\\"true\\\"\\n [disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [isExpanded]=\\\"!mobile && isOpen && _suggestions.length > 0\\\"\\n [attr.aria-disabled]=\\\"_cva.disabled || _cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [glyphAriaLabel]=\\\"_cva.ariaLabel\\\"\\n >\\n <input\\n fdkAutoComplete\\n (onComplete)=\\\"_onCompleteTerm($event)\\\"\\n [options]=\\\"_suggestions\\\"\\n [inputText]=\\\"inputText\\\"\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [ariaLabel]=\\\"'coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate\\\"\\n [attr.aria-labelledby]=\\\"_cva.ariaLabelledBy\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? _cva.id + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n fd-form-control\\n fd-input-group-input\\n tabindex=\\\"0\\\"\\n [id]=\\\"_cva.id\\\"\\n [name]=\\\"_cva.name\\\"\\n (keydown)=\\\"_onInputKeydownHandler($event)\\\"\\n [disabled]=\\\"_cva.disabled\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (ngModelChange)=\\\"_searchTermChanged()\\\"\\n [placeholder]=\\\"_cva.placeholder\\\"\\n (focus)=\\\"_cva.onTouched()\\\"\\n (blur)=\\\"!mobile && _onBlur($event)\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [readonly]=\\\"_cva.readonly\\\"\\n [attr.aria-readonly]=\\\"_cva.readonly\\\"\\n [displayFn]=\\\"_displayFn\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n [byline]=\\\"byline\\\"\\n [selection]=\\\"byline\\\"\\n (focusEscapeList)=\\\"_handleListFocusEscape($event)\\\"\\n class=\\\"fd-multi-combobox__list fd-list--multi-input\\\"\\n [id]=\\\"_cva.id + '-result'\\\"\\n role=\\\"listbox\\\"\\n [style.max-height]=\\\"!mobile && maxHeight\\\"\\n [style.min-width.px]=\\\"!mobile && minWidth\\\"\\n [style.max-width.px]=\\\"autoResize && maxWidth\\\"\\n [attr.aria-labelledby]=\\\"_cva.id + '-search'\\\"\\n aria-multiselectable=\\\"true\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"close()\\\"\\n (keydown.shift.tab)=\\\"close()\\\"\\n (keydown.escape)=\\\"close()\\\"\\n >\\n @if (!!_cva.stateMessage) {\\n <fd-form-message [type]=\\\"_cva.state\\\" [innerHtml]=\\\"_cva.stateMessage\\\"></fd-form-message>\\n }\\n @if (showSelectAll) {\\n <fd-multi-combobox-select-all-toggler\\n [selectAllHandler]=\\\"_handleSelectAllItems\\\"\\n [valueChanges]=\\\"selectionChange\\\"\\n [selectedItems]=\\\"_selectedSuggestions\\\"\\n [flatItems]=\\\"_flatSuggestions\\\"\\n ></fd-multi-combobox-select-all-toggler>\\n }\\n <ng-content></ng-content>\\n @if (isGroup) {\\n @for (group of _suggestions; track group; let groupIndex = $index) {\\n @if (!groupItemTemplate) {\\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.label\\\"\\n >\\n <span fd-list-title>{{ group.label }}</span>\\n </li>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"groupItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: { label: group.label } }\\\"\\n ></ng-template>\\n }\\n @for (optionItem of group.children; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n role=\\\"option\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n [attr.aria-setsize]=\\\"group.children?.length\\\"\\n [attr.aria-posinset]=\\\"i + 1\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (optionItem of _suggestions; track optionItem; let i = $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n (click)=\\\"!mobile && _onOptionClicked($event, i)\\\"\\n (keydown)=\\\"_onItemKeyDownHandler($event)\\\"\\n [selected]=\\\"!!optionItem.selected\\\"\\n >\\n <fd-checkbox\\n role=\\\"presentation\\\"\\n (click)=\\\"_onOptionCheckboxClicked($event, i)\\\"\\n (ngModelChange)=\\\"_toggleSelection(optionItem)\\\"\\n [ngModel]=\\\"optionItem.selected\\\"\\n >\\n </fd-checkbox>\\n <ng-template\\n [ngTemplateOutlet]=\\\"listItem\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: i }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #listItem>\\n @if (optionItem.selected && !!selectedItemTemplate) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"selectedItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n @if (!(optionItem.selected && selectedItemTemplate)) {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem, index: index }\\\"\\n ></ng-template>\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryTextSource\\\"\\n [ngTemplateOutletContext]=\\\"{ optionItem: optionItem }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" let-index=\\\"index\\\" #optionItemSource>\\n @if (!optionItemTemplate) {\\n <span\\n fd-list-title\\n [attr.title]=\\\"optionItem.label\\\"\\n [innerHTML]=\\\"optionItem.label | highlight: inputText\\\"\\n fdTruncatedTitle\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"optionItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value, index: index }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template let-optionItem=\\\"optionItem\\\" #secondaryTextSource>\\n @if (showSecondaryText) {\\n @if (!secondaryItemTemplate) {\\n <span\\n [style.text-align]=\\\"secondaryTextAlignment\\\"\\n fd-list-secondary\\n [attr.title]=\\\"optionItem.secondaryText\\\"\\n [innerHTML]=\\\"optionItem.secondaryText | highlight: inputText\\\"\\n ></span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"secondaryItemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: optionItem.value }\\\"\\n ></ng-template>\\n }\\n }\\n</ng-template>\\n\", styles: [\".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=--cozy]):not([class*=--condensed]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/margins.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1.DynamicComponentService }, { type: i1.FocusTrapService }], propDecorators: { showSelectAll: [{\n type: Input\n }], selectedItems: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], byline: [{\n type: Input\n }], bodyMaxWidth: [{\n type: Input\n }], entityClass: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], group: [{\n type: Input\n }], groupKey: [{\n type: Input\n }], secondaryKey: [{\n type: Input\n }], showSecondaryText: [{\n type: Input\n }], secondaryTextAlignment: [{\n type: Input\n }], autoResize: [{\n type: Input\n }], openDropdownOnAddOnClicked: [{\n type: Input\n }], value: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], addonIconTitle: [{\n type: Input\n }], invalidEntryMessage: [{\n type: Input\n }], limitless: [{\n type: Input\n }], lookupKey: [{\n type: Input\n }], displayKey: [{\n type: Input\n }], list: [{\n type: Input\n }], invalidEntryDisplayTime: [{\n type: Input\n }], matchingStrategy: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], isOpenChange: [{\n type: Output\n }], addOnButtonClicked: [{\n type: Output\n }], dataRequested: [{\n type: Output\n }], dataReceived: [{\n type: Output\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement', { read: ElementRef }]\n }], listComponent: [{\n type: ViewChild,\n args: [FD_LIST_COMPONENT]\n }], customTemplates: [{\n type: ContentChildren,\n args: [TemplateDirective]\n }], mobileControlTemplate: [{\n type: ViewChild,\n args: ['mobileControlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _tokenizer: [{\n type: ViewChild,\n args: [TokenizerComponent]\n }], _inputGroup: [{\n type: ViewChild,\n args: ['inputGroup', { read: ElementRef }]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9tdWx0aS1jb21ib2JveC9tdWx0aS1jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBZ0QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwSCxPQUFPLEVBQ0gscUJBQXFCLEVBR3JCLHVCQUF1QixFQUV2QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixnQkFBZ0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFFYix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFD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RGpCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLRSxrQkFBa0I7c0JBRDFCLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtwQyxhQUFhO3NCQUQ3QixTQUFTO3VCQUFDLGlCQUFpQjtnQkFLWCxlQUFlO3NCQUQvQixlQUFlO3VCQUFDLGlCQUFpQjtnQkFLakIscUJBQXFCO3NCQURyQyxTQUFTO3VCQUFDLHVCQUF1QjtnQkFLakIsWUFBWTtzQkFENUIsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUtaLFdBQVc7c0JBRDNCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLNUIsS0FBSztzQkFEckIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQSwgQ09OVFJPTCwgRE9XTl9BUlJPVywgRU5URVIsIEVTQ0FQRSwgU1BBQ0UsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlRGlyZWN0aXZlLCBGRF9EQVRBX1NPVVJDRV9UUkFOU0ZPUk1FUiwgTWF0Y2hpbmdTdHJhdGVneSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2RhdGEtc291cmNlJztcbmltcG9ydCB7IEN2YUNvbnRyb2wsIEN2YURpcmVjdGl2ZSwgT3B0aW9uSXRlbSwgU2VsZWN0SXRlbSwgU2VsZWN0YWJsZU9wdGlvbkl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZURpcmVjdGl2ZSxcbiAgICBBdXRvQ29tcGxldGVFdmVudCxcbiAgICBDb250ZW50RGVuc2l0eSxcbiAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICBGb2N1c0VzY2FwZURpcmVjdGlvbixcbiAgICBGb2N1c1RyYXBTZXJ2aWNlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgU2VhcmNoSGlnaGxpZ2h0UGlwZSxcbiAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZSxcbiAgICBjb2VyY2VBcnJheVNhZmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIEZEX0xJU1RfQ09NUE9ORU5ULFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTGlzdENvbXBvbmVudEludGVyZmFjZSxcbiAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgTGlzdFNlY29uZGFyeURpcmVjdGl2ZSxcbiAgICBMaXN0VGl0bGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBQb3BvdmVyRmlsbE1vZGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVG9rZW5Db21wb25lbnQsIFRva2VuaXplckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b2tlbic7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhc2VNdWx0aUNvbWJvYm94IH0gZnJvbSAnLi9iYXNlLW11bHRpLWNvbWJvYm94LmNsYXNzJztcbmltcG9ydCB7IE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tICcuL21vYmlsZS9tb2JpbGUtbXVsdGktY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCB9IGZyb20gJy4vbXVsdGktY29tYm9ib3gudG9rZW4nO1xuXG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZVBhcnNlciB9IGZyb20gJy4vZGF0YS1zb3VyY2UvbXVsdGktY29tYm9ib3gtZGF0YS1zb3VyY2UtcGFyc2VyJztcblxuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsIEZvcm1NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBGZFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uUmVzb2x2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSwgZ2V0VG9rZW5JbmRleEJ5SWRsT3JWYWx1ZSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscy9zZWxlY3Rpb24tY2hhbmdlLmV2ZW50JztcbmltcG9ydCB7IE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aS1hbm5vdW5jZXIvbXVsdGktYW5ub3VuY2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBGRF9NQVBfTElNSVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTWFwIGxpbWl04omlJywgeyBmYWN0b3J5OiAoKSA9PiAxMiB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1tdWx0aS1jb21ib2JveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWNvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vbXVsdGktY29tYm9ib3guY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBDdmFEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnaWQ6aW5wdXRJZCcsICdwbGFjZWhvbGRlcicsICdzdGF0ZScsICdzdGF0ZU1lc3NhZ2UnLCAnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAnbmFtZSddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJ10sXG4gICAgICAgICAgICBvdXRwdXRzOiBbJ2RhdGFDaGFuZ2VkJ11cbiAgICAgICAgfVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEN2YUNvbnRyb2wsXG4gICAgICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RBVEFfU09VUkNFX1RSQU5TRk9STUVSLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IE11bHRpQ29tYm9ib3hEYXRhU291cmNlUGFyc2VyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBNdWx0aUNvbWJvYm94Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJCb2R5Q29tcG9uZW50LFxuICAgICAgICBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsXG4gICAgICAgIElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIFRva2VuaXplckNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5Db21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvQ29tcGxldGVEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBMaXN0Q29tcG9uZW50LFxuICAgICAgICBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50LFxuICAgICAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIExpc3RUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBMaXN0U2Vjb25kYXJ5RGlyZWN0aXZlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIFNlYXJjaEhpZ2hsaWdodFBpcGUsXG4gICAgICAgIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlLFxuICAgICAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlDb21ib2JveENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIEJhc2VNdWx0aUNvbWJvYm94PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBTaG93IHNlbGVjdCBhbGwgY2hlY2tib3hcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAgIC8qKiBQcm92aWRlcyBzZWxlY3RlZCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZEl0ZW1zKHZhbHVlOiBUW10pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IGNvZXJjZUFycmF5U2FmZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zO1xuICAgIH1cbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBoZWlnaHQgZm9yIHRoZSBvcHRpb25QYW5lbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgYmUgZW5hYmxlZDsgRW5hYmxlZCBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b0NvbXBsZXRlID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXRlbSBvcHRpb25zIHNob3VsZCBiZSByZW5kZXJlZCBhcyBieWxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBieWxpbmUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE1heCB3aWR0aCBvZiBtdWx0aSBjb21ib2JveCBkcm9wZG93biBib2R5LlxuICAgICAqIGBub25lYCB3aWxsIG5vdCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24uXG4gICAgICogYGNvbnRhaW5lcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gdG8gdGhlIHdpZHRoIG9mIHRoZSBtdWx0aS1pbnB1dCBpdHNlbGYuXG4gICAgICogYG51bWJlcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gYnkgcHJvdmlkZWQgbnVtYmVyIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlNYXhXaWR0aDogJ25vbmUnIHwgJ2NvbnRhaW5lcicgfCBudW1iZXIgPSAnbm9uZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3Zlck1heFdpZHRoKCk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5TWF4V2lkdGggPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9keU1heFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keU1heFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIENvbWJvYm94IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBUZWxscyB0aGUgbXVsdGktY29tYm9ib3ggaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikuICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeUtleTogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKGFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkuICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoYXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBhdXRvUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIG9wZW4gdGhlIGRyb3Bkb3duIHdoZW4gdGhlIGFkZG9uIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQgPSB0cnVlO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBtdWx0aSBjb21ib2JveCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBUW10pIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdmEudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogKiBgYXQtbGVhc3RgIHdpbGwgYXBwbHkgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLiAtIERlZmF1bHRcbiAgICAgKiAqIGBlcXVhbGAgd2lsbCBhcHBseSBhIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKiBTZXRzIHRpdGxlIGF0dHJpYnV0ZSB0byBhZGRvbiBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBhZGRvbkljb25UaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBpMThuIG1vZHVsZSB0byBtb2RpZnkgdGhlIHRyYW5zbGF0aW9uIGZvciB0aGlzIHN0cmluZy5cbiAgICAgKiBTZXRzIGludmFsaWQgZW50cnkgbWVzc2FnZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW52YWxpZEVudHJ5TWVzc2FnZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUdXJucyBsaW1pdGxlc3MgbW9kZSwgT04gb3IgT0ZGICovXG4gICAgQElucHV0KClcbiAgICBsaW1pdGxlc3M6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGluIGZpbHRlcnMgYW5kIGFueSBraW5kIG9mIGNvbXBhcmF0b3JzIHdoZW4gd2Ugd29yayB3aXRoIG9iamVjdHMgYW5kIHRoaXMgaWRlbnRpZnlcbiAgICAgKiB1bmlxdWUgZmllbGQgbmFtZSBiYXNlZCBvbiB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZG8gdGhlIGpvYlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9va3VwS2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHdlIGRlYWwgd2l0aCB1bmtub3duIG9iamVjdCB3ZSBjYW4gdXNlIGBkaXNwbGF5S2V5YCB0byByZXRyaWV2ZSB2YWx1ZSBmcm9tIHNwZWNpZmljXG4gICAgICogcHJvcGVydHkgb2YgdGhlIG9iamVjdCB0byBhY3QgYXMgZGlzcGxheSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBTZWUgQ29tYm9Cb3gsIFNlbGVjdCwgUmFkaW9Hcm91cCwgQ2hlY2tCb3ggR3JvdXBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlLZXk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgdmFsdWVzLCBpdCBjYW4gYmUgb2YgdHlwZSBTZWxlY3RJdGVtLCBzdHJpbmcgb3IgYW55IG9iamVjdC5cbiAgICAgKiBHZW5lcmljIG9iamVjdCB0eXBlIGlzIGFtb25nIHRoZSBsaXN0IG9mIHR5cGVzLFxuICAgICAqIGJlY2F1c2Ugd2UgYWxsb3cgdG8gZ2V0IGxhYmVscyBhbmQgdmFsdWVzIHVzaW5nIGBkaXNwbGF5S2V5YCBhbmQgYGxvb2t1cEtleWAgaW5wdXRzIGFjY29yZGluZ2x5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdDogQXJyYXk8U2VsZWN0SXRlbSB8IHN0cmluZyB8IG9iamVjdD47XG5cbiAgICAvKiogVGltZSBpbiBtcyBmb3IgaG93IGxvbmcgbWVzc2FnZSBvZiBpbnZhbGlkIGVudHJ5IHNob3VsZCBiZSBkaXNwbGF5ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbnZhbGlkRW50cnlEaXNwbGF5VGltZSA9IDMwMDA7XG5cbiAgICAvKipcbiAgICAgKiBTdHJpbmcgbWF0Y2hpbmcgc3RyYXRlZ3kgZm9yIHR5cGVhaGVhZCBsaXN0LlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOiAnc3RhcnRzIHdpdGggcGVyIHRlcm0nLCAnc3RhcnRzIHdpdGgnLCAnY29udGFpbnMnXG4gICAgICogRGVmYXVsdDogJ3N0YXJ0cyB3aXRoIHBlciB0ZXJtJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF0Y2hpbmdTdHJhdGVneSA9IE1hdGNoaW5nU3RyYXRlZ3kuU1RBUlRTX1dJVEhfUEVSX1RFUk07XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBFbWl0cyBldmVudCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZC9jbG9zZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaXNPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkT25CdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgc2VhcmNoSW5wdXRFbGVtZW50OiBOdWxsYWJsZTxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGRF9MSVNUX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnRJbnRlcmZhY2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ21vYmlsZUNvbnRyb2xUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2JpbGVDb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoVG9rZW5pemVyQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuaXplcjogVG9rZW5pemVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdpbnB1dEdyb3VwJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRHcm91cDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2l0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIG9wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gR3JvdXAgSGVhZGVyIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIHNlY29uZGFyeUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHkgPSB0aGlzLl9tdWx0aUNvbWJvYm94Q29uZmlnPy5jb250ZW50RGVuc2l0eSA/PyAnY296eSc7XG5cbiAgICAvKiogU2V0IHRoZSBpbnB1dCB0ZXh0IG9mIHRoZSBpbnB1dC4gKi9cbiAgICBzZXQgaW5wdXRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9jdmEub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgaW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgZ2V0IGlucHV0VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0VmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIElzIGVtcHR5IHNlYXJjaCBmaWVsZC4gKi9cbiAgICBnZXQgaXNFbXB0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgTXVsdGkgSW5wdXQgaXMgb3BlbmVkLiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqL1xuICAgIG1heFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICovXG4gICAgbWluV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uXG4gICAgICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sYW5nJCA9IGluamVjdChGRF9MQU5HVUFHRSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzVHJhcFNlcnZpY2U6IEZvY3VzVHJhcFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdmFDb250cm9sLmxpc3RlblRvQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9vcGVuRGF0YVN0cmVhbSh0aGlzLm1hdGNoaW5nU3RyYXRlZ3kpO1xuXG4gICAgICAgIHRoaXMuX2xhbmckLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGxhbmc6IEZkTGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEVudHJ5TWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW52YWxpZEVudHJ5RXJyb3InXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpO1xuXG4gICAgICAgIHRoaXMuX2luaXRXaW5kb3dSZXNpemUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90b2dnbGVTZWxlY3Rpb24oaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0sIGZyb21Ub2tlbkNsb3NlQ2xpY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHggPSBnZXRUb2tlbkluZGV4QnlJZGxPclZhbHVlKGl0ZW0sIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMpO1xuICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZDtcblxuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoZnJvbVRva2VuQ2xvc2VDbGljayk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcHRpb25DaGVja2JveENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNvbXBsZXRlVGVybShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KGV2ZW50LnRlcm0pO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHNlbGVjdHMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuXG4gICAgICogKnNlbGVjdCogYXR0cmlidXRlIOKAkyBpZiAqdHJ1ZSogc2VsZWN0IGFsbCwgaWYgKmZhbHNlKiB1bnNlbGVjdCBhbGxcbiAgICAgKiAqL1xuICAgIF9oYW5kbGVTZWxlY3RBbGxJdGVtcyA9IChzZWxlY3Q6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLnNlbGVjdGVkID0gc2VsZWN0KSk7XG4gICAgICAgIHRoaXMuX29uRXZlcnlJdGVtKHRoaXMuX3N1Z2dlc3Rpb25zLCAoaXRlbSkgPT4gKGl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3QpKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IHNlbGVjdCA/IFsuLi50aGlzLl9mbGF0U3VnZ2VzdGlvbnNdIDogW107XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcblxuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVCeVRva2VucyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtET1dOX0FSUk9XLCBVUF9BUlJPV10pICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaXRlbXM/LmZpcnN0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yZW1vdmVUb2tlbih0b2tlbjogU2VsZWN0YWJsZU9wdGlvbkl0ZW0sIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uSXRlbSA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLnZhbHVlID09PSB0b2tlbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tb3JlQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLmlzR3JvdXBcbiAgICAgICAgICAgID8gdGhpcy5fY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXModGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKVxuICAgICAgICAgICAgOiB0aGlzLl9zdWdnZXN0aW9ucy5maWx0ZXIoKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5zb21lKChpdGVtKSA9PiBlcXVhbChpdGVtLnZhbHVlLCB2YWx1ZS52YWx1ZSkpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTGlzdCA9ICEhdGFyZ2V0LmNsb3Nlc3QoJy5mZC1tdWx0aS1jb21ib2JveF9fbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zWzBdLmxhYmVsID09PSB0aGlzLmlucHV0VGV4dCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLl9zdWdnZXN0aW9uc1swXS5zZWxlY3RlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uKHRoaXMuX3N1Z2dlc3Rpb25zWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3Nob3dMaXN0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEEpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0QWxsSXRlbXMoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdEFsbEl0ZW1zKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcHRpb25DbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uTGlzdEVsZW1lbnRDbGlja2VkKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS5cbiAgICAgKi9cbiAgICBfZGlhbG9nRGlzbWlzcyhiYWNrdXA6IFNlbGVjdGFibGVPcHRpb25JdGVtW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IFsuLi5iYWNrdXBdO1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9ICcnO1xuICAgICAgICB0aGlzLl9zaG93TGlzdChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBfZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9wb3Zlck9wZW5DaGFuZ2VIYW5kbGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuXG4gICAgICAgIC8qKiBBbGxvdyBjb21ib2JveCB1cCBhbmQgZG93biBhcnJvd3MgdG8gd29yayBwcm9wZXJseSB3aGVuIG11bHRpIGNvbWJvYm94IGlzIGluc2lkZSBhIGRpYWxvZyB3aXRoIGEgdHJhcHBlZCBmb2N1cyAqL1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlLnVucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9jdmEub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIHNlbGVjdCBwb3BvdmVyIGJvZHkuICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgc2VsZWN0IHBvcG92ZXIgYm9keS4gKi9cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNob3duJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcblxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93TGlzdChpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICAgICAgdGhpcy5fY3ZhLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLm5leHQoaXNPcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaFRlcm1DaGFuZ2VkKHRleHQ6IHN0cmluZyA9IHRoaXMuaW5wdXRUZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCB0ZXh0KTtcblxuICAgICAgICBpZiAoIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIHRoaXMuX21hcExpbWl0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hcC5zZXQoJ2xpbWl0JywgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2VQcm92aWRlcj8ubWF0Y2gobWFwKTtcblxuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgQ2xpY2sgb24gQnV0dG9uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIF9vblByaW1hcnlCdXR0b25DbGljayhpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bk9uQWRkT25DbGlja2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TGlzdCghaXNPcGVuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIEtleWRvd24gb24gSW5wdXRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX29uSW5wdXRLZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3ZhLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgtMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFsuLi50aGlzLl9ub25PcGVuaW5nS2V5cywgQ09OVFJPTF0pKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TGlzdCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY2VwdGVkS2V5cyA9XG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnYWxwaGFiZXRpY2FsJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdudW1lcmljJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdpbWUnKTtcbiAgICAgICAgICAgIGlmIChhY2NlcHRlZEtleXMpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXRUaW1lb3V0IGlzIG5lZWRlZCBmb3IgaW5wdXQgdG8gcmVjZWl2ZSBuZXcgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Py5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBfaGFuZGxlTGlzdEZvY3VzRXNjYXBlKGRpcmVjdGlvbjogRm9jdXNFc2NhcGVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNUb1NlYXJjaEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgX2FkZE9uQ2xpY2tlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkT25CdXR0b25DbGlja2VkLmVtaXQoJGV2ZW50KTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fb25QcmltYXJ5QnV0dG9uQ2xpY2sodGhpcy5pc09wZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0TGltaXRsZXNzKGxpbWl0bGVzczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmxpbWl0bGVzcyA9IGxpbWl0bGVzcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRNYXBMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5saW1pdGxlc3MgPyAodGhpcy5kYXRhU291cmNlRGlyZWN0aXZlLmRhdGFTb3VyY2UgYXMgYW55W10pLmxlbmd0aCA6IHRoaXMuX21hcExpbWl0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldEdyb3VwSXRlbUlkcyhncm91cEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtSWRzID0gdGhpcy5pdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFdpdGhHcm91cCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZC13aXRoLWdyb3VwLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJZHggPSBpZFdpdGhHcm91cC5zcGxpdCgnLScpW2lkV2l0aEdyb3VwLnNwbGl0KCctJykubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwSWR4ID09PSBTdHJpbmcoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoZWwpID0+IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBJdGVtSWRzPy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEl0ZXJhdGUgb3ZlciBldmVyeSBpdGVtIGFuZCBwZXJmb3JtIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25FdmVyeUl0ZW0oaXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10sIGNhbGxiYWNrOiAoaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soaXRlbSk7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkV2ZXJ5SXRlbShpdGVtLmNoaWxkcmVuLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQodGV4dCA9IHRoaXMuaW5wdXRUZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBnZXRTZWxlY3RJdGVtQnlJbnB1dFZhbHVlPFQ+KHRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnMsIHRleHQpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2VsZWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBzZXQgaW5wdXQgdGV4dCBhcyBpdGVtIGxhYmVsLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldElucHV0VGV4dEZyb21PcHRpb25JdGVtKGl0ZW06IE9wdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBpdGVtLmxhYmVsO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd0xpc3QoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBhcHBseWluZyByYW5nZSBzZWxlY3Rpb24uIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYWZ0ZXIgY29tYm9ib3ggaXRlbSdzIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkxpc3RFbGVtZW50Q2xpY2tlZChldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGF0IHRoaXMgcG9pbnQsIHNvIGl0IGNhbiBiZSBzYWZlbHkgdXNlZFxuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGF0ZSA9IHRoaXMuX2ZsYXRTdWdnZXN0aW9uc1tpbmRleF0uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKGluZGV4LCBldmVudCk7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9mbGF0U3VnZ2VzdGlvbnNbaWR4XTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LnNlbGVjdGVkICE9PSBzZWxlY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92aW5nIGZyb20gXCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmVTZXQuYWRkKGN1cnJlbnQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZGluZyBjdXJyZW50IGl0ZW0gdG8gXCJfc2VsZWN0ZWRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMucHVzaChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudC5zZWxlY3RlZCA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmlsdGVyKChzKSA9PiAhdG9SZW1vdmVTZXQuaGFzKHMudmFsdWUpKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLm9uUmVzaXplKCk7XG5cbiAgICAgICAgdGhpcy5fdG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgIHRoaXMuX3Rva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UoZW1pdEluTW9iaWxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGVtaXRJbk1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwQW5kVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1VTFRJX0NPTUJPQk9YX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQoXG4gICAgICAgICAgICB7IGxpc3RUZW1wbGF0ZTogdGhpcy5saXN0VGVtcGxhdGUsIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5tb2JpbGVDb250cm9sVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIE1vYmlsZU11bHRpQ29tYm9ib3hDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyUmVmOiB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBpbmplY3RvciB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHBpY2tzIG90aGVyIHZhbHVlIG1vdmVkIGZyb20gY3VycmVudCBvbmUgYnkgb2Zmc2V0LCBjYWxsZWQgb25seSB3aGVuIE11bHRpIENvbWJvYm94IGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlID0gZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZTxUPih0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaW5wdXRUZXh0ICYmIG9mZnNldCA9PT0gLTEgPyB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA6IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zW3Bvc2l0aW9uXTtcblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5wdXRUZXh0RnJvbU9wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gaXRlbT8ubGFiZWwpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbShvZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0V2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmF1dG9SZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5faW5wdXRHcm91cC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uc0xpc3RXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9pbnB1dEdyb3VwLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gYm9keS5vZmZzZXRXaWR0aCAtIGJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLmF1dG9SZXNpemUgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbEJhcldpZHRoIC0gcmVjdC5sZWZ0IDogdGhpcy5taW5XaWR0aDtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBc3NpZ24gY3VzdG9tIHRlbXBsYXRlc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2Fzc2lnbkN1c3RvbVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuZm9yRWFjaCgodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGUubmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbkl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwSXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmRhcnlJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RlZEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveFwiPlxuICAgIEBpZiAobW9iaWxlKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXBvcG92ZXItY3VzdG9tLWxpc3QgZmQtbXVsdGktY29tYm9ib3hfX2xpc3QtY29udGFpbmVyXCJcbiAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiX3BvcG92ZXJPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICAgICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJfY3ZhLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFttYXhXaWR0aF09XCJfcG9wb3Zlck1heFdpZHRoXCJcbiAgICAgICAgICAgIFtmaWxsQ29udHJvbE1vZGVdPVwiZmlsbENvbnRyb2xNb2RlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keSBbc3R5bGUud2lkdGguJV09XCIhYXV0b1Jlc2l6ZSAmJiAxMDBcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlzdFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWZvcm0taW5wdXQtbWVzc2FnZS1ncm91cD5cbiAgICAgICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgICAgICAjaW5wdXRHcm91cFxuICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWQgKyAnLWlucHV0LWdyb3VwLWNvbnRhaW5lcidcIlxuICAgICAgICAgICAgW3N0YXRlXT1cIl9jdmEuc3RhdGVcIlxuICAgICAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICAgICAgW2J1dHRvbl09XCIhX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbZ2x5cGhdPVwiIV9jdmEucmVhZG9ubHkgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICcgJ1wiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCIhbW9iaWxlICYmIGlzT3BlbiAmJiBfc3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgW2dseXBoQXJpYUxhYmVsXT1cIl9jdmEuYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiYWRkb25JY29uVGl0bGUgfHwgKCdwbGF0Zm9ybU11bHRpQ29tYm9ib3guaW5wdXRHbHlwaEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgKGFkZE9uQnV0dG9uQ2xpY2tlZCk9XCJfYWRkT25DbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiAhaXNPcGVuICYmIF9vblByaW1hcnlCdXR0b25DbGljayhmYWxzZSlcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiX25hdmlnYXRlQnlUb2tlbnMoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC10b2tlbml6ZXJcbiAgICAgICAgICAgICAgICBbdG9rZW5pemVyRm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY29tcGFjdENvbGxhcHNlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93T3ZlcmZsb3dQb3BvdmVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAjdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveC10b2tlbml6ZXItY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAobW9yZUNsaWNrZWRFdmVudCk9XCJfbW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICAgICAgICAgZmRNdWx0aUFubm91bmNlclxuICAgICAgICAgICAgICAgIFttdWx0aUFubm91bmNlck9wdGlvbnNdPVwiX3N1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yICh0b2tlbiBvZiBfc2VsZWN0ZWRTdWdnZXN0aW9uczsgdHJhY2sgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuIFtyZWFkT25seV09XCJfY3ZhLmRpc2FibGVkXCIgKG9uQ2xvc2VDbGljayk9XCJfcmVtb3ZlVG9rZW4odG9rZW4sICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRva2VuLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjc2VhcmNoSW5wdXRFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAob25Db21wbGV0ZSk9XCJfb25Db21wbGV0ZVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIl9zdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidjb3JlTXVsdGlDb21ib0JveC5tdWx0aUNvbWJvQm94QXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9jdmEuYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/ICdsaXN0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyBfY3ZhLmlkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgZmQtaW5wdXQtZ3JvdXAtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJfY3ZhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3NlYXJjaFRlcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJfc2VsZWN0ZWRTdWdnZXN0aW9ucy5sZW5ndGggPyBudWxsIDogX2N2YS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJ0b2tlbml6ZXIuX3Nob3dBbGxUb2tlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIiFtb2JpbGUgJiYgX29uQmx1cigkZXZlbnQpOyB0b2tlbml6ZXIuX2hpZGVUb2tlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cIl9jdmEucmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZuXT1cIl9kaXNwbGF5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRva2VuaXplcl9faW5wdXQgZmQtaW5wdXQtZ3JvdXBfX2lucHV0XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG4gICAgICAgIEBpZiAobW9iaWxlICYmIGlzT3BlbiA/IGZhbHNlIDogISFfY3ZhLnN0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJfY3ZhLnN0YXRlXCIgW2lubmVySHRtbF09XCJfY3ZhLnN0YXRlTWVzc2FnZVwiPjwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICB9XG4gICAgPC9mZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNtb2JpbGVDb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgIFtpZF09XCJfY3ZhLmlkICsgJy1pbnB1dC1ncm91cC1jb250YWluZXInXCJcbiAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1jb21ib2JveC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICBbc3RhdGVdPVwiX2N2YS5zdGF0ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiZmFsc2VcIlxuICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZCB8fCBfY3ZhLnJlYWRvbmx5XCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBpc09wZW4gJiYgX3N1Z2dlc3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIl9jdmEuZGlzYWJsZWQgfHwgX2N2YS5yZWFkb25seVwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwiX2N2YS5yZWFkb25seVwiXG4gICAgICAgIFtnbHlwaEFyaWFMYWJlbF09XCJfY3ZhLmFyaWFMYWJlbFwiXG4gICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwiX29uQ29tcGxldGVUZXJtKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiX3N1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInY29yZU11bHRpQ29tYm9Cb3gubXVsdGlDb21ib0JveEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2N2YS5hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZSA/ICdsaXN0JyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gX2N2YS5pZCArICctcmVzdWx0JyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW2lkXT1cIl9jdmEuaWRcIlxuICAgICAgICAgICAgW25hbWVdPVwiX2N2YS5uYW1lXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbklucHV0S2V5ZG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiX2N2YS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfc2VhcmNoVGVybUNoYW5nZWQoKVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiX2N2YS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiX2N2YS5vblRvdWNoZWQoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCIhbW9iaWxlICYmIF9vbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiX2N2YS5yZWFkb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cIl9jdmEucmVhZG9ubHlcIlxuICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJfZGlzcGxheUZuXCJcbiAgICAgICAgLz5cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdFRlbXBsYXRlPlxuICAgIDx1bFxuICAgICAgICBmZC1saXN0XG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgW3NlbGVjdGlvbl09XCJieWxpbmVcIlxuICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cIl9oYW5kbGVMaXN0Rm9jdXNFc2NhcGUoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiZmQtbXVsdGktY29tYm9ib3hfX2xpc3QgZmQtbGlzdC0tbXVsdGktaW5wdXRcIlxuICAgICAgICBbaWRdPVwiX2N2YS5pZCArICctcmVzdWx0J1wiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiIW1vYmlsZSAmJiBtYXhIZWlnaHRcIlxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIiFtb2JpbGUgJiYgbWluV2lkdGhcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImF1dG9SZXNpemUgJiYgbWF4V2lkdGhcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2N2YS5pZCArICctc2VhcmNoJ1wiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgKGtleWRvd24udGFiKT1cImNsb3NlKClcIlxuICAgICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwiY2xvc2UoKVwiXG4gICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjbG9zZSgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoISFfY3ZhLnN0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJfY3ZhLnN0YXRlXCIgW2lubmVySHRtbF09XCJfY3ZhLnN0YXRlTWVzc2FnZVwiPjwvZmQtZm9ybS1tZXNzYWdlPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2hvd1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgPGZkLW11bHRpLWNvbWJvYm94LXNlbGVjdC1hbGwtdG9nZ2xlclxuICAgICAgICAgICAgICAgIFtzZWxlY3RBbGxIYW5kbGVyXT1cIl9oYW5kbGVTZWxlY3RBbGxJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlQ2hhbmdlc109XCJzZWxlY3Rpb25DaGFuZ2VcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cIl9zZWxlY3RlZFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbZmxhdEl0ZW1zXT1cIl9mbGF0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgPjwvZmQtbXVsdGktY29tYm9ib3gtc2VsZWN0LWFsbC10b2dnbGVyPlxuICAgICAgICB9XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgQGlmIChpc0dyb3VwKSB7XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBfc3VnZ2VzdGlvbnM7IHRyYWNrIGdyb3VwOyBsZXQgZ3JvdXBJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAoIWdyb3VwSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWdyb3VwLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYVJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZU11bHRpQ29tYm9Cb3gubGlzdEdyb3VwSGVhZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ3JvdXAubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IGdyb3VwLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBsYWJlbDogZ3JvdXAubGFiZWwgfSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbkl0ZW0gb2YgZ3JvdXAuY2hpbGRyZW47IHRyYWNrIG9wdGlvbkl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAjaXRlbT1cImZkTGlzdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiIW1vYmlsZSAmJiBfb25PcHRpb25DbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uSXRlbUtleURvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhb3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZC13aXRoLWdyb3VwLWluZGV4XT1cIml0ZW0uaWQgKyAnLWdyb3VwLScgKyBncm91cEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJncm91cC5jaGlsZHJlbj8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uT3B0aW9uQ2hlY2tib3hDbGlja2VkKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbkl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAZm9yIChvcHRpb25JdGVtIG9mIF9zdWdnZXN0aW9uczsgdHJhY2sgb3B0aW9uSXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIhbW9iaWxlICYmIF9vbk9wdGlvbkNsaWNrZWQoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhb3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbk9wdGlvbkNoZWNrYm94Q2xpY2tlZCgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIl90b2dnbGVTZWxlY3Rpb24ob3B0aW9uSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwib3B0aW9uSXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtLCBpbmRleDogaSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI2xpc3RJdGVtPlxuICAgIEBpZiAob3B0aW9uSXRlbS5zZWxlY3RlZCAmJiAhIXNlbGVjdGVkSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0ZWRJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb25JdGVtLnZhbHVlLCBpbmRleDogaW5kZXggfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIH1cbiAgICBAaWYgKCEob3B0aW9uSXRlbS5zZWxlY3RlZCAmJiBzZWxlY3RlZEl0ZW1UZW1wbGF0ZSkpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtU291cmNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbkl0ZW06IG9wdGlvbkl0ZW0sIGluZGV4OiBpbmRleCB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2Vjb25kYXJ5VGV4dFNvdXJjZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb25JdGVtOiBvcHRpb25JdGVtIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlIGxldC1vcHRpb25JdGVtPVwib3B0aW9uSXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgI29wdGlvbkl0ZW1Tb3VyY2U+XG4gICAgQGlmICghb3B0aW9uSXRlbVRlbXBsYXRlKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJvcHRpb25JdGVtLmxhYmVsXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9uSXRlbS5sYWJlbCB8IGhpZ2hsaWdodDogaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIGZkVHJ1bmNhdGVkVGl0bGVcbiAgICAgICAgPjwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25JdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb25JdGVtLnZhbHVlLCBpbmRleDogaW5kZXggfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgbGV0LW9wdGlvbkl0ZW09XCJvcHRpb25JdGVtXCIgI3NlY29uZGFyeVRleHRTb3VyY2U+XG4gICAgQGlmIChzaG93U2Vjb25kYXJ5VGV4dCkge1xuICAgICAgICBAaWYgKCFzZWNvbmRhcnlJdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwic2Vjb25kYXJ5VGV4dEFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1zZWNvbmRhcnlcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJvcHRpb25JdGVtLnNlY29uZGFyeVRleHRcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9uSXRlbS5zZWNvbmRhcnlUZXh0IHwgaGlnaGxpZ2h0OiBpbnB1dFRleHRcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWNvbmRhcnlJdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uSXRlbS52YWx1ZSB9XCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { MultiComboboxComponent } from './multi-combobox.component';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\nimport * as i0 from \"@angular/core\";\nexport class MultiComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, imports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective], exports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, imports: [MultiComboboxComponent, SelectAllTogglerComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: MultiComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective],\n exports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL211bHRpLWNvbWJvYm94L211bHRpLWNvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQU05RixNQUFNLE9BQU8sbUJBQW1COzhHQUFuQixtQkFBbUI7K0dBQW5CLG1CQUFtQixZQUhsQixzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsYUFDMUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCOytHQUUzRSxtQkFBbUIsWUFIbEIsc0JBQXNCLEVBQUUseUJBQXlCOzsyRkFHbEQsbUJBQW1CO2tCQUovQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixDQUFDO29CQUNyRixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsQ0FBQztpQkFDeEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXVsdGlBbm5vdW5jZXJEaXJlY3RpdmUgfSBmcm9tICcuL211bHRpLWFubm91bmNlci9tdWx0aS1hbm5vdW5jZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE11bHRpQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tICcuL211bHRpLWNvbWJvYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RBbGxUb2dnbGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtYWxsLXRvZ2dsZXIvc2VsZWN0LWFsbC10b2dnbGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW011bHRpQ29tYm9ib3hDb21wb25lbnQsIFNlbGVjdEFsbFRvZ2dsZXJDb21wb25lbnQsIE11bHRpQW5ub3VuY2VyRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbTXVsdGlDb21ib2JveENvbXBvbmVudCwgU2VsZWN0QWxsVG9nZ2xlckNvbXBvbmVudCwgTXVsdGlBbm5vdW5jZXJEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtbXVsdGktY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvbXVsdGktY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtbXVsdGktY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["i1"],"mappings":"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"}
|