@fundamental-ngx/core 0.58.0-rc.73 → 0.58.0-rc.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-calendar.mjs","sources":["../tmp-esm2022/calendar/calendar-directives.js","../tmp-esm2022/calendar/calendar.service.js","../tmp-esm2022/calendar/types.js","../tmp-esm2022/calendar/calendar-header/calendar-header.component.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend-focusing.service.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend-item.component.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend.component.js","../tmp-esm2022/calendar/models/common.js","../tmp-esm2022/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.js","../tmp-esm2022/calendar/models/calendar-day.js","../tmp-esm2022/calendar/models/date-range.js","../tmp-esm2022/calendar/calendar-views/calendar-day-view/calendar-day-view.component.js","../tmp-esm2022/calendar/calendar-views/calendar-month-view/calendar-month-view.component.js","../tmp-esm2022/calendar/calendar-views/calendar-year-view/calendar-year-view.component.js","../tmp-esm2022/calendar/calendar-errors.js","../tmp-esm2022/calendar/i18n/calendar-i18n-labels.js","../tmp-esm2022/calendar/patch-deprecated-i18n-labels.js","../tmp-esm2022/calendar/calendar.component.js","../tmp-esm2022/calendar/calendar.module.js","../tmp-esm2022/calendar/fundamental-ngx-core-calendar.js"],"sourcesContent":["import { Attribute, Directive } from '@angular/core';\nimport { resolveTranslationSignal } from '@fundamental-ngx/i18n';\nimport * as i0 from \"@angular/core\";\nexport class CalendarCloseButtonDirective {\n /** @hidden */\n constructor(_originalAriaLabel, _originalTitle) {\n this._originalAriaLabel = _originalAriaLabel;\n this._originalTitle = _originalTitle;\n /** @hidden */\n this._closeCalendarLabel = resolveTranslationSignal('coreCalendar.closeCalendarLabel');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarCloseButtonDirective, deps: [{ token: 'aria-label', attribute: true }, { token: 'title', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: CalendarCloseButtonDirective, isStandalone: true, selector: \"[fd-calendar-close-button]\", host: { properties: { \"attr.aria-label\": \"_originalAriaLabel || _closeCalendarLabel()\", \"attr.title\": \"_originalTitle || _closeCalendarLabel()\" }, classAttribute: \"fd-calendar__close-button\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarCloseButtonDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-calendar-close-button]',\n host: {\n class: 'fd-calendar__close-button',\n '[attr.aria-label]': '_originalAriaLabel || _closeCalendarLabel()',\n '[attr.title]': '_originalTitle || _closeCalendarLabel()'\n },\n standalone: true\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['aria-label']\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['title']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1kaXJlY3RpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVlqRSxNQUFNLE9BQU8sNEJBQTRCO0lBSXJDLGNBQWM7SUFDZCxZQUN1QyxrQkFBMEIsRUFDL0IsY0FBc0I7UUFEakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBTnhELGNBQWM7UUFDSix3QkFBbUIsR0FBRyx3QkFBd0IsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBTXpGLENBQUM7OEdBUkssNEJBQTRCLGtCQU10QixZQUFZLDhCQUNaLE9BQU87a0dBUGIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQVZ4QyxTQUFTO21CQUFDO29CQUNQLDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSwyQkFBMkI7d0JBQ2xDLG1CQUFtQixFQUFFLDZDQUE2Qzt3QkFDbEUsY0FBYyxFQUFFLHlDQUF5QztxQkFDNUQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFPUSxTQUFTOzJCQUFDLFlBQVk7OzBCQUN0QixTQUFTOzJCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0aW9uU2lnbmFsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC1jYWxlbmRhci1jbG9zZS1idXR0b25dJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtY2FsZW5kYXJfX2Nsb3NlLWJ1dHRvbicsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdfb3JpZ2luYWxBcmlhTGFiZWwgfHwgX2Nsb3NlQ2FsZW5kYXJMYWJlbCgpJyxcbiAgICAgICAgJ1thdHRyLnRpdGxlXSc6ICdfb3JpZ2luYWxUaXRsZSB8fCBfY2xvc2VDYWxlbmRhckxhYmVsKCknXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ2xvc2VCdXR0b25EaXJlY3RpdmUge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9jbG9zZUNhbGVuZGFyTGFiZWwgPSByZXNvbHZlVHJhbnNsYXRpb25TaWduYWwoJ2NvcmVDYWxlbmRhci5jbG9zZUNhbGVuZGFyTGFiZWwnKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSBwcm90ZWN0ZWQgX29yaWdpbmFsQXJpYUxhYmVsOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RpdGxlJykgcHJvdGVjdGVkIF9vcmlnaW5hbFRpdGxlOiBzdHJpbmdcbiAgICApIHt9XG59XG4iXX0=","import { Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class CalendarService {\n /** @hidden */\n constructor(_rtlService) {\n this._rtlService = _rtlService;\n /** Row amount */\n this.rowAmount = 3;\n /** Column amount */\n this.colAmount = 4;\n /** Event thrown, when the element is selected by space or enter keys */\n this.onKeySelect = new Subject();\n /** Event thrown, when the focus goes after list of elements */\n this.onListEndApproach = new Subject();\n /** Event thrown, when the focus goes before list of elements */\n this.onListStartApproach = new Subject();\n /** Event thrown, when the focus is changed. */\n this.onFocusIdChange = new Subject();\n }\n /**\n * Standardized method to calculate grid [x][y] to index number\n */\n getId(row, col) {\n return row * this.colAmount + col;\n }\n /**\n * Method that handles keydown events, dedicated for All Calendar views, which have a list with row x col elements.\n * Triggers the events, when the focus approaches start and end of list. Or when there is basic change of focus.\n * Triggers also event, when the element is selected by enter key, or space bar.\n * @param event KeyboardEvent\n * @param index which is number (0 - (rowAmount * colAmount))\n */\n onKeydownHandler(event, index) {\n const rtl = !!this._rtlService?.rtlSignal();\n switch (event.key) {\n case 'Spacebar':\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.onKeySelect.next({ index, event });\n break;\n }\n case 'Left':\n case 'ArrowLeft': {\n event.preventDefault();\n if (!rtl) {\n this.focusLeftElement(index);\n }\n else {\n this.focusRightElement(index);\n }\n break;\n }\n case 'Right':\n case 'ArrowRight': {\n event.preventDefault();\n if (!rtl) {\n this.focusRightElement(index);\n }\n else {\n this.focusLeftElement(index);\n }\n break;\n }\n case 'Up':\n case 'ArrowUp': {\n event.preventDefault();\n if (index <= this.colAmount - 1) {\n this.onListStartApproach.next(this.getId(this.rowAmount - 1, 0) + index);\n }\n else {\n this.onFocusIdChange.next(index - this.colAmount);\n }\n break;\n }\n case 'Down':\n case 'ArrowDown': {\n event.preventDefault();\n if (index >= this.getId(this.rowAmount - 1, 0)) {\n this.onListEndApproach.next(index - this.getId(this.rowAmount - 1, 0));\n }\n else {\n this.onFocusIdChange.next(index + this.colAmount);\n }\n break;\n }\n case 'Tab': {\n if (!event.shiftKey) {\n if (typeof this.focusEscapeFunction === 'function') {\n this.focusEscapeFunction(event);\n }\n else {\n const element = document.getElementById(this.leftArrowId);\n if (element) {\n element.focus();\n }\n }\n event.preventDefault();\n break;\n }\n }\n }\n }\n /**\n * @hidden\n * Right Element focus trigger\n */\n focusRightElement(index) {\n if (index === this.getId(this.rowAmount, 0) - 1) {\n this.onListEndApproach.next(0);\n }\n else {\n this.onFocusIdChange.next(index + 1);\n }\n }\n /**\n * @hidden\n * Left Element focus trigger\n */\n focusLeftElement(index) {\n if (index === 0) {\n this.onListStartApproach.next(this.getId(this.rowAmount, 0) - 1);\n }\n else {\n this.onFocusIdChange.next(index - 1);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService, deps: [{ token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.RtlService, decorators: [{\n type: Optional\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFJeEQsTUFBTSxPQUFPLGVBQWU7SUE0QnhCLGNBQWM7SUFDZCxZQUFnQyxXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTVCdkQsaUJBQWlCO1FBQ2pCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFFZCxvQkFBb0I7UUFDcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLHdFQUF3RTtRQUN4RSxnQkFBVyxHQUFxRCxJQUFJLE9BQU8sRUFHdkUsQ0FBQztRQUVMLCtEQUErRDtRQUMvRCxzQkFBaUIsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUUzRCxnRUFBZ0U7UUFDaEUsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QsK0NBQStDO1FBQy9DLG9CQUFlLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFTQyxDQUFDO0lBRTNEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQzFCLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDaEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFFNUMsUUFBUSxLQUFLLENBQUMsR0FBRyxF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Q0FBQzs0QkFDVixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3BCLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzFCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7OEdBdklRLGVBQWU7a0hBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBOEJNLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRXNjYXBlRm9jdXNGdW5jdGlvbiB9IGZyb20gJy4vbW9kZWxzL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2Uge1xuICAgIC8qKiBSb3cgYW1vdW50ICovXG4gICAgcm93QW1vdW50ID0gMztcblxuICAgIC8qKiBDb2x1bW4gYW1vdW50ICovXG4gICAgY29sQW1vdW50ID0gNDtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgc3BhY2Ugb3IgZW50ZXIga2V5cyAqL1xuICAgIG9uS2V5U2VsZWN0OiBTdWJqZWN0PHsgaW5kZXg6IG51bWJlcjsgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfT4gPSBuZXcgU3ViamVjdDx7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50O1xuICAgIH0+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHRoZSBmb2N1cyBnb2VzIGFmdGVyIGxpc3Qgb2YgZWxlbWVudHMgKi9cbiAgICBvbkxpc3RFbmRBcHByb2FjaDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiB0aGUgZm9jdXMgZ29lcyBiZWZvcmUgbGlzdCBvZiBlbGVtZW50cyAqL1xuICAgIG9uTGlzdFN0YXJ0QXBwcm9hY2g6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gdGhlIGZvY3VzIGlzIGNoYW5nZWQuICovXG4gICAgb25Gb2N1c0lkQ2hhbmdlOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICAvKiogTGVmdCBBcnJvdyBJZCwgd2hpY2ggd2lsbCBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQgb24gZm9jdXMgZXNjYXBlICovXG4gICAgbGVmdEFycm93SWQ6IHN0cmluZztcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBmb2N1cyB3b3VsZCBlc2NhcGUgdGhlIGVsZW1lbnQuICovXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSkge31cblxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkaXplZCBtZXRob2QgdG8gY2FsY3VsYXRlIGdyaWQgW3hdW3ldIHRvIGluZGV4IG51bWJlclxuICAgICAqL1xuICAgIGdldElkKHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiByb3cgKiB0aGlzLmNvbEFtb3VudCArIGNvbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGtleWRvd24gZXZlbnRzLCBkZWRpY2F0ZWQgZm9yIEFsbCBDYWxlbmRhciB2aWV3cywgd2hpY2ggaGF2ZSBhIGxpc3Qgd2l0aCByb3cgeCBjb2wgZWxlbWVudHMuXG4gICAgICogVHJpZ2dlcnMgdGhlIGV2ZW50cywgd2hlbiB0aGUgZm9jdXMgYXBwcm9hY2hlcyBzdGFydCBhbmQgZW5kIG9mIGxpc3QuIE9yIHdoZW4gdGhlcmUgaXMgYmFzaWMgY2hhbmdlIG9mIGZvY3VzLlxuICAgICAqIFRyaWdnZXJzIGFsc28gZXZlbnQsIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgZW50ZXIga2V5LCBvciBzcGFjZSBiYXIuXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggd2hpY2ggaXMgbnVtYmVyICgwIC0gKHJvd0Ftb3VudCAqIGNvbEFtb3VudCkpXG4gICAgICovXG4gICAgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBydGwgPSAhIXRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdTcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICcgJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleVNlbGVjdC5uZXh0KHsgaW5kZXgsIGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTGVmdCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJ0bCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTGVmdEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSaWdodEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJ0bCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUmlnaHRFbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTGVmdEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VwJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gdGhpcy5jb2xBbW91bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25MaXN0U3RhcnRBcHByb2FjaC5uZXh0KHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQgLSAxLCAwKSArIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXNJZENoYW5nZS5uZXh0KGluZGV4IC0gdGhpcy5jb2xBbW91bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQgLSAxLCAwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTGlzdEVuZEFwcHJvYWNoLm5leHQoaW5kZXggLSB0aGlzLmdldElkKHRoaXMucm93QW1vdW50IC0gMSwgMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggKyB0aGlzLmNvbEFtb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVGFiJzoge1xuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5sZWZ0QXJyb3dJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmlnaHQgRWxlbWVudCBmb2N1cyB0cmlnZ2VyXG4gICAgICovXG4gICAgZm9jdXNSaWdodEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQsIDApIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RFbmRBcHByb2FjaC5uZXh0KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzSWRDaGFuZ2UubmV4dChpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExlZnQgRWxlbWVudCBmb2N1cyB0cmlnZ2VyXG4gICAgICovXG4gICAgZm9jdXNMZWZ0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RTdGFydEFwcHJvYWNoLm5leHQodGhpcy5nZXRJZCh0aGlzLnJvd0Ftb3VudCwgMCkgLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","/** Enum of calendarTypes */\nexport var CalendarTypeEnum;\n(function (CalendarTypeEnum) {\n CalendarTypeEnum[\"Single\"] = \"single\";\n CalendarTypeEnum[\"Range\"] = \"range\";\n})(CalendarTypeEnum || (CalendarTypeEnum = {}));\n/** Type for the calendar view */\nexport var FdCalendarViewEnum;\n(function (FdCalendarViewEnum) {\n FdCalendarViewEnum[\"Day\"] = \"day\";\n FdCalendarViewEnum[\"Month\"] = \"month\";\n FdCalendarViewEnum[\"Year\"] = \"year\";\n FdCalendarViewEnum[\"AggregatedYear\"] = \"aggregatedYear\";\n})(FdCalendarViewEnum || (FdCalendarViewEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsNEJBQTRCO0FBQzVCLE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDeEIscUNBQWlCLENBQUE7SUFDakIsbUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUczQjtBQUtELGlDQUFpQztBQUNqQyxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzFCLGlDQUFXLENBQUE7SUFDWCxxQ0FBZSxDQUFBO0lBQ2YsbUNBQWEsQ0FBQTtJQUNiLHVEQUFpQyxDQUFBO0FBQ3JDLENBQUMsRUFMVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcblxuLyoqIFR5cGUgb2YgY2FsZW5kYXIgKi9cbmV4cG9ydCB0eXBlIENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuLyoqIEVudW0gb2YgY2FsZW5kYXJUeXBlcyAqL1xuZXhwb3J0IGVudW0gQ2FsZW5kYXJUeXBlRW51bSB7XG4gICAgU2luZ2xlID0gJ3NpbmdsZScsXG4gICAgUmFuZ2UgPSAncmFuZ2UnXG59XG5cbi8qKiBUeXBlIGZvciB0aGUgY2FsZW5kYXIgdmlldyAqL1xuZXhwb3J0IHR5cGUgRmRDYWxlbmRhclZpZXcgPSAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgfCAnYWdncmVnYXRlZFllYXInO1xuXG4vKiogVHlwZSBmb3IgdGhlIGNhbGVuZGFyIHZpZXcgKi9cbmV4cG9ydCBlbnVtIEZkQ2FsZW5kYXJWaWV3RW51bSB7XG4gICAgRGF5ID0gJ2RheScsXG4gICAgTW9udGggPSAnbW9udGgnLFxuICAgIFllYXIgPSAneWVhcicsXG4gICAgQWdncmVnYXRlZFllYXIgPSAnYWdncmVnYXRlZFllYXInXG59XG5cbi8qKiBUeXBlIGZvciB0aGUgZGF5cyBvZiB0aGUgd2Vlay4gKi9cbmV4cG9ydCB0eXBlIERheXNPZldlZWsgPSAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3O1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+ID0gKFxuICAgIGRhdGU6IE51bGxhYmxlPEQ+LFxuICAgIGN1cnJlbnRseURpc3BsYXllZERhdGU6IENhbGVuZGFyQ3VycmVudCxcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlld1xuKSA9PiBib29sZWFuO1xuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../calendar.service';\nimport { FdCalendarViewEnum } from '../types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/**\n * Internal use only.\n * Header of the calendar component.\n */\nexport class CalendarHeaderComponent {\n /**\n * Object to customize year grid\n */\n set calendarYearGrid(yearGrid) {\n this._amountOfYearsPerPeriod = yearGrid.cols * yearGrid.rows - 1;\n this._calculateSelectAggregatedYearLabel();\n }\n /** Aria label for the previous button. Depends on the active view. */\n get previousAriaLabel() {\n return this.isOnDayView ? 'coreCalendar.previousMonthLabel' : 'coreCalendar.previousYearLabel';\n }\n /** Aria label for the next button. Depends on the active view. */\n get nextAriaLabel() {\n return this.isOnDayView ? 'coreCalendar.nextMonthLabel' : 'coreCalendar.nextYearLabel';\n }\n /** Button aria label to open month selection view. */\n get selectMonthAriaLabel() {\n return this.isOnMonthView ? 'coreCalendar.dateSelectionLabel' : 'coreCalendar.monthSelectionLabel';\n }\n /** Button aria label to open aggregated years selection view. */\n get selectAggregatedYearAriaLabel() {\n return this.isOnAggregatedYearsView\n ? 'coreCalendar.dateSelectionLabel'\n : 'coreCalendar.yearsRangeSelectionLabel';\n }\n /** Get information is calendar is on aggregated years view */\n get isOnAggregatedYearsView() {\n return this.activeView === FdCalendarViewEnum.AggregatedYear;\n }\n /** Get information is calendar is on year view */\n get isOnYearView() {\n return this.activeView === FdCalendarViewEnum.Year;\n }\n /** Get information is calendar is on month view */\n get isOnMonthView() {\n return this.activeView === FdCalendarViewEnum.Month;\n }\n /** Get information is calendar is on day view */\n get isOnDayView() {\n return this.activeView === FdCalendarViewEnum.Day;\n }\n /**\n * Component id\n */\n get viewId() {\n return this.id + '-header';\n }\n /**\n * @hidden\n * Previous button id\n */\n get _prevButtonId() {\n return this.viewId + '-left-arrow';\n }\n /**\n * @hidden\n * Next button id\n */\n get _nextButtonId() {\n return this.viewId + '-right-arrow';\n }\n /**\n * @hidden\n * Month label id\n */\n get _monthButtonLabelId() {\n return this.viewId + '-month-label';\n }\n /**\n * @hidden\n * Select month aria label id\n */\n get _selectMonthButtonAriaLabelId() {\n return this.viewId + '-select-month-aria-label';\n }\n /**\n * @hidden\n * Year label id\n */\n get _yearButtonLabelId() {\n return this.viewId + '-year-label';\n }\n /**\n * @hidden\n * Select year aria label id\n */\n get _selectYearButtonAriaLabelId() {\n return this.viewId + '-select-year-aria-label';\n }\n /**\n * @hidden\n * Years range label id\n */\n get _yearsRangeButtonLabelId() {\n return this.viewId + '-years-range-label';\n }\n /**\n * @hidden\n * Select years range aria label id\n */\n get _selectYearsRangeButtonAriaLabelId() {\n return this.viewId + '-select-years-range-aria-label';\n }\n /** @hidden */\n constructor(_changeDetRef, _calendarService, _dateTimeAdapter) {\n this._changeDetRef = _changeDetRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** Whether calendar should be rendered in mobile landscape mode. */\n this.mobileLandscape = false;\n /** Event emitted when the active view should change. */\n this.activeViewChange = new EventEmitter();\n /** Event emitted when the previous button is clicked. */\n this.previousClicked = new EventEmitter();\n /** Event emitted when the next button is clicked. */\n this.nextClicked = new EventEmitter();\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** Month names */\n this._monthNames = [];\n /** Get information about amount of years displayed at once on year view */\n this._amountOfYearsPerPeriod = 1;\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ((changes.currentlyDisplayed && !changes.currentlyDisplayed.firstChange) ||\n (changes.activeView && !changes.activeView.firstChange)) {\n this._calculateLabels();\n }\n }\n /** @hidden */\n ngOnInit() {\n this._calendarService.leftArrowId = this._prevButtonId;\n this._calculateMonthNames();\n this._calculateLabels();\n this._listenToLocaleChanges();\n }\n /**\n * Focus on focusable control within the header\n */\n focus() {\n this._prevButtonComponent.nativeElement?.focus();\n }\n /** @hidden */\n _processViewChange(type, event) {\n if (event) {\n event.stopPropagation();\n }\n this.activeView = type === this.activeView ? FdCalendarViewEnum.Day : type;\n this.activeViewChange.emit(this.activeView);\n }\n /** @hidden */\n _listenToLocaleChanges() {\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._calculateMonthNames();\n this._calculateLabels();\n this._changeDetRef.markForCheck();\n });\n }\n /** @hidden */\n _calculateLabels() {\n this._calculateSelectMonthLabel();\n this._calculateSelectYearLabel();\n this._calculateSelectAggregatedYearLabel();\n }\n /** @hidden */\n _calculateSelectMonthLabel() {\n this.selectMonthLabel = this._monthNames[this._getNormalizedDate().month - 1];\n }\n /** @hidden */\n _calculateSelectYearLabel() {\n this.selectYearLabel = this._getYearName(this._getNormalizedDate().year);\n }\n /** @hidden */\n _calculateSelectAggregatedYearLabel() {\n this.selectAggregatedYearLabel = `${this._getYearName(this._getNormalizedDate().year)}-${this._getYearName(this._getNormalizedDate().year + this._amountOfYearsPerPeriod)}`;\n }\n /** @hidden */\n _calculateMonthNames() {\n this._monthNames = this._dateTimeAdapter.getMonthNames('long');\n }\n /** @hidden */\n _getYearName(year) {\n return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year));\n }\n /** @hidden */\n _getNormalizedDate() {\n return {\n year: isNaN(this.currentlyDisplayed.year)\n ? this._dateTimeAdapter.getYear(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.year,\n month: isNaN(this.currentlyDisplayed.month)\n ? this._dateTimeAdapter.getMonth(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.month\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarHeaderComponent, isStandalone: true, selector: \"fd-calendar-header\", inputs: { activeView: \"activeView\", currentlyDisplayed: \"currentlyDisplayed\", previousButtonDisabled: \"previousButtonDisabled\", nextButtonDisabled: \"nextButtonDisabled\", calendarYearGrid: \"calendarYearGrid\", id: \"id\", mobileLandscape: \"mobileLandscape\" }, outputs: { activeViewChange: \"activeViewChange\", previousClicked: \"previousClicked\", nextClicked: \"nextClicked\" }, host: { properties: { \"attr.id\": \"viewId\" } }, viewQueries: [{ propertyName: \"_prevButtonComponent\", first: true, predicate: [\"prevButton\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<header class=\\\"fd-calendar__navigation\\\" [class.fd-calendar__navigation--main]=\\\"mobileLandscape\\\">\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-left\\\">\\n <button\\n #prevButton\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-left\\\"\\n [attr.id]=\\\"_prevButtonId\\\"\\n [disabled]=\\\"previousButtonDisabled\\\"\\n [attr.title]=\\\"previousAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"previousAriaLabel | fdTranslate\\\"\\n type=\\\"button\\\"\\n (click)=\\\"previousClicked.emit()\\\"\\n ></button>\\n </div>\\n @if (isOnDayView || isOnMonthView) {\\n @if (!isOnMonthView) {\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select month button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-month]=\\\"currentlyDisplayed.month\\\"\\n (click)=\\\"_processViewChange('month', $event)\\\"\\n >\\n <span [attr.id]=\\\"_monthButtonLabelId\\\">{{ selectMonthLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select year button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-year]=\\\"currentlyDisplayed.year\\\"\\n (click)=\\\"_processViewChange('year', $event)\\\"\\n >\\n <span [attr.id]=\\\"_yearButtonLabelId\\\">{{ selectYearLabel }}</span>\\n </button>\\n </div>\\n }\\n @if (isOnAggregatedYearsView || isOnYearView) {\\n <div class=\\\"fd-calendar__action\\\" aria-live=\\\"polite\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\\\"\\n (click)=\\\"_processViewChange('aggregatedYear', $event)\\\"\\n type=\\\"button\\\"\\n >\\n <span [attr.id]=\\\"_yearsRangeButtonLabelId\\\">{{ selectAggregatedYearLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-right\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-right\\\"\\n [attr.id]=\\\"_nextButtonId\\\"\\n [disabled]=\\\"nextButtonDisabled\\\"\\n [attr.title]=\\\"nextAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"nextAriaLabel | fdTranslate\\\"\\n (click)=\\\"nextClicked.emit()\\\"\\n type=\\\"button\\\"\\n ></button>\\n </div>\\n</header>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_selectMonthButtonAriaLabelId\\\">{{ selectMonthAriaLabel | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearButtonAriaLabelId\\\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearsRangeButtonAriaLabelId\\\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-header', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<header class=\\\"fd-calendar__navigation\\\" [class.fd-calendar__navigation--main]=\\\"mobileLandscape\\\">\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-left\\\">\\n <button\\n #prevButton\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-left\\\"\\n [attr.id]=\\\"_prevButtonId\\\"\\n [disabled]=\\\"previousButtonDisabled\\\"\\n [attr.title]=\\\"previousAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"previousAriaLabel | fdTranslate\\\"\\n type=\\\"button\\\"\\n (click)=\\\"previousClicked.emit()\\\"\\n ></button>\\n </div>\\n @if (isOnDayView || isOnMonthView) {\\n @if (!isOnMonthView) {\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select month button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-month]=\\\"currentlyDisplayed.month\\\"\\n (click)=\\\"_processViewChange('month', $event)\\\"\\n >\\n <span [attr.id]=\\\"_monthButtonLabelId\\\">{{ selectMonthLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select year button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-year]=\\\"currentlyDisplayed.year\\\"\\n (click)=\\\"_processViewChange('year', $event)\\\"\\n >\\n <span [attr.id]=\\\"_yearButtonLabelId\\\">{{ selectYearLabel }}</span>\\n </button>\\n </div>\\n }\\n @if (isOnAggregatedYearsView || isOnYearView) {\\n <div class=\\\"fd-calendar__action\\\" aria-live=\\\"polite\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\\\"\\n (click)=\\\"_processViewChange('aggregatedYear', $event)\\\"\\n type=\\\"button\\\"\\n >\\n <span [attr.id]=\\\"_yearsRangeButtonLabelId\\\">{{ selectAggregatedYearLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-right\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-right\\\"\\n [attr.id]=\\\"_nextButtonId\\\"\\n [disabled]=\\\"nextButtonDisabled\\\"\\n [attr.title]=\\\"nextAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"nextAriaLabel | fdTranslate\\\"\\n (click)=\\\"nextClicked.emit()\\\"\\n type=\\\"button\\\"\\n ></button>\\n </div>\\n</header>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_selectMonthButtonAriaLabelId\\\">{{ selectMonthAriaLabel | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearButtonAriaLabelId\\\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearsRangeButtonAriaLabelId\\\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }], propDecorators: { activeView: [{\n type: Input\n }], currentlyDisplayed: [{\n type: Input\n }], previousButtonDisabled: [{\n type: Input\n }], nextButtonDisabled: [{\n type: Input\n }], calendarYearGrid: [{\n type: Input\n }], id: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], previousClicked: [{\n type: Output\n }], nextClicked: [{\n type: Output\n }], _prevButtonComponent: [{\n type: ViewChild,\n args: ['prevButton', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RCxPQUFPLEVBQWtCLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7O0FBRTlEOzs7R0FHRztBQVlILE1BQU0sT0FBTyx1QkFBdUI7SUFpQmhDOztPQUVHO0lBQ0gsSUFDSSxnQkFBZ0IsQ0FBQyxRQUEwQjtRQUMzQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBMEJELHNFQUFzRTtJQUN0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QWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDO2tKQUszQyxVQUFVO3NCQURULEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVFOLEVBQUU7c0JBREQsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtFLGVBQWU7c0JBRHZCLE1BQU07Z0JBS0UsV0FBVztzQkFEbkIsTUFBTTtnQkFLUCxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyQ3VycmVudCB9IGZyb20gJy4uL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IEZkQ2FsZW5kYXJWaWV3LCBGZENhbGVuZGFyVmlld0VudW0gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBIZWFkZXIgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdmlldy4gTmVlZGVkIGZvciBhMTF5IGxhYmVscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3O1xuXG4gICAgLyoqIEN1cnJlbnRseSBkaXNwbGF5ZWQgZGF0ZSBvbiB0aGUgY2FsZW5kYXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW50bHlEaXNwbGF5ZWQ6IENhbGVuZGFyQ3VycmVudDtcblxuICAgIC8qKiB3aGV0aGVyIHByZXZpb3VzIG5hdmlnYXRpb24gYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB0aGUgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiB3aGV0aGVyIG5leHQgbmF2aWdhdGlvbiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBuZXh0QnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhbGVuZGFyWWVhckdyaWQoeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQpIHtcbiAgICAgICAgdGhpcy5fYW1vdW50T2ZZZWFyc1BlclBlcmlvZCA9IHllYXJHcmlkLmNvbHMgKiB5ZWFyR3JpZC5yb3dzIC0gMTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCgpO1xuICAgIH1cblxuICAgIC8qKiBDYWxlbmRhciBJRCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIHNob3VsZCBiZSByZW5kZXJlZCBpbiBtb2JpbGUgbGFuZHNjYXBlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFjdGl2ZSB2aWV3IHNob3VsZCBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwcmV2aW91cyBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwcmV2aW91c0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbmV4dENsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9wcmV2QnV0dG9uQ29tcG9uZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24uIERlcGVuZHMgb24gdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIGdldCBwcmV2aW91c0FyaWFMYWJlbCgpOiAnY29yZUNhbGVuZGFyLnByZXZpb3VzTW9udGhMYWJlbCcgfCAnY29yZUNhbGVuZGFyLnByZXZpb3VzWWVhckxhYmVsJyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT25EYXlWaWV3ID8gJ2NvcmVDYWxlbmRhci5wcmV2aW91c01vbnRoTGFiZWwnIDogJ2NvcmVDYWxlbmRhci5wcmV2aW91c1llYXJMYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBuZXh0IGJ1dHRvbi4gRGVwZW5kcyBvbiB0aGUgYWN0aXZlIHZpZXcuICovXG4gICAgZ2V0IG5leHRBcmlhTGFiZWwoKTogJ2NvcmVDYWxlbmRhci5uZXh0TW9udGhMYWJlbCcgfCAnY29yZUNhbGVuZGFyLm5leHRZZWFyTGFiZWwnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPbkRheVZpZXcgPyAnY29yZUNhbGVuZGFyLm5leHRNb250aExhYmVsJyA6ICdjb3JlQ2FsZW5kYXIubmV4dFllYXJMYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEJ1dHRvbiBhcmlhIGxhYmVsIHRvIG9wZW4gbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gICAgZ2V0IHNlbGVjdE1vbnRoQXJpYUxhYmVsKCk6ICdjb3JlQ2FsZW5kYXIubW9udGhTZWxlY3Rpb25MYWJlbCcgfCAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09uTW9udGhWaWV3ID8gJ2NvcmVDYWxlbmRhci5kYXRlU2VsZWN0aW9uTGFiZWwnIDogJ2NvcmVDYWxlbmRhci5tb250aFNlbGVjdGlvbkxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIGdldCBzZWxlY3RBZ2dyZWdhdGVkWWVhckFyaWFMYWJlbCgpOiAnY29yZUNhbGVuZGFyLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbCcgfCAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09uQWdncmVnYXRlZFllYXJzVmlld1xuICAgICAgICAgICAgPyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCdcbiAgICAgICAgICAgIDogJ2NvcmVDYWxlbmRhci55ZWFyc1JhbmdlU2VsZWN0aW9uTGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBCdXR0b24gbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RNb250aExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4geWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RZZWFyTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBCdXR0b24gbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gaXMgY2FsZW5kYXIgaXMgb24gYWdncmVnYXRlZCB5ZWFycyB2aWV3ICovXG4gICAgZ2V0IGlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiB5ZWFyIHZpZXcgKi9cbiAgICBnZXQgaXNPblllYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIG1vbnRoIHZpZXcgKi9cbiAgICBnZXQgaXNPbk1vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gRmRDYWxlbmRhclZpZXdFbnVtLk1vbnRoO1xuICAgIH1cblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gaXMgY2FsZW5kYXIgaXMgb24gZGF5IHZpZXcgKi9cbiAgICBnZXQgaXNPbkRheVZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5EYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IGlkXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICctaGVhZGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJldmlvdXMgYnV0dG9uIGlkXG4gICAgICovXG4gICAgZ2V0IF9wcmV2QnV0dG9uSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1sZWZ0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTmV4dCBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX25leHRCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXJpZ2h0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9udGggbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX21vbnRoQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLW1vbnRoLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IG1vbnRoIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdE1vbnRoQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QtbW9udGgtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXIgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3llYXJCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICcteWVhci1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFyIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFyLWFyaWEtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBZZWFycyByYW5nZSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFycy1yYW5nZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFycyByYW5nZSBhcmlhIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RZZWFyc1JhbmdlQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QteWVhcnMtcmFuZ2UtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBNb250aCBuYW1lcyAqL1xuICAgIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGFib3V0IGFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgYXQgb25jZSBvbiB5ZWFyIHZpZXcgICovXG4gICAgcHJpdmF0ZSBfYW1vdW50T2ZZZWFyc1BlclBlcmlvZCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkICYmICFjaGFuZ2VzLmN1cnJlbnRseURpc3BsYXllZC5maXJzdENoYW5nZSkgfHxcbiAgICAgICAgICAgIChjaGFuZ2VzLmFjdGl2ZVZpZXcgJiYgIWNoYW5nZXMuYWN0aXZlVmlldy5maXJzdENoYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sZWZ0QXJyb3dJZCA9IHRoaXMuX3ByZXZCdXR0b25JZDtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVNb250aE5hbWVzKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgb24gZm9jdXNhYmxlIGNvbnRyb2wgd2l0aGluIHRoZSBoZWFkZXJcbiAgICAgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldkJ1dHRvbkNvbXBvbmVudC5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2Nlc3NWaWV3Q2hhbmdlKHR5cGU6IEZkQ2FsZW5kYXJWaWV3LCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IHR5cGUgPT09IHRoaXMuYWN0aXZlVmlldyA/IEZkQ2FsZW5kYXJWaWV3RW51bS5EYXkgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFiZWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoTGFiZWwgPSB0aGlzLl9tb250aE5hbWVzW3RoaXMuX2dldE5vcm1hbGl6ZWREYXRlKCkubW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RZZWFyTGFiZWwgPSB0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLl9nZXROb3JtYWxpemVkRGF0ZSgpLnllYXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsID0gYCR7dGhpcy5fZ2V0WWVhck5hbWUodGhpcy5fZ2V0Tm9ybWFsaXplZERhdGUoKS55ZWFyKX0tJHt0aGlzLl9nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2dldE5vcm1hbGl6ZWREYXRlKCkueWVhciArIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2RcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTW9udGhOYW1lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5vcm1hbGl6ZWREYXRlKCk6IENhbGVuZGFyQ3VycmVudCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLm5vdygpKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhcixcbiAgICAgICAgICAgIG1vbnRoOiBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLl9kYXRlVGltZUFkYXB0ZXIubm93KCkpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiIFtjbGFzcy5mZC1jYWxlbmRhcl9fbmF2aWdhdGlvbi0tbWFpbl09XCJtb2JpbGVMYW5kc2NhcGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1sZWZ0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICNwcmV2QnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIl9wcmV2QnV0dG9uSWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXZpb3VzQnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicHJldmlvdXNBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cInByZXZpb3VzQXJpYUxhYmVsIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGlzT25EYXlWaWV3IHx8IGlzT25Nb250aFZpZXcpIHtcbiAgICAgICAgQGlmICghaXNPbk1vbnRoVmlldykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdCBtb250aCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9tb250aEJ1dHRvbkxhYmVsSWQgKyAnICcgKyBfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItbW9udGhdPVwiY3VycmVudGx5RGlzcGxheWVkLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnbW9udGgnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmlkXT1cIl9tb250aEJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RNb250aExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgIDwhLS0gU2VsZWN0IHllYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci15ZWFyXT1cImN1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0WWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3IHx8IGlzT25ZZWFyVmlldykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnYWdncmVnYXRlZFllYXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1yaWdodFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1yaWdodFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfbmV4dEJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibmV4dEFyaWFMYWJlbCB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibmV4dEFyaWFMYWJlbCB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZC5lbWl0KClcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvaGVhZGVyPlxuPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG48ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RNb250aEJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0TW9udGhBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIueWVhclNlbGVjdGlvbkxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0WWVhcnNSYW5nZUJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuPC9kaXY+XG4iXX0=","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class CalendarLegendFocusingService {\n constructor() {\n /** Subject to emit the focused element */\n this.focusedLegendItemSubject$ = new Subject();\n }\n /** Clearing the focused element */\n clearFocusedElement() {\n this.focusedLegendItemSubject$.next({ legendId: null, specialDayNumber: null });\n }\n /** Setting the elements that are getting currently focused */\n _handleLegendItemFocus(legendId, specialDayNumber) {\n this.focusedLegendItemSubject$.next({ legendId, specialDayNumber });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLWZvY3VzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvY2FsZW5kYXItbGVnZW5kL2NhbGVuZGFyLWxlZ2VuZC1mb2N1c2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLDZCQUE2QjtJQUgxQztRQUlJLDBDQUEwQztRQUMxQyw4QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFHbkMsQ0FBQztLQVdSO0lBVEcsbUNBQW1DO0lBQ25DLG1CQUFtQjtRQUNmLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxzQkFBc0IsQ0FBQyxRQUFnQixFQUFFLGdCQUFrQztRQUN2RSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDOzhHQWZRLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRjFCLE1BQU07OzJGQUVULDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSB7XG4gICAgLyoqIFN1YmplY3QgdG8gZW1pdCB0aGUgZm9jdXNlZCBlbGVtZW50ICovXG4gICAgZm9jdXNlZExlZ2VuZEl0ZW1TdWJqZWN0JCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgbGVnZW5kSWQ6IE51bGxhYmxlPHN0cmluZz47XG4gICAgICAgIHNwZWNpYWxEYXlOdW1iZXI6IE51bGxhYmxlPG51bWJlcj47XG4gICAgfT4oKTtcblxuICAgIC8qKiBDbGVhcmluZyB0aGUgZm9jdXNlZCBlbGVtZW50ICovXG4gICAgY2xlYXJGb2N1c2VkRWxlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkTGVnZW5kSXRlbVN1YmplY3QkLm5leHQoeyBsZWdlbmRJZDogbnVsbCwgc3BlY2lhbERheU51bWJlcjogbnVsbCB9KTtcbiAgICB9XG5cbiAgICAvKiogU2V0dGluZyB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ2V0dGluZyBjdXJyZW50bHkgZm9jdXNlZCAqL1xuICAgIF9oYW5kbGVMZWdlbmRJdGVtRm9jdXMobGVnZW5kSWQ6IHN0cmluZywgc3BlY2lhbERheU51bWJlcjogTnVsbGFibGU8bnVtYmVyPik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWRMZWdlbmRJdGVtU3ViamVjdCQubmV4dCh7IGxlZ2VuZElkLCBzcGVjaWFsRGF5TnVtYmVyIH0pO1xuICAgIH1cbn1cbiJdfQ==","import { __decorate, __metadata } from \"tslib\";\nimport { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, input } from '@angular/core';\nimport { applyCssClass } from '@fundamental-ngx/cdk/utils';\nimport * as i0 from \"@angular/core\";\nexport class CalendarLegendItemComponent {\n /** @hidden */\n constructor(elementRef) {\n this.elementRef = elementRef;\n /** The text of the legend item */\n this.text = input(...(ngDevMode ? [undefined, { debugName: \"text\" }] : []));\n /** The color of the legend item marker */\n this.color = input(...(ngDevMode ? [undefined, { debugName: \"color\" }] : []));\n /** If the marker is a circle or a square */\n this.circle = input(...(ngDevMode ? [undefined, { debugName: \"circle\" }] : []));\n /** @hidden */\n this.class = input('', ...(ngDevMode ? [{ debugName: \"class\" }] : []));\n }\n /** @hidden */\n buildComponentCssClass() {\n return [`fd-calendar-legend__item ${this.class()} ${this.getAppointmentClass()} ${this.getColorClass()}`];\n }\n /** @hidden */\n ngOnChanges() {\n this.buildComponentCssClass();\n }\n /** @hidden */\n ngOnInit() {\n this.buildComponentCssClass();\n }\n /** @hidden */\n getAppointmentClass() {\n return this.circle() ? `fd-calendar-legend__item--appointment` : '';\n }\n /** @hidden */\n getColorClass() {\n return this.color() ? `fd-calendar-legend__item--${this.color()}` : '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.1.4\", type: CalendarLegendItemComponent, isStandalone: true, selector: \"fd-calendar-legend-item\", inputs: { text: { classPropertyName: \"text\", publicName: \"text\", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: \"color\", publicName: \"color\", isSignal: true, isRequired: false, transformFunction: null }, circle: { classPropertyName: \"circle\", publicName: \"circle\", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: \"class\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabindex\": \"0\" } }, usesOnChanges: true, ngImport: i0, template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\n__decorate([\n applyCssClass,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Array)\n], CalendarLegendItemComponent.prototype, \"buildComponentCssClass\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'fd-calendar-legend-item',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `,\n host: {\n tabindex: '0'\n }\n }]\n }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { buildComponentCssClass: [] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLWxlZ2VuZC9jYWxlbmRhci1sZWdlbmQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixpQkFBaUIsRUFDakIsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBa0I1RSxNQUFNLE9BQU8sMkJBQTJCO0lBYXBDLGNBQWM7SUFDZCxZQUFtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBYnpDLGtDQUFrQztRQUNsQyxTQUFJLEdBQUcsS0FBSywwREFBc0IsQ0FBQztRQUVuQywwQ0FBMEM7UUFDMUMsVUFBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztRQUV4Qiw0Q0FBNEM7UUFDNUMsV0FBTSxHQUFHLEtBQUssNERBQVcsQ0FBQztRQUUxQixjQUFjO1FBQ2QsVUFBSyxHQUFHLEtBQUssQ0FBcUIsRUFBRSxpREFBQyxDQUFDO0lBR00sQ0FBQztJQUU3QyxjQUFjO0lBRWQsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxtQkFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0UsQ0FBQzs4R0F4Q1EsMkJBQTJCO2tHQUEzQiwyQkFBMkIsK25CQVYxQjs7Ozs7S0FLVDs7QUF1QkQ7SUFEQyxhQUFhOzs7O3lFQUdiOzJGQXBCUSwyQkFBMkI7a0JBaEJ2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsRUFBRTtvQkFDWCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRTs7Ozs7S0FLVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsUUFBUSxFQUFFLEdBQUc7cUJBQ2hCO2lCQUNKOytFQW1CRyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIsIGFwcGx5Q3NzQ2xhc3MgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNhbGVuZGFyLWxlZ2VuZF9fbWFya2VyXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNhbGVuZGFyLWxlZ2VuZF9fdGV4dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+e3sgdGV4dCgpIH19PC9uZy1jb250ZW50PlxuICAgICAgICA8L3NwYW4+XG4gICAgYCxcbiAgICBob3N0OiB7XG4gICAgICAgIHRhYmluZGV4OiAnMCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTGVnZW5kSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBDc3NDbGFzc0J1aWxkZXIge1xuICAgIC8qKiBUaGUgdGV4dCBvZiB0aGUgbGVnZW5kIGl0ZW0gKi9cbiAgICB0ZXh0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIFRoZSBjb2xvciBvZiB0aGUgbGVnZW5kIGl0ZW0gbWFya2VyICovXG4gICAgY29sb3IgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgICAvKiogSWYgdGhlIG1hcmtlciBpcyBhIGNpcmNsZSBvciBhIHNxdWFyZSAqL1xuICAgIGNpcmNsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPignJyk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW2BmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0gJHt0aGlzLmNsYXNzKCl9ICR7dGhpcy5nZXRBcHBvaW50bWVudENsYXNzKCl9ICR7dGhpcy5nZXRDb2xvckNsYXNzKCl9YF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRBcHBvaW50bWVudENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNpcmNsZSgpID8gYGZkLWNhbGVuZGFyLWxlZ2VuZF9faXRlbS0tYXBwb2ludG1lbnRgIDogJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRDb2xvckNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKCkgPyBgZmQtY2FsZW5kYXItbGVnZW5kX19pdGVtLS0ke3RoaXMuY29sb3IoKX1gIDogJyc7XG4gICAgfVxufVxuIl19","import { Component, input } from '@angular/core';\nimport { FocusableItemDirective, FocusableListDirective } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from './calendar-legend-focusing.service';\nimport { CalendarLegendItemComponent } from './calendar-legend-item.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"./calendar-legend-focusing.service\";\nexport class CalendarLegendComponent {\n constructor(datetimeAdapter, focusingService) {\n this.datetimeAdapter = datetimeAdapter;\n this.focusingService = focusingService;\n /** The unique identifier of the calendar legend. This is a required property. */\n this.legendId = input.required(...(ngDevMode ? [{ debugName: \"legendId\" }] : []));\n /**\n * Make it a column instead\n */\n this.col = input(false, ...(ngDevMode ? [{ debugName: \"col\" }] : []));\n /** Whether to display the legend item for today's date. */\n this.displayTodayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayTodayLegendItem\" }] : []));\n /** Whether to display the legend item for the currently selected date. */\n this.displaySelectedLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displaySelectedLegendItem\" }] : []));\n /** Whether to display the legend item for work days. */\n this.displayWorkDayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayWorkDayLegendItem\" }] : []));\n /** Whether to display the legend item for non-work days. */\n this.displayNonWorkDayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayNonWorkDayLegendItem\" }] : []));\n /**\n * Special days rules to be displayed in the legend\n */\n this.specialDaysRules = input([], ...(ngDevMode ? [{ debugName: \"specialDaysRules\" }] : []));\n }\n /** @hidden */\n _handleFocusedElementEvent(specialDayNumber) {\n this.focusingService._handleLegendItemFocus(this.legendId(), specialDayNumber);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendComponent, deps: [{ token: i1.DatetimeAdapter }, { token: i2.CalendarLegendFocusingService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarLegendComponent, isStandalone: true, selector: \"fd-calendar-legend\", inputs: { legendId: { classPropertyName: \"legendId\", publicName: \"legendId\", isSignal: true, isRequired: true, transformFunction: null }, col: { classPropertyName: \"col\", publicName: \"col\", isSignal: true, isRequired: false, transformFunction: null }, displayTodayLegendItem: { classPropertyName: \"displayTodayLegendItem\", publicName: \"displayTodayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displaySelectedLegendItem: { classPropertyName: \"displaySelectedLegendItem\", publicName: \"displaySelectedLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displayWorkDayLegendItem: { classPropertyName: \"displayWorkDayLegendItem\", publicName: \"displayWorkDayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displayNonWorkDayLegendItem: { classPropertyName: \"displayNonWorkDayLegendItem\", publicName: \"displayNonWorkDayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class.fd-calendar-legend--auto-column\": \"col()\" }, classAttribute: \"fd-calendar-legend\" }, ngImport: i0, template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"'coreCalendar.dateSelectedLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"'coreCalendar.workDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"'coreCalendar.nonWorkDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `, isInline: true, dependencies: [{ kind: \"component\", type: CalendarLegendItemComponent, selector: \"fd-calendar-legend-item\", inputs: [\"text\", \"color\", \"circle\", \"class\"] }, { kind: \"directive\", type: FocusableListDirective, selector: \"[fdkFocusableList]\", inputs: [\"focusable\", \"navigationDirection\", \"contentDirection\", \"wrap\", \"listFocusedEventAnnouncer\"], outputs: [\"itemFocused\"], exportAs: [\"fdkFocusableList\"] }, { kind: \"directive\", type: FocusableItemDirective, selector: \"[fdkFocusableItem]\", inputs: [\"fdkFocusableItem\", \"cellFocusedEventAnnouncer\"], outputs: [\"cellFocused\", \"focusableChildElementFocused\", \"_parentFocusableItemFocused\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'fd-calendar-legend',\n standalone: true,\n template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"'coreCalendar.dateSelectedLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"'coreCalendar.workDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"'coreCalendar.nonWorkDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `,\n host: {\n class: 'fd-calendar-legend',\n '[class.fd-calendar-legend--auto-column]': 'col()'\n },\n imports: [CalendarLegendItemComponent, FocusableListDirective, FocusableItemDirective, FdTranslatePipe]\n }]\n }], ctorParameters: () => [{ type: i1.DatetimeAdapter }, { type: i2.CalendarLegendFocusingService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1sZWdlbmQvY2FsZW5kYXItbGVnZW5kLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQVksTUFBTSw0QkFBNEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZUFBZSxFQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBaUUvRSxNQUFNLE9BQU8sdUJBQXVCO0lBMEJoQyxZQUNXLGVBQXdDLEVBQ3ZDLGVBQThDO1FBRC9DLG9CQUFlLEdBQWYsZUFBZSxDQUF5QjtRQUN2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBK0I7UUEzQjFELGlGQUFpRjtRQUNqRixhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsbURBQVUsQ0FBQztRQUVwQzs7V0FFRztRQUNILFFBQUcsR0FBRyxLQUFLLENBQVUsS0FBSywrQ0FBQyxDQUFDO1FBRTVCLDJEQUEyRDtRQUMzRCwyQkFBc0IsR0FBRyxLQUFLLENBQVUsSUFBSSxrRUFBQyxDQUFDO1FBRTlDLDBFQUEwRTtRQUMxRSw4QkFBeUIsR0FBRyxLQUFLLENBQVUsSUFBSSxxRUFBQyxDQUFDO1FBRWpELHdEQUF3RDtRQUN4RCw2QkFBd0IsR0FBRyxLQUFLLENBQVUsSUFBSSxvRUFBQyxDQUFDO1FBRWhELDREQUE0RDtRQUM1RCxnQ0FBMkIsR0FBRyxLQUFLLENBQVUsSUFBSSx1RUFBQyxDQUFDO1FBRW5EOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsS0FBSyxDQUFzQixFQUFFLDREQUFDLENBQUM7SUFLL0MsQ0FBQztJQUVKLGNBQWM7SUFDZCwwQkFBMEIsQ0FBQyxnQkFBa0M7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRixDQUFDOzhHQWxDUSx1QkFBdUI7a0dBQXZCLHVCQUF1QixpeUNBNUR0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxRFQsNERBS1MsMkJBQTJCLGtIQUFFLHNCQUFzQixnT0FBRSxzQkFBc0IsOE1BQUUsZUFBZTs7MkZBRTdGLHVCQUF1QjtrQkEvRG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxRFQ7b0JBQ0QsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxvQkFBb0I7d0JBQzNCLHlDQUF5QyxFQUFFLE9BQU87cUJBQ3JEO29CQUNELE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGVBQWUsQ0FBQztpQkFDMUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb2N1c2FibGVJdGVtRGlyZWN0aXZlLCBGb2N1c2FibGVMaXN0RGlyZWN0aXZlLCBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IERhdGV0aW1lQWRhcHRlciwgRmREYXRlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFyLWxlZ2VuZC1mb2N1c2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItbGVnZW5kLWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1sZWdlbmQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBmZGtGb2N1c2FibGVMaXN0PlxuICAgICAgICAgICAgICAgIEBpZiAoZGlzcGxheVRvZGF5TGVnZW5kSXRlbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jYWxlbmRhci1sZWdlbmQtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgZmRrRm9jdXNhYmxlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0tLXRvZGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWRFbGVtZW50RXZlbnQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiX2hhbmRsZUZvY3VzZWRFbGVtZW50RXZlbnQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1jYWxlbmRhci1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChkaXNwbGF5U2VsZWN0ZWRMZWdlbmRJdGVtKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZGtGb2N1c2FibGVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyLWxlZ2VuZF9faXRlbS0tc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ2NvcmVDYWxlbmRhci5kYXRlU2VsZWN0ZWRMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWRFbGVtZW50RXZlbnQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiX2hhbmRsZUZvY3VzZWRFbGVtZW50RXZlbnQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1jYWxlbmRhci1sZWdlbmQtaXRlbT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChkaXNwbGF5V29ya0RheUxlZ2VuZEl0ZW0oKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZka0ZvY3VzYWJsZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXItbGVnZW5kX19pdGVtLS13b3JrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidjb3JlQ2FsZW5kYXIud29ya0RheUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGRpc3BsYXlOb25Xb3JrRGF5TGVnZW5kSXRlbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jYWxlbmRhci1sZWdlbmQtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgZmRrRm9jdXNhYmxlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0tLW5vbi13b3JrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidjb3JlQ2FsZW5kYXIubm9uV29ya0RheUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBmb3IgKHJ1bGUgb2Ygc3BlY2lhbERheXNSdWxlcygpOyB0cmFjayBydWxlLnNwZWNpYWxEYXlOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZGtGb2N1c2FibGVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJydWxlLmxlZ2VuZFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJydWxlLmFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCIncGxhY2Vob2xkZXItJyArIHJ1bGUuc3BlY2lhbERheU51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWRFbGVtZW50RXZlbnQocnVsZS5zcGVjaWFsRGF5TnVtYmVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhci1sZWdlbmQnLFxuICAgICAgICAnW2NsYXNzLmZkLWNhbGVuZGFyLWxlZ2VuZC0tYXV0by1jb2x1bW5dJzogJ2NvbCgpJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0NhbGVuZGFyTGVnZW5kSXRlbUNvbXBvbmVudCwgRm9jdXNhYmxlTGlzdERpcmVjdGl2ZSwgRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckxlZ2VuZENvbXBvbmVudDxEPiB7XG4gICAgLyoqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FsZW5kYXIgbGVnZW5kLiBUaGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVydHkuICovXG4gICAgbGVnZW5kSWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGl0IGEgY29sdW1uIGluc3RlYWRcbiAgICAgKi9cbiAgICBjb2wgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBsZWdlbmQgaXRlbSBmb3IgdG9kYXkncyBkYXRlLiAqL1xuICAgIGRpc3BsYXlUb2RheUxlZ2VuZEl0ZW0gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGxlZ2VuZCBpdGVtIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gICAgZGlzcGxheVNlbGVjdGVkTGVnZW5kSXRlbSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgbGVnZW5kIGl0ZW0gZm9yIHdvcmsgZGF5cy4gKi9cbiAgICBkaXNwbGF5V29ya0RheUxlZ2VuZEl0ZW0gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGxlZ2VuZCBpdGVtIGZvciBub24td29yayBkYXlzLiAqL1xuICAgIGRpc3BsYXlOb25Xb3JrRGF5TGVnZW5kSXRlbSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIHJ1bGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbGVnZW5kXG4gICAgICovXG4gICAgc3BlY2lhbERheXNSdWxlcyA9IGlucHV0PFNwZWNpYWxEYXlSdWxlPEQ+W10+KFtdKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGF0ZXRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RmREYXRlPixcbiAgICAgICAgcHJpdmF0ZSBmb2N1c2luZ1NlcnZpY2U6IENhbGVuZGFyTGVnZW5kRm9jdXNpbmdTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChzcGVjaWFsRGF5TnVtYmVyOiBOdWxsYWJsZTxudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXNpbmdTZXJ2aWNlLl9oYW5kbGVMZWdlbmRJdGVtRm9jdXModGhpcy5sZWdlbmRJZCgpLCBzcGVjaWFsRGF5TnVtYmVyKTtcbiAgICB9XG59XG4iXX0=","/**\n * Calendar active cell strategy\n */\nexport class AbstractCalendarActiveCellStrategy {\n}\nexport class DefaultCalendarActiveCellStrategy extends AbstractCalendarActiveCellStrategy {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells) {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n return cells[0] || null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL21vZGVscy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEJBOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixrQ0FBa0M7Q0FLdkQ7QUFFRCxNQUFNLE9BQU8saUNBRVgsU0FBUSxrQ0FBcUM7SUFDM0M7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBVTtRQUNwQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbi8qKlxuICogQmFzZSBDYWxlbmRhciBDZWxsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNhbGVuZGFyQ2VsbCB7XG4gICAgLyoqIFJlcHJlc2VudGF0aW9uIGluIHN0cmluZyAqL1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIGNlbGwgdW5pcXVlIGlkICovXG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgLyoqIGN1cnJlbnRseSBhY3RpdmUgKHRvZGF5KSAqL1xuICAgIGN1cnJlbnQ/OiBib29sZWFuO1xuICAgIC8qKiBzZWxlY3RlZCBjZWxsICovXG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIC8qKiBkaXNhYmxlZCBjZWxsICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKiBjZWxsIHRhYmluZGV4ICovXG4gICAgdGFiSW5kZXg/OiBudW1iZXI7XG4gICAgLyoqIGFyaWEtbGFiZWwgKi9cbiAgICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSAqL1xuICAgIGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nO1xuICAgIC8qKiBsaXN0IGluZGV4ICovXG4gICAgaW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIENhbGVuZGFyIGFjdGl2ZSBjZWxsIHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PFQgZXh0ZW5kcyBCYXNlQ2FsZW5kYXJDZWxsID0gQmFzZUNhbGVuZGFyQ2VsbD4ge1xuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB3aGljaCB0YWJsZSBjZWxsIHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRBY3RpdmVDZWxsKGNlbGxzOiBUW10pOiBUIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneTxcbiAgICBUIGV4dGVuZHMgQmFzZUNhbGVuZGFyQ2VsbCA9IEJhc2VDYWxlbmRhckNlbGxcbj4gZXh0ZW5kcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PFQ+IHtcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgd2hpY2ggdGFibGUgY2VsbCBzaG91bGQgYmUgYWN0aXZlXG4gICAgICovXG4gICAgZ2V0QWN0aXZlQ2VsbChjZWxsczogVFtdKTogVCB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuc2VsZWN0ZWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsc1swXSB8fCBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgRXNjYXBlRm9jdXNGdW5jdGlvbiA9IE51bGxhYmxlPChldmVudD86IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ+O1xuXG5leHBvcnQgdHlwZSBEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+ID0gTnVsbGFibGU8KGRhdGU6IEQpID0+IGJvb2xlYW4+O1xuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\nexport class CalendarAggregatedYearViewComponent {\n /**\n * View ID\n */\n get viewId() {\n return this.id + '-years-range-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /** Event fired when a year is selected. */\n this.yearsClicked = new EventEmitter();\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected - this._yearsInOnePeriod();\n this._constructYearsGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearsGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated &&\n ('yearSelected' in changes ||\n 'aggregatedYearsViewGrid' in changes ||\n 'yearViewGrid' in changes ||\n 'id' in changes)) {\n this._constructYearsGrid();\n }\n }\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear, event) {\n if (event) {\n event.stopPropagation();\n }\n this._yearsSelected = selectedYear.years;\n this.yearsClicked.emit(this._yearsSelected);\n }\n /** Method used to load the previous 12 years to be displayed. */\n loadNextYearsList() {\n this._firstYearInList += this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n /** Method used to load the next 12 years to be displayed. */\n loadPreviousYearsList() {\n this._firstYearInList -= this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearsList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /** Method for handling the keyboard navigation. */\n _onKeydownYearHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Method returning index of aggregated year index cell\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Get id of calendar's aggregated year item\n */\n _getId(index) {\n return this.viewId + '-aggregated-years-' + index;\n }\n /**\n * @hidden\n * Check if specified year is between start year and end year)\n */\n _isBetween(aggregatedYear, yearToCheck) {\n return aggregatedYear.endYear >= yearToCheck && aggregatedYear.startYear <= yearToCheck;\n }\n /** @hidden */\n _constructYearsGrid() {\n const displayedYearsAmount = this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n const calendarYearList = [];\n this._calendarYearListGrid = [];\n for (let index = 0; index < displayedYearsAmount; ++index) {\n /**\n * Generates object with certain period of years,\n * which depends on amount of years displayed in year view\n */\n const years = {\n startYear: this._firstYearInList + this._yearsInOnePeriod() * index,\n endYear: this._firstYearInList + this._yearsInOnePeriod() * (index + 1) - 1\n };\n calendarYearList.push({\n years,\n label: this._getYearsName(years),\n ariaLabel: this._getAriaYearsName(years),\n selected: this._isBetween(years, this.yearSelected),\n current: this._isBetween(years, this._currentYear),\n index\n });\n }\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.aggregatedYearsViewGrid.cols));\n }\n const yearsCellSelected = calendarYearList.find((cell) => this._isBetween(cell.years, this.yearSelected));\n this._yearsSelected = yearsCellSelected ? yearsCellSelected.years : null;\n this._activeYear = this._getActiveYear();\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.years === this._activeYear ? 0 : -1;\n });\n });\n this._changeDetectorRef.detectChanges();\n }\n /**\n * @hidden\n * Returns year name as a string.\n */\n _getYearsName(years) {\n const startYearFormatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(years.startYear, 1, 1));\n const endYearFormatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(years.endYear, 1, 1));\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(years.endYear, endYearFormatted)}`;\n }\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n _getAriaYearsName(years) {\n const startYearFormatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(years.startYear, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n const endYearFormatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(years.endYear, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(years.endYear, endYearFormatted)}`;\n }\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n _getYearString(year, defaultStr) {\n if (typeof this.aggregatedYearsViewGrid.yearMapping === 'function') {\n return this.aggregatedYearsViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n _yearsInOnePeriod() {\n if (this.yearViewGrid) {\n return this.yearViewGrid.cols * this.yearViewGrid.rows;\n }\n else {\n return 12;\n }\n }\n /**\n * @hidden\n * Amount of years displayed in aggregated year view\n */\n _periodsAmount() {\n return this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n _getActiveYear() {\n const selectedYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this.yearSelected));\n if (selectedYearCell) {\n return selectedYearCell.years;\n }\n const currentYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this._currentYear));\n if (currentYearCell) {\n return currentYearCell.years;\n }\n return this._calendarYearListGrid[0][0].years;\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n _getYearsList() {\n return [].concat(...this._calendarYearListGrid);\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.rowAmount = this.aggregatedYearsViewGrid.rows;\n this._calendarService.colAmount = this.aggregatedYearsViewGrid.cols;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index }) => this.selectYear(this._getYearsList()[index]));\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarAggregatedYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarAggregatedYearViewComponent, isStandalone: true, selector: \"fd-calendar-aggregated-year-view\", inputs: { id: \"id\", focusEscapeFunction: \"focusEscapeFunction\", yearSelected: \"yearSelected\", aggregatedYearsViewGrid: \"aggregatedYearsViewGrid\", yearViewGrid: \"yearViewGrid\" }, outputs: { yearsClicked: \"yearsClicked\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsRangeViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\">\\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"cell.current\\\"\\n [class.is-active]=\\\"cell.selected\\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.tabindex]=\\\"cell.tabIndex\\\"\\n [attr.data-fd-calendar-years]=\\\"cell.years.startYear + '-' + cell.years.endYear\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, cell.index)\\\"\\n (click)=\\\"selectYear(cell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"cell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ cell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarAggregatedYearViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-aggregated-year-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n '[attr.id]': 'viewId'\n }, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsRangeViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\">\\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"cell.current\\\"\\n [class.is-active]=\\\"cell.selected\\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.tabindex]=\\\"cell.tabIndex\\\"\\n [attr.data-fd-calendar-years]=\\\"cell.years.startYear + '-' + cell.years.endYear\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, cell.index)\\\"\\n (click)=\\\"selectYear(cell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"cell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ cell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { id: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], yearSelected: [{\n type: Input\n }], aggregatedYearsViewGrid: [{\n type: Input\n }], yearViewGrid: [{\n type: Input\n }], yearsClicked: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3L2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4saUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBOEMsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWFwSCxNQUFNLE9BQU8sbUNBQW1DO0lBNkI1Qzs7T0FFRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJ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RGxCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFPTixZQUFZO3NCQURYLEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZWRZZWFyLCBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FnZ3JlZ2F0ZWQteWVhcic7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0J1dHRvbkNvbXBvbmVudCwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBQYXJhbWV0ZXIgdXNlZCBpbiBpZCBvZiB5ZWFycyB1c2VkIGZvciBoZWxwIHdpdGggZm9jdXNpbmcgb24gdGhlIGNvcnJlY3QgZWxlbWVudCBkdXJpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9jdXMgd291bGQgZXNjYXBlIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgeWVhciB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJzVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhclZpZXdHcmlkOiBDYWxlbmRhclllYXJHcmlkO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEFnZ3JlZ2F0ZWRZZWFyPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWdncmVnYXRlZFllYXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IElEXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICcteWVhcnMtcmFuZ2Utdmlldyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZGF5IGNlbGwgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3RvZGF5TGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXRvZGF5LWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0ZWQgZGF0ZSBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0ZWREYXRlTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdGVkLWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSB3aGljaCB5ZWFyIGZyb20gY2FsZW5kYXJZZWFyTGlzdCBzaG91bGQgYmUgZm9jdXNhYmxlIGJ5IHRhYiBrZXlcbiAgICAgKi9cbiAgICBfYWN0aXZlWWVhcjogQWdncmVnYXRlZFllYXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIFBhcmFtZXRlciB0aGF0IHN0b3JlcyB0aGUgZG96ZW4gb2YgeWVhcnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC5cbiAgICAgKi9cbiAgICBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ6IENhbGVuZGFyQWdncmVnYXRlZFllYXJbXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEN1cnJlbnQgcGVyaW9kIG9mIHllYXJzIHNlbGVjdGVkXG4gICAgICovXG4gICAgX3llYXJzU2VsZWN0ZWQ6IEFnZ3JlZ2F0ZWRZZWFyIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfZmlyc3RZZWFySW5MaXN0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy55ZWFyU2VsZWN0ZWQgLSB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG5cbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5faW5pdGlhdGVkICYmXG4gICAgICAgICAgICAoJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICdhZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICAgICAnaWQnIGluIGNoYW5nZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgc2VuZHMgdGhlIHllYXIgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgd2hlbiBpdCBpcyBjbGlja2VkLiAqL1xuICAgIHNlbGVjdFllYXIoc2VsZWN0ZWRZZWFyOiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl95ZWFyc1NlbGVjdGVkID0gc2VsZWN0ZWRZZWFyLnllYXJzO1xuICAgICAgICB0aGlzLnllYXJzQ2xpY2tlZC5lbWl0KHRoaXMuX3llYXJzU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBwcmV2aW91cyAxMiB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCArPSB0aGlzLl9wZXJpb2RzQW1vdW50KCkgKiB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJzR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IDEyIHllYXJzIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBsb2FkUHJldmlvdXNZZWFyc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCAtPSB0aGlzLl9wZXJpb2RzQW1vdW50KCkgKiB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJzR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0WWVhcnNMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uLiAqL1xuICAgIF9vbktleWRvd25ZZWFySGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGluZGV4IG9mIGFnZ3JlZ2F0ZWQgeWVhciBpbmRleCBjZWxsXG4gICAgICovXG4gICAgX2dldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdldElkKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCBpZCBvZiBjYWxlbmRhcidzIGFnZ3JlZ2F0ZWQgeWVhciBpdGVtXG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWFnZ3JlZ2F0ZWQteWVhcnMtJyArIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayBpZiBzcGVjaWZpZWQgeWVhciBpcyBiZXR3ZWVuIHN0YXJ0IHllYXIgYW5kIGVuZCB5ZWFyKVxuICAgICAqL1xuICAgIF9pc0JldHdlZW4oYWdncmVnYXRlZFllYXI6IEFnZ3JlZ2F0ZWRZZWFyLCB5ZWFyVG9DaGVjazogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGVkWWVhci5lbmRZZWFyID49IHllYXJUb0NoZWNrICYmIGFnZ3JlZ2F0ZWRZZWFyLnN0YXJ0WWVhciA8PSB5ZWFyVG9DaGVjaztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJzR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheWVkWWVhcnNBbW91bnQ6IG51bWJlciA9IHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scyAqIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQucm93cztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJZZWFyTGlzdDogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhcltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRpc3BsYXllZFllYXJzQW1vdW50OyArK2luZGV4KSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdlbmVyYXRlcyBvYmplY3Qgd2l0aCBjZXJ0YWluIHBlcmlvZCBvZiB5ZWFycyxcbiAgICAgICAgICAgICAqIHdoaWNoIGRlcGVuZHMgb24gYW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBjb25zdCB5ZWFyczogQWdncmVnYXRlZFllYXIgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRZZWFyOiB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCkgKiBpbmRleCxcbiAgICAgICAgICAgICAgICBlbmRZZWFyOiB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCkgKiAoaW5kZXggKyAxKSAtIDFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2dldFllYXJzTmFtZSh5ZWFycyksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhcnNOYW1lKHllYXJzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLnllYXJTZWxlY3RlZCksXG4gICAgICAgICAgICAgICAgY3VycmVudDogdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLl9jdXJyZW50WWVhciksXG4gICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIENyZWF0aW5nIDJkIGdyaWQgKi9cbiAgICAgICAgd2hpbGUgKGNhbGVuZGFyWWVhckxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZC5wdXNoKGNhbGVuZGFyWWVhckxpc3Quc3BsaWNlKDAsIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeWVhcnNDZWxsU2VsZWN0ZWQgPSBjYWxlbmRhclllYXJMaXN0LmZpbmQoKGNlbGwpID0+IHRoaXMuX2lzQmV0d2VlbihjZWxsLnllYXJzLCB0aGlzLnllYXJTZWxlY3RlZCkpO1xuICAgICAgICB0aGlzLl95ZWFyc1NlbGVjdGVkID0geWVhcnNDZWxsU2VsZWN0ZWQgPyB5ZWFyc0NlbGxTZWxlY3RlZC55ZWFycyA6IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVllYXIgPSB0aGlzLl9nZXRBY3RpdmVZZWFyKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgcm93LmZvckVhY2goKGNlbGwsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5pZCA9IHRoaXMuX2dldElkKHRoaXMuX2dldEluZGV4KHJvd0luZGV4LCBjb2xJbmRleCkpO1xuICAgICAgICAgICAgICAgIGNlbGwudGFiSW5kZXggPSBjZWxsLnllYXJzID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhcnNOYW1lKHllYXJzOiBBZ2dyZWdhdGVkWWVhcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLnN0YXJ0WWVhciwgMSwgMSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kWWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLmVuZFllYXIsIDEsIDEpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXJzLnN0YXJ0WWVhciwgc3RhcnRZZWFyRm9ybWF0dGVkKX0gLSAke3RoaXMuX2dldFllYXJTdHJpbmcoXG4gICAgICAgICAgICB5ZWFycy5lbmRZZWFyLFxuICAgICAgICAgICAgZW5kWWVhckZvcm1hdHRlZFxuICAgICAgICApfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgYXJpYSB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QXJpYVllYXJzTmFtZSh5ZWFyczogQWdncmVnYXRlZFllYXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdGFydFllYXJGb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhcnMuc3RhcnRZZWFyLCAxLCAxKSxcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LnllYXJBMTF5TGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kWWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFycy5lbmRZZWFyLCAxLCAxKSxcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LnllYXJBMTF5TGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2dldFllYXJTdHJpbmcoeWVhcnMuc3RhcnRZZWFyLCBzdGFydFllYXJGb3JtYXR0ZWQpfSAtICR7dGhpcy5fZ2V0WWVhclN0cmluZyhcbiAgICAgICAgICAgIHllYXJzLmVuZFllYXIsXG4gICAgICAgICAgICBlbmRZZWFyRm9ybWF0dGVkXG4gICAgICAgICl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgdGFraW5nIGludG8gYWNjb3VudCB5ZWFyTWFwcGluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyU3RyaW5nKHllYXI6IG51bWJlciwgZGVmYXVsdFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnllYXJNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF95ZWFyc0luT25lUGVyaW9kKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnllYXJWaWV3R3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhclZpZXdHcmlkLmNvbHMgKiB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgaW4gYWdncmVnYXRlZCB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9wZXJpb2RzQW1vdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLmNvbHMgKiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHJldHVybnMgYWN0aXZlIGNlbGwsIHdoaWNoIG1lYW5zOlxuICAgICAqIGlmIHRoZXJlIGlzIGFueSBzZWxlY3RlZCB5ZWFyLCByZXR1cm4gc2VsZWN0ZWQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIHllYXIsIGJ1dCB0aGVyZSBpcyBjdXJyZW50IHllYXIsIHJldHVybiBjdXJyZW50IHllYXJcbiAgICAgKiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHllYXIsIG9yIHNlbGVjdGVkLCByZXR1cm4gZmlyc3Qgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlWWVhcigpOiBBZ2dyZWdhdGVkWWVhciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyc0xpc3QoKS5maW5kKCh7IHllYXJzIH0pID0+IHRoaXMuX2lzQmV0d2Vlbih5ZWFycywgdGhpcy55ZWFyU2VsZWN0ZWQpKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkWWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFllYXJDZWxsLnllYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhcnNMaXN0KCkuZmluZCgoeyB5ZWFycyB9KSA9PiB0aGlzLl9pc0JldHdlZW4oeWVhcnMsIHRoaXMuX2N1cnJlbnRZZWFyKSk7XG4gICAgICAgIGlmIChjdXJyZW50WWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50WWVhckNlbGwueWVhcnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCB5ZWFyIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhcnNMaXN0KCk6IENhbGVuZGFyQWdncmVnYXRlZFllYXJbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyQWdncmVnYXRlZFllYXJbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHB1dCBjb25maWd1cmF0aW9uIGFuZCBsaXN0ZW5lcnMgb24gY2FsZW5kYXIga2V5Ym9hcmQgc2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY29sQW1vdW50ID0gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5jb2xzO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5mb2N1c0VzY2FwZUZ1bmN0aW9uID0gdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkZvY3VzSWRDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCB9KSA9PiB0aGlzLnNlbGVjdFllYXIodGhpcy5fZ2V0WWVhcnNMaXN0KClbaW5kZXhdKSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdFN0YXJ0QXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyc0xpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLXllYXJzXCJcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiJ2NvcmVDYWxlbmRhci5jYWxlbmRhclllYXJzUmFuZ2VWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICBAZm9yIChjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IHRyYWNrIGNvbFllYXJzICsgJycgKyByb3dJbmRleDsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2VsbCBvZiBjb2xZZWFyczsgdHJhY2sgY2VsbCArICcnICsgY29sSW5kZXg7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJjZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJzXT1cImNlbGwueWVhcnMuc3RhcnRZZWFyICsgJy0nICsgY2VsbC55ZWFycy5lbmRZZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIGNlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RZZWFyKGNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cImNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmlkXT1cImNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { AbstractCalendarActiveCellStrategy } from './common';\n/**\n * Active Calendar Day cell strategy\n */\nexport class ActiveCalendarDayCellStrategy extends AbstractCalendarActiveCellStrategy {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells) {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n const fistDayInMonth = cells.find((cell) => cell.monthStatus === 'current');\n if (fistDayInMonth) {\n return fistDayInMonth;\n }\n return cells[0] || null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL21vZGVscy9jYWxlbmRhci1kYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtDQUFrQyxFQUFvQixNQUFNLFVBQVUsQ0FBQztBQWlCaEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNkJBQTJDLFNBQVEsa0NBQWtEO0lBQzlHOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQXVCO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDNUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEJhc2VDYWxlbmRhckNlbGwgfSBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRGF5PEQ+IGV4dGVuZHMgQmFzZUNhbGVuZGFyQ2VsbCB7XG4gICAgZGF0ZTogRDsgLy8gZGF0ZSByZXByZXNlbnRhdGlvblxuICAgIHdlZWtEYXk6IG51bWJlcjsgLy8gd2Vla3MgbnVtYmVyIGluIHRoZSB5ZWFyXG4gICAgd2Vla2VuZDogYm9vbGVhbjsgLy8gdG8gaGlnaGxpZ2h0IFNhdHVyZGF5IGFuZCBTdW5kYXlcbiAgICBtb250aFN0YXR1cz86ICdwcmV2aW91cycgfCAnY3VycmVudCcgfCAnbmV4dCc7IC8vIHRvIG1hcmsgZGF5cyBmcm9tIHNpYmxpbmcgbW9udGhzXG4gICAgc3BlY2lhbERheU51bWJlcj86IG51bWJlcjsgLy8gc3BlY2lhbCBkYXkgbWFya2VyIGZsYWdcbiAgICBzaG91bGRIaWRlU3BlY2lhbERheU1hcmtlcj86IGJvb2xlYW47IC8vIGlmIHRoZSBzcGVjaWFsIGRheSBzaG91bGQgYmUgbWFya2VkXG4gICAgYmxvY2tlZD86IGJvb2xlYW47IC8vIGJsb2NrZWQgZGF0ZVxuICAgIHBhc3Q/OiBib29sZWFuOyAvLyBkYXRlIGluIHBhc3RcbiAgICBzZWxlY3RlZEZpcnN0PzogYm9vbGVhbjsgLy8gdG8gaGlnaGxpZ2h0IHRoZSBmaXJzdCBzZWxlY3RlZCBkYXRlIGluIHRoZSByYW5nZVxuICAgIHNlbGVjdGVkTGFzdD86IGJvb2xlYW47IC8vIHRvIGhpZ2hsaWdodCB0aGUgbGFzdCBzZWxlY3RlZCBkYXRlIGluIHRoZSByYW5nZVxuICAgIHNlbGVjdGVkUmFuZ2U/OiBib29sZWFuOyAvLyB0byBoaWdobGlnaHQgZGF0ZXMgaW4gdGhlIHJhbmdlIGJldHdlZW4gc2VsZWN0ZWRGaXJzdCBhbmQgc2VsZWN0ZWRMYXN0XG4gICAgaG92ZXJSYW5nZT86IGJvb2xlYW47IC8vIFwidHJ1ZVwiIGZvciBkYXlzIGluY2x1ZGVkIGluIGRhdGUgcmFuZ2Ugc2VsZWN0aW9uIGJlZm9yZSB0aGUgdGhlIHNlbGVjdGlvbiBpcyBjb25maXJtZWRcbiAgICBpc1RhYkluZGV4ZWQ/OiBib29sZWFuOyAvLyBpZiBcInRydWVcIiBzZXRzIGRheSBjZWxsIHRhYmluZGV4IHRvIFwiMFwiXG59XG5cbi8qKlxuICogQWN0aXZlIENhbGVuZGFyIERheSBjZWxsIHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmVDYWxlbmRhckRheUNlbGxTdHJhdGVneTxEID0gdW5rbm93bj4gZXh0ZW5kcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PENhbGVuZGFyRGF5PEQ+PiB7XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHdoaWNoIHRhYmxlIGNlbGwgc2hvdWxkIGJlIGFjdGl2ZVxuICAgICAqL1xuICAgIGdldEFjdGl2ZUNlbGwoY2VsbHM6IENhbGVuZGFyRGF5PEQ+W10pOiBDYWxlbmRhckRheTxEPiB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuc2VsZWN0ZWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpc3REYXlJbk1vbnRoID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5tb250aFN0YXR1cyA9PT0gJ2N1cnJlbnQnKTtcbiAgICAgICAgaWYgKGZpc3REYXlJbk1vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlzdERheUluTW9udGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxzWzBdIHx8IG51bGw7XG4gICAgfVxufVxuIl19","/** A class representing a range of dates. */\nexport class DateRange {\n /**\n * Date range.\n * @param start\n * @param end\n */\n constructor(\n /** The start date of the range. */\n start, \n /** The end date of the range. */\n end) {\n this.start = start;\n this.end = end;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9tb2RlbHMvZGF0ZS1yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2Q0FBNkM7QUFDN0MsTUFBTSxPQUFPLFNBQVM7SUFDbEI7Ozs7T0FJRztJQUNIO0lBQ0ksbUNBQW1DO0lBQzFCLEtBQWU7SUFDeEIsaUNBQWlDO0lBQ3hCLEdBQWE7UUFGYixVQUFLLEdBQUwsS0FBSyxDQUFVO1FBRWYsUUFBRyxHQUFILEdBQUcsQ0FBVTtJQUN2QixDQUFDO0NBQ1AiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBjbGFzcyByZXByZXNlbnRpbmcgYSByYW5nZSBvZiBkYXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2U8RD4ge1xuICAgIC8qKlxuICAgICAqIERhdGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHN0YXJ0XG4gICAgICogQHBhcmFtIGVuZFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvKiogVGhlIHN0YXJ0IGRhdGUgb2YgdGhlIHJhbmdlLiAqL1xuICAgICAgICByZWFkb25seSBzdGFydDogRCB8IG51bGwsXG4gICAgICAgIC8qKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJhbmdlLiAqL1xuICAgICAgICByZWFkb25seSBlbmQ6IEQgfCBudWxsXG4gICAgKSB7fVxufVxuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, inject, Input, input, model, Output, ViewEncapsulation } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport equal from 'fast-deep-equal';\nimport { ActiveCalendarDayCellStrategy as CalendarActiveDayCellStrategy } from '../../models/calendar-day';\nimport { DateRange } from '../../models/date-range';\nimport { NgClass } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from '../../calendar-legend/calendar-legend-focusing.service';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarTypeEnum } from '../../types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"../../calendar-legend/calendar-legend-focusing.service\";\nimport * as i3 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the day view of the calendar. */\nexport class CalendarDayViewComponent {\n /** Currently displayed month and year for days */\n set currentlyDisplayed(currentlyDisplayed) {\n if (!equal(currentlyDisplayed, this._currentlyDisplayed)) {\n this._currentlyDisplayed = currentlyDisplayed;\n this._buildDayViewGrid();\n }\n }\n get currentlyDisplayed() {\n return this._currentlyDisplayed;\n }\n /** The currently selected date model in single mode. */\n set selectedDate(date) {\n this._selectedDate = date;\n if (this._dayViewGrid) {\n const dayFromDate = this._calendarDayList.find((day) => this._isSameDay(day.date, date));\n this._changeSelectedSingleDay(dayFromDate, this._calendarDayList);\n }\n }\n get selectedDate() {\n return this._selectedDate;\n }\n /** The currently selected date model in multiple mode. */\n set selectedMultipleDates(dates) {\n this._selectedMultipleDates = dates;\n if (dates && this._dayViewGrid) {\n const formattedDates = this._calendarDayList.filter((day) => dates?.some((date) => this._isSameDay(day.date, date)));\n this._changeSelectedMultipleDays(formattedDates, this._calendarDayList);\n }\n }\n get selectedMultipleDates() {\n return this._selectedMultipleDates;\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDay(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDay(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._dayViewGrid) {\n this._changeSelectedRangeDays(dateRange, this._calendarDayList);\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /** The currently selected FdDates model start and end in multiple range mode. */\n set selectedMultipleDateRanges(dateRanges) {\n if (dateRanges &&\n this.selectedMultipleDateRanges &&\n dateRanges.length === this.selectedMultipleDateRanges.length &&\n dateRanges.every((range, index) => this._isSameDay(range.start, this.selectedMultipleDateRanges[index].start) &&\n this._isSameDay(range.end, this.selectedMultipleDateRanges[index].end))) {\n return;\n }\n this._selectedMultipleDateRanges = dateRanges || [];\n if (this._dayViewGrid) {\n this._changeSelectedMultipleRangeDays(dateRanges, this._calendarDayList);\n }\n }\n get selectedMultipleDateRanges() {\n return this._selectedMultipleDateRanges;\n }\n /** @hidden */\n constructor(eRef, changeDetRef, calendarService, legendFocusedService, _dateTimeFormats, _dateTimeAdapter) {\n this.eRef = eRef;\n this.changeDetRef = changeDetRef;\n this.calendarService = calendarService;\n this.legendFocusedService = legendFocusedService;\n this._dateTimeFormats = _dateTimeFormats;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** Event emitted always, when next month is selected, by focus */\n this.nextMonthSelect = new EventEmitter();\n /** Event emitted always, when previous month is selected, by focus */\n this.previousMonthSelect = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /**\n * Function used to disable certain dates in the calendar.\n * @param date date type\n */\n this.disableFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableFunction\" }] : []));\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n * @param date date representation\n */\n this.disableRangeStartFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableRangeStartFunction\" }] : []));\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n * @param date date representation\n */\n this.disableRangeEndFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableRangeEndFunction\" }] : []));\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n this.startingDayOfWeek = model(...(ngDevMode ? [undefined, { debugName: \"startingDayOfWeek\" }] : []));\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n this.calType = model(CalendarTypeEnum.Single, ...(ngDevMode ? [{ debugName: \"calType\" }] : []));\n /** Id of the calendar. If none is provided, one will be generated. */\n this.id = input(...(ngDevMode ? [undefined, { debugName: \"id\" }] : []));\n /** @hidden Id of the associated legend, passed from the parent calendar component. */\n this.associatedLegendId = input(...(ngDevMode ? [undefined, { debugName: \"associatedLegendId\" }] : []));\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected.\n */\n this.rangeHoverEffect = model(false, ...(ngDevMode ? [{ debugName: \"rangeHoverEffect\" }] : []));\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = input(false, ...(ngDevMode ? [{ debugName: \"markWeekends\" }] : []));\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = input(true, ...(ngDevMode ? [{ debugName: \"showWeekNumbers\" }] : []));\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = model(false, ...(ngDevMode ? [{ debugName: \"allowMultipleSelection\" }] : []));\n /** Function that allows to specify which function would be called, when focus wants to escape */\n this.focusEscapeFunction = input(...(ngDevMode ? [undefined, { debugName: \"focusEscapeFunction\" }] : []));\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with date object as a parameter. ex:\n * `rule: (date: D) => this.dateAdapter.getDay(date) === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = input([], ...(ngDevMode ? [{ debugName: \"specialDaysRules\" }] : []));\n /**\n * @hidden\n * Array of CSS classes for each week day in calendar header, computed based on whether the calendar type is 'multi'\n * and the date is not disabled.\n */\n this._weekHeaderClasses = [];\n /** @hidden */\n this._selectedMultipleDates = [];\n /** @hidden */\n this._selectedMultipleDateRanges = [];\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /**\n * @hidden\n * Days per week\n */\n this._amountOfCols = 7;\n /** @hidden */\n this._isOnRangePick = false;\n /** @hidden */\n this._isInitiated = false;\n /**\n * @hidden\n * global variable to store the new range.\n */\n this._newRange = null;\n }\n /** @hidden */\n ngOnInit() {\n this._isInitiated = true;\n this._setupKeyboardService();\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this._computeWeekHeaderClasses();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this.changeDetRef.markForCheck();\n });\n this.legendFocusedService.focusedLegendItemSubject$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ legendId, specialDayNumber }) => {\n if (!specialDayNumber) {\n this._legendBlurred();\n }\n else if (legendId !== null && specialDayNumber !== null) {\n this._focusOnLegendsDay(legendId, specialDayNumber);\n }\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n /** Changes of those properties are done inside its setters */\n if (!changes['selectedDate'] &&\n !changes['selectedMultipleDates'] &&\n !changes['selectedRangeDate'] &&\n !changes['currentlyDisplayed']) {\n this._buildDayViewGrid();\n }\n if (changes['startingDayOfWeek']) {\n this._refreshShortWeekDays();\n }\n if (changes['specialDaysRules']) {\n this._buildDayViewGrid();\n }\n }\n /**\n * @hidden\n * Selects a date in single mode, toggles selection in multi mode, or sets the range in range mode.\n * Handles the selection of a date based on the calendar type.\n * @param day The calendar day to be selected.\n * @param event Optional mouse event for handling event propagation.\n */\n selectDate(day, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (day.disabled || day.blocked) {\n return;\n }\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._toggleMultiDate(day);\n }\n else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectMultipleRangeDates(day);\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._selectSingleDate(day);\n }\n else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectRangeDate(day);\n }\n }\n this._handleRangeHoverEffect(event);\n this.changeDetRef.markForCheck();\n }\n /**\n * Toggles the selection of a week on the calendar.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n handleWeekSelectionByDays(selectedWeek) {\n this.toggleWeekSelection(selectedWeek);\n }\n /**\n * Toggles the selection of a week on the calendar based on the weekday index.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param weekDayIndex The index of the weekday to be toggled.\n */\n handleWeekSelectionByIndex(weekDayIndex) {\n const selectedWeek = this._dayViewGrid.map((row) => row[weekDayIndex]);\n this.toggleWeekSelection(selectedWeek);\n }\n /**\n * Set focus on default focusable cell\n */\n setFocusOnCell() {\n const cellToFocus = new CalendarActiveDayCellStrategy().getActiveCell(this._calendarDayList);\n if (!cellToFocus?.index && cellToFocus?.index !== 0) {\n return;\n }\n this.focusOnCellByIndex(cellToFocus.index);\n }\n /** @hidden */\n _refreshHoverRange(day) {\n if (this.allowMultipleSelection()) {\n this._handleMultiRangeHover(day);\n }\n else {\n this._handleSingleRangeHover(day);\n }\n }\n /**\n * @hidden\n * Amount of selected days\n * 0, when there is no day selected, or start date is invalid,\n * 1, when there is only valid start date, or end date is same as start date,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDay(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /**\n * @hidden\n * Total amount of selected days across multiple ranges.\n * Sums the counts of valid days in each date range.\n */\n get _selectMultipleCounter() {\n let counter = this._selectedMultipleDateRanges.reduce((count, range) => {\n if (range.start) {\n count++;\n }\n if (range.end) {\n count++;\n }\n return count;\n }, 0);\n // Account for the newRange\n if (this._newRange) {\n if (this._newRange.start) {\n counter++;\n }\n if (this._newRange.end) {\n counter++;\n }\n }\n return counter;\n }\n /**\n * @hidden\n * Method that returns short weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get shortWeekDays() {\n return this._shortWeekDays;\n }\n /**\n * @hidden\n * Method that returns weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get longWeekDays() {\n return this._longWeekDays;\n }\n /**\n * @hidden\n * Function that gives array of all displayed CalendarDays\n */\n get _calendarDayList() {\n return this._dayViewGrid.reduce((totalCalendarRows, calendarRow) => {\n if (!calendarRow) {\n calendarRow = [];\n }\n return totalCalendarRows.concat(calendarRow);\n }, []);\n }\n /**\n * View ID\n */\n get viewId() {\n return this.id() + '-day-view';\n }\n /**\n * @hidden\n * Week column header ID\n */\n get _weekNumbersColumnHeaderId() {\n return this.viewId + '-week-column-header';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /**\n * @hidden\n * Date range start date label ID\n */\n get _dateRangeStartLabelId() {\n return this.viewId + '-range-start-date-label';\n }\n /**\n * @hidden\n * Date range end date label ID\n */\n get _dateRangeEndLabelId() {\n return this.viewId + '-range-end-date-label';\n }\n /**\n * @hidden\n * Date in past label ID\n */\n get _dateInPastLabelId() {\n return this.viewId + '-day-in-past-label';\n }\n /**\n * @hidden\n * Method that handles day cells keydown events,\n * @param event KeyboardEvent\n * @param cell CalendarDay\n * @param index with specified column and row as a x and y\n */\n _onKeydownDayHandler(event, cell, index) {\n if (event.key === 'Tab' && !event.shiftKey) {\n if (this.focusEscapeFunction()) {\n this.focusEscapeFunction()(event);\n }\n }\n else {\n this.calendarService.onKeydownHandler(event, index);\n }\n }\n /**\n * @hidden\n * Method that allow to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this.eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex, colIndex) {\n return this.calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Method that selects previous month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n _selectPreviousMonth() {\n this._currentlyDisplayed = this._getPreviousMonth();\n this._buildDayViewGrid();\n this.previousMonthSelect.emit();\n }\n /**\n * @hidden\n * Method that selects next month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n _selectNextMonth() {\n this._currentlyDisplayed = this._getNextMonth();\n this._buildDayViewGrid();\n this.nextMonthSelect.emit();\n }\n /** @hidden */\n _focusOnLegendsDay(legendId, specialDayNumber) {\n const associatedLegendId = this.associatedLegendId();\n if (legendId && associatedLegendId && associatedLegendId === legendId) {\n this._dayViewGrid.forEach((row) => {\n row.forEach((day) => {\n day.shouldHideSpecialDayMarker = day.specialDayNumber !== specialDayNumber;\n });\n });\n this.changeDetRef.markForCheck();\n }\n }\n /** @hidden */\n _legendBlurred() {\n this._dayViewGrid.forEach((row) => {\n row.forEach((day) => {\n day.shouldHideSpecialDayMarker = false;\n });\n });\n this.changeDetRef.markForCheck();\n }\n /**\n * @hidden\n * Method that creates array of CalendarDay models which will be shown on day grid,\n * depending on current month and year.\n */\n _populateCalendar() {\n let calendar = [];\n calendar = this._getPreviousMonthDays(calendar);\n calendar = calendar.concat(this._getCurrentMonthDays());\n calendar = this._getNextMonthDays(calendar);\n calendar.forEach((call, index) => {\n call.id = this._getCellIdByIndex(index);\n call.index = index;\n });\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedMultipleDates) {\n const _days = calendar.filter((day) => this._selectedMultipleDates?.some((date) => this._isSameDay(day.date, date)));\n this._changeSelectedMultipleDays(_days, calendar);\n }\n if (this.calType() === CalendarTypeEnum.Range && this._selectedMultipleDateRanges) {\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, calendar);\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedDate) {\n const _day = calendar.find((day) => this._isSameDay(day.date, this._selectedDate));\n this._changeSelectedSingleDay(_day, calendar);\n }\n if (this.calType() === CalendarTypeEnum.Range && this._selectedRangeDate) {\n this._changeSelectedRangeDays(this._selectedRangeDate, calendar);\n }\n }\n return calendar;\n }\n /**\n * @hidden\n * Method that builds 2 dimensions day view grid, also sets up currently displayed month, or year,\n * when there is not any.\n */\n _buildDayViewGrid() {\n if (!this._isInitiated) {\n return;\n }\n if (!this.currentlyDisplayed || this._isInvalidDate()) {\n if (this.selectedDate) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(this.selectedDate),\n year: this._dateTimeAdapter.getYear(this.selectedDate)\n };\n }\n else {\n const today = this._dateTimeAdapter.today();\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(today),\n year: this._dateTimeAdapter.getYear(today)\n };\n }\n }\n const calendarDays = this._populateCalendar();\n const dayViewGrid = [];\n while (calendarDays.length > 0) {\n dayViewGrid.push(calendarDays.splice(0, this._amountOfCols));\n }\n this.calendarService.rowAmount = dayViewGrid.length;\n this._dayViewGrid = dayViewGrid;\n this._weeks = this._refreshWeekCount();\n }\n /** @hidden */\n _isInvalidDate() {\n return isNaN(this.currentlyDisplayed.year) || isNaN(this.currentlyDisplayed.month);\n }\n /**\n * @hidden\n * Get id of calendar's day item\n */\n _getCellIdByIndex(index) {\n return this.viewId + '-day-' + index + '';\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains every single day of currently shown month/year.\n */\n _getCurrentMonthDays() {\n const month = this.currentlyDisplayed.month;\n const year = this.currentlyDisplayed.year;\n const calendarDays = [];\n const amountOfDaysInCurrentMonth = this._dateTimeAdapter.getNumDaysInMonth(this._dateTimeAdapter.createDate(year, month, 1));\n const now = this._dateTimeAdapter.now();\n for (let dayNumber = 1; dayNumber <= amountOfDaysInCurrentMonth; dayNumber++) {\n const date = this._dateTimeAdapter.createDate(year, month, dayNumber);\n calendarDays.push({\n ...this._getDay(date),\n monthStatus: 'current',\n current: this._isSameDay(now, date)\n });\n }\n const cell = this._getActiveCell(calendarDays);\n cell && (cell.isTabIndexed = true);\n return calendarDays;\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected day, return selected day\n * if there is no selected day, but there is today day, return today day\n * if there is no today, or selected, return first one\n */\n _getActiveCell(calendarDays) {\n return new CalendarActiveDayCellStrategy().getActiveCell(calendarDays);\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains last 0-6 days of previous month/year. Theses days\n * fills the gap between starting startingDayOfWeek and first day of current month\n */\n _getPreviousMonthDays(calendarDays) {\n const month = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.month - 1 : 12;\n const year = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year - 1;\n const amountOfDaysInCurrentMonth = this._dateTimeAdapter.getNumDaysInMonth(this._dateTimeAdapter.createDate(year, month, 1));\n const prevMonthLastDate = this._dateTimeAdapter.createDate(year, month, amountOfDaysInCurrentMonth);\n const prevMonthLastDay = amountOfDaysInCurrentMonth;\n let prevMonthLastWeekDay = this._dateTimeAdapter.getDayOfWeek(prevMonthLastDate) - this.startingDayOfWeek();\n /** Checking if there are some days cut by startingDayOfWeek option\n * If yes, there is whole week added, to avoid hiding\n */\n if (prevMonthLastWeekDay < 0) {\n prevMonthLastWeekDay = prevMonthLastWeekDay + 7;\n }\n if (prevMonthLastWeekDay < 6) {\n while (prevMonthLastWeekDay >= 0) {\n const prevMonthDay = prevMonthLastDay - prevMonthLastWeekDay;\n const date = this._dateTimeAdapter.createDate(year, month, prevMonthDay);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'previous' });\n prevMonthLastWeekDay--;\n }\n }\n return calendarDays;\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay, which contains first days of next month/year. Theses days\n * fills the gap between last day of current day and end of 6-weeks calendar grid.\n */\n _getNextMonthDays(calendarDays) {\n const month = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.month + 1 : 1;\n const year = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year + 1;\n // The calendar grid can have 5 (35 days) or 6 (42 days) weeks\n const nextMonthDisplayedDays = (42 - calendarDays.length) % 7;\n for (let nextD = 1; nextD <= nextMonthDisplayedDays; nextD++) {\n const date = this._dateTimeAdapter.createDate(year, month, nextD);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'next' });\n }\n return calendarDays;\n }\n /** @hidden */\n _isWeekendDay(dayOfWeek) {\n return dayOfWeek === 1 || dayOfWeek === 7;\n }\n /**\n * @hidden\n * Method that generates whole day model basing on date, disabling functions, block functions, and actually\n * chosen range / single date.\n */\n _getDay(date) {\n const weekDay = this._dateTimeAdapter.getDayOfWeek(date);\n const dayOfMonth = this._dateTimeAdapter.getDate(date);\n const dateNames = this._dateTimeAdapter.getDateNames();\n const isPast = this._dateTimeAdapter.compareDate(date, this._dateTimeAdapter.today()) < 0;\n const day = {\n date,\n label: dateNames[dayOfMonth - 1],\n weekDay,\n weekend: this._isWeekendDay(weekDay),\n ariaLabel: this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateA11yLabel),\n specialDayNumber: this._getSpecialDay(date) ?? undefined,\n past: isPast\n };\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n day.disabled = this.disableFunction()(date);\n }\n return day;\n }\n /**\n * @hidden\n * Method that is called to refresh i18n short week days.\n */\n _refreshShortWeekDays() {\n const shortDayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('short');\n const dayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('long');\n this._shortWeekDays = shortDayOfWeekNames\n .slice(this.startingDayOfWeek() - 1)\n .concat(shortDayOfWeekNames.slice(0, this.startingDayOfWeek() - 1));\n this._longWeekDays = dayOfWeekNames\n .slice(this.startingDayOfWeek() - 1)\n .concat(dayOfWeekNames.slice(0, this.startingDayOfWeek() - 1));\n this.changeDetRef.markForCheck();\n }\n /**\n * @hidden\n * Gets special day number of specified date model\n */\n _getSpecialDay(date) {\n const specialDay = this.specialDaysRules().find((specialDayRule) => specialDayRule.rule(date));\n if (specialDay) {\n return specialDay.specialDayNumber;\n }\n return null;\n }\n /**\n * @hidden\n * Method that returns array of week's count\n */\n _refreshWeekCount() {\n const calendarDayList = this._calendarDayList;\n const weekNumbers = [];\n for (let index = 6; index < calendarDayList.length; index = index + 6) {\n weekNumbers.push(this._dateTimeAdapter.getWeekName(calendarDayList[index].date));\n }\n return weekNumbers;\n }\n /**\n * @hidden\n * Get year and month for previous year\n */\n _getPreviousMonth() {\n if (this._currentlyDisplayed.month > 1) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month - 1 };\n }\n else {\n return { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n }\n /**\n * @hidden\n * Get year and month for next year\n */\n _getNextMonth() {\n if (this._currentlyDisplayed.month < 12) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month + 1 };\n }\n else {\n return { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this.calendarService.colAmount = this._amountOfCols;\n this.calendarService.focusEscapeFunction = this.focusEscapeFunction();\n this.calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._refreshHoverRange(this._calendarDayList[index]);\n this.focusOnCellByIndex(index);\n });\n this.calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectDate(this._calendarDayList[index], event);\n });\n this.calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectPreviousMonth();\n /**\n * Calculate focused cell in new grid\n */\n const originalMonth = this._getNextMonth(); // month that was before moving back\n const originalAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(originalMonth.year, originalMonth.month, this.startingDayOfWeek());\n const prevMonthAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(this._currentlyDisplayed.year, this._currentlyDisplayed.month, this.startingDayOfWeek());\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index - 7 * (originalAmountOfWeeks - prevMonthAmountOfWeeks));\n });\n this.calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectNextMonth();\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index);\n });\n }\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n */\n _changeSelectedSingleDay(day, calendar) {\n calendar.forEach((_day) => (_day.selected = false));\n if (day && !day.blocked && !day.disabled) {\n day.selected = true;\n }\n this.refreshTabIndex(calendar);\n }\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n *\n * @param dates - An array of CalendarDay objects to be marked as selected\n * @param calendar - The calendar array containing all CalendarDay objects\n */\n _changeSelectedMultipleDays(dates, calendar) {\n calendar.forEach((day) => (day.selected = false));\n if (dates) {\n dates.forEach((date) => {\n const matchingDay = calendar.find((day) => this._isSameDay(day.date, date.date));\n if (matchingDay && !matchingDay.blocked && !matchingDay.disabled) {\n matchingDay.selected = true;\n }\n });\n }\n this.refreshTabIndex(calendar);\n }\n /**\n * @hidden\n * Change properties of range days, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected days.\n */\n _changeSelectedRangeDays(dates, calendar) {\n /** Pull list of calendar days */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_day) => (_day.selectedFirst =\n _day.selectedLast =\n _day.selected =\n _day.isTabIndexed =\n _day.disabled =\n _day.hoverRange =\n _day.selectedRange =\n false));\n if (dates) {\n let startDay;\n let endDay;\n if (dates.start) {\n /** Find start date and mark it as selected */\n startDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay &&\n !startDay.blocked &&\n !startDay.disabled &&\n (typeof this.disableRangeStartFunction() !== 'function' ||\n !this.disableRangeStartFunction()?.(startDay.date))) {\n startDay.selected = true;\n startDay.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end date and mark it as selected */\n endDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay &&\n !endDay.blocked &&\n !endDay.disabled &&\n (typeof this.disableRangeEndFunction() !== 'function' ||\n !this.disableRangeEndFunction()?.(endDay.date))) {\n endDay.selected = true;\n endDay.selectedLast = true;\n }\n }\n /** Verify if start day and end day is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all days, which are between start and end date */\n calendarList\n .filter((_day) => (_day.selectedRange = this._dateTimeAdapter.isBetween(_day.date, dates.start, dates.end)))\n .forEach((_day) => (_day.selectedRange = true));\n }\n }\n this.refreshTabIndex(calendarList);\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n calendarList.forEach((_day) => (_day.disabled = this.disableFunction()(_day.date)));\n }\n if ((this._selectCounter === 0 || this._selectCounter === 2) && this.disableRangeStartFunction()) {\n calendarList.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()(_day.date)));\n }\n else if (this._selectCounter === 1 && this.disableRangeEndFunction()) {\n calendarList.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()(_day.date)));\n }\n }\n /**\n * @hidden\n * Change properties of range days for multiple ranges.\n * This method is called to not rebuild the whole grid from scratch.\n * It just changes properties of newly selected/unselected days.\n */\n _changeSelectedMultipleRangeDays(datesArray, calendar) {\n // Reset changing properties\n calendar.forEach((_day) => {\n _day.selectedFirst = false;\n _day.selectedLast = false;\n _day.selectedRange = false;\n _day.selected = false;\n _day.isTabIndexed = false;\n _day.disabled = false;\n _day.hoverRange = false;\n _day.disabled = false;\n });\n datesArray.forEach((dates) => {\n if (dates) {\n let startDay;\n let endDay;\n if (dates.start) {\n // Find start date and mark it as selected\n startDay = calendar.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay) {\n startDay.selectedFirst = true;\n startDay.selected = true;\n }\n }\n if (dates.end) {\n // Find end date and mark it as selected\n endDay = calendar.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay) {\n endDay.selectedLast = true;\n endDay.selected = true;\n }\n }\n // Mark all days between start and end as selected range\n if (dates.start && dates.end) {\n calendar.forEach((_day) => {\n if (this._isDateInRange(_day.date, dates)) {\n _day.selectedRange = true;\n _day.selected = true;\n }\n });\n }\n }\n });\n this.refreshTabIndex(calendar);\n // Apply disabled state to days marked with passed function\n if (this.disableFunction()) {\n calendar.forEach((_day) => (_day.disabled = this.disableFunction()(_day.date)));\n }\n if ((this._selectMultipleCounter === 0 || this._selectMultipleCounter % 2 === 0) &&\n this.disableRangeStartFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()(_day.date)));\n }\n else if (this._selectMultipleCounter % 2 === 1 && this.disableRangeEndFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()(_day.date)));\n }\n }\n /** @hidden */\n refreshTabIndex(calendar) {\n calendar.forEach((_day) => (_day.isTabIndexed = false));\n const cell = this._getActiveCell(calendar.filter((_day) => _day.monthStatus === 'current'));\n cell && (cell.isTabIndexed = true);\n }\n /** @hidden */\n focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getCellIdByIndex(index)}`);\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDay(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Selects a single date and updates the selected date in single mode.\n * @param day The calendar day to be selected.\n */\n _selectSingleDate(day) {\n this._calendarDayList.forEach((_day) => (_day.selected = false));\n day.selected = true;\n this._selectedDate = day.date;\n this.selectedDateChange.emit(day.date);\n }\n /**\n * @hidden\n * Toggles the selection of a date in multi mode.\n * Adds the date if not selected, removes it if already selected.\n * @param day The calendar day to be toggled.\n */\n _toggleMultiDate(day) {\n const dateIndex = this._selectedMultipleDates.findIndex((d) => this._isSameDay(d, day.date));\n let newSelectedDates;\n if (dateIndex > -1) {\n newSelectedDates = this._selectedMultipleDates.filter((_, index) => index !== dateIndex);\n day.selected = false;\n }\n else {\n newSelectedDates = [...this._selectedMultipleDates, day.date];\n day.selected = true;\n }\n this._selectedMultipleDates = newSelectedDates;\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param day The calendar day to be selected or updated in the range.\n */\n _selectRangeDate(day) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: day.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, day.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeDays(this._selectedRangeDate, this._calendarDayList);\n }\n /**\n * @hidden\n * Selects or updates multiple ranges of dates in range mode.\n * Handles the start and end dates and updates the selected ranges.\n * @param day The calendar day to be selected or updated in the range.\n */\n _selectMultipleRangeDates(day) {\n let tempRanges = this._selectedMultipleDateRanges?.filter((range) => range.start || range.end) || [];\n // Handles the existing range by updating or merging it with the new day selection.\n tempRanges = this._handleExistingRange(tempRanges, day);\n if (this._selectMultipleCounter % 2 === 0) {\n // Start a new range\n this._newRange = { start: day.date, end: null };\n }\n else {\n // Check for reverse selection\n if (this._newRange &&\n this._newRange.start &&\n this._dateTimeAdapter.compareDate(this._newRange.start, day.date) > 0) {\n this._newRange = { start: day.date, end: this._newRange.start };\n }\n else if (this._newRange) {\n this._newRange.end = day.date;\n }\n if (this._newRange) {\n tempRanges.push(this._newRange);\n }\n this._newRange = null;\n }\n tempRanges = this._mergeOverlappingRanges(tempRanges);\n this._selectedMultipleDateRanges = tempRanges;\n // Check if all ranges have both start and end dates filled\n const allRangesComplete = this._selectedMultipleDateRanges.every((range) => range.start && range.end);\n if (allRangesComplete && tempRanges.length > 0) {\n this.selectedMultipleDateRangesChange.emit(this._selectedMultipleDateRanges);\n }\n // Update the calendar view\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, this._calendarDayList);\n }\n /**\n * Merges overlapping date ranges into a single range.\n *\n * @param ranges - An array of date ranges to be merged.\n * @returns An array of merged date ranges.\n */\n _mergeOverlappingRanges(ranges) {\n if (ranges.length <= 1) {\n return ranges;\n }\n ranges.sort((a, b) => this._dateTimeAdapter.compareDate(a.start, b.start));\n const mergedRanges = [];\n let currentRange = ranges[0];\n for (let i = 1; i < ranges.length; i++) {\n const nextRange = ranges[i];\n if (this._dateTimeAdapter.compareDate(currentRange.end, nextRange.start) >= 0) {\n currentRange = {\n start: currentRange.start,\n end: this._dateTimeAdapter.compareDate(currentRange.end, nextRange.end) >= 0\n ? currentRange.end\n : nextRange.end\n };\n }\n else {\n mergedRanges.push(currentRange);\n currentRange = nextRange;\n }\n }\n mergedRanges.push(currentRange);\n return mergedRanges;\n }\n /**\n * Handles the case where the selected day is part of an existing range.\n *\n * @param tempRanges - An array of date ranges to be checked.\n * @param day - The calendar day to be checked.\n * @returns An array of date ranges with the updated range if the selected day is part of an existing range.\n */\n _handleExistingRange(tempRanges, day) {\n if (tempRanges.length > 0) {\n const existingRangeIndex = tempRanges.findIndex((range) => this._isDateInRange(day.date, range));\n const existingRange = tempRanges[existingRangeIndex];\n if (existingRangeIndex !== -1 && existingRange.end) {\n tempRanges.splice(existingRangeIndex, 1);\n }\n }\n return tempRanges;\n }\n /**\n * @hidden\n * Checks if a date is within a given date range.\n * @param date The date to check.\n * @param range The date range.\n * @returns True if the date is in the range, false otherwise.\n */\n _isDateInRange(date, range) {\n return this._dateTimeAdapter.isBetween(date, range.start, range.end);\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectMultipleCounter === 1 &&\n event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectCounter === 1 &&\n event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n }\n /**\n * Helper method to toggle the selection of a week.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n toggleWeekSelection(selectedWeek) {\n const selectableDays = selectedWeek.filter((day) => !day.disabled);\n const isCurrentWeekSelected = selectableDays.every((day) => day.selected);\n if (!isCurrentWeekSelected) {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = true;\n if (!this._selectedMultipleDates.some((selectedDate) => this._isSameDay(selectedDate, day.date))) {\n this._selectedMultipleDates.push(day.date);\n }\n }\n });\n }\n else {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = false;\n this._selectedMultipleDates = this._selectedMultipleDates.filter((selectedDate) => !this._isSameDay(selectedDate, day.date));\n }\n });\n }\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n /**\n * @hidden\n * Computes the CSS class for each week day in calendar header based on whether the calendar type is 'multi'\n * and the date is not disabled.\n * Stores the computed classes in the weekHeaderClasses array.\n */\n _computeWeekHeaderClasses() {\n this._weekHeaderClasses = this._calendarDayList.map(() => this.calType() !== CalendarTypeEnum.Range && this.allowMultipleSelection() && this.disableFunction()\n ? 'event-enabled'\n : '');\n }\n /**\n * @hidden\n * Handles hover effect for single-range selection mode.\n * @param day The calendar day that is hovered.\n */\n _handleSingleRangeHover(day) {\n // Handle single range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(day.date, start) < 0) {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) < 0;\n });\n }\n else {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Handles hover effect for multi-range selection mode.\n * @param day The calendar day that is hovered.\n */\n _handleMultiRangeHover(day) {\n // Determine the start date from the most recent range with a null end date\n let startDate = this._newRange?.start;\n if (this._selectedMultipleDateRanges.length > 0) {\n // Find the most recent range with an end date of null\n const activeRanges = this._selectedMultipleDateRanges.filter((range) => range.end === null);\n if (activeRanges.length > 0) {\n const mostRecentRange = activeRanges[activeRanges.length - 1];\n startDate = mostRecentRange.start;\n }\n }\n if (startDate && startDate) {\n if (this._dateTimeAdapter.compareDate(day.date, startDate) < 0) {\n // Hovering backwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) < 0;\n });\n }\n else {\n // Hovering forwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) > 0;\n });\n }\n }\n else {\n // No start date, clear hover\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange = false;\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarDayViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.CalendarLegendFocusingService }, { token: DATE_TIME_FORMATS }, { token: i3.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarDayViewComponent, isStandalone: true, selector: \"fd-calendar-day-view\", inputs: { currentlyDisplayed: { classPropertyName: \"currentlyDisplayed\", publicName: \"currentlyDisplayed\", isSignal: false, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: \"selectedDate\", publicName: \"selectedDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDates: { classPropertyName: \"selectedMultipleDates\", publicName: \"selectedMultipleDates\", isSignal: false, isRequired: false, transformFunction: null }, selectedRangeDate: { classPropertyName: \"selectedRangeDate\", publicName: \"selectedRangeDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDateRanges: { classPropertyName: \"selectedMultipleDateRanges\", publicName: \"selectedMultipleDateRanges\", isSignal: false, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: \"disableFunction\", publicName: \"disableFunction\", isSignal: true, isRequired: false, transformFunction: null }, disableRangeStartFunction: { classPropertyName: \"disableRangeStartFunction\", publicName: \"disableRangeStartFunction\", isSignal: true, isRequired: false, transformFunction: null }, disableRangeEndFunction: { classPropertyName: \"disableRangeEndFunction\", publicName: \"disableRangeEndFunction\", isSignal: true, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: \"startingDayOfWeek\", publicName: \"startingDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, calType: { classPropertyName: \"calType\", publicName: \"calType\", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: \"id\", publicName: \"id\", isSignal: true, isRequired: false, transformFunction: null }, associatedLegendId: { classPropertyName: \"associatedLegendId\", publicName: \"associatedLegendId\", isSignal: true, isRequired: false, transformFunction: null }, rangeHoverEffect: { classPropertyName: \"rangeHoverEffect\", publicName: \"rangeHoverEffect\", isSignal: true, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: \"markWeekends\", publicName: \"markWeekends\", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: \"showWeekNumbers\", publicName: \"showWeekNumbers\", isSignal: true, isRequired: false, transformFunction: null }, allowMultipleSelection: { classPropertyName: \"allowMultipleSelection\", publicName: \"allowMultipleSelection\", isSignal: true, isRequired: false, transformFunction: null }, focusEscapeFunction: { classPropertyName: \"focusEscapeFunction\", publicName: \"focusEscapeFunction\", isSignal: true, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nextMonthSelect: \"nextMonthSelect\", previousMonthSelect: \"previousMonthSelect\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", disableFunction: \"disableFunctionChange\", disableRangeStartFunction: \"disableRangeStartFunctionChange\", disableRangeEndFunction: \"disableRangeEndFunctionChange\", startingDayOfWeek: \"startingDayOfWeekChange\", calType: \"calTypeChange\", rangeHoverEffect: \"rangeHoverEffectChange\", allowMultipleSelection: \"allowMultipleSelectionChange\" }, host: { properties: { \"attr.id\": \"viewId\" }, classAttribute: \"fd-calendar__dates\" }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--dates\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarDayViewDescription' | fdTranslate\\\"\\n>\\n <thead class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n role=\\\"columnheader\\\"\\n [attr.id]=\\\"_weekNumbersColumnHeaderId\\\"\\n [attr.aria-label]=\\\"'coreCalendar.weekColumnLabel' | fdTranslate\\\"\\n ></th>\\n }\\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"_weekHeaderClasses[i]\\\"\\n role=\\\"columnheader\\\"\\n [attr.aria-label]=\\\"longWeekDays[i]\\\"\\n (click)=\\\"handleWeekSelectionByIndex(i)\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">{{ day }}</span>\\n </div>\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\\\"\\n role=\\\"rowheader\\\"\\n scope=\\\"row\\\"\\n [attr.data-fd-calendar-week]=\\\"_weeks[rowIndex]\\\"\\n [attr.id]=\\\"viewId + '-week-' + _weeks[rowIndex]\\\"\\n [attr.aria-labelledby]=\\\"\\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\\n \\\"\\n (click)=\\\"handleWeekSelectionByDays(row)\\\"\\n >\\n @if (_weeks && _weeks[rowIndex]) {\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">\\n {{ _weeks[rowIndex] }}\\n </span>\\n </div>\\n }\\n </th>\\n }\\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\\n <td\\n class=\\\"fd-calendar__item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__item--selected]=\\\"cell.selectedFirst || cell.selectedLast || cell.selected\\\"\\n [class.fd-calendar__item--range]=\\\"\\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\\n \\\"\\n [class.fd-calendar__item--today]=\\\"cell.current\\\"\\n [class.fd-calendar__item--weekend]=\\\"\\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\\n \\\"\\n [class.fd-calendar__item--other]=\\\"cell.monthStatus !== 'current'\\\"\\n [class.is-disabled]=\\\"cell.disabled\\\"\\n [class]=\\\"\\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\\n : ''\\n \\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.data-fd-calendar-date-day]=\\\"cell.label\\\"\\n [attr.data-fd-calendar-day]=\\\"cell.index\\\"\\n [attr.aria-selected]=\\\"cell.selected\\\"\\n [attr.aria-disabled]=\\\"cell.disabled\\\"\\n [attr.tabindex]=\\\"cell.isTabIndexed ? 0 : -1\\\"\\n (click)=\\\"selectDate(cell, $event)\\\"\\n (mouseenter)=\\\"_refreshHoverRange(cell)\\\"\\n (keydown)=\\\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span\\n class=\\\"fd-calendar__text\\\"\\n role=\\\"button\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\\n (cell.past ? _dateInPastLabelId : '')\\n \\\"\\n >{{ cell.label }}</span\\n >\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n @if (_dayViewGrid.length <= 5) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n @if (_dayViewGrid.length === 4) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeStartLabelId\\\">{{ 'coreCalendar.rangeStartLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeEndLabelId\\\">{{ 'coreCalendar.rangeEndLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateInPastLabelId\\\">{{ 'coreCalendar.dayInPastLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\".hidden-day{visibility:hidden}.event-enabled{pointer-events:auto}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { 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: CalendarDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-day-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId',\n class: 'fd-calendar__dates'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FdTranslatePipe, NgClass], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--dates\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarDayViewDescription' | fdTranslate\\\"\\n>\\n <thead class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n role=\\\"columnheader\\\"\\n [attr.id]=\\\"_weekNumbersColumnHeaderId\\\"\\n [attr.aria-label]=\\\"'coreCalendar.weekColumnLabel' | fdTranslate\\\"\\n ></th>\\n }\\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"_weekHeaderClasses[i]\\\"\\n role=\\\"columnheader\\\"\\n [attr.aria-label]=\\\"longWeekDays[i]\\\"\\n (click)=\\\"handleWeekSelectionByIndex(i)\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">{{ day }}</span>\\n </div>\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\\\"\\n role=\\\"rowheader\\\"\\n scope=\\\"row\\\"\\n [attr.data-fd-calendar-week]=\\\"_weeks[rowIndex]\\\"\\n [attr.id]=\\\"viewId + '-week-' + _weeks[rowIndex]\\\"\\n [attr.aria-labelledby]=\\\"\\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\\n \\\"\\n (click)=\\\"handleWeekSelectionByDays(row)\\\"\\n >\\n @if (_weeks && _weeks[rowIndex]) {\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">\\n {{ _weeks[rowIndex] }}\\n </span>\\n </div>\\n }\\n </th>\\n }\\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\\n <td\\n class=\\\"fd-calendar__item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__item--selected]=\\\"cell.selectedFirst || cell.selectedLast || cell.selected\\\"\\n [class.fd-calendar__item--range]=\\\"\\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\\n \\\"\\n [class.fd-calendar__item--today]=\\\"cell.current\\\"\\n [class.fd-calendar__item--weekend]=\\\"\\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\\n \\\"\\n [class.fd-calendar__item--other]=\\\"cell.monthStatus !== 'current'\\\"\\n [class.is-disabled]=\\\"cell.disabled\\\"\\n [class]=\\\"\\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\\n : ''\\n \\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.data-fd-calendar-date-day]=\\\"cell.label\\\"\\n [attr.data-fd-calendar-day]=\\\"cell.index\\\"\\n [attr.aria-selected]=\\\"cell.selected\\\"\\n [attr.aria-disabled]=\\\"cell.disabled\\\"\\n [attr.tabindex]=\\\"cell.isTabIndexed ? 0 : -1\\\"\\n (click)=\\\"selectDate(cell, $event)\\\"\\n (mouseenter)=\\\"_refreshHoverRange(cell)\\\"\\n (keydown)=\\\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span\\n class=\\\"fd-calendar__text\\\"\\n role=\\\"button\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\\n (cell.past ? _dateInPastLabelId : '')\\n \\\"\\n >{{ cell.label }}</span\\n >\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n @if (_dayViewGrid.length <= 5) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n @if (_dayViewGrid.length === 4) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeStartLabelId\\\">{{ 'coreCalendar.rangeStartLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeEndLabelId\\\">{{ 'coreCalendar.rangeEndLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateInPastLabelId\\\">{{ 'coreCalendar.dayInPastLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\".hidden-day{visibility:hidden}.event-enabled{pointer-events:auto}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.CalendarLegendFocusingService }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i3.DatetimeAdapter }], propDecorators: { currentlyDisplayed: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], nextMonthSelect: [{\n type: Output\n }], previousMonthSelect: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWRheS12aWV3L2NhbGVuZGFyLWRheS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1kYXktdmlldy9jYWxlbmRhci1kYXktdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLEtBQUssRUFHTCxNQUFNLEVBRU4saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQW1CLE1BQU0sZ0NBQWdDLENBQUM7QUFFckcsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFHcEMsT0FBTyxFQUFFLDZCQUE2QixJQUFJLDZCQUE2QixFQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpE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QkFEdkIsTUFBTTtnQkFLRSxtQkFBbUI7c0JBRDNCLE1BQU07Z0JBS0Usa0JBQWtCO3NCQUQxQixNQUFNO2dCQUtFLDJCQUEyQjtzQkFEbkMsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsZ0NBQWdDO3NCQUR4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIGlucHV0LFxuICAgIG1vZGVsLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRldGltZUFkYXB0ZXIsIERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5pbXBvcnQgeyBTcGVjaWFsRGF5UnVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5cbmltcG9ydCB7IENhbGVuZGFyQ3VycmVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcbmltcG9ydCB7IEFjdGl2ZUNhbGVuZGFyRGF5Q2VsbFN0cmF0ZWd5IGFzIENhbGVuZGFyQWN0aXZlRGF5Q2VsbFN0cmF0ZWd5LCBDYWxlbmRhckRheSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci1kYXknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGUtcmFuZ2UnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyTGVnZW5kRm9jdXNpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXItbGVnZW5kL2NhbGVuZGFyLWxlZ2VuZC1mb2N1c2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlzYWJsZURhdGVGdW5jdGlvbiwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBDYWxlbmRhclR5cGUsIENhbGVuZGFyVHlwZUVudW0sIERheXNPZldlZWsgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKiBDb21wb25lbnQgcmVwcmVzZW50aW5nIHRoZSBkYXkgdmlldyBvZiB0aGUgY2FsZW5kYXIuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWRheS12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci1kYXktdmlldy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJyxcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhcl9fZGF0ZXMnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbRmRUcmFuc2xhdGVQaXBlLCBOZ0NsYXNzXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckRheVZpZXdDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICAvKiogQ3VycmVudGx5IGRpc3BsYXllZCBtb250aCBhbmQgeWVhciBmb3IgZGF5cyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN1cnJlbnRseURpc3BsYXllZChjdXJyZW50bHlEaXNwbGF5ZWQ6IENhbGVuZGFyQ3VycmVudCkge1xuICAgICAgICBpZiAoIWVxdWFsKGN1cnJlbnRseURpc3BsYXllZCwgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkKSkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0gY3VycmVudGx5RGlzcGxheWVkO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGREYXlWaWV3R3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnRseURpc3BsYXllZCgpOiBDYWxlbmRhckN1cnJlbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudGx5RGlzcGxheWVkO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gc2luZ2xlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgIGlmICh0aGlzLl9kYXlWaWV3R3JpZCkge1xuICAgICAgICAgICAgY29uc3QgZGF5RnJvbURhdGUgPSB0aGlzLl9jYWxlbmRhckRheUxpc3QuZmluZCgoZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIGRhdGUpKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkU2luZ2xlRGF5KGRheUZyb21EYXRlLCB0aGlzLl9jYWxlbmRhckRheUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkRGF0ZSgpOiBOdWxsYWJsZTxEPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGU7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCBpbiBtdWx0aXBsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkTXVsdGlwbGVEYXRlcyhkYXRlczogQXJyYXk8RD4pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gZGF0ZXM7XG4gICAgICAgIGlmIChkYXRlcyAmJiB0aGlzLl9kYXlWaWV3R3JpZCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZXMgPSB0aGlzLl9jYWxlbmRhckRheUxpc3QuZmlsdGVyKChkYXkpID0+XG4gICAgICAgICAgICAgICAgZGF0ZXM/LnNvbWUoKGRhdGUpID0+IHRoaXMuX2lzU2FtZURheShkYXkuZGF0ZSwgZGF0ZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZURheXMoZm9ybWF0dGVkRGF0ZXMsIHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRNdWx0aXBsZURhdGVzKCk6IE51bGxhYmxlPEFycmF5PEQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXM7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRmREYXRlcyBtb2RlbCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWRSYW5nZURhdGUoZGF0ZVJhbmdlOiBEYXRlUmFuZ2U8RD4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0ZVJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlICYmXG4gICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXkoZGF0ZVJhbmdlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSAmJlxuICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF5KGRhdGVSYW5nZS5lbmQsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IGRhdGVSYW5nZTtcbiAgICAgICAgaWYgKHRoaXMuX2RheVZpZXdHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFJhbmdlRGF5cyhkYXRlUmFuZ2UsIHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRSYW5nZURhdGUoKTogRGF0ZVJhbmdlPEQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiBtdWx0aXBsZSByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzKGRhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0ZVJhbmdlcyAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyAmJlxuICAgICAgICAgICAgZGF0ZVJhbmdlcy5sZW5ndGggPT09IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMubGVuZ3RoICYmXG4gICAgICAgICAgICBkYXRlUmFuZ2VzLmV2ZXJ5KFxuICAgICAgICAgICAgICAgIChyYW5nZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU2FtZURheShyYW5nZS5zdGFydCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpbmRleF0uc3RhcnQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU2FtZURheShyYW5nZS5lbmQsIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbaW5kZXhdLmVuZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBkYXRlUmFuZ2VzIHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5fZGF5Vmlld0dyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkTXVsdGlwbGVSYW5nZURheXMoZGF0ZVJhbmdlcywgdGhpcy5fY2FsZW5kYXJEYXlMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcygpOiBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIGFsd2F5cywgd2hlbiBuZXh0IG1vbnRoIGlzIHNlbGVjdGVkLCBieSBmb2N1cyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG5leHRNb250aFNlbGVjdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgYWx3YXlzLCB3aGVuIHByZXZpb3VzIG1vbnRoIGlzIHNlbGVjdGVkLCBieSBmb2N1cyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHByZXZpb3VzTW9udGhTZWxlY3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBkYXRlIGluIHNpbmdsZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgaW4gbXVsdGlwbGUgbW9kZSBhcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIG11bHRpcGxlIHJhbmdlIG1vZGUgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PERhdGVSYW5nZTxEPj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgQXJyYXk8RGF0ZVJhbmdlPEQ+PlxuICAgID4oKTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhci5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlIHR5cGVcbiAgICAgKi9cbiAgICBkaXNhYmxlRnVuY3Rpb24gPSBtb2RlbDxEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGZvciB0aGUgcmFuZ2Ugc3RhcnQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBkaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uID0gbW9kZWw8RGlzYWJsZURhdGVGdW5jdGlvbjxEPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIGVuZCBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSByZXByZXNlbnRhdGlvblxuICAgICAqL1xuICAgIGRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uID0gbW9kZWw8RGlzYWJsZURhdGVGdW5jdGlvbjxEPj4oKTtcblxuICAgIC8qKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgb24uIDEgcmVwcmVzZW50cyBTdW5kYXksIDIgaXMgTW9uZGF5LCAzIGlzIFR1ZXNkYXksIGFuZCBzbyBvbi4gKi9cbiAgICBzdGFydGluZ0RheU9mV2VlayA9IG1vZGVsPERheXNPZldlZWs+KCk7XG5cbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBjYWxUeXBlID0gbW9kZWw8Q2FsZW5kYXJUeXBlPihDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSk7XG5cbiAgICAvKiogSWQgb2YgdGhlIGNhbGVuZGFyLiBJZiBub25lIGlzIHByb3ZpZGVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuICovXG4gICAgaWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBJZCBvZiB0aGUgYXNzb2NpYXRlZCBsZWdlbmQsIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY2FsZW5kYXIgY29tcG9uZW50LiAqL1xuICAgIGFzc29jaWF0ZWRMZWdlbmRJZCA9IGlucHV0PHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIGRheSBjZWxscyBvbiBob3Zlci5cbiAgICAgKiBXb3JrcyBvbmx5IG9uIHJhbmdlIG1vZGUsIHdoZW4gc3RhcnQgZGF0ZSBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIG1hcmtXZWVrZW5kcyA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBzaG93IHdlZWsgbnVtYmVycyBuZXh0IHRvIGRheXNcbiAgICAgKi9cbiAgICBzaG93V2Vla051bWJlcnMgPSBpbnB1dCh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVzZXIgd2FudHMgdG8gc2VsZWN0IG11bHRpcGxlIGRheXMgb3IgbXVsdGlwbGUgcmFuZ2UgZGF0ZXMuXG4gICAgICogSWYgYGRpc3BsYXlXZWVrTnVtYmVyc2AgaXMgdHJ1ZSwgdGhlIHVzZXIgY2FuIGNsaWNrIG9uIHRoZSB3ZWVrIG51bWJlciB0byBtYXJrIHRoZSByZWxhdGVkIHJvdy5cbiAgICAgKiBUaGUgdXNlciBjYW4gY2xpY2sgb24gd2VlayBkYXlzIHRvIG1hcmsgdGhlIHJlbGF0ZWQgY29sdW1uLlxuICAgICAqIE5vdGU6IENsaWNrYWJsZSBzZWxlY3Rpb24gZm9yIHdlZWsgcm93IG9yIGNvbHVtbiBkb2VzIG5vdCB3b3JrIGZvciByYW5nZSBzZWxlY3Rpb25zLlxuICAgICAqL1xuICAgIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24gPSBtb2RlbChmYWxzZSk7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gc3BlY2lmeSB3aGljaCBmdW5jdGlvbiB3b3VsZCBiZSBjYWxsZWQsIHdoZW4gZm9jdXMgd2FudHMgdG8gZXNjYXBlICovXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbiA9IGlucHV0PEVzY2FwZUZvY3VzRnVuY3Rpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIGRhdGUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLiBleDpcbiAgICAgKiBgcnVsZTogKGRhdGU6IEQpID0+IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF5KGRhdGUpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIHNwZWNpYWxEYXlzUnVsZXMgPSBpbnB1dDxTcGVjaWFsRGF5UnVsZTxEPltdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWN0dWFsIGRheSBncmlkIHdpdGggcHJldmlvdXMvY3VycmVudC9uZXh0IG1vbnRoIGRheXNcbiAgICAgKi9cbiAgICBfZGF5Vmlld0dyaWQ6IENhbGVuZGFyRGF5PEQ+W11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBcnJheSBvZiB3ZWVrIG51bWJlcnMgZGlzcGxheWVkIGZvciBjdXJyZW50IG1vbnRoL3llYXJcbiAgICAgKi9cbiAgICBfd2Vla3M6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFycmF5IG9mIENTUyBjbGFzc2VzIGZvciBlYWNoIHdlZWsgZGF5IGluIGNhbGVuZGFyIGhlYWRlciwgY29tcHV0ZWQgYmFzZWQgb24gd2hldGhlciB0aGUgY2FsZW5kYXIgdHlwZSBpcyAnbXVsdGknXG4gICAgICogYW5kIHRoZSBkYXRlIGlzIG5vdCBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBfd2Vla0hlYWRlckNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkTXVsdGlwbGVEYXRlczogQXJyYXk8RD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXlzIHBlciB3ZWVrXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZDb2xzID0gNztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzT25SYW5nZVBpY2sgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzSW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHRoYXQgY29udGFpbnMgc2hvcnQgd2Vla2RheSBuYW1lcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG9ydFdlZWtEYXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWYXJpYWJsZSB0aGF0IGNvbnRhaW5zIHNob3J0IHdlZWtkYXkgbmFtZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbG9uZ1dlZWtEYXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBnbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIG5ldyByYW5nZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9uZXdSYW5nZTogeyBzdGFydDogRCB8IG51bGw7IGVuZDogRCB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGVnZW5kRm9jdXNlZFNlcnZpY2U6IENhbGVuZGFyTGVnZW5kRm9jdXNpbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHVibGljIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPlxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzSW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hTaG9ydFdlZWtEYXlzKCk7XG5cbiAgICAgICAgdGhpcy5fYnVpbGREYXlWaWV3R3JpZCgpO1xuXG4gICAgICAgIHRoaXMuX2NvbXB1dGVXZWVrSGVhZGVyQ2xhc3NlcygpO1xuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFNob3J0V2Vla0RheXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkRGF5Vmlld0dyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxlZ2VuZEZvY3VzZWRTZXJ2aWNlLmZvY3VzZWRMZWdlbmRJdGVtU3ViamVjdCRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgbGVnZW5kSWQsIHNwZWNpYWxEYXlOdW1iZXIgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghc3BlY2lhbERheU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sZWdlbmRCbHVycmVkKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWdlbmRJZCAhPT0gbnVsbCAmJiBzcGVjaWFsRGF5TnVtYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25MZWdlbmRzRGF5KGxlZ2VuZElkLCBzcGVjaWFsRGF5TnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLyoqIENoYW5nZXMgb2YgdGhvc2UgcHJvcGVydGllcyBhcmUgZG9uZSBpbnNpZGUgaXRzIHNldHRlcnMgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNoYW5nZXNbJ3NlbGVjdGVkRGF0ZSddICYmXG4gICAgICAgICAgICAhY2hhbmdlc1snc2VsZWN0ZWRNdWx0aXBsZURhdGVzJ10gJiZcbiAgICAgICAgICAgICFjaGFuZ2VzWydzZWxlY3RlZFJhbmdlRGF0ZSddICYmXG4gICAgICAgICAgICAhY2hhbmdlc1snY3VycmVudGx5RGlzcGxheWVkJ11cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9idWlsZERheVZpZXdHcmlkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3N0YXJ0aW5nRGF5T2ZXZWVrJ10pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTaG9ydFdlZWtEYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NwZWNpYWxEYXlzUnVsZXMnXSkge1xuICAgICAgICAgICAgdGhpcy5fYnVpbGREYXlWaWV3R3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdHMgYSBkYXRlIGluIHNpbmdsZSBtb2RlLCB0b2dnbGVzIHNlbGVjdGlvbiBpbiBtdWx0aSBtb2RlLCBvciBzZXRzIHRoZSByYW5nZSBpbiByYW5nZSBtb2RlLlxuICAgICAqIEhhbmRsZXMgdGhlIHNlbGVjdGlvbiBvZiBhIGRhdGUgYmFzZWQgb24gdGhlIGNhbGVuZGFyIHR5cGUuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRvIGJlIHNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSBldmVudCBPcHRpb25hbCBtb3VzZSBldmVudCBmb3IgaGFuZGxpbmcgZXZlbnQgcHJvcGFnYXRpb24uXG4gICAgICovXG4gICAgc2VsZWN0RGF0ZShkYXk6IENhbGVuZGFyRGF5PEQ+LCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRheS5kaXNhYmxlZCB8fCBkYXkuYmxvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxUeXBlKCkgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlTXVsdGlEYXRlKGRheSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0TXVsdGlwbGVSYW5nZURhdGVzKGRheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxUeXBlKCkgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0U2luZ2xlRGF0ZShkYXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbFR5cGUoKSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5SYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlRGF0ZShkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBvZiBhIHdlZWsgb24gdGhlIGNhbGVuZGFyLlxuICAgICAqIElmIHRoZSBwcm92aWRlZCB3ZWVrIGlzIGFscmVhZHkgZnVsbHkgc2VsZWN0ZWQsIGl0IHdpbGwgZGVzZWxlY3QgaXQuXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHdlZWsgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLCBpdCB3aWxsIHNlbGVjdCB0aGUgZW50aXJlIHdlZWsgYW5kIGNsZWFyIGFueSBwcmV2aW91cyBzZWxlY3Rpb25zLlxuICAgICAqIEBwYXJhbSBzZWxlY3RlZFdlZWsgQXJyYXkgb2YgQ2FsZW5kYXJEYXkgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBoYW5kbGVXZWVrU2VsZWN0aW9uQnlEYXlzKHNlbGVjdGVkV2VlazogQXJyYXk8Q2FsZW5kYXJEYXk8RD4+KTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlV2Vla1NlbGVjdGlvbihzZWxlY3RlZFdlZWspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBvZiBhIHdlZWsgb24gdGhlIGNhbGVuZGFyIGJhc2VkIG9uIHRoZSB3ZWVrZGF5IGluZGV4LlxuICAgICAqIElmIHRoZSBwcm92aWRlZCB3ZWVrIGlzIGFscmVhZHkgZnVsbHkgc2VsZWN0ZWQsIGl0IHdpbGwgZGVzZWxlY3QgaXQuXG4gICAgICogSWYgdGhlIHByb3ZpZGVkIHdlZWsgaXMgbm90IGZ1bGx5IHNlbGVjdGVkLCBpdCB3aWxsIHNlbGVjdCB0aGUgZW50aXJlIHdlZWsgYW5kIGNsZWFyIGFueSBwcmV2aW91cyBzZWxlY3Rpb25zLlxuICAgICAqIEBwYXJhbSB3ZWVrRGF5SW5kZXggVGhlIGluZGV4IG9mIHRoZSB3ZWVrZGF5IHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgaGFuZGxlV2Vla1NlbGVjdGlvbkJ5SW5kZXgod2Vla0RheUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRXZWVrOiBBcnJheTxDYWxlbmRhckRheTxEPj4gPSB0aGlzLl9kYXlWaWV3R3JpZC5tYXAoKHJvdykgPT4gcm93W3dlZWtEYXlJbmRleF0pO1xuICAgICAgICB0aGlzLnRvZ2dsZVdlZWtTZWxlY3Rpb24oc2VsZWN0ZWRXZWVrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZm9jdXMgb24gZGVmYXVsdCBmb2N1c2FibGUgY2VsbFxuICAgICAqL1xuICAgIHNldEZvY3VzT25DZWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IG5ldyBDYWxlbmRhckFjdGl2ZURheUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fY2FsZW5kYXJEYXlMaXN0KTtcbiAgICAgICAgaWYgKCFjZWxsVG9Gb2N1cz8uaW5kZXggJiYgY2VsbFRvRm9jdXM/LmluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c09uQ2VsbEJ5SW5kZXgoY2VsbFRvRm9jdXMuaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3JlZnJlc2hIb3ZlclJhbmdlKGRheTogQ2FsZW5kYXJEYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aVJhbmdlSG92ZXIoZGF5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNpbmdsZVJhbmdlSG92ZXIoZGF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgQW1vdW50IG9mIHNlbGVjdGVkIGRheXNcbiAgICAgKiAgMCwgd2hlbiB0aGVyZSBpcyBubyBkYXkgc2VsZWN0ZWQsIG9yIHN0YXJ0IGRhdGUgaXMgaW52YWxpZCxcbiAgICAgKiAgMSwgd2hlbiB0aGVyZSBpcyBvbmx5IHZhbGlkIHN0YXJ0IGRhdGUsIG9yIGVuZCBkYXRlIGlzIHNhbWUgYXMgc3RhcnQgZGF0ZSxcbiAgICAgKiAgMiwgd2hlbiBib3RoIGRhdGVzIGFyZSB2YWxpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0Q291bnRlcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0ICYmXG4gICAgICAgICAgICAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2lzU2FtZURheSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb3RhbCBhbW91bnQgb2Ygc2VsZWN0ZWQgZGF5cyBhY3Jvc3MgbXVsdGlwbGUgcmFuZ2VzLlxuICAgICAqIFN1bXMgdGhlIGNvdW50cyBvZiB2YWxpZCBkYXlzIGluIGVhY2ggZGF0ZSByYW5nZS5cbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdE11bHRpcGxlQ291bnRlcigpOiBudW1iZXIge1xuICAgICAgICBsZXQgY291bnRlciA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLnJlZHVjZSgoY291bnQsIHJhbmdlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJhbmdlLmVuZCkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIC8vIEFjY291bnQgZm9yIHRoZSBuZXdSYW5nZVxuICAgICAgICBpZiAodGhpcy5fbmV3UmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXdSYW5nZS5zdGFydCkge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXdSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBzaG9ydCB3ZWVrZGF5IG5hbWUuXG4gICAgICogQ2FuIGJlIGNoYW5nZWQgYnkgdXNlciBieSBwcm92aWRpbmcgb3RoZXIgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBEYXRldGltZUFkYXB0ZXJcbiAgICAgKi9cbiAgICBnZXQgc2hvcnRXZWVrRGF5cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG9ydFdlZWtEYXlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIHdlZWtkYXkgbmFtZS5cbiAgICAgKiBDYW4gYmUgY2hhbmdlZCBieSB1c2VyIGJ5IHByb3ZpZGluZyBvdGhlciBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIERhdGV0aW1lQWRhcHRlclxuICAgICAqL1xuICAgIGdldCBsb25nV2Vla0RheXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ1dlZWtEYXlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGdW5jdGlvbiB0aGF0IGdpdmVzIGFycmF5IG9mIGFsbCBkaXNwbGF5ZWQgQ2FsZW5kYXJEYXlzXG4gICAgICovXG4gICAgZ2V0IF9jYWxlbmRhckRheUxpc3QoKTogQ2FsZW5kYXJEYXk8RD5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlWaWV3R3JpZC5yZWR1Y2UoKHRvdGFsQ2FsZW5kYXJSb3dzOiBDYWxlbmRhckRheTxEPltdLCBjYWxlbmRhclJvdzogQ2FsZW5kYXJEYXk8RD5bXSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYWxlbmRhclJvdykge1xuICAgICAgICAgICAgICAgIGNhbGVuZGFyUm93ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG90YWxDYWxlbmRhclJvd3MuY29uY2F0KGNhbGVuZGFyUm93KTtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZpZXcgSURcbiAgICAgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkKCkgKyAnLWRheS12aWV3JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2VlayBjb2x1bW4gaGVhZGVyIElEXG4gICAgICovXG4gICAgZ2V0IF93ZWVrTnVtYmVyc0NvbHVtbkhlYWRlcklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctd2Vlay1jb2x1bW4taGVhZGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9kYXkgY2VsbCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfdG9kYXlMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctdG9kYXktbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RlZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RlZERhdGVMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctc2VsZWN0ZWQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERhdGUgcmFuZ2Ugc3RhcnQgZGF0ZSBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfZGF0ZVJhbmdlU3RhcnRMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctcmFuZ2Utc3RhcnQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERhdGUgcmFuZ2UgZW5kIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX2RhdGVSYW5nZUVuZExhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1yYW5nZS1lbmQtZGF0ZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERhdGUgaW4gcGFzdCBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfZGF0ZUluUGFzdExhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1kYXktaW4tcGFzdC1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZXMgZGF5IGNlbGxzIGtleWRvd24gZXZlbnRzLFxuICAgICAqIEBwYXJhbSBldmVudCBLZXlib2FyZEV2ZW50XG4gICAgICogQHBhcmFtIGNlbGwgQ2FsZW5kYXJEYXlcbiAgICAgKiBAcGFyYW0gaW5kZXggd2l0aCBzcGVjaWZpZWQgY29sdW1uIGFuZCByb3cgYXMgYSB4IGFuZCB5XG4gICAgICovXG4gICAgX29uS2V5ZG93bkRheUhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNlbGw6IENhbGVuZGFyRGF5PEQ+LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uKCkhKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uS2V5ZG93bkhhbmRsZXIoZXZlbnQsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgTWV0aG9kIHRoYXQgYWxsb3cgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50U2VsZWN0b3IpO1xuICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXM/LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFN0YW5kYXJkaXplZCBtZXRob2QgdG8gY2FsY3VsYXRlIGdyaWQgW3hdW3ldIHRvIGluZGV4IG51bWJlciBvZiBmbGF0dGVuIGxpc3RcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyU2VydmljZS5nZXRJZChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBzZWxlY3RzIHByZXZpb3VzIG1vbnRoXG4gICAgICogVHJpZ2dlcmVkIG9ubHkgd2hlbiB0aGUgbW9udGggaXMgY2hhbmdlZCBkdXJpbmcgY2hhbmdpbmcgZm9jdXNcbiAgICAgKiBBbHNvIHRyaWdnZXJzIGV2ZW50IHRvIHBhcmVudCBjYWxlbmRhciBjb21wb25lbnQgYW5kIHJlYnVpbGRzIGRheSB2aWV3IGdyaWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB0aGlzLl9nZXRQcmV2aW91c01vbnRoKCk7XG4gICAgICAgIHRoaXMuX2J1aWxkRGF5Vmlld0dyaWQoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c01vbnRoU2VsZWN0LmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgc2VsZWN0cyBuZXh0IG1vbnRoXG4gICAgICogVHJpZ2dlcmVkIG9ubHkgd2hlbiB0aGUgbW9udGggaXMgY2hhbmdlZCBkdXJpbmcgY2hhbmdpbmcgZm9jdXNcbiAgICAgKiBBbHNvIHRyaWdnZXJzIGV2ZW50IHRvIHBhcmVudCBjYWxlbmRhciBjb21wb25lbnQgYW5kIHJlYnVpbGRzIGRheSB2aWV3IGdyaWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3ROZXh0TW9udGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHRoaXMuX2dldE5leHRNb250aCgpO1xuICAgICAgICB0aGlzLl9idWlsZERheVZpZXdHcmlkKCk7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoU2VsZWN0LmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzT25MZWdlbmRzRGF5KGxlZ2VuZElkOiBOdWxsYWJsZTxzdHJpbmc+LCBzcGVjaWFsRGF5TnVtYmVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRlZExlZ2VuZElkID0gdGhpcy5hc3NvY2lhdGVkTGVnZW5kSWQoKTtcblxuICAgICAgICBpZiAobGVnZW5kSWQgJiYgYXNzb2NpYXRlZExlZ2VuZElkICYmIGFzc29jaWF0ZWRMZWdlbmRJZCA9PT0gbGVnZW5kSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RheVZpZXdHcmlkLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5mb3JFYWNoKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGF5LnNob3VsZEhpZGVTcGVjaWFsRGF5TWFya2VyID0gZGF5LnNwZWNpYWxEYXlOdW1iZXIgIT09IHNwZWNpYWxEYXlOdW1iZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sZWdlbmRCbHVycmVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXlWaWV3R3JpZC5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICBkYXkuc2hvdWxkSGlkZVNwZWNpYWxEYXlNYXJrZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNyZWF0ZXMgYXJyYXkgb2YgQ2FsZW5kYXJEYXkgbW9kZWxzIHdoaWNoIHdpbGwgYmUgc2hvd24gb24gZGF5IGdyaWQsXG4gICAgICogZGVwZW5kaW5nIG9uIGN1cnJlbnQgbW9udGggYW5kIHllYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcG9wdWxhdGVDYWxlbmRhcigpOiBDYWxlbmRhckRheTxEPltdIHtcbiAgICAgICAgbGV0IGNhbGVuZGFyOiBDYWxlbmRhckRheTxEPltdID0gW107XG5cbiAgICAgICAgY2FsZW5kYXIgPSB0aGlzLl9nZXRQcmV2aW91c01vbnRoRGF5cyhjYWxlbmRhcik7XG4gICAgICAgIGNhbGVuZGFyID0gY2FsZW5kYXIuY29uY2F0KHRoaXMuX2dldEN1cnJlbnRNb250aERheXMoKSk7XG4gICAgICAgIGNhbGVuZGFyID0gdGhpcy5fZ2V0TmV4dE1vbnRoRGF5cyhjYWxlbmRhcik7XG5cbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoY2FsbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY2FsbC5pZCA9IHRoaXMuX2dldENlbGxJZEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgY2FsbC5pbmRleCA9IGluZGV4O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbFR5cGUoKSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUgJiYgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2RheXMgPSBjYWxlbmRhci5maWx0ZXIoKGRheSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzPy5zb21lKChkYXRlKSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIGRhdGUpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZURheXMoX2RheXMsIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZVJhbmdlRGF5cyh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcywgY2FsZW5kYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSAmJiB0aGlzLl9zZWxlY3RlZERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfZGF5ID0gY2FsZW5kYXIuZmluZCgoZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIHRoaXMuX3NlbGVjdGVkRGF0ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkU2luZ2xlRGF5KF9kYXksIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZURheXModGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUsIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgYnVpbGRzIDIgZGltZW5zaW9ucyBkYXkgdmlldyBncmlkLCBhbHNvIHNldHMgdXAgY3VycmVudGx5IGRpc3BsYXllZCBtb250aCwgb3IgeWVhcixcbiAgICAgKiB3aGVuIHRoZXJlIGlzIG5vdCBhbnkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYnVpbGREYXlWaWV3R3JpZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRseURpc3BsYXllZCB8fCB0aGlzLl9pc0ludmFsaWREYXRlKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWREYXRlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodG9kYXkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHRoaXMuX3BvcHVsYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgY29uc3QgZGF5Vmlld0dyaWQ6IENhbGVuZGFyRGF5PEQ+W11bXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChjYWxlbmRhckRheXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF5Vmlld0dyaWQucHVzaChjYWxlbmRhckRheXMuc3BsaWNlKDAsIHRoaXMuX2Ftb3VudE9mQ29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gZGF5Vmlld0dyaWQubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuX2RheVZpZXdHcmlkID0gZGF5Vmlld0dyaWQ7XG4gICAgICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fcmVmcmVzaFdlZWtDb3VudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNJbnZhbGlkRGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzTmFOKHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIpIHx8IGlzTmFOKHRoaXMuY3VycmVudGx5RGlzcGxheWVkLm1vbnRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IGlkIG9mIGNhbGVuZGFyJ3MgZGF5IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRDZWxsSWRCeUluZGV4KGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWRheS0nICsgaW5kZXggKyAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHdoaWNoIHByb3ZpZGVzIGFycmF5IG9mIENhbGVuZGFyRGF5LFxuICAgICAqIHdoaWNoIGNvbnRhaW5zIGV2ZXJ5IHNpbmdsZSBkYXkgb2YgY3VycmVudGx5IHNob3duIG1vbnRoL3llYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VycmVudE1vbnRoRGF5cygpOiBDYWxlbmRhckRheTxEPltdIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aDtcbiAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXI7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF5czogQ2FsZW5kYXJEYXk8RD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhbW91bnRPZkRheXNJbkN1cnJlbnRNb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICAgICAgZm9yIChsZXQgZGF5TnVtYmVyID0gMTsgZGF5TnVtYmVyIDw9IGFtb3VudE9mRGF5c0luQ3VycmVudE1vbnRoOyBkYXlOdW1iZXIrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZTogRCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXlOdW1iZXIpO1xuICAgICAgICAgICAgY2FsZW5kYXJEYXlzLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2dldERheShkYXRlKSxcbiAgICAgICAgICAgICAgICBtb250aFN0YXR1czogJ2N1cnJlbnQnLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHRoaXMuX2lzU2FtZURheShub3csIGRhdGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5fZ2V0QWN0aXZlQ2VsbChjYWxlbmRhckRheXMpO1xuICAgICAgICBjZWxsICYmIChjZWxsLmlzVGFiSW5kZXhlZCA9IHRydWUpO1xuICAgICAgICByZXR1cm4gY2FsZW5kYXJEYXlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFjdGl2ZSBjZWxsLCB3aGljaCBtZWFuczpcbiAgICAgKiBpZiB0aGVyZSBpcyBhbnkgc2VsZWN0ZWQgZGF5LCByZXR1cm4gc2VsZWN0ZWQgZGF5XG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgZGF5LCBidXQgdGhlcmUgaXMgdG9kYXkgZGF5LCByZXR1cm4gdG9kYXkgZGF5XG4gICAgICogaWYgdGhlcmUgaXMgbm8gdG9kYXksIG9yIHNlbGVjdGVkLCByZXR1cm4gZmlyc3Qgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlQ2VsbChjYWxlbmRhckRheXM6IENhbGVuZGFyRGF5PEQ+W10pOiBDYWxlbmRhckRheTxEPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gbmV3IENhbGVuZGFyQWN0aXZlRGF5Q2VsbFN0cmF0ZWd5PEQ+KCkuZ2V0QWN0aXZlQ2VsbChjYWxlbmRhckRheXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2Qgd2hpY2ggcHJvdmlkZXMgYXJyYXkgb2YgQ2FsZW5kYXJEYXksXG4gICAgICogd2hpY2ggY29udGFpbnMgbGFzdCAwLTYgZGF5cyBvZiBwcmV2aW91cyBtb250aC95ZWFyLiBUaGVzZXMgZGF5c1xuICAgICAqIGZpbGxzIHRoZSBnYXAgYmV0d2VlbiBzdGFydGluZyBzdGFydGluZ0RheU9mV2VlayBhbmQgZmlyc3QgZGF5IG9mIGN1cnJlbnQgbW9udGhcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRQcmV2aW91c01vbnRoRGF5cyhjYWxlbmRhckRheXM6IENhbGVuZGFyRGF5PEQ+W10pOiBDYWxlbmRhckRheTxEPltdIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCA+IDEgPyB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCAtIDEgOiAxMjtcbiAgICAgICAgY29uc3QgeWVhciA9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCA+IDEgPyB0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyIDogdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciAtIDE7XG4gICAgICAgIGNvbnN0IGFtb3VudE9mRGF5c0luQ3VycmVudE1vbnRoOiBudW1iZXIgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTGFzdERhdGUgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgYW1vdW50T2ZEYXlzSW5DdXJyZW50TW9udGgpO1xuICAgICAgICBjb25zdCBwcmV2TW9udGhMYXN0RGF5ID0gYW1vdW50T2ZEYXlzSW5DdXJyZW50TW9udGg7XG4gICAgICAgIGxldCBwcmV2TW9udGhMYXN0V2Vla0RheSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXREYXlPZldlZWsocHJldk1vbnRoTGFzdERhdGUpIC0gdGhpcy5zdGFydGluZ0RheU9mV2VlaygpITtcblxuICAgICAgICAvKiogQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIHNvbWUgZGF5cyBjdXQgYnkgc3RhcnRpbmdEYXlPZldlZWsgb3B0aW9uXG4gICAgICAgICAqICBJZiB5ZXMsIHRoZXJlIGlzIHdob2xlIHdlZWsgYWRkZWQsIHRvIGF2b2lkIGhpZGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHByZXZNb250aExhc3RXZWVrRGF5IDwgMCkge1xuICAgICAgICAgICAgcHJldk1vbnRoTGFzdFdlZWtEYXkgPSBwcmV2TW9udGhMYXN0V2Vla0RheSArIDc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldk1vbnRoTGFzdFdlZWtEYXkgPCA2KSB7XG4gICAgICAgICAgICB3aGlsZSAocHJldk1vbnRoTGFzdFdlZWtEYXkgPj0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZNb250aERheSA9IHByZXZNb250aExhc3REYXkgLSBwcmV2TW9udGhMYXN0V2Vla0RheTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIHByZXZNb250aERheSk7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXJEYXlzLnB1c2goeyAuLi50aGlzLl9nZXREYXkoZGF0ZSksIG1vbnRoU3RhdHVzOiAncHJldmlvdXMnIH0pO1xuICAgICAgICAgICAgICAgIHByZXZNb250aExhc3RXZWVrRGF5LS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyRGF5cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHdoaWNoIHByb3ZpZGVzIGFycmF5IG9mIENhbGVuZGFyRGF5LCB3aGljaCBjb250YWlucyBmaXJzdCBkYXlzIG9mIG5leHQgbW9udGgveWVhci4gVGhlc2VzIGRheXNcbiAgICAgKiBmaWxscyB0aGUgZ2FwIGJldHdlZW4gbGFzdCBkYXkgb2YgY3VycmVudCBkYXkgYW5kIGVuZCBvZiA2LXdlZWtzIGNhbGVuZGFyIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dE1vbnRoRGF5cyhjYWxlbmRhckRheXM6IENhbGVuZGFyRGF5PEQ+W10pOiBDYWxlbmRhckRheTxEPltdIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCA8IDEyID8gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggKyAxIDogMTtcbiAgICAgICAgY29uc3QgeWVhciA9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCA8IDEyID8gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciA6IHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxO1xuXG4gICAgICAgIC8vIFRoZSBjYWxlbmRhciBncmlkIGNhbiBoYXZlIDUgKDM1IGRheXMpIG9yIDYgKDQyIGRheXMpIHdlZWtzXG4gICAgICAgIGNvbnN0IG5leHRNb250aERpc3BsYXllZERheXMgPSAoNDIgLSBjYWxlbmRhckRheXMubGVuZ3RoKSAlIDc7XG5cbiAgICAgICAgZm9yIChsZXQgbmV4dEQgPSAxOyBuZXh0RCA8PSBuZXh0TW9udGhEaXNwbGF5ZWREYXlzOyBuZXh0RCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIG5leHREKTtcbiAgICAgICAgICAgIGNhbGVuZGFyRGF5cy5wdXNoKHsgLi4udGhpcy5fZ2V0RGF5KGRhdGUpLCBtb250aFN0YXR1czogJ25leHQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhckRheXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1dlZWtlbmREYXkoZGF5T2ZXZWVrOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGRheU9mV2VlayA9PT0gMSB8fCBkYXlPZldlZWsgPT09IDc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGdlbmVyYXRlcyB3aG9sZSBkYXkgbW9kZWwgYmFzaW5nIG9uIGRhdGUsIGRpc2FibGluZyBmdW5jdGlvbnMsIGJsb2NrIGZ1bmN0aW9ucywgYW5kIGFjdHVhbGx5XG4gICAgICogY2hvc2VuIHJhbmdlIC8gc2luZ2xlIGRhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RGF5KGRhdGU6IEQpOiBDYWxlbmRhckRheTxEPiB7XG4gICAgICAgIGNvbnN0IHdlZWtEYXkgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICBjb25zdCBkYXlPZk1vbnRoID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERhdGUoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICAgICAgY29uc3QgaXNQYXN0ID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUsIHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKSA8IDA7XG4gICAgICAgIGNvbnN0IGRheTogQ2FsZW5kYXJEYXk8RD4gPSB7XG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgbGFiZWw6IGRhdGVOYW1lc1tkYXlPZk1vbnRoIC0gMV0sXG4gICAgICAgICAgICB3ZWVrRGF5LFxuICAgICAgICAgICAgd2Vla2VuZDogdGhpcy5faXNXZWVrZW5kRGF5KHdlZWtEYXkpLFxuICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KGRhdGUsIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LmRhdGVBMTF5TGFiZWwpLFxuICAgICAgICAgICAgc3BlY2lhbERheU51bWJlcjogdGhpcy5fZ2V0U3BlY2lhbERheShkYXRlKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBwYXN0OiBpc1Bhc3RcbiAgICAgICAgfTtcblxuICAgICAgICAvKiogQXBwbHkgZGlzYWJsZWQgc3RhdGUgdG8gZGF5cyBtYXJrZWQgd2l0aCBwYXNzZWQgZnVuY3Rpb24gKi9cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUZ1bmN0aW9uKCkpIHtcbiAgICAgICAgICAgIGRheS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZUZ1bmN0aW9uKCkhKGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgY2FsbGVkIHRvIHJlZnJlc2ggaTE4biBzaG9ydCB3ZWVrIGRheXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaFNob3J0V2Vla0RheXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNob3J0RGF5T2ZXZWVrTmFtZXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ3Nob3J0Jyk7XG4gICAgICAgIGNvbnN0IGRheU9mV2Vla05hbWVzID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCdsb25nJyk7XG5cbiAgICAgICAgdGhpcy5fc2hvcnRXZWVrRGF5cyA9IHNob3J0RGF5T2ZXZWVrTmFtZXNcbiAgICAgICAgICAgIC5zbGljZSh0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrKCkhIC0gMSlcbiAgICAgICAgICAgIC5jb25jYXQoc2hvcnREYXlPZldlZWtOYW1lcy5zbGljZSgwLCB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrKCkhIC0gMSkpO1xuXG4gICAgICAgIHRoaXMuX2xvbmdXZWVrRGF5cyA9IGRheU9mV2Vla05hbWVzXG4gICAgICAgICAgICAuc2xpY2UodGhpcy5zdGFydGluZ0RheU9mV2VlaygpISAtIDEpXG4gICAgICAgICAgICAuY29uY2F0KGRheU9mV2Vla05hbWVzLnNsaWNlKDAsIHRoaXMuc3RhcnRpbmdEYXlPZldlZWsoKSEgLSAxKSk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldHMgc3BlY2lhbCBkYXkgbnVtYmVyIG9mIHNwZWNpZmllZCBkYXRlIG1vZGVsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0U3BlY2lhbERheShkYXRlOiBEKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxEYXkgPSB0aGlzLnNwZWNpYWxEYXlzUnVsZXMoKS5maW5kKChzcGVjaWFsRGF5UnVsZSkgPT4gc3BlY2lhbERheVJ1bGUucnVsZShkYXRlKSk7XG4gICAgICAgIGlmIChzcGVjaWFsRGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gc3BlY2lhbERheS5zcGVjaWFsRGF5TnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGFycmF5IG9mIHdlZWsncyBjb3VudFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hXZWVrQ291bnQoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBjYWxlbmRhckRheUxpc3QgPSB0aGlzLl9jYWxlbmRhckRheUxpc3Q7XG4gICAgICAgIGNvbnN0IHdlZWtOdW1iZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDY7IGluZGV4IDwgY2FsZW5kYXJEYXlMaXN0Lmxlbmd0aDsgaW5kZXggPSBpbmRleCArIDYpIHtcbiAgICAgICAgICAgIHdlZWtOdW1iZXJzLnB1c2godGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFdlZWtOYW1lKGNhbGVuZGFyRGF5TGlzdFtpbmRleF0uZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3ZWVrTnVtYmVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2V0IHllYXIgYW5kIG1vbnRoIGZvciBwcmV2aW91cyB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNNb250aCgpOiBDYWxlbmRhckN1cnJlbnQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIsIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciAtIDEsIG1vbnRoOiAxMiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCB5ZWFyIGFuZCBtb250aCBmb3IgbmV4dCB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dE1vbnRoKCk6IENhbGVuZGFyQ3VycmVudCB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuIHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIsIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggKyAxIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciArIDEsIG1vbnRoOiAxIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHB1dCBjb25maWd1cmF0aW9uIGFuZCBsaXN0ZW5lcnMgb24gY2FsZW5kYXIga2V5Ym9hcmQgc2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jb2xBbW91bnQgPSB0aGlzLl9hbW91bnRPZkNvbHM7XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbigpITtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5vbkZvY3VzSWRDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIb3ZlclJhbmdlKHRoaXMuX2NhbGVuZGFyRGF5TGlzdFtpbmRleF0pO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGluZGV4LCBldmVudCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy5fY2FsZW5kYXJEYXlMaXN0W2luZGV4XSwgZXZlbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RQcmV2aW91c01vbnRoKCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENhbGN1bGF0ZSBmb2N1c2VkIGNlbGwgaW4gbmV3IGdyaWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxNb250aCA9IHRoaXMuX2dldE5leHRNb250aCgpOyAvLyBtb250aCB0aGF0IHdhcyBiZWZvcmUgbW92aW5nIGJhY2tcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQW1vdW50T2ZXZWVrcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRBbW91bnRPZldlZWtzKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTW9udGgueWVhcixcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1vbnRoLm1vbnRoLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRpbmdEYXlPZldlZWsoKSFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBwcmV2TW9udGhBbW91bnRPZldlZWtzID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldEFtb3VudE9mV2Vla3MoXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIsXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRpbmdEYXlPZldlZWsoKSFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHJlbmRlcmluZyBmb3IgbmV3IGdyaWQgc28gZm9jdXMgY2FuIGJlIHNldFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXggLSA3ICogKG9yaWdpbmFsQW1vdW50T2ZXZWVrcyAtIHByZXZNb250aEFtb3VudE9mV2Vla3MpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdE5leHRNb250aCgpO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciByZW5kZXJpbmcgZm9yIG5ldyBncmlkIHNvIGZvY3VzIGNhbiBiZSBzZXRcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoYW5nZSBzZWxlY3Rpb24gZmxhZyBvbiBkYXlzIHRvIGZhbHNlLCBiZXNpZGVzIHRoZSBzZWxlY3RlZCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RlZFNpbmdsZURheShkYXk6IE51bGxhYmxlPENhbGVuZGFyRGF5PEQ+PiwgY2FsZW5kYXI6IENhbGVuZGFyRGF5PEQ+W10pOiB2b2lkIHtcbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgICBpZiAoZGF5ICYmICFkYXkuYmxvY2tlZCAmJiAhZGF5LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBkYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaFRhYkluZGV4KGNhbGVuZGFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hhbmdlIHNlbGVjdGlvbiBmbGFnIG9uIGRheXMgdG8gZmFsc2UsIGJlc2lkZXMgdGhlIHNlbGVjdGVkIG9uZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVzIC0gQW4gYXJyYXkgb2YgQ2FsZW5kYXJEYXkgb2JqZWN0cyB0byBiZSBtYXJrZWQgYXMgc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0gY2FsZW5kYXIgLSBUaGUgY2FsZW5kYXIgYXJyYXkgY29udGFpbmluZyBhbGwgQ2FsZW5kYXJEYXkgb2JqZWN0c1xuICAgICAqL1xuICAgIHByaXZhdGUgX2NoYW5nZVNlbGVjdGVkTXVsdGlwbGVEYXlzKGRhdGVzOiBOdWxsYWJsZTxBcnJheTxDYWxlbmRhckRheTxEPj4+LCBjYWxlbmRhcjogQ2FsZW5kYXJEYXk8RD5bXSk6IHZvaWQge1xuICAgICAgICBjYWxlbmRhci5mb3JFYWNoKChkYXkpID0+IChkYXkuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuXG4gICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nRGF5ID0gY2FsZW5kYXIuZmluZCgoZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIGRhdGUuZGF0ZSkpO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ0RheSAmJiAhbWF0Y2hpbmdEYXkuYmxvY2tlZCAmJiAhbWF0Y2hpbmdEYXkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdEYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoVGFiSW5kZXgoY2FsZW5kYXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGFuZ2UgcHJvcGVydGllcyBvZiByYW5nZSBkYXlzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHRvIG5vdCByZWJ1aWxkIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLFxuICAgICAqIGl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgZGF5cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RlZFJhbmdlRGF5cyhkYXRlczogRGF0ZVJhbmdlPEQ+LCBjYWxlbmRhcjogQ2FsZW5kYXJEYXk8RD5bXSk6IHZvaWQge1xuICAgICAgICAvKiogUHVsbCBsaXN0IG9mIGNhbGVuZGFyIGRheXMgKi9cbiAgICAgICAgY29uc3QgY2FsZW5kYXJMaXN0ID0gY2FsZW5kYXI7XG5cbiAgICAgICAgLyoqIFJlc2V0IGNoYW5naW5nIHByb3BlcnRpZXMgKi9cbiAgICAgICAgY2FsZW5kYXJMaXN0LmZvckVhY2goXG4gICAgICAgICAgICAoX2RheSkgPT5cbiAgICAgICAgICAgICAgICAoX2RheS5zZWxlY3RlZEZpcnN0ID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5zZWxlY3RlZExhc3QgPVxuICAgICAgICAgICAgICAgICAgICBfZGF5LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5pc1RhYkluZGV4ZWQgPVxuICAgICAgICAgICAgICAgICAgICBfZGF5LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5zZWxlY3RlZFJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGF5OiBDYWxlbmRhckRheTxEPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBlbmREYXk6IENhbGVuZGFyRGF5PEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgc3RhcnQgZGF0ZSBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gY2FsZW5kYXJMaXN0LmZpbmQoKF9kYXkpID0+IHRoaXMuX2lzU2FtZURheShfZGF5LmRhdGUsIGRhdGVzLnN0YXJ0KSk7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzdGFydERheSAmJlxuICAgICAgICAgICAgICAgICAgICAhc3RhcnREYXkuYmxvY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICAhc3RhcnREYXkuZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiB0aGlzLmRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb24oKSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbigpPy4oc3RhcnREYXkuZGF0ZSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkuc2VsZWN0ZWRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8qKiBGaW5kIGVuZCBkYXRlIGFuZCBtYXJrIGl0IGFzIHNlbGVjdGVkICovXG4gICAgICAgICAgICAgICAgZW5kRGF5ID0gY2FsZW5kYXJMaXN0LmZpbmQoKF9kYXkpID0+IHRoaXMuX2lzU2FtZURheShfZGF5LmRhdGUsIGRhdGVzLmVuZCkpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFlbmREYXkuYmxvY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICAhZW5kRGF5LmRpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbigpICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbigpPy4oZW5kRGF5LmRhdGUpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlbmREYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbmREYXkuc2VsZWN0ZWRMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBWZXJpZnkgaWYgc3RhcnQgZGF5IGFuZCBlbmQgZGF5IGlzIHZhbGlkLCBvdGhlcndpc2UgZG9uJ3QgcHV0IHJhbmdlIHNlbGVjdGlvbiAqL1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0ICYmIGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8qKiBNYXJrIGFsbCBkYXlzLCB3aGljaCBhcmUgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGRhdGUgKi9cbiAgICAgICAgICAgICAgICBjYWxlbmRhckxpc3RcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChfZGF5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZGF5LnNlbGVjdGVkUmFuZ2UgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNCZXR3ZWVuKF9kYXkuZGF0ZSwgZGF0ZXMuc3RhcnQhLCBkYXRlcy5lbmQhKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuc2VsZWN0ZWRSYW5nZSA9IHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaFRhYkluZGV4KGNhbGVuZGFyTGlzdCk7XG5cbiAgICAgICAgLyoqIEFwcGx5IGRpc2FibGVkIHN0YXRlIHRvIGRheXMgbWFya2VkIHdpdGggcGFzc2VkIGZ1bmN0aW9uICovXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBjYWxlbmRhckxpc3QuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVGdW5jdGlvbigpIShfZGF5LmRhdGUpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDAgfHwgdGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMikgJiYgdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKCkpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyTGlzdC5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChfZGF5KSA9PiAoX2RheS5kaXNhYmxlZCA9IF9kYXkuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKCkhKF9kYXkuZGF0ZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDEgJiYgdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBjYWxlbmRhckxpc3QuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoX2RheSkgPT4gKF9kYXkuZGlzYWJsZWQgPSBfZGF5LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24oKSEoX2RheS5kYXRlKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hhbmdlIHByb3BlcnRpZXMgb2YgcmFuZ2UgZGF5cyBmb3IgbXVsdGlwbGUgcmFuZ2VzLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBub3QgcmVidWlsZCB0aGUgd2hvbGUgZ3JpZCBmcm9tIHNjcmF0Y2guXG4gICAgICogSXQganVzdCBjaGFuZ2VzIHByb3BlcnRpZXMgb2YgbmV3bHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBkYXlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoYW5nZVNlbGVjdGVkTXVsdGlwbGVSYW5nZURheXMoZGF0ZXNBcnJheTogQXJyYXk8RGF0ZVJhbmdlPEQ+PiwgY2FsZW5kYXI6IENhbGVuZGFyRGF5PEQ+W10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgY2hhbmdpbmcgcHJvcGVydGllc1xuICAgICAgICBjYWxlbmRhci5mb3JFYWNoKChfZGF5KSA9PiB7XG4gICAgICAgICAgICBfZGF5LnNlbGVjdGVkRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWRMYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LnNlbGVjdGVkUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIF9kYXkuaXNUYWJJbmRleGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIF9kYXkuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZXNBcnJheS5mb3JFYWNoKChkYXRlcykgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0RGF5OiBDYWxlbmRhckRheTxEPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgZW5kRGF5OiBDYWxlbmRhckRheTxEPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZXMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBzdGFydCBkYXRlIGFuZCBtYXJrIGl0IGFzIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gY2FsZW5kYXIuZmluZCgoX2RheSkgPT4gdGhpcy5faXNTYW1lRGF5KF9kYXkuZGF0ZSwgZGF0ZXMuc3RhcnQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0RGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydERheS5zZWxlY3RlZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF0ZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgZW5kIGRhdGUgYW5kIG1hcmsgaXQgYXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF5ID0gY2FsZW5kYXIuZmluZCgoX2RheSkgPT4gdGhpcy5faXNTYW1lRGF5KF9kYXkuZGF0ZSwgZGF0ZXMuZW5kKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmREYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERheS5zZWxlY3RlZExhc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYWxsIGRheXMgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGFzIHNlbGVjdGVkIHJhbmdlXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0ICYmIGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5mb3JFYWNoKChfZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNEYXRlSW5SYW5nZShfZGF5LmRhdGUsIGRhdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWRSYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoVGFiSW5kZXgoY2FsZW5kYXIpO1xuXG4gICAgICAgIC8vIEFwcGx5IGRpc2FibGVkIHN0YXRlIHRvIGRheXMgbWFya2VkIHdpdGggcGFzc2VkIGZ1bmN0aW9uXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBjYWxlbmRhci5mb3JFYWNoKChfZGF5KSA9PiAoX2RheS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZUZ1bmN0aW9uKCkhKF9kYXkuZGF0ZSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLl9zZWxlY3RNdWx0aXBsZUNvdW50ZXIgPT09IDAgfHwgdGhpcy5fc2VsZWN0TXVsdGlwbGVDb3VudGVyICUgMiA9PT0gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbigpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuZGlzYWJsZWQgPSBfZGF5LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbigpIShfZGF5LmRhdGUpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc2VsZWN0TXVsdGlwbGVDb3VudGVyICUgMiA9PT0gMSAmJiB0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKCkpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLmZvckVhY2goKF9kYXkpID0+IChfZGF5LmRpc2FibGVkID0gX2RheS5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKCkhKF9kYXkuZGF0ZSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWZyZXNoVGFiSW5kZXgoY2FsZW5kYXI6IENhbGVuZGFyRGF5PEQ+W10pOiB2b2lkIHtcbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuaXNUYWJJbmRleGVkID0gZmFsc2UpKTtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuX2dldEFjdGl2ZUNlbGwoY2FsZW5kYXIuZmlsdGVyKChfZGF5KSA9PiBfZGF5Lm1vbnRoU3RhdHVzID09PSAnY3VycmVudCcpKTtcbiAgICAgICAgY2VsbCAmJiAoY2VsbC5pc1RhYkluZGV4ZWQgPSB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0Q2VsbElkQnlJbmRleChpbmRleCl9YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoZWNrIGlmIGRhdGVzIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzU2FtZURheShkYXRlMTogTnVsbGFibGU8RD4sIGRhdGUyOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0cyBhIHNpbmdsZSBkYXRlIGFuZCB1cGRhdGVzIHRoZSBzZWxlY3RlZCBkYXRlIGluIHNpbmdsZSBtb2RlLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0byBiZSBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RTaW5nbGVEYXRlKGRheTogQ2FsZW5kYXJEYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZvckVhY2goKF9kYXkpID0+IChfZGF5LnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgICAgZGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWREYXRlID0gZGF5LmRhdGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQoZGF5LmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSBkYXRlIGluIG11bHRpIG1vZGUuXG4gICAgICogQWRkcyB0aGUgZGF0ZSBpZiBub3Qgc2VsZWN0ZWQsIHJlbW92ZXMgaXQgaWYgYWxyZWFkeSBzZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0gZGF5IFRoZSBjYWxlbmRhciBkYXkgdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF90b2dnbGVNdWx0aURhdGUoZGF5OiBDYWxlbmRhckRheTxEPik6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRlSW5kZXggPSB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMuZmluZEluZGV4KChkKSA9PiB0aGlzLl9pc1NhbWVEYXkoZCwgZGF5LmRhdGUpKTtcbiAgICAgICAgbGV0IG5ld1NlbGVjdGVkRGF0ZXM6IERbXTtcblxuICAgICAgICBpZiAoZGF0ZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGVkRGF0ZXMgPSB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGRhdGVJbmRleCk7XG4gICAgICAgICAgICBkYXkuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGVkRGF0ZXMgPSBbLi4udGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzLCBkYXkuZGF0ZV07XG4gICAgICAgICAgICBkYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gbmV3U2VsZWN0ZWREYXRlcztcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RzIG9yIHVwZGF0ZXMgdGhlIHJhbmdlIG9mIGRhdGVzIGluIHJhbmdlIG1vZGUuXG4gICAgICogSGFuZGxlcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRvIGJlIHNlbGVjdGVkIG9yIHVwZGF0ZWQgaW4gdGhlIHJhbmdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFJhbmdlRGF0ZShkYXk6IENhbGVuZGFyRGF5PEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RDb3VudGVyID09PSAwIHx8IHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogZGF5LmRhdGUsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0gdGhpcy5fZ2V0T3JkZXJlZFJhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQhLCBkYXkuZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZURheXModGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUsIHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdHMgb3IgdXBkYXRlcyBtdWx0aXBsZSByYW5nZXMgb2YgZGF0ZXMgaW4gcmFuZ2UgbW9kZS5cbiAgICAgKiBIYW5kbGVzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGFuZCB1cGRhdGVzIHRoZSBzZWxlY3RlZCByYW5nZXMuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRvIGJlIHNlbGVjdGVkIG9yIHVwZGF0ZWQgaW4gdGhlIHJhbmdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlUmFuZ2VEYXRlcyhkYXk6IENhbGVuZGFyRGF5PEQ+KTogdm9pZCB7XG4gICAgICAgIGxldCB0ZW1wUmFuZ2VzID0gdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM/LmZpbHRlcigocmFuZ2UpID0+IHJhbmdlLnN0YXJ0IHx8IHJhbmdlLmVuZCkgfHwgW107XG5cbiAgICAgICAgLy8gSGFuZGxlcyB0aGUgZXhpc3RpbmcgcmFuZ2UgYnkgdXBkYXRpbmcgb3IgbWVyZ2luZyBpdCB3aXRoIHRoZSBuZXcgZGF5IHNlbGVjdGlvbi5cbiAgICAgICAgdGVtcFJhbmdlcyA9IHRoaXMuX2hhbmRsZUV4aXN0aW5nUmFuZ2UodGVtcFJhbmdlcywgZGF5KTtcblxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0TXVsdGlwbGVDb3VudGVyICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgLy8gU3RhcnQgYSBuZXcgcmFuZ2VcbiAgICAgICAgICAgIHRoaXMuX25ld1JhbmdlID0geyBzdGFydDogZGF5LmRhdGUsIGVuZDogbnVsbCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHJldmVyc2Ugc2VsZWN0aW9uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fbmV3UmFuZ2UgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXdSYW5nZS5zdGFydCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9uZXdSYW5nZS5zdGFydCwgZGF5LmRhdGUpID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV3UmFuZ2UgPSB7IHN0YXJ0OiBkYXkuZGF0ZSwgZW5kOiB0aGlzLl9uZXdSYW5nZS5zdGFydCB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9uZXdSYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25ld1JhbmdlLmVuZCA9IGRheS5kYXRlIGFzIEQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbmV3UmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0ZW1wUmFuZ2VzLnB1c2godGhpcy5fbmV3UmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbmV3UmFuZ2UgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGVtcFJhbmdlcyA9IHRoaXMuX21lcmdlT3ZlcmxhcHBpbmdSYW5nZXModGVtcFJhbmdlcyk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSB0ZW1wUmFuZ2VzO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCByYW5nZXMgaGF2ZSBib3RoIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgZmlsbGVkXG4gICAgICAgIGNvbnN0IGFsbFJhbmdlc0NvbXBsZXRlID0gdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMuZXZlcnkoKHJhbmdlKSA9PiByYW5nZS5zdGFydCAmJiByYW5nZS5lbmQpO1xuXG4gICAgICAgIGlmIChhbGxSYW5nZXNDb21wbGV0ZSAmJiB0ZW1wUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGNhbGVuZGFyIHZpZXdcbiAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZVJhbmdlRGF5cyh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcywgdGhpcy5fY2FsZW5kYXJEYXlMaXN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgb3ZlcmxhcHBpbmcgZGF0ZSByYW5nZXMgaW50byBhIHNpbmdsZSByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByYW5nZXMgLSBBbiBhcnJheSBvZiBkYXRlIHJhbmdlcyB0byBiZSBtZXJnZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgbWVyZ2VkIGRhdGUgcmFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX21lcmdlT3ZlcmxhcHBpbmdSYW5nZXMocmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogQXJyYXk8RGF0ZVJhbmdlPEQ+PiB7XG4gICAgICAgIGlmIChyYW5nZXMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZXMuc29ydCgoYSwgYikgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGEuc3RhcnQhLCBiLnN0YXJ0ISkpO1xuXG4gICAgICAgIGNvbnN0IG1lcmdlZFJhbmdlczogQXJyYXk8RGF0ZVJhbmdlPEQ+PiA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFJhbmdlID0gcmFuZ2VzWzBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0UmFuZ2UgPSByYW5nZXNbaV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoY3VycmVudFJhbmdlLmVuZCEsIG5leHRSYW5nZS5zdGFydCEpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBjdXJyZW50UmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShjdXJyZW50UmFuZ2UuZW5kISwgbmV4dFJhbmdlLmVuZCEpID49IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRSYW5nZS5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5leHRSYW5nZS5lbmRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXJnZWRSYW5nZXMucHVzaChjdXJyZW50UmFuZ2UpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRSYW5nZSA9IG5leHRSYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFJhbmdlcy5wdXNoKGN1cnJlbnRSYW5nZSk7XG4gICAgICAgIHJldHVybiBtZXJnZWRSYW5nZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2VsZWN0ZWQgZGF5IGlzIHBhcnQgb2YgYW4gZXhpc3RpbmcgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVtcFJhbmdlcyAtIEFuIGFycmF5IG9mIGRhdGUgcmFuZ2VzIHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHBhcmFtIGRheSAtIFRoZSBjYWxlbmRhciBkYXkgdG8gYmUgY2hlY2tlZC5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRlIHJhbmdlcyB3aXRoIHRoZSB1cGRhdGVkIHJhbmdlIGlmIHRoZSBzZWxlY3RlZCBkYXkgaXMgcGFydCBvZiBhbiBleGlzdGluZyByYW5nZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVFeGlzdGluZ1JhbmdlKHRlbXBSYW5nZXM6IERhdGVSYW5nZTxEPltdLCBkYXk6IENhbGVuZGFyRGF5PEQ+KTogRGF0ZVJhbmdlPEQ+W10ge1xuICAgICAgICBpZiAodGVtcFJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1JhbmdlSW5kZXggPSB0ZW1wUmFuZ2VzLmZpbmRJbmRleCgocmFuZ2UpID0+IHRoaXMuX2lzRGF0ZUluUmFuZ2UoZGF5LmRhdGUsIHJhbmdlKSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1JhbmdlID0gdGVtcFJhbmdlc1tleGlzdGluZ1JhbmdlSW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdSYW5nZUluZGV4ICE9PSAtMSAmJiBleGlzdGluZ1JhbmdlLmVuZCkge1xuICAgICAgICAgICAgICAgIHRlbXBSYW5nZXMuc3BsaWNlKGV4aXN0aW5nUmFuZ2VJbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBSYW5nZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoZWNrcyBpZiBhIGRhdGUgaXMgd2l0aGluIGEgZ2l2ZW4gZGF0ZSByYW5nZS5cbiAgICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0gcmFuZ2UgVGhlIGRhdGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0ZSBpcyBpbiB0aGUgcmFuZ2UsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0RhdGVJblJhbmdlKGRhdGU6IEQsIHJhbmdlOiBEYXRlUmFuZ2U8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc0JldHdlZW4oZGF0ZSwgcmFuZ2Uuc3RhcnQhLCByYW5nZS5lbmQhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT3JkZXJzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGZvciB0aGUgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAqIEVuc3VyZXMgdGhlIHN0YXJ0IGRhdGUgaXMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0gZGF0ZTEgVGhlIGZpcnN0IGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUyIFRoZSBzZWNvbmQgZGF0ZS5cbiAgICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBzdGFydCBhbmQgZW5kIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE9yZGVyZWRSYW5nZShkYXRlMTogRCwgZGF0ZTI6IEQpOiB7IHN0YXJ0OiBEOyBlbmQ6IEQgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSA8IDBcbiAgICAgICAgICAgID8geyBzdGFydDogZGF0ZTEsIGVuZDogZGF0ZTIgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0OiBkYXRlMiwgZW5kOiBkYXRlMSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIHRoZSBob3ZlciBlZmZlY3QgZm9yIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBUb2dnbGVzIHRoZSBob3ZlciBlZmZlY3QgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiBzdGF0ZSBhbmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGV2ZW50IE9wdGlvbmFsIG1vdXNlIGV2ZW50IGZvciBoYW5kbGluZyBob3ZlciBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZUhvdmVyRWZmZWN0KCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZUNvdW50ZXIgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxUeXBlKCkgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlSG92ZXJFZmZlY3QoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHRvZ2dsZSB0aGUgc2VsZWN0aW9uIG9mIGEgd2Vlay5cbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrIEFycmF5IG9mIENhbGVuZGFyRGF5IG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b2dnbGVXZWVrU2VsZWN0aW9uKHNlbGVjdGVkV2VlazogQXJyYXk8Q2FsZW5kYXJEYXk8RD4+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVEYXlzID0gc2VsZWN0ZWRXZWVrLmZpbHRlcigoZGF5KSA9PiAhZGF5LmRpc2FibGVkKTtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50V2Vla1NlbGVjdGVkID0gc2VsZWN0YWJsZURheXMuZXZlcnkoKGRheSkgPT4gZGF5LnNlbGVjdGVkKTtcblxuICAgICAgICBpZiAoIWlzQ3VycmVudFdlZWtTZWxlY3RlZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRXZWVrLmZvckVhY2goKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGF5LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzLnNvbWUoKHNlbGVjdGVkRGF0ZSkgPT4gdGhpcy5faXNTYW1lRGF5KHNlbGVjdGVkRGF0ZSwgZGF5LmRhdGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzLnB1c2goZGF5LmRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFdlZWsuZm9yRWFjaCgoZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWREYXRlKSA9PiAhdGhpcy5faXNTYW1lRGF5KHNlbGVjdGVkRGF0ZSwgZGF5LmRhdGUpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbXB1dGVzIHRoZSBDU1MgY2xhc3MgZm9yIGVhY2ggd2VlayBkYXkgaW4gY2FsZW5kYXIgaGVhZGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGNhbGVuZGFyIHR5cGUgaXMgJ211bHRpJ1xuICAgICAqIGFuZCB0aGUgZGF0ZSBpcyBub3QgZGlzYWJsZWQuXG4gICAgICogU3RvcmVzIHRoZSBjb21wdXRlZCBjbGFzc2VzIGluIHRoZSB3ZWVrSGVhZGVyQ2xhc3NlcyBhcnJheS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb21wdXRlV2Vla0hlYWRlckNsYXNzZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dlZWtIZWFkZXJDbGFzc2VzID0gdGhpcy5fY2FsZW5kYXJEYXlMaXN0Lm1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5jYWxUeXBlKCkgIT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UgJiYgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKCkhICYmIHRoaXMuZGlzYWJsZUZ1bmN0aW9uKCkhXG4gICAgICAgICAgICAgICAgPyAnZXZlbnQtZW5hYmxlZCdcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgaG92ZXIgZWZmZWN0IGZvciBzaW5nbGUtcmFuZ2Ugc2VsZWN0aW9uIG1vZGUuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRoYXQgaXMgaG92ZXJlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVTaW5nbGVSYW5nZUhvdmVyKGRheTogQ2FsZW5kYXJEYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgLy8gSGFuZGxlIHNpbmdsZSByYW5nZSBob3ZlclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGU/LnN0YXJ0O1xuICAgICAgICBpZiAodGhpcy5faXNPblJhbmdlUGljayAmJiBzdGFydCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShkYXkuZGF0ZSwgc3RhcnQpIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyRGF5TGlzdC5mb3JFYWNoKChfZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBkYXkuZGF0ZSkgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBzdGFydCkgPCAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckRheUxpc3QuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgZGF5LmRhdGUpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgc3RhcnQpID4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGhvdmVyIGVmZmVjdCBmb3IgbXVsdGktcmFuZ2Ugc2VsZWN0aW9uIG1vZGUuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRoYXQgaXMgaG92ZXJlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVNdWx0aVJhbmdlSG92ZXIoZGF5OiBDYWxlbmRhckRheTxEPik6IHZvaWQge1xuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHN0YXJ0IGRhdGUgZnJvbSB0aGUgbW9zdCByZWNlbnQgcmFuZ2Ugd2l0aCBhIG51bGwgZW5kIGRhdGVcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZTogRCB8IG51bGwgfCBhbnkgPSB0aGlzLl9uZXdSYW5nZT8uc3RhcnQ7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBtb3N0IHJlY2VudCByYW5nZSB3aXRoIGFuIGVuZCBkYXRlIG9mIG51bGxcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVJhbmdlcyA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmZpbHRlcigocmFuZ2UpID0+IHJhbmdlLmVuZCA9PT0gbnVsbCk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmFuZ2UgPSBhY3RpdmVSYW5nZXNbYWN0aXZlUmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG1vc3RSZWNlbnRSYW5nZS5zdGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShkYXkuZGF0ZSwgc3RhcnREYXRlKSA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBIb3ZlcmluZyBiYWNrd2FyZHMgZnJvbSB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyRGF5TGlzdC5mb3JFYWNoKChfZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBkYXkuZGF0ZSkgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBzdGFydERhdGUpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSG92ZXJpbmcgZm9yd2FyZHMgZnJvbSB0aGUgc3RhcnQgZGF0ZSB0byB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyRGF5TGlzdC5mb3JFYWNoKChfZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBkYXkuZGF0ZSkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX2RheS5kYXRlLCBzdGFydERhdGUpID4gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHN0YXJ0IGRhdGUsIGNsZWFyIGhvdmVyXG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckRheUxpc3QuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgIF9kYXkuaG92ZXJSYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8dGFibGVcbiAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19jb250ZW50IGZkLWNhbGVuZGFyX19jb250ZW50LS1kYXRlc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJEYXlWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0aGVhZCBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgQGlmIChzaG93V2Vla051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19pdGVtIGZkLWNhbGVuZGFyX19pdGVtLS1zaWRlLWhlbHBlclwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJfd2Vla051bWJlcnNDb2x1bW5IZWFkZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2NvcmVDYWxlbmRhci53ZWVrQ29sdW1uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoZGF5IG9mIHNob3J0V2Vla0RheXM7IHRyYWNrIGRheSArICcnICsgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbSBmZC1jYWxlbmRhcl9faXRlbS0tc2lkZS1oZWxwZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJfd2Vla0hlYWRlckNsYXNzZXNbaV1cIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb25nV2Vla0RheXNbaV1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlV2Vla1NlbGVjdGlvbkJ5SW5kZXgoaSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RleHRcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHkgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgQGZvciAocm93IG9mIF9kYXlWaWV3R3JpZDsgdHJhY2sgcm93ICsgJycgKyByb3dJbmRleDsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1dlZWtOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19pdGVtIGZkLWNhbGVuZGFyX19pdGVtLS1zaWRlLWhlbHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdldmVudC1lbmFibGVkJzogYWxsb3dNdWx0aXBsZVNlbGVjdGlvbigpICYmIGNhbFR5cGUoKSAhPT0gJ3JhbmdlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3doZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci13ZWVrXT1cIl93ZWVrc1tyb3dJbmRleF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwidmlld0lkICsgJy13ZWVrLScgKyBfd2Vla3Nbcm93SW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfd2Vla051bWJlcnNDb2x1bW5IZWFkZXJJZCArICcgJyArICh2aWV3SWQgKyAnLXdlZWstJyArIF93ZWVrc1tyb3dJbmRleF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVdlZWtTZWxlY3Rpb25CeURheXMocm93KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX3dlZWtzICYmIF93ZWVrc1tyb3dJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX3RleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBfd2Vla3Nbcm93SW5kZXhdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGZvciAoY2VsbCBvZiByb3c7IHRyYWNrIGNlbGwgKyAnJyArIGNlbGxJbmRleDsgbGV0IGNlbGxJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9faXRlbS0tc2VsZWN0ZWRdPVwiY2VsbC5zZWxlY3RlZEZpcnN0IHx8IGNlbGwuc2VsZWN0ZWRMYXN0IHx8IGNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19pdGVtLS1yYW5nZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbC5zZWxlY3RlZFJhbmdlIHx8IGNlbGwuaG92ZXJSYW5nZSkgJiYgIWNlbGwuc2VsZWN0ZWRGaXJzdCAmJiAhY2VsbC5zZWxlY3RlZExhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLXRvZGF5XT1cImNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLXdlZWtlbmRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC53ZWVrZW5kICYmIG1hcmtXZWVrZW5kcygpICYmIGNlbGwubW9udGhTdGF0dXMgPT09ICdjdXJyZW50J1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9faXRlbS0tb3RoZXJdPVwiY2VsbC5tb250aFN0YXR1cyAhPT0gJ2N1cnJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCJjZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnNwZWNpYWxEYXlOdW1iZXIgJiYgIWNlbGwuc2hvdWxkSGlkZVNwZWNpYWxEYXlNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC0nICsgY2VsbC5zcGVjaWFsRGF5TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJjZWxsLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItZGF0ZS1kYXldPVwiY2VsbC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLWRheV09XCJjZWxsLmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC5pc1RhYkluZGV4ZWQgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhdGUoY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJfcmVmcmVzaEhvdmVyUmFuZ2UoY2VsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uS2V5ZG93bkRheUhhbmRsZXIoJGV2ZW50LCBjZWxsLCBfZ2V0SW5kZXgocm93SW5kZXgsIGNlbGxJbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWRGaXJzdCA/IF9kYXRlUmFuZ2VTdGFydExhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWRMYXN0ID8gX2RhdGVSYW5nZUVuZExhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWQgJiYgY2FsVHlwZSgpID09PSAnc2luZ2xlJyA/IF9zZWxlY3RlZERhdGVMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLnBhc3QgPyBfZGF0ZUluUGFzdExhYmVsSWQgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNlbGwubGFiZWwgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmlkXT1cImNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNlbGwuYXJpYUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKF9kYXlWaWV3R3JpZC5sZW5ndGggPD0gNSkge1xuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZkLWNhbGVuZGFyX19pdGVtIGhpZGRlbi1kYXlcIj48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKF9kYXlWaWV3R3JpZC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbSBoaWRkZW4tZGF5XCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cbjwhLS0gSGlkZGVuIGVsZW1lbnRzIGZvciBhcmlhIHB1cnBvc2VzIC0tPlxuPGRpdiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfdG9kYXlMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0ZWREYXRlTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9kYXRlUmFuZ2VTdGFydExhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLnJhbmdlU3RhcnRMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX2RhdGVSYW5nZUVuZExhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLnJhbmdlRW5kTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9kYXRlSW5QYXN0TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIuZGF5SW5QYXN0TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbjwvZGl2PlxuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the month view of the calendar. */\nexport class CalendarMonthViewComponent {\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeFormats = _dateTimeFormats;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** An event fired when a new month is selected */\n this.monthClicked = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /**\n * Whether user wants to mark month cells on hover.\n * Works only on range mode, when start month is selected.\n */\n this.rangeHoverEffect = false;\n /**\n * @hidden\n * A number offset used to achieve the 1-12 representation of the calendar\n */\n this._monthOffset = 1;\n /** @hidden */\n this._amountOfColPerRow = 3;\n /** @hidden */\n this._amountOfRows = 4;\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n this._isOnRangePick = false;\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._constructMonthGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructMonthGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated && ('monthSelected' in changes || 'year' in changes || 'id' in changes)) {\n this._constructMonthGrid();\n }\n }\n /** Get a number (1-12) representing the current month */\n get currentMonth() {\n return this._dateTimeAdapter.getMonth(this._dateTimeAdapter.today());\n }\n /** Getter for the private class member _monthOffset */\n get monthOffset() {\n return this._monthOffset;\n }\n /** View ID */\n get viewId() {\n return this.id + '-month-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarMonthListGrid) {\n this._changeSelectedRangeMonths(dateRange, this._getMonthList());\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /**\n * @hidden\n * Amount of selected months\n * 0, when there is no month selected, or start month is invalid,\n * 1, when there is only valid start month, or end month is same as start month,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /**\n * @hidden\n * Method for handling the keyboard events (a11y)\n */\n _onKeydownMonthHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Method returning id of month cell\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * @param index month grid cell index\n */\n _getId(index) {\n return this.viewId + '-month-' + index;\n }\n /**\n * @hidden\n * Method that checks if this is current month\n */\n _isCurrent(id) {\n return id + this._monthOffset === this.currentMonth;\n }\n /**\n * @hidden\n * Method that check if this is selected month\n */\n _isSelected(id) {\n return id + this._monthOffset === this.monthSelected;\n }\n /** Method for handling the mouse click event when a month is selected */\n selectMonth(monthCell, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.monthSelected = monthCell.month;\n this.monthClicked.emit(this.monthSelected);\n // when date range start date is selected start the hover effect between the date range\n if (this.isDateRangeMonthYearFormat) {\n this._selectRangeDate(monthCell);\n this._handleRangeHoverEffect(event);\n }\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getMonthList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param month The calendar month that is hovered.\n */\n _handleRangeHover(month) {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(month.date, start) < 0) {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) > 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) < 0;\n });\n }\n else {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) < 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.isDateRangeMonthYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param month The calendar month to be selected or updated in the range.\n */\n _selectRangeDate(month) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: month.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, month.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeMonths(this._selectedRangeDate, this._getMonthList());\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Change properties of range months, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected months.\n */\n _changeSelectedRangeMonths(dates, calendar) {\n /** Pull list of calendar month */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_month) => (_month.selectedFirst =\n _month.selectedLast =\n _month.selected =\n _month.disabled =\n _month.hoverRange =\n _month.selectedRange =\n false));\n if (dates) {\n let startMonth;\n let endMonth;\n if (dates.start) {\n /** Find start month and mark it as selected */\n startMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.start));\n if (startMonth) {\n startMonth.selected = true;\n startMonth.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end month and mark it as selected */\n endMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.end));\n if (endMonth) {\n endMonth.selected = true;\n endMonth.selectedLast = true;\n }\n }\n /** Verify if start month and end month is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all months, which are between start and end date */\n calendarList\n .filter((_month) => (_month.selectedRange = this._dateTimeAdapter.isBetween(_month.date, dates.start, dates.end)))\n .forEach((_month) => (_month.selectedRange = true));\n }\n }\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDate(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Method that create month grid with required meta data\n */\n _constructMonthGrid() {\n const monthNames = this.isDateRangeMonthYearFormat\n ? this._dateTimeAdapter.getMonthNames('long')\n : this._dateTimeAdapter.getMonthNames('short');\n const monthList = monthNames.map((monthName, index) => {\n const month = index + this.monthOffset;\n return {\n date: this._dateTimeAdapter.createDate(this.year, month),\n month,\n label: monthName,\n ariaLabel: this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(this.year, month, 1), this._dateTimeFormats.display.monthA11yLabel),\n index,\n selected: month === this.monthSelected,\n current: month === this.currentMonth,\n tabIndex: month === this.monthSelected ? 0 : -1\n };\n });\n // if the date range is selected\n if (this.isDateRangeMonthYearFormat) {\n this._changeSelectedRangeMonths(this._selectedRangeDate, monthList);\n }\n this._calendarMonthListGrid = [];\n /** Creating 2d grid */\n while (monthList.length) {\n this._calendarMonthListGrid.push(monthList.splice(0, this._amountOfColPerRow));\n }\n this._calendarMonthListGrid.forEach((row, rowIndex) => {\n row.forEach((monthCell, colIndex) => {\n monthCell.id = this._getId(this._getIndex(rowIndex, colIndex));\n });\n });\n this._changeDetectorRef.markForCheck();\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.rowAmount = this._amountOfRows;\n this._calendarService.colAmount = this._amountOfColPerRow;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getMonthList()[index]);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index, event }) => this.selectMonth(this._getMonthList()[index], event));\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d month grid.\n */\n _getMonthList() {\n return [].concat(...this._calendarMonthListGrid);\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarMonthViewComponent, isStandalone: true, selector: \"fd-calendar-month-view\", inputs: { id: \"id\", monthSelected: \"monthSelected\", focusEscapeFunction: \"focusEscapeFunction\", year: \"year\", isDateRangeMonthYearFormat: \"isDateRangeMonthYearFormat\", rangeHoverEffect: \"rangeHoverEffect\", selectedRangeDate: \"selectedRangeDate\" }, outputs: { monthClicked: \"monthClicked\", selectedRangeDateChange: \"selectedRangeDateChange\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--months\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"monthCell.current\\\"\\n [class.is-active]=\\\"monthCell.selected\\\"\\n [attr.tabIndex]=\\\"monthCell.tabIndex\\\"\\n [attr.id]=\\\"monthCell.id\\\"\\n [attr.aria-selected]=\\\"monthCell.selected\\\"\\n [attr.aria-disabled]=\\\"monthCell.disabled\\\"\\n [attr.data-fd-calendar-month]=\\\"monthCell.month\\\"\\n (keydown)=\\\"_onKeydownMonthHandler($event, monthCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(monthCell)\\\"\\n (click)=\\\"selectMonth(monthCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n monthCell.selectedRange ||\\n monthCell.hoverRange ||\\n monthCell.selectedFirst ||\\n monthCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"monthCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n monthCell.id +\\n '-aria-label ' +\\n (monthCell.current ? _todayLabelId + ' ' : '') +\\n (monthCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ monthCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"monthCell.id + '-aria-label'\\\">\\n {{ monthCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-month-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--months\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"monthCell.current\\\"\\n [class.is-active]=\\\"monthCell.selected\\\"\\n [attr.tabIndex]=\\\"monthCell.tabIndex\\\"\\n [attr.id]=\\\"monthCell.id\\\"\\n [attr.aria-selected]=\\\"monthCell.selected\\\"\\n [attr.aria-disabled]=\\\"monthCell.disabled\\\"\\n [attr.data-fd-calendar-month]=\\\"monthCell.month\\\"\\n (keydown)=\\\"_onKeydownMonthHandler($event, monthCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(monthCell)\\\"\\n (click)=\\\"selectMonth(monthCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n monthCell.selectedRange ||\\n monthCell.hoverRange ||\\n monthCell.selectedFirst ||\\n monthCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"monthCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n monthCell.id +\\n '-aria-label ' +\\n (monthCell.current ? _todayLabelId + ' ' : '') +\\n (monthCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ monthCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"monthCell.id + '-aria-label'\\\">\\n {{ monthCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.DatetimeAdapter }], propDecorators: { id: [{\n type: Input\n }], monthSelected: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], year: [{\n type: Input\n }], isDateRangeMonthYearFormat: [{\n type: Input\n }], monthClicked: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], rangeHoverEffect: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBRXBELDZEQUE2RDtBQVk3RCxNQUFNLE9BQU8sMEJBQTBCO0lBaUVuQyxjQUFjO0lBQ2QsWUFDWSxLQUFpQixFQUNqQixrQkFBcUMsRUFDckMsZ0JBQWlDLEVBQ04sZ0JBQWlD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Qiw2ZUN4Q3ZDLGlxR0E4REEsMEREeEJjLGVBQWUsMElBQUUsZUFBZTs7MkZBRWpDLDBCQUEwQjtrQkFYdEMsU0FBUzsrQkFDSSx3QkFBd0IsaUJBR25CLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0YsV0FBVyxFQUFFLFFBQVE7cUJBQ3hCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQzs7MEJBd0V0QyxNQUFNOzJCQUFDLGlCQUFpQjt1RUFuRTdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBUVAsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBNkZGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aCB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci1tb250aCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGUtcmFuZ2UnO1xuXG4vKiogQ29tcG9uZW50IHJlcHJlc2VudGluZyB0aGUgbW9udGggdmlldyBvZiB0aGUgY2FsZW5kYXIuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLW1vbnRoLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW0J1dHRvbkNvbXBvbmVudCwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEEgbnVtYmVyICgxLTEyKSByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIG1vbnRoICovXG4gICAgQElucHV0KClcbiAgICBtb250aFNlbGVjdGVkOiBudW1iZXI7XG5cbiAgICAvKiogQSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXNjYXBlIGZvY3VzICovXG4gICAgQElucHV0KClcbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uOiBFc2NhcGVGb2N1c0Z1bmN0aW9uO1xuXG4gICAgLyoqIEEgeWVhciB0aGUgbW9udGggdmlldyBpcyByZWZlcnJpbmcgdG8gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXI6IG51bWJlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHBpY2sgdGhlIGRhdGUgcmFuZ2UgaW4gbW9udGggeWVhciBmb3JtYXQgd2l0aG91dCBwaWNraW5nIGRheXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0OiBib29sZWFuO1xuXG4gICAgLyoqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBtb250aENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIHJhbmdlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgbW9udGggY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IG1vbnRoIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1vbnRoIGdyaWQgdGFibGVcbiAgICAgKi9cbiAgICBfY2FsZW5kYXJNb250aExpc3RHcmlkOiBDYWxlbmRhck1vbnRoPEQ+W11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBIG51bWJlciBvZmZzZXQgdXNlZCB0byBhY2hpZXZlIHRoZSAxLTEyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vbnRoT2Zmc2V0OiBudW1iZXIgPSAxO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZDb2xQZXJSb3c6IG51bWJlciA9IDM7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbW91bnRPZlJvd3M6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFuZ2VEYXRlOiBEYXRlUmFuZ2U8RD47XG5cbiAgICBwcml2YXRlIF9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhdGVkICYmICgnbW9udGhTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAneWVhcicgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZXQgYSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb250aCAgKi9cbiAgICBnZXQgY3VycmVudE1vbnRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH1cblxuICAgIC8qKiAgR2V0dGVyIGZvciB0aGUgcHJpdmF0ZSBjbGFzcyBtZW1iZXIgX21vbnRoT2Zmc2V0ICovXG4gICAgZ2V0IG1vbnRoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aE9mZnNldDtcbiAgICB9XG5cbiAgICAvKiogVmlldyBJRCAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLW1vbnRoLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBGZERhdGVzIG1vZGVsIHN0YXJ0IGFuZCBlbmQgaW4gcmFuZ2UgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZFJhbmdlRGF0ZShkYXRlUmFuZ2U6IERhdGVSYW5nZTxEPikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRlUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUoZGF0ZVJhbmdlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSAmJlxuICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF0ZShkYXRlUmFuZ2UuZW5kLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUgPSBkYXRlUmFuZ2U7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkUmFuZ2VNb250aHMoZGF0ZVJhbmdlLCB0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRSYW5nZURhdGUoKTogRGF0ZVJhbmdlPEQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgQW1vdW50IG9mIHNlbGVjdGVkIG1vbnRoc1xuICAgICAqICAwLCB3aGVuIHRoZXJlIGlzIG5vIG1vbnRoIHNlbGVjdGVkLCBvciBzdGFydCBtb250aCBpcyBpbnZhbGlkLFxuICAgICAqICAxLCB3aGVuIHRoZXJlIGlzIG9ubHkgdmFsaWQgc3RhcnQgbW9udGgsIG9yIGVuZCBtb250aCBpcyBzYW1lIGFzIHN0YXJ0IG1vbnRoLFxuICAgICAqICAyLCB3aGVuIGJvdGggZGF0ZXMgYXJlIHZhbGlkXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RDb3VudGVyKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSB8fCAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQgJiZcbiAgICAgICAgICAgICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBldmVudHMgKGExMXkpXG4gICAgICovXG4gICAgX29uS2V5ZG93bk1vbnRoSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGlkIG9mIG1vbnRoIGNlbGxcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHBhcmFtIGluZGV4IG1vbnRoIGdyaWQgY2VsbCBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1tb250aC0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGlzIGlzIGN1cnJlbnQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNDdXJyZW50KGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkICsgdGhpcy5fbW9udGhPZmZzZXQgPT09IHRoaXMuY3VycmVudE1vbnRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjaGVjayBpZiB0aGlzIGlzIHNlbGVjdGVkIG1vbnRoXG4gICAgICovXG4gICAgX2lzU2VsZWN0ZWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5tb250aFNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBtb3VzZSBjbGljayBldmVudCB3aGVuIGEgbW9udGggaXMgc2VsZWN0ZWQgICovXG4gICAgc2VsZWN0TW9udGgobW9udGhDZWxsOiBDYWxlbmRhck1vbnRoPEQ+LCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCA9IG1vbnRoQ2VsbC5tb250aDtcbiAgICAgICAgdGhpcy5tb250aENsaWNrZWQuZW1pdCh0aGlzLm1vbnRoU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHdoZW4gZGF0ZSByYW5nZSBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIHN0YXJ0IHRoZSBob3ZlciBlZmZlY3QgYmV0d2VlbiB0aGUgZGF0ZSByYW5nZVxuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VEYXRlKG1vbnRoQ2VsbCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSYW5nZUhvdmVyRWZmZWN0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0TW9udGhMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGhvdmVyIGVmZmVjdCBmb3IgcmFuZ2Ugc2VsZWN0aW9uIG1vZGUuXG4gICAgICogQHBhcmFtIG1vbnRoIFRoZSBjYWxlbmRhciBtb250aCB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgX2hhbmRsZVJhbmdlSG92ZXIobW9udGg6IENhbGVuZGFyTW9udGg8RD4pOiB2b2lkIHtcbiAgICAgICAgLy8gSGFuZGxlIHJhbmdlIGhvdmVyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZT8uc3RhcnQ7XG4gICAgICAgIGlmICh0aGlzLl9pc09uUmFuZ2VQaWNrICYmIHN0YXJ0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKG1vbnRoLmRhdGUsIHN0YXJ0KSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRNb250aExpc3QoKS5mb3JFYWNoKChfbW9udGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9tb250aC5kYXRlLCBtb250aC5kYXRlKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfbW9udGguZGF0ZSwgc3RhcnQpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0TW9udGhMaXN0KCkuZm9yRWFjaCgoX21vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9tb250aC5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfbW9udGguZGF0ZSwgbW9udGguZGF0ZSkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX21vbnRoLmRhdGUsIHN0YXJ0KSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyB0aGUgaG92ZXIgZWZmZWN0IGZvciByYW5nZSBzZWxlY3Rpb24uXG4gICAgICogVG9nZ2xlcyB0aGUgaG92ZXIgZWZmZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gc3RhdGUgYW5kIGV2ZW50LlxuICAgICAqIEBwYXJhbSBldmVudCBPcHRpb25hbCBtb3VzZSBldmVudCBmb3IgaGFuZGxpbmcgaG92ZXIgZWZmZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVJhbmdlSG92ZXJFZmZlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdCAmJiB0aGlzLnJhbmdlSG92ZXJFZmZlY3QgJiYgdGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSAmJiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdHMgb3IgdXBkYXRlcyB0aGUgcmFuZ2Ugb2YgZGF0ZXMgaW4gcmFuZ2UgbW9kZS5cbiAgICAgKiBIYW5kbGVzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGFuZCB1cGRhdGVzIHRoZSBzZWxlY3RlZCByYW5nZS5cbiAgICAgKiBAcGFyYW0gbW9udGggVGhlIGNhbGVuZGFyIG1vbnRoIHRvIGJlIHNlbGVjdGVkIG9yIHVwZGF0ZWQgaW4gdGhlIHJhbmdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFJhbmdlRGF0ZShtb250aDogQ2FsZW5kYXJNb250aDxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMCB8fCB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IG1vbnRoLmRhdGUsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0gdGhpcy5fZ2V0T3JkZXJlZFJhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQhLCBtb250aC5kYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFJhbmdlTW9udGhzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCB0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9yZGVycyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBmb3IgdGhlIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBFbnN1cmVzIHRoZSBzdGFydCBkYXRlIGlzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUxIFRoZSBmaXJzdCBkYXRlLlxuICAgICAqIEBwYXJhbSBkYXRlMiBUaGUgc2Vjb25kIGRhdGUuXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgc3RhcnQgYW5kIGVuZCBkYXRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRPcmRlcmVkUmFuZ2UoZGF0ZTE6IEQsIGRhdGUyOiBEKTogeyBzdGFydDogRDsgZW5kOiBEIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikgPCAwXG4gICAgICAgICAgICA/IHsgc3RhcnQ6IGRhdGUxLCBlbmQ6IGRhdGUyIH1cbiAgICAgICAgICAgIDogeyBzdGFydDogZGF0ZTIsIGVuZDogZGF0ZTEgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hhbmdlIHByb3BlcnRpZXMgb2YgcmFuZ2UgbW9udGhzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHRvIG5vdCByZWJ1aWxkIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLFxuICAgICAqIGl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgbW9udGhzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoYW5nZVNlbGVjdGVkUmFuZ2VNb250aHMoZGF0ZXM6IERhdGVSYW5nZTxEPiwgY2FsZW5kYXI6IENhbGVuZGFyTW9udGg8RD5bXSk6IHZvaWQge1xuICAgICAgICAvKiogUHVsbCBsaXN0IG9mIGNhbGVuZGFyIG1vbnRoICovXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTGlzdCA9IGNhbGVuZGFyO1xuXG4gICAgICAgIC8qKiBSZXNldCBjaGFuZ2luZyBwcm9wZXJ0aWVzICovXG4gICAgICAgIGNhbGVuZGFyTGlzdC5mb3JFYWNoKFxuICAgICAgICAgICAgKF9tb250aCkgPT5cbiAgICAgICAgICAgICAgICAoX21vbnRoLnNlbGVjdGVkRmlyc3QgPVxuICAgICAgICAgICAgICAgICAgICBfbW9udGguc2VsZWN0ZWRMYXN0ID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICBfbW9udGguc2VsZWN0ZWRSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgIGxldCBzdGFydE1vbnRoOiBDYWxlbmRhck1vbnRoPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGVuZE1vbnRoOiBDYWxlbmRhck1vbnRoPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgc3RhcnQgbW9udGggYW5kIG1hcmsgaXQgYXMgc2VsZWN0ZWQgKi9cbiAgICAgICAgICAgICAgICBzdGFydE1vbnRoID0gY2FsZW5kYXJMaXN0LmZpbmQoKF9tb250aCkgPT4gdGhpcy5faXNTYW1lRGF0ZShfbW9udGguZGF0ZSwgZGF0ZXMuc3RhcnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRNb250aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE1vbnRoLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb250aC5zZWxlY3RlZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgZW5kIG1vbnRoIGFuZCBtYXJrIGl0IGFzIHNlbGVjdGVkICovXG4gICAgICAgICAgICAgICAgZW5kTW9udGggPSBjYWxlbmRhckxpc3QuZmluZCgoX21vbnRoKSA9PiB0aGlzLl9pc1NhbWVEYXRlKF9tb250aC5kYXRlLCBkYXRlcy5lbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbmRNb250aC5zZWxlY3RlZExhc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqIFZlcmlmeSBpZiBzdGFydCBtb250aCBhbmQgZW5kIG1vbnRoIGlzIHZhbGlkLCBvdGhlcndpc2UgZG9uJ3QgcHV0IHJhbmdlIHNlbGVjdGlvbiAqL1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0ICYmIGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8qKiBNYXJrIGFsbCBtb250aHMsIHdoaWNoIGFyZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgZGF0ZSAqL1xuICAgICAgICAgICAgICAgIGNhbGVuZGFyTGlzdFxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKF9tb250aCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX21vbnRoLnNlbGVjdGVkUmFuZ2UgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNCZXR3ZWVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9udGguZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuc3RhcnQhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlcy5lbmQhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoX21vbnRoKSA9PiAoX21vbnRoLnNlbGVjdGVkUmFuZ2UgPSB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNTYW1lRGF0ZShkYXRlMTogTnVsbGFibGU8RD4sIGRhdGUyOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgY3JlYXRlIG1vbnRoIGdyaWQgd2l0aCByZXF1aXJlZCBtZXRhIGRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RNb250aEdyaWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdFxuICAgICAgICAgICAgPyB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpXG4gICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdzaG9ydCcpO1xuXG4gICAgICAgIGNvbnN0IG1vbnRoTGlzdDogQ2FsZW5kYXJNb250aDxEPltdID0gbW9udGhOYW1lcy5tYXAoKG1vbnRoTmFtZSwgaW5kZXgpOiBDYWxlbmRhck1vbnRoPEQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gaW5kZXggKyB0aGlzLm1vbnRoT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLnllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbW9udGhOYW1lLFxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy55ZWFyLCBtb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5Lm1vbnRoQTExeUxhYmVsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogbW9udGggPT09IHRoaXMubW9udGhTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBtb250aCA9PT0gdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgdGFiSW5kZXg6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQgPyAwIDogLTFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRlIHJhbmdlIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFJhbmdlTW9udGhzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCBtb250aExpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkID0gW107XG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChtb250aExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQucHVzaChtb250aExpc3Quc3BsaWNlKDAsIHRoaXMuX2Ftb3VudE9mQ29sUGVyUm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgcm93LmZvckVhY2goKG1vbnRoQ2VsbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBtb250aENlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHB1dCBjb25maWd1cmF0aW9uIGFuZCBsaXN0ZW5lcnMgb24gY2FsZW5kYXIga2V5Ym9hcmQgc2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy5fYW1vdW50T2ZSb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY29sQW1vdW50ID0gdGhpcy5fYW1vdW50T2ZDb2xQZXJSb3c7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5mb2N1c0VzY2FwZUZ1bmN0aW9uID0gdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkZvY3VzSWRDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJhbmdlSG92ZXIodGhpcy5fZ2V0TW9udGhMaXN0KClbaW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCwgZXZlbnQgfSkgPT4gdGhpcy5zZWxlY3RNb250aCh0aGlzLl9nZXRNb250aExpc3QoKVtpbmRleF0sIGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCBtb250aCBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1vbnRoTGlzdCgpOiBDYWxlbmRhck1vbnRoPEQ+W10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhck1vbnRoPEQ+W10+W10pLmNvbmNhdCguLi50aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLW1vbnRoc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4+XG4gICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIEBmb3IgKGNvbE1vbnRocyBvZiBfY2FsZW5kYXJNb250aExpc3RHcmlkOyB0cmFjayBjb2xNb250aHMgKyAnJyArIHJvd0luZGV4OyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobW9udGhDZWxsIG9mIGNvbE1vbnRoczsgdHJhY2sgbW9udGhDZWxsICsgJycgKyBjb2xJbmRleDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbXktaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19teS1pdGVtLS1jdXJyZW50XT1cIm1vbnRoQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwibW9udGhDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYkluZGV4XT1cIm1vbnRoQ2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJtb250aENlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJtb250aENlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJtb250aENlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci1tb250aF09XCJtb250aENlbGwubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uS2V5ZG93bk1vbnRoSGFuZGxlcigkZXZlbnQsIG1vbnRoQ2VsbC5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiX2hhbmRsZVJhbmdlSG92ZXIobW9udGhDZWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGhDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtYnV0dG9uLS10b2dnbGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuaG92ZXJSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRGaXJzdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRMYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFyaWEtbGFiZWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhDZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGhDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the YearView of the Calendar Component. */\nexport class CalendarYearViewComponent {\n /** View ID */\n get viewId() {\n return this.id + '-year-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /**\n * Whether user wants to mark year cells on hover.\n * Works only on range mode, when start year is selected.\n */\n this.rangeHoverEffect = false;\n /** Event fired when a year is selected. */\n this.yearClicked = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n /** @hidden */\n this._isOnRangePick = false;\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n this._firstYearInList = this._currentYear;\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected;\n this._constructYearGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated && ('yearViewGrid' in changes || 'yearSelected' in changes || 'id' in changes)) {\n this._constructYearGrid();\n }\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarYearListGrid) {\n this._changeSelectedRangeYears(dateRange, this._getYearList());\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /**\n * @hidden\n * Amount of selected years\n * 0, when there is no year selected, or start year is invalid,\n * 1, when there is only valid start year, or end year is same as start year,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /** Method used to load the previous {{col * row}} years to be displayed. */\n loadNextYearList() {\n this._firstYearInList += this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n /** Method used to load the next {{col * row}} years to be displayed. */\n loadPreviousYearList() {\n this._firstYearInList -= this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear, event) {\n if (event) {\n event.stopPropagation();\n }\n this.yearSelected = selectedYear.year;\n this.yearClicked.emit(this.yearSelected);\n if (this.isDateRangeYearFormat) {\n this._selectRangeDate(selectedYear);\n this._handleRangeHoverEffect(event);\n }\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /**\n * @hidden\n * Method for handling the keyboard navigation.\n */\n _onKeydownYearHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Get grid cell id be index\n * @param index\n */\n _getId(index) {\n return this.viewId + '-year-' + index;\n }\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param year The calendar year that is hovered.\n */\n _handleRangeHover(year) {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(year.date, start) < 0) {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) > 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) < 0;\n });\n }\n else {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) < 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n _getActiveYear() {\n const selectedYearCell = this._getYearList().find(({ year }) => year === this.yearSelected);\n if (selectedYearCell) {\n return selectedYearCell.year;\n }\n const currentYearCell = this._getYearList().find(({ year }) => year === this._currentYear);\n if (currentYearCell) {\n return currentYearCell.year;\n }\n return this._calendarYearListGrid[0][0].year;\n }\n /** @hidden */\n _constructYearGrid() {\n const displayedYearsAmount = this.yearViewGrid.cols * this.yearViewGrid.rows;\n const calendarYearList = [];\n this._calendarYearListGrid = [];\n for (let x = 0; x < displayedYearsAmount; ++x) {\n const year = this._firstYearInList + x;\n calendarYearList.push({\n date: this._dateTimeAdapter.createDate(year),\n year,\n label: this._getYearName(year),\n ariaLabel: this._getAriaYearName(year),\n selected: year === this.yearSelected,\n current: year === this._currentYear,\n index: x\n });\n }\n // if the date range is selected\n if (this.isDateRangeYearFormat) {\n this._changeSelectedRangeYears(this._selectedRangeDate, calendarYearList);\n }\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.yearViewGrid.cols));\n }\n this._activeYear = this._getActiveYear();\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.year === this._activeYear ? 0 : -1;\n });\n });\n this._changeDetectorRef.markForCheck();\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.isDateRangeYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n /**\n * @hidden\n * Change properties of range years, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected years.\n */\n _changeSelectedRangeYears(dates, calendar) {\n /** Pull list of calendar year */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_year) => (_year.selectedFirst =\n _year.selectedLast =\n _year.selected =\n _year.disabled =\n _year.hoverRange =\n _year.selectedRange =\n false));\n if (dates) {\n let startYear;\n let endYear;\n if (dates.start) {\n /** Find start year and mark it as selected */\n startYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.start));\n if (startYear) {\n startYear.selected = true;\n startYear.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end year and mark it as selected */\n endYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.end));\n if (endYear) {\n endYear.selected = true;\n endYear.selectedLast = true;\n }\n }\n /** Verify if start year and end year is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all years, which are between start and end date */\n calendarList\n .filter((_year) => (_year.selectedRange = this._dateTimeAdapter.isBetween(_year.date, dates.start, dates.end)))\n .forEach((_year) => (_year.selectedRange = true));\n }\n }\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDate(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Selects or updates the range of years in range mode.\n * Handles the start and end years and updates the selected range.\n * @param year The calendar year to be selected or updated in the range.\n */\n _selectRangeDate(year) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: year.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, year.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeYears(this._selectedRangeDate, this._getYearList());\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Returns year name as a string.\n */\n _getYearName(year) {\n const formatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));\n return this._getYearString(year, formatted);\n }\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n _getAriaYearName(year) {\n const formatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(year, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n return this._getYearString(year, formatted);\n }\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n _getYearString(year, defaultStr) {\n if (typeof this.yearViewGrid.yearMapping === 'function') {\n return this.yearViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n _getYearList() {\n return [].concat(...this._calendarYearListGrid);\n }\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n _getAmountOfYearsShownAtOnce() {\n return this.yearViewGrid.rows * this.yearViewGrid.cols;\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.colAmount = this.yearViewGrid.cols;\n this._calendarService.rowAmount = this.yearViewGrid.rows;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getYearList()[index]);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectYear(this._getYearList()[index], event);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarYearViewComponent, isStandalone: true, selector: \"fd-calendar-year-view\", inputs: { id: \"id\", focusEscapeFunction: \"focusEscapeFunction\", yearSelected: \"yearSelected\", yearViewGrid: \"yearViewGrid\", isDateRangeYearFormat: \"isDateRangeYearFormat\", rangeHoverEffect: \"rangeHoverEffect\", selectedRangeDate: \"selectedRangeDate\" }, outputs: { yearClicked: \"yearClicked\", selectedRangeDateChange: \"selectedRangeDateChange\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"yearCell.current\\\"\\n [class.is-active]=\\\"yearCell.selected\\\"\\n [attr.id]=\\\"yearCell.id\\\"\\n [attr.tabindex]=\\\"yearCell.tabIndex\\\"\\n [attr.aria-selected]=\\\"yearCell.selected\\\"\\n [attr.aria-disabled]=\\\"yearCell.disabled\\\"\\n [attr.data-fd-calendar-year]=\\\"yearCell.year\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, yearCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(yearCell)\\\"\\n (click)=\\\"selectYear(yearCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n yearCell.selectedRange ||\\n yearCell.hoverRange ||\\n yearCell.selectedFirst ||\\n yearCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"yearCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n yearCell.id +\\n '-aria-label ' +\\n (yearCell.current ? _todayLabelId + ' ' : '') +\\n (yearCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ yearCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"yearCell.id + '-aria-label'\\\">\\n {{ yearCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarYearViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-year-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"yearCell.current\\\"\\n [class.is-active]=\\\"yearCell.selected\\\"\\n [attr.id]=\\\"yearCell.id\\\"\\n [attr.tabindex]=\\\"yearCell.tabIndex\\\"\\n [attr.aria-selected]=\\\"yearCell.selected\\\"\\n [attr.aria-disabled]=\\\"yearCell.disabled\\\"\\n [attr.data-fd-calendar-year]=\\\"yearCell.year\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, yearCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(yearCell)\\\"\\n (click)=\\\"selectYear(yearCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n yearCell.selectedRange ||\\n yearCell.hoverRange ||\\n yearCell.selectedFirst ||\\n yearCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"yearCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n yearCell.id +\\n '-aria-label ' +\\n (yearCell.current ? _todayLabelId + ' ' : '') +\\n (yearCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ yearCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"yearCell.id + '-aria-label'\\\">\\n {{ yearCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { id: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], yearSelected: [{\n type: Input\n }], yearViewGrid: [{\n type: Input\n }], isDateRangeYearFormat: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], yearClicked: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedRangeDate: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUVwRCxxRUFBcUU7QUFZckUsTUFBTSxPQUFPLHlCQUF5QjtJQThEbEMsY0FBYztJQUNkLElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUM7SUFD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O2tCQVhyQyxTQUFTOytCQUNJLHVCQUF1QixpQkFHbEIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDOzswQkF3R3RDLE1BQU07MkJBQUMsaUJBQWlCO3lDQW5HN0IsRUFBRTtzQkFERCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFRTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLHVCQUF1QjtzQkFEL0IsTUFBTTtnQkFpR0gsaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRlVGltZUZvcm1hdHMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXIsIENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0ZS1yYW5nZSc7XG5cbi8qKiBDb21wb25lbnQgcmVwcmVzZW50aW5nIHRoZSBZZWFyVmlldyBvZiB0aGUgQ2FsZW5kYXIgQ29tcG9uZW50LiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci15ZWFyLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGZvY3VzIHdvdWxkIGVzY2FwZSB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogUGFyYW1ldGVyIGhvbGRpbmcgdGhlIHllYXIgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBpcyB5ZWFyIGZvcm1hdCBvbmx5IGV4Y2x1ZGluZyBtb250aCBhbmQgZGF5ICovXG4gICAgQElucHV0KClcbiAgICBpc0RhdGVSYW5nZVllYXJGb3JtYXQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayB5ZWFyIGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCB5ZWFyIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJDbGlja2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIHllYXIgZnJvbSBjYWxlbmRhclllYXJMaXN0IHNob3VsZCBiZSBmb2N1c2FibGUgYnkgdGFiIGtleVxuICAgICAqL1xuICAgIF9hY3RpdmVZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHRoYXQgc3RvcmVzIHRoZSBkb3plbiBvZiB5ZWFycyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIF9jYWxlbmRhclllYXJMaXN0R3JpZDogQ2FsZW5kYXJZZWFyPEQ+W11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgX2ZpcnN0WWVhckluTGlzdDogbnVtYmVyO1xuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy15ZWFyLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy5fY3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLnllYXJTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHwgJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRmREYXRlcyBtb2RlbCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWRSYW5nZURhdGUoZGF0ZVJhbmdlOiBEYXRlUmFuZ2U8RD4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0ZVJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlICYmXG4gICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXRlKGRhdGVSYW5nZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUoZGF0ZVJhbmdlLmVuZCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0gZGF0ZVJhbmdlO1xuICAgICAgICBpZiAodGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkUmFuZ2VZZWFycyhkYXRlUmFuZ2UsIHRoaXMuX2dldFllYXJMaXN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkUmFuZ2VEYXRlKCk6IERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIEFtb3VudCBvZiBzZWxlY3RlZCB5ZWFyc1xuICAgICAqICAwLCB3aGVuIHRoZXJlIGlzIG5vIHllYXIgc2VsZWN0ZWQsIG9yIHN0YXJ0IHllYXIgaXMgaW52YWxpZCxcbiAgICAgKiAgMSwgd2hlbiB0aGVyZSBpcyBvbmx5IHZhbGlkIHN0YXJ0IHllYXIsIG9yIGVuZCB5ZWFyIGlzIHNhbWUgYXMgc3RhcnQgeWVhcixcbiAgICAgKiAgMiwgd2hlbiBib3RoIGRhdGVzIGFyZSB2YWxpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0Q291bnRlcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0ICYmXG4gICAgICAgICAgICAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpICYmXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgcHJldmlvdXMge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ICs9IHRoaXMuX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IHt7Y29sICogcm93fX0geWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWRQcmV2aW91c1llYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgLT0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHNlbmRzIHRoZSB5ZWFyIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdoZW4gaXQgaXMgY2xpY2tlZC4gKi9cbiAgICBzZWxlY3RZZWFyKHNlbGVjdGVkWWVhcjogQ2FsZW5kYXJZZWFyPEQ+LCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQgPSBzZWxlY3RlZFllYXIueWVhcjtcbiAgICAgICAgdGhpcy55ZWFyQ2xpY2tlZC5lbWl0KHRoaXMueWVhclNlbGVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZVllYXJGb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlRGF0ZShzZWxlY3RlZFllYXIpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZm9jdXMgb24gbW9udGggY2VsbC5cbiAgICAgKiBJdCBjYW4gYmUgYSBzZWxlY3RlZCBjZWxsLCBjdXJyZW50IG1vbnRoIGNlbGwgb3IgZmlyc3QgY2VsbCBpbiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHNldEZvY3VzT25DZWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IG5ldyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3koKS5nZXRBY3RpdmVDZWxsKHRoaXMuX2dldFllYXJMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICAgIF9vbktleWRvd25ZZWFySGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdGFuZGFyZGl6ZWQgbWV0aG9kIHRvIGNhbGN1bGF0ZSBncmlkIFt4XVt5XSB0byBpbmRleCBudW1iZXIgb2YgZmxhdHRlbiBsaXN0XG4gICAgICovXG4gICAgX2dldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdldElkKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCBncmlkIGNlbGwgaWQgYmUgaW5kZXhcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKi9cbiAgICBfZ2V0SWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICcteWVhci0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgaG92ZXIgZWZmZWN0IGZvciByYW5nZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKiBAcGFyYW0geWVhciBUaGUgY2FsZW5kYXIgeWVhciB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgX2hhbmRsZVJhbmdlSG92ZXIoeWVhcjogQ2FsZW5kYXJZZWFyPEQ+KTogdm9pZCB7XG4gICAgICAgIC8vIEhhbmRsZSByYW5nZSBob3ZlclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGU/LnN0YXJ0O1xuICAgICAgICBpZiAodGhpcy5faXNPblJhbmdlUGljayAmJiBzdGFydCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZSh5ZWFyLmRhdGUsIHN0YXJ0KSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRZZWFyTGlzdCgpLmZvckVhY2goKF95ZWFyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF95ZWFyLmRhdGUsIHllYXIuZGF0ZSkgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX3llYXIuZGF0ZSwgc3RhcnQpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0WWVhckxpc3QoKS5mb3JFYWNoKChfeWVhcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfeWVhci5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfeWVhci5kYXRlLCB5ZWFyLmRhdGUpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF95ZWFyLmRhdGUsIHN0YXJ0KSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIHllYXIsIHJldHVybiBzZWxlY3RlZCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgeWVhciwgYnV0IHRoZXJlIGlzIGN1cnJlbnQgeWVhciwgcmV0dXJuIGN1cnJlbnQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgeWVhciwgb3Igc2VsZWN0ZWQsIHJldHVybiBmaXJzdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVZZWFyKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRZZWFyQ2VsbC55ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhckxpc3QoKS5maW5kKCh7IHllYXIgfSkgPT4geWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIpO1xuICAgICAgICBpZiAoY3VycmVudFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDogbnVtYmVyID0gdGhpcy55ZWFyVmlld0dyaWQuY29scyAqIHRoaXMueWVhclZpZXdHcmlkLnJvd3M7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyWWVhckxpc3Q6IENhbGVuZGFyWWVhcjxEPltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDsgKyt4KSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgeDtcbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0ZTogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciksXG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fZ2V0WWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHllYXIgPT09IHRoaXMuX2N1cnJlbnRZZWFyLFxuICAgICAgICAgICAgICAgIGluZGV4OiB4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRlIHJhbmdlIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCBjYWxlbmRhclllYXJMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChjYWxlbmRhclllYXJMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQucHVzaChjYWxlbmRhclllYXJMaXN0LnNwbGljZSgwLCB0aGlzLnllYXJWaWV3R3JpZC5jb2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVZZWFyID0gdGhpcy5fZ2V0QWN0aXZlWWVhcigpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gY2VsbC55ZWFyID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIHRoZSBob3ZlciBlZmZlY3QgZm9yIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBUb2dnbGVzIHRoZSBob3ZlciBlZmZlY3QgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiBzdGF0ZSBhbmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGV2ZW50IE9wdGlvbmFsIG1vdXNlIGV2ZW50IGZvciBoYW5kbGluZyBob3ZlciBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCAmJiB0aGlzLnJhbmdlSG92ZXJFZmZlY3QgJiYgdGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSAmJiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoYW5nZSBwcm9wZXJ0aWVzIG9mIHJhbmdlIHllYXJzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHRvIG5vdCByZWJ1aWxkIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLFxuICAgICAqIGl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgeWVhcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKGRhdGVzOiBEYXRlUmFuZ2U8RD4sIGNhbGVuZGFyOiBDYWxlbmRhclllYXI8RD5bXSk6IHZvaWQge1xuICAgICAgICAvKiogUHVsbCBsaXN0IG9mIGNhbGVuZGFyIHllYXIgKi9cbiAgICAgICAgY29uc3QgY2FsZW5kYXJMaXN0ID0gY2FsZW5kYXI7XG5cbiAgICAgICAgLyoqIFJlc2V0IGNoYW5naW5nIHByb3BlcnRpZXMgKi9cbiAgICAgICAgY2FsZW5kYXJMaXN0LmZvckVhY2goXG4gICAgICAgICAgICAoX3llYXIpID0+XG4gICAgICAgICAgICAgICAgKF95ZWFyLnNlbGVjdGVkRmlyc3QgPVxuICAgICAgICAgICAgICAgICAgICBfeWVhci5zZWxlY3RlZExhc3QgPVxuICAgICAgICAgICAgICAgICAgICBfeWVhci5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgX3llYXIuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLnNlbGVjdGVkUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRZZWFyOiBDYWxlbmRhclllYXI8RD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZW5kWWVhcjogQ2FsZW5kYXJZZWFyPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgc3RhcnQgeWVhciBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIHN0YXJ0WWVhciA9IGNhbGVuZGFyTGlzdC5maW5kKChfeWVhcikgPT4gdGhpcy5faXNTYW1lRGF0ZShfeWVhci5kYXRlLCBkYXRlcy5zdGFydCkpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRZZWFyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRZZWFyLnNlbGVjdGVkRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvKiogRmluZCBlbmQgeWVhciBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIGVuZFllYXIgPSBjYWxlbmRhckxpc3QuZmluZCgoX3llYXIpID0+IHRoaXMuX2lzU2FtZURhdGUoX3llYXIuZGF0ZSwgZGF0ZXMuZW5kKSk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZFllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kWWVhci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVuZFllYXIuc2VsZWN0ZWRMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBWZXJpZnkgaWYgc3RhcnQgeWVhciBhbmQgZW5kIHllYXIgaXMgdmFsaWQsIG90aGVyd2lzZSBkb24ndCBwdXQgcmFuZ2Ugc2VsZWN0aW9uICovXG4gICAgICAgICAgICBpZiAoZGF0ZXMuc3RhcnQgJiYgZGF0ZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgLyoqIE1hcmsgYWxsIHllYXJzLCB3aGljaCBhcmUgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGRhdGUgKi9cbiAgICAgICAgICAgICAgICBjYWxlbmRhckxpc3RcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChfeWVhcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3llYXIuc2VsZWN0ZWRSYW5nZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc0JldHdlZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF95ZWFyLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzLnN0YXJ0ISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuZW5kIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKF95ZWFyKSA9PiAoX3llYXIuc2VsZWN0ZWRSYW5nZSA9IHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayBpZiBkYXRlcyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1NhbWVEYXRlKGRhdGUxOiBOdWxsYWJsZTxEPiwgZGF0ZTI6IE51bGxhYmxlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlMSwgZGF0ZTIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RzIG9yIHVwZGF0ZXMgdGhlIHJhbmdlIG9mIHllYXJzIGluIHJhbmdlIG1vZGUuXG4gICAgICogSGFuZGxlcyB0aGUgc3RhcnQgYW5kIGVuZCB5ZWFycyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gICAgICogQHBhcmFtIHllYXIgVGhlIGNhbGVuZGFyIHllYXIgdG8gYmUgc2VsZWN0ZWQgb3IgdXBkYXRlZCBpbiB0aGUgcmFuZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0UmFuZ2VEYXRlKHllYXI6IENhbGVuZGFyWWVhcjxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMCB8fCB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IHllYXIuZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUgPSB0aGlzLl9nZXRPcmRlcmVkUmFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCEsIHllYXIuZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCB0aGlzLl9nZXRZZWFyTGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT3JkZXJzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGZvciB0aGUgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAqIEVuc3VyZXMgdGhlIHN0YXJ0IGRhdGUgaXMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0gZGF0ZTEgVGhlIGZpcnN0IGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUyIFRoZSBzZWNvbmQgZGF0ZS5cbiAgICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBzdGFydCBhbmQgZW5kIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE9yZGVyZWRSYW5nZShkYXRlMTogRCwgZGF0ZTI6IEQpOiB7IHN0YXJ0OiBEOyBlbmQ6IEQgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSA8IDBcbiAgICAgICAgICAgID8geyBzdGFydDogZGF0ZTEsIGVuZDogZGF0ZTIgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0OiBkYXRlMiwgZW5kOiBkYXRlMSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGFyaWEgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFyaWFZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXIsIGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIHRha2luZyBpbnRvIGFjY291bnQgeWVhck1hcHBpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhclN0cmluZyh5ZWFyOiBudW1iZXIsIGRlZmF1bHRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIHllYXIgZ3JpZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTGlzdCgpOiBDYWxlbmRhclllYXI8RD5bXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyWWVhcjxEPltdPltdKS5jb25jYXQoLi4udGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQucm93cyAqIHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSYW5nZUhvdmVyKHRoaXMuX2dldFllYXJMaXN0KClbaW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGluZGV4LCBldmVudCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFllYXIodGhpcy5fZ2V0WWVhckxpc3QoKVtpbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPHRhYmxlXG4gICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudCBmZC1jYWxlbmRhcl9fY29udGVudC0teWVhcnNcIlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICBAZm9yIChjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IHRyYWNrIGNvbFllYXJzICsgJycgKyByb3dJbmRleDsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHllYXJDZWxsIG9mIGNvbFllYXJzOyB0cmFjayB5ZWFyQ2VsbCArICcnICsgY29sSW5kZXg7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwieWVhckNlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwieWVhckNlbGwudGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ5ZWFyQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInllYXJDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXIteWVhcl09XCJ5ZWFyQ2VsbC55ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIHllYXJDZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJfaGFuZGxlUmFuZ2VIb3Zlcih5ZWFyQ2VsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhckNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1idXR0b24tLXRvZ2dsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLnNlbGVjdGVkUmFuZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhckNlbGwuaG92ZXJSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyQ2VsbC5zZWxlY3RlZEZpcnN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLnNlbGVjdGVkTGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbXktaXRlbS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLmlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5jdXJyZW50ID8gX3RvZGF5TGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeWVhckNlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgeWVhckNlbGwubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZCArICctYXJpYS1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","/** Create an Error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`Calendar: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRkFBMEY7QUFDMUYsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQWdCO0lBQ2pFLE9BQU8sS0FBSyxDQUNSLG1DQUFtQyxRQUFRLHlDQUF5QztRQUNoRixtRUFBbUU7UUFDbkUsd0JBQXdCLENBQy9CLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENyZWF0ZSBhbiBFcnJvciB0byBiZSB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHVzZSBhbiBpbnZhbGlkIGRhdGUgaW1wbGVtZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKHByb3ZpZGVyOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgcmV0dXJuIEVycm9yKFxuICAgICAgICBgQ2FsZW5kYXI6IE5vIHByb3ZpZGVyIGZvdW5kIGZvciAke3Byb3ZpZGVyfS4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGAgK1xuICAgICAgICAgICAgYG1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBGZERhdGV0aW1lTW9kdWxlLCBvciBwcm92aWRlIGEgYCArXG4gICAgICAgICAgICBgY3VzdG9tIGltcGxlbWVudGF0aW9uLmBcbiAgICApO1xufVxuIl19","import { FD_LANGUAGE_ENGLISH } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\n/**\n * Provides i18n support for labels inside the calendar component.\n * @deprecated use i18n `coreCalendar` key instead\n */\nexport class CalendarI18nLabels {\n constructor() {\n /** This is event that should be called, when labels are changed, to let component detect an changes. */\n this.labelsChange = new Subject();\n /** Year selection aria label. Used on the button to navigate to the years view. */\n this.yearSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearSelectionLabel;\n /** Years range selection aria label. Used on the button to navigate to the years range view. */\n this.yearsRangeSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearsRangeSelectionLabel;\n /** Month selection aria label. Used on the button to navigate to the months view. */\n this.monthSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.monthSelectionLabel;\n /** Day selection aria label. Used on the button to navigate to the day view. */\n this.dateSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectionLabel;\n /** Previous year aria label. Used on the button to switch to a previous year in the years view. */\n this.previousYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousYearLabel;\n /** Next year aria label. Used on the button to switch to a next year in the years view. */\n this.nextYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextYearLabel;\n /** Previous month aria label. Used on the button to switch to a previous month in the months view. */\n this.previousMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousMonthLabel;\n /** Next month aria label. Used on the button to switch to a next month in the months view. */\n this.nextMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextMonthLabel;\n /** Week number column label */\n this.weekColumnLabel = FD_LANGUAGE_ENGLISH.coreCalendar.weekColumnLabel;\n /** Selected date label. Used on the selected day/month/year cell. */\n this.dateSelectedLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectedLabel;\n /** Is used to describe present date */\n this.todayLabel = FD_LANGUAGE_ENGLISH.coreCalendar.todayLabel;\n /** Range start label. Used for date range selection */\n this.rangeStartLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeStartLabel;\n /** Range end label. Used for date range selection */\n this.rangeEndLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeEndLabel;\n /** Past days aria label. Used when days in the past are accessed */\n this.dayInPastLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dayInPastLabel;\n /** Past days aria label. Used when days in the past are accessed */\n this.closeCalendarLabel = FD_LANGUAGE_ENGLISH.coreCalendar.closeCalendarLabel;\n /** Calendar day view aria role description. */\n this.calendarDayViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarDayViewDescription;\n /** Calendar month view aria role description. */\n this.calendarMonthViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarMonthViewDescription;\n /** Calendar years view aria role description. */\n this.calendarYearsViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsViewDescription;\n /** Calendar years range view aria role description. */\n this.calendarYearsRangeViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsRangeViewDescription;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaTE4bi1sYWJlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvaTE4bi9jYWxlbmRhci1pMThuLWxhYmVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFBL0I7UUFDSSx3R0FBd0c7UUFDL0YsaUJBQVksR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCxtRkFBbUY7UUFDbkYsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLGdHQUFnRztRQUNoRyw2QkFBd0IsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUM7UUFFckYscUZBQXFGO1FBQ3JGLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUUzRSxnRkFBZ0Y7UUFDaEYsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLG1HQUFtRztRQUNuRyxzQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFdkUsMkZBQTJGO1FBQzNGLGtCQUFhLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUUvRCxzR0FBc0c7UUFDdEcsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLDhGQUE4RjtRQUM5RixtQkFBYyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFFakUsK0JBQStCO1FBQy9CLG9CQUFlLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztRQUVuRSxxRUFBcUU7UUFDckUsc0JBQWlCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBRXZFLHVDQUF1QztRQUN2QyxlQUFVLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUV6RCx1REFBdUQ7UUFDdkQsb0JBQWUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBRW5FLHFEQUFxRDtRQUNyRCxrQkFBYSxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFFL0Qsb0VBQW9FO1FBQ3BFLG1CQUFjLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUVqRSxvRUFBb0U7UUFDcEUsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLCtDQUErQztRQUMvQywrQkFBMEIsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUM7UUFFekYsaURBQWlEO1FBQ2pELGlDQUE0QixHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQztRQUU3RixpREFBaUQ7UUFDakQsaUNBQTRCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDO1FBRTdGLHVEQUF1RDtRQUN2RCxzQ0FBaUMsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsaUNBQWlDLENBQUM7SUFDM0csQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRkRfTEFOR1VBR0VfRU5HTElTSCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgaTE4biBzdXBwb3J0IGZvciBsYWJlbHMgaW5zaWRlIHRoZSBjYWxlbmRhciBjb21wb25lbnQuXG4gKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBgY29yZUNhbGVuZGFyYCBrZXkgaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJJMThuTGFiZWxzIHtcbiAgICAvKiogVGhpcyBpcyBldmVudCB0aGF0IHNob3VsZCBiZSBjYWxsZWQsIHdoZW4gbGFiZWxzIGFyZSBjaGFuZ2VkLCB0byBsZXQgY29tcG9uZW50IGRldGVjdCBhbiBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IGxhYmVsc0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKiogWWVhciBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSB5ZWFycyB2aWV3LiAqL1xuICAgIHllYXJTZWxlY3Rpb25MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnllYXJTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBZZWFycyByYW5nZSBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSB5ZWFycyByYW5nZSB2aWV3LiAqL1xuICAgIHllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBNb250aCBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSBtb250aHMgdmlldy4gKi9cbiAgICBtb250aFNlbGVjdGlvbkxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIubW9udGhTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBEYXkgc2VsZWN0aW9uIGFyaWEgbGFiZWwuIFVzZWQgb24gdGhlIGJ1dHRvbiB0byBuYXZpZ2F0ZSB0byB0aGUgZGF5IHZpZXcuICovXG4gICAgZGF0ZVNlbGVjdGlvbkxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGlvbkxhYmVsO1xuXG4gICAgLyoqIFByZXZpb3VzIHllYXIgYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIHN3aXRjaCB0byBhIHByZXZpb3VzIHllYXIgaW4gdGhlIHllYXJzIHZpZXcuICovXG4gICAgcHJldmlvdXNZZWFyTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5wcmV2aW91c1llYXJMYWJlbDtcblxuICAgIC8qKiBOZXh0IHllYXIgYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIHN3aXRjaCB0byBhIG5leHQgeWVhciBpbiB0aGUgeWVhcnMgdmlldy4gKi9cbiAgICBuZXh0WWVhckxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIubmV4dFllYXJMYWJlbDtcblxuICAgIC8qKiBQcmV2aW91cyBtb250aCBhcmlhIGxhYmVsLiBVc2VkIG9uIHRoZSBidXR0b24gdG8gc3dpdGNoIHRvIGEgcHJldmlvdXMgbW9udGggaW4gdGhlIG1vbnRocyB2aWV3LiAqL1xuICAgIHByZXZpb3VzTW9udGhMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnByZXZpb3VzTW9udGhMYWJlbDtcblxuICAgIC8qKiBOZXh0IG1vbnRoIGFyaWEgbGFiZWwuIFVzZWQgb24gdGhlIGJ1dHRvbiB0byBzd2l0Y2ggdG8gYSBuZXh0IG1vbnRoIGluIHRoZSBtb250aHMgdmlldy4gKi9cbiAgICBuZXh0TW9udGhMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLm5leHRNb250aExhYmVsO1xuXG4gICAgLyoqIFdlZWsgbnVtYmVyIGNvbHVtbiBsYWJlbCAqL1xuICAgIHdlZWtDb2x1bW5MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLndlZWtDb2x1bW5MYWJlbDtcblxuICAgIC8qKiBTZWxlY3RlZCBkYXRlIGxhYmVsLiBVc2VkIG9uIHRoZSBzZWxlY3RlZCBkYXkvbW9udGgveWVhciBjZWxsLiAqL1xuICAgIGRhdGVTZWxlY3RlZExhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWw7XG5cbiAgICAvKiogSXMgdXNlZCB0byBkZXNjcmliZSBwcmVzZW50IGRhdGUgKi9cbiAgICB0b2RheUxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIudG9kYXlMYWJlbDtcblxuICAgIC8qKiBSYW5nZSBzdGFydCBsYWJlbC4gVXNlZCBmb3IgZGF0ZSByYW5nZSBzZWxlY3Rpb24gKi9cbiAgICByYW5nZVN0YXJ0TGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5yYW5nZVN0YXJ0TGFiZWw7XG5cbiAgICAvKiogUmFuZ2UgZW5kIGxhYmVsLiBVc2VkIGZvciBkYXRlIHJhbmdlIHNlbGVjdGlvbiAqL1xuICAgIHJhbmdlRW5kTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5yYW5nZUVuZExhYmVsO1xuXG4gICAgLyoqIFBhc3QgZGF5cyBhcmlhIGxhYmVsLiBVc2VkIHdoZW4gZGF5cyBpbiB0aGUgcGFzdCBhcmUgYWNjZXNzZWQgKi9cbiAgICBkYXlJblBhc3RMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmRheUluUGFzdExhYmVsO1xuXG4gICAgLyoqIFBhc3QgZGF5cyBhcmlhIGxhYmVsLiBVc2VkIHdoZW4gZGF5cyBpbiB0aGUgcGFzdCBhcmUgYWNjZXNzZWQgKi9cbiAgICBjbG9zZUNhbGVuZGFyTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5jbG9zZUNhbGVuZGFyTGFiZWw7XG5cbiAgICAvKiogQ2FsZW5kYXIgZGF5IHZpZXcgYXJpYSByb2xlIGRlc2NyaXB0aW9uLiAqL1xuICAgIGNhbGVuZGFyRGF5Vmlld0Rlc2NyaXB0aW9uID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuY2FsZW5kYXJEYXlWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgbW9udGggdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbiA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmNhbGVuZGFyTW9udGhWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgeWVhcnMgdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJZZWFyc1ZpZXdEZXNjcmlwdGlvbiA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgeWVhcnMgcmFuZ2UgdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uO1xufVxuIl19","import { inject } from '@angular/core';\nimport { FD_LANGUAGE } from '@fundamental-ngx/i18n';\nimport { map, startWith, switchMap } from 'rxjs';\nimport { CalendarI18nLabels } from './i18n/calendar-i18n-labels';\n/**\n * Use deprecated `CalendarI18nLabels` to patch `FD_LANGUAGE` observable\n */\nexport function patchDeprecatedI18nLabels() {\n const deprecatedSymbol = inject(CalendarI18nLabels, { optional: true });\n if (deprecatedSymbol) {\n return inject(FD_LANGUAGE, { skipSelf: true }).pipe(switchMap((existingLang) => deprecatedSymbol.labelsChange.pipe(startWith(null), map(() => existingLang))), map((existingLang) => ({\n ...existingLang,\n coreCalendar: {\n ...existingLang.coreCalendar,\n ...deprecatedSymbol\n }\n })));\n }\n return inject(FD_LANGUAGE, { skipSelf: true });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0Y2gtZGVwcmVjYXRlZC1pMThuLWxhYmVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9wYXRjaC1kZXByZWNhdGVkLWkxOG4tbGFiZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBYyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRTs7R0FFRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMvQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUN2QixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUNKLEVBQ0QsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLEdBQUcsWUFBWTtZQUNmLFlBQVksRUFBRTtnQkFDVixHQUFHLFlBQVksQ0FBQyxZQUFZO2dCQUM1QixHQUFHLGdCQUFnQjthQUN0QjtTQUNKLENBQUMsQ0FBQyxDQUNOLENBQUM7SUFDTixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkRfTEFOR1VBR0UsIEZkTGFuZ3VhZ2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJJMThuTGFiZWxzIH0gZnJvbSAnLi9pMThuL2NhbGVuZGFyLWkxOG4tbGFiZWxzJztcblxuLyoqXG4gKiBVc2UgZGVwcmVjYXRlZCBgQ2FsZW5kYXJJMThuTGFiZWxzYCB0byBwYXRjaCBgRkRfTEFOR1VBR0VgIG9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoRGVwcmVjYXRlZEkxOG5MYWJlbHMoKTogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPiB7XG4gICAgY29uc3QgZGVwcmVjYXRlZFN5bWJvbCA9IGluamVjdChDYWxlbmRhckkxOG5MYWJlbHMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgaWYgKGRlcHJlY2F0ZWRTeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIGluamVjdChGRF9MQU5HVUFHRSwgeyBza2lwU2VsZjogdHJ1ZSB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChleGlzdGluZ0xhbmcpID0+XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZFN5bWJvbC5sYWJlbHNDaGFuZ2UucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gZXhpc3RpbmdMYW5nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKGV4aXN0aW5nTGFuZykgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZ0xhbmcsXG4gICAgICAgICAgICAgICAgY29yZUNhbGVuZGFyOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nTGFuZy5jb3JlQ2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgICAgIC4uLmRlcHJlY2F0ZWRTeW1ib2xcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluamVjdChGRF9MQU5HVUFHRSwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbn1cbiJdfQ==","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_LANGUAGE } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './calendar-errors';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarService } from './calendar.service';\nimport { DateRange } from './models/date-range';\nimport { patchDeprecatedI18nLabels } from './patch-deprecated-i18n-labels';\nimport { CalendarTypeEnum, FdCalendarViewEnum } from './types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/content-density\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\nlet calendarUniqueId = 0;\n/**\n * Months: 1 = January, 12 = december.\n * Days: 1 = Sunday, 7 = Saturday\n *\n * Calendar component used for selecting dates, typically used by the DatePicker and DateTimePicker components.\n * Supports the Angular forms module, enabling form validity, ngModel, etc.\n * ```html\n * <fd-calendar></fd-calendar>\n * ```\n *\n */\nexport class CalendarComponent {\n /** @hidden */\n constructor(_elementRef, _changeDetectorRef, _contentDensityObserver, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /** The currently selected date model with multiple ranges. */\n this.selectedMultipleDateRanges = [];\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = false;\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** Actually shown active view one of 'day' | 'month' | 'year' */\n this.activeView = FdCalendarViewEnum.Day;\n /**\n * The type of calendar\n * 'single' for single date selection\n * 'range' for a range of dates.\n */\n this.calType = CalendarTypeEnum.Single;\n /** Id of the calendar. If none is provided, one will be generated. */\n this.id = 'fd-calendar-' + calendarUniqueId++;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with D object as a parameter. ex:\n * `rule: (fdDate: D) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n this.rangeHoverEffect = false;\n /** Whether to pick the date range in month or year or days format\n * Day format will have a month and year including day\n * Month format will have year including month\n * Year format will have just year\n * Values can be 'month' for Month format, 'year' for Year format or nothing for day format\n */\n this.dateRangeFormat = '';\n /** Event thrown every time active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /** Event thrown every time when value is overwritten from outside and throw back isValid */\n this.isValidDateChange = new EventEmitter();\n /** Event thrown every time when calendar should be closed */\n this.closeCalendar = new EventEmitter();\n /** Event thrown, when close button is clicked */\n this.closeClicked = new EventEmitter();\n /** @hidden */\n this._subscriptions = new Subscription();\n /** That allows to define function that should happen, when focus should normally escape of component */\n this.escapeFocusFunction = (event) => {\n event?.preventDefault();\n this._calendarHeaderComponent?.focus();\n };\n /**\n * Function used to disable certain dates in the calendar.\n */\n this.disableFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n this.disableRangeStartFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n this.disableRangeEndFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n _contentDensityObserver.subscribe();\n // set default value\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1);\n this.selectedDate = this._dateTimeAdapter.today();\n this._changeDetectorRef.markForCheck();\n this._listenToLocaleChanges();\n }\n /** @hidden */\n focusOut(event) {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n /** @hidden */\n ngOnInit() {\n this._prepareDisplayedView();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ('nextButtonDisableFunction' in changes ||\n 'previousButtonDisableFunction' in changes ||\n '_currentlyDisplayed' in changes) {\n this._setNavigationButtonsStates();\n }\n }\n /** @hidden */\n getWeekStartDay() {\n return this.startingDayOfWeek === undefined ? this._adapterStartingDayOfWeek : this.startingDayOfWeek;\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms.\n */\n writeValue(selected) {\n let valid = true;\n const isValidDate = (date) => date != null && this._dateTimeAdapter.isValid(date);\n const isValidRange = (range) => range != null && isValidDate(range.start) && isValidDate(range.end);\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n const dates = Array.isArray(selected) ? selected : [selected];\n valid = dates.every(isValidDate);\n this.selectedMultipleDates = dates;\n }\n else if (this.calType === CalendarTypeEnum.Range) {\n const ranges = Array.isArray(selected) ? selected : [];\n valid = ranges.every(isValidRange);\n this.selectedMultipleDateRanges = ranges.map((range) => ({\n start: range?.start || null,\n end: range?.end || null\n }));\n }\n }\n else {\n if (this.calType === CalendarTypeEnum.Single) {\n valid = isValidDate(selected);\n this.selectedDate = selected;\n }\n else if (this.calType === CalendarTypeEnum.Range) {\n const range = selected;\n valid = range && isValidRange(range);\n this.selectedRangeDate = range\n ? { start: range.start || null, end: range.end || null }\n : {\n start: null,\n end: null\n };\n }\n }\n if (valid) {\n this._prepareDisplayedView();\n }\n this._changeDetectorRef.detectChanges();\n this.isValidDateChange.emit(valid);\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Method that handle active view change and throws event.\n *\n * Fired by calendar header component.\n */\n handleActiveViewChange(activeView) {\n if (activeView === this.activeView) {\n return;\n }\n this.activeView = activeView;\n this.activeViewChange.emit(activeView);\n if (activeView === FdCalendarViewEnum.Month) {\n this.onMonthViewSelected();\n }\n if (activeView === FdCalendarViewEnum.Year) {\n this.onYearViewSelected();\n }\n if (activeView === FdCalendarViewEnum.AggregatedYear) {\n this.onYearsRangeViewSelected();\n }\n this._setNavigationButtonsStates();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected single date changed\n */\n selectedDateChanged(date) {\n this.selectedDate = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedDateChange.emit(date);\n this.closeCalendar.emit();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected multi date changed\n */\n selectedMultipleDatesChanged(date) {\n this.selectedMultipleDates = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedMultipleDatesChange.emit(date);\n this.closeCalendar.emit();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedRangeDateChanged(dates) {\n if (dates) {\n this.selectedRangeDate = { start: dates.start, end: dates.end };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this.closeCalendar.emit();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedMultipleDateRangesChanged(dates) {\n if (dates) {\n this.selectedMultipleDateRanges = dates;\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n this.onChange(this.selectedMultipleDateRanges);\n this.closeCalendar.emit();\n }\n }\n /** Function that handles next arrow icon click, depending on current view it changes month, year or list of years */\n handleNextArrowClick() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayNextMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayNextYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayNextYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayNextYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n /** Function that handles previous arrow icon click, depending on current view it changes month, year or list of years */\n handlePreviousArrowClick() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayPreviousMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayPreviousYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayPreviousYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayPreviousYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n /** Function that allows to switch actual view to next month */\n displayNextMonth() {\n if (this._currentlyDisplayed.month === 12) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month + 1\n };\n }\n }\n /** Function that allows to switch actual view to previous month */\n displayPreviousMonth() {\n if (this._currentlyDisplayed.month <= 1) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month - 1\n };\n }\n }\n /** Function that allows to switch actual view to next year */\n displayNextYear() {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year + 1 };\n }\n /** Function that allows to switch actual view to previous year */\n displayPreviousYear() {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year - 1 };\n }\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearList() {\n this._yearViewComponent.loadNextYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearList() {\n this._yearViewComponent.loadPreviousYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearsList() {\n this._aggregatedYearViewComponent.loadNextYearsList();\n }\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearsList() {\n this._aggregatedYearViewComponent.loadPreviousYearsList();\n }\n /**\n * Function that allows to change currently displayed month/year configuration,\n * which are connected to days displayed\n */\n setCurrentlyDisplayed(date) {\n if (this._dateTimeAdapter.isValid(date)) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(date),\n year: this._dateTimeAdapter.getYear(date)\n };\n }\n }\n /**\n * Set initial focus on one of the calendar's element\n */\n initialFocus() {\n this._getActiveFocusableView()?.setFocusOnCell();\n }\n /**\n * @hidden\n * Function that handles changes from month view child component, changes actual view and changes currently displayed month\n */\n handleMonthViewChange(month) {\n this._currentlyDisplayed = { month, year: this._currentlyDisplayed.year };\n // if mm/yyyy format date is not enabled then only show days view\n if (!this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n this.activeViewChange.emit(this.activeView);\n }\n /** Select year */\n selectedYear(yearSelected) {\n this._currentlyDisplayed.year = yearSelected;\n // if month format date range is enabled then on selecting year show month view else show days view\n // if year format date range is enabled then view remains same on selecting year\n if (this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Month;\n this.onMonthViewSelected();\n }\n else if (this.isDateRangeYearFormat()) {\n this.activeView = FdCalendarViewEnum.Year;\n this.onYearViewSelected();\n }\n else {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n }\n /** Select year range */\n selectedYears(yearsSelected) {\n this.activeView = FdCalendarViewEnum.Year;\n this._currentlyDisplayed = {\n ...this._currentlyDisplayed,\n year: yearsSelected.startYear\n };\n this.onYearViewSelected();\n }\n /** @hidden */\n onDaysViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._dayViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onMonthViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._monthViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onYearViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._yearViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onYearsRangeViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._aggregatedYearViewComponent?.setFocusOnCell();\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid() {\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n return (this.selectedMultipleDates &&\n this.selectedMultipleDates.every((d) => this._dateTimeAdapter.isValid(d)));\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (this.selectedMultipleDateRanges &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.start)) &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.end)));\n }\n }\n else {\n if (this.calType === CalendarTypeEnum.Single) {\n return this._dateTimeAdapter.isValid(this.selectedDate);\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (this.selectedRangeDate &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end));\n }\n }\n return false;\n }\n /** Whether the date range format is month */\n isDateRangeMonthFormat() {\n return this.dateRangeFormat === 'month';\n }\n /** Whether the date range format is year */\n isDateRangeYearFormat() {\n return this.dateRangeFormat === 'year';\n }\n /** @hidden */\n _listenToLocaleChanges() {\n this._subscriptions.add(this._dateTimeAdapter.localeChanges.subscribe(() => {\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1);\n this._changeDetectorRef.markForCheck();\n }));\n }\n /**\n * @hidden\n * Method that sets up the currently displayed variables, like shown month and year.\n * Day grid is based on currently displayed month and year\n */\n _prepareDisplayedView() {\n const { selectedDate, selectedRangeDate, selectedMultipleDates, selectedMultipleDateRanges } = this;\n if (this.calType === CalendarTypeEnum.Single &&\n this._dateTimeAdapter.isValid(selectedDate) &&\n !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedDate);\n }\n else if (selectedMultipleDates?.length > 0 && this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDates[0]);\n }\n else if (selectedRangeDate?.start && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.start);\n }\n else if (selectedRangeDate?.end && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.end);\n }\n else if (selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].start &&\n this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].start);\n }\n else if (selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].end &&\n this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].end);\n }\n else {\n const today = this._dateTimeAdapter.today();\n this._setCurrentlyDisplayed(today);\n }\n }\n /** @hidden */\n _setCurrentlyDisplayed(date) {\n this._currentlyDisplayed = {\n year: this._dateTimeAdapter.getYear(date),\n month: this._dateTimeAdapter.getMonth(date)\n };\n }\n /** @hidden */\n _getActiveFocusableView() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n return this._dayViewComponent;\n case FdCalendarViewEnum.Month:\n return this._monthViewComponent;\n case FdCalendarViewEnum.Year:\n return this._yearViewComponent;\n case FdCalendarViewEnum.AggregatedYear:\n return this._aggregatedYearViewComponent;\n default:\n return null;\n }\n }\n /** @hidden */\n _setNavigationButtonsStates() {\n this.previousButtonDisabled = this._isNavigationButtonDisabled(this.previousButtonDisableFunction);\n this.nextButtonDisabled = this._isNavigationButtonDisabled(this.nextButtonDisableFunction);\n this._changeDetectorRef.markForCheck();\n }\n /** @hidden */\n _isNavigationButtonDisabled(disableFunction) {\n return (typeof disableFunction === 'function' &&\n disableFunction(this.selectedDate, this._currentlyDisplayed, this.activeView));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarComponent, isStandalone: true, selector: \"fd-calendar\", inputs: { selectedDate: \"selectedDate\", selectedMultipleDates: \"selectedMultipleDates\", selectedRangeDate: \"selectedRangeDate\", selectedMultipleDateRanges: \"selectedMultipleDateRanges\", markWeekends: \"markWeekends\", showWeekNumbers: \"showWeekNumbers\", allowMultipleSelection: \"allowMultipleSelection\", mobileLandscape: \"mobileLandscape\", mobilePortrait: \"mobilePortrait\", activeView: \"activeView\", startingDayOfWeek: \"startingDayOfWeek\", calType: \"calType\", id: \"id\", specialDaysRules: \"specialDaysRules\", yearGrid: \"yearGrid\", aggregatedYearGrid: \"aggregatedYearGrid\", rangeHoverEffect: \"rangeHoverEffect\", dateRangeFormat: \"dateRangeFormat\", previousButtonDisableFunction: \"previousButtonDisableFunction\", nextButtonDisableFunction: \"nextButtonDisableFunction\", associatedLegendId: \"associatedLegendId\", escapeFocusFunction: \"escapeFocusFunction\", disableFunction: \"disableFunction\", disableRangeStartFunction: \"disableRangeStartFunction\", disableRangeEndFunction: \"disableRangeEndFunction\" }, outputs: { activeViewChange: \"activeViewChange\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", isValidDateChange: \"isValidDateChange\", closeCalendar: \"closeCalendar\", closeClicked: \"closeClicked\" }, host: { listeners: { \"focusout\": \"focusOut($event)\" }, properties: { \"attr.id\": \"id\", \"class.fd-calendar--mobile-landscape\": \"this.mobileLandscape\", \"class.fd-calendar--mobile-portrait\": \"this.mobilePortrait\" }, classAttribute: \"fd-calendar fd-has-display-block\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE,\n useFactory: patchDeprecatedI18nLabels\n }\n ], viewQueries: [{ propertyName: \"_dayViewComponent\", first: true, predicate: CalendarDayViewComponent, descendants: true }, { propertyName: \"_monthViewComponent\", first: true, predicate: CalendarMonthViewComponent, descendants: true }, { propertyName: \"_yearViewComponent\", first: true, predicate: CalendarYearViewComponent, descendants: true }, { propertyName: \"_aggregatedYearViewComponent\", first: true, predicate: CalendarAggregatedYearViewComponent, descendants: true }, { propertyName: \"_calendarHeaderComponent\", first: true, predicate: CalendarHeaderComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<fd-calendar-header\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [activeView]=\\\"activeView\\\"\\n [id]=\\\"id\\\"\\n [calendarYearGrid]=\\\"yearGrid\\\"\\n (closeClicked)=\\\"closeClicked.emit()\\\"\\n (nextClicked)=\\\"handleNextArrowClick()\\\"\\n (previousClicked)=\\\"handlePreviousArrowClick()\\\"\\n [previousButtonDisabled]=\\\"previousButtonDisabled\\\"\\n [nextButtonDisabled]=\\\"nextButtonDisabled\\\"\\n (activeViewChange)=\\\"handleActiveViewChange($event)\\\"\\n></fd-calendar-header>\\n@if (_currentlyDisplayed) {\\n @if (activeView === 'day') {\\n <fd-calendar-day-view\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n (selectedDateChange)=\\\"selectedDateChanged($event)\\\"\\n (selectedMultipleDatesChange)=\\\"selectedMultipleDatesChanged($event)\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"selectedMultipleDateRangesChanged($event)\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [startingDayOfWeek]=\\\"getWeekStartDay()\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [calType]=\\\"calType\\\"\\n [id]=\\\"id\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n (nextMonthSelect)=\\\"displayNextMonth()\\\"\\n (previousMonthSelect)=\\\"displayPreviousMonth()\\\"\\n [associatedLegendId]=\\\"associatedLegendId\\\"\\n ></fd-calendar-day-view>\\n } @else if (activeView === 'month') {\\n <fd-calendar-month-view\\n [monthSelected]=\\\"_currentlyDisplayed.month\\\"\\n [year]=\\\"_currentlyDisplayed.year\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeMonthYearFormat]=\\\"isDateRangeMonthFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (monthClicked)=\\\"handleMonthViewChange($event)\\\"\\n ></fd-calendar-month-view>\\n } @else if (activeView === 'year') {\\n <fd-calendar-year-view\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeYearFormat]=\\\"isDateRangeYearFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (yearClicked)=\\\"selectedYear($event)\\\"\\n >\\n </fd-calendar-year-view>\\n } @else if (activeView === 'aggregatedYear') {\\n <fd-calendar-aggregated-year-view\\n (yearsClicked)=\\\"selectedYears($event)\\\"\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [aggregatedYearsViewGrid]=\\\"aggregatedYearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n >\\n </fd-calendar-aggregated-year-view>\\n }\\n}\\n\", styles: [\".fd-calendar .fd-calendar__my-item,.fd-calendar__item{background-color:var(--fdCalendar_Item_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-block:var(--fdCalendar_Item_Spacing);margin-inline:0;margin-inline:var(--fdCalendar_Item_Spacing);min-width:var(--fdCalendar_Item_Width);overflow:hidden;padding-block:0;padding-inline:0;position:relative;-webkit-box-flex:1;border:var(--fdCalendar_Item_Border);cursor:pointer;display:inline-block;-ms-flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2);flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2)}.fd-calendar .fd-calendar__my-item:after,.fd-calendar .fd-calendar__my-item:before,.fd-calendar__item:after,.fd-calendar__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{border-bottom:none;border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:0;content:\\\"\\\";height:.3125rem;left:0;position:absolute;right:0;width:100%}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus{z-index:5}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus .fd-calendar__text-wrapper:after,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus .fd-calendar__text-wrapper:after{z-index:var(--fdCalendar_Text_Wrapper_After_Z)}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus{z-index:5}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text-wrapper:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text-wrapper:after{border-bottom:none}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text:after{bottom:0;content:\\\"\\\";height:.1875rem;left:0;position:absolute;right:0;width:100%}.fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:.5rem;left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today[class*=fd-calendar__item--legend-][dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-1:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-1:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-1:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor1);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-1[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-2:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-2:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-2:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor2);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-2[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-3:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-3:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-3:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor3);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-3[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-4:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-4:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-4:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor4);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-4[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-5:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-5:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-5:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor5);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-5[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-6:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-6:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-6:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor6);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-6[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-7:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-7:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-7:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor7);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-7[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-8:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-8:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-8:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor8);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-8[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-9:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-9:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-9:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor9);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-9[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-10:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-10:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-10:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor10);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-10[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-11:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-11:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-11:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor11);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-11[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-12:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-12:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-12:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor12);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-12[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-13:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-13:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-13:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor13);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-13[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-14:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-14:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-14:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor14);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-14[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-15:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-15:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-15:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor15);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-15[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-16:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-16:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-16:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor16);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-16[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-17:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-17:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-17:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor17);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-17[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-18:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-18:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-18:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor18);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-18[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-19:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-19:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-19:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor19);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-19[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-20:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-20:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-20:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor20);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-20[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar{--fdCalendar_Item_Width:2rem;--fdCalendar_Item_Height:2.75rem;--fdCalendar_Padding:.5rem;--fdCalendar_Background:var(--sapList_Background);--fdCalendar_Width:calc(var(--fdCalendar_Item_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Action_Padding:.25rem;--fdCalendar_Action_Width:auto;--fdCalendar_Button_Horizontal_Space:.25rem;--fdCalendar_Item_Spacing:.0625rem;--fdCalendar_Item_Background:var(--sapLegend_WorkingBackground);--fdCalendar_Item_Helper_Height:1.875rem;--fdCalendar_Item_Font_Size:var(--sapFontSize);--fdCalendar_Item_Border:0;--fdCalendar_Item_Current_Border_Width:.125rem;--fdCalendar_Item_Text_Color:var(--sapTextColor);--fdCalendar_Item_Text_Height:2.125rem;background-color:var(--fdCalendar_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Padding);padding-inline:0;padding-inline:var(--fdCalendar_Padding);width:var(--fdCalendar_Width)}.fd-calendar:after,.fd-calendar:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__navigation{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Button_Horizontal_Space);padding-inline:0;position:relative;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-calendar__navigation:after,.fd-calendar__navigation:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.fd-calendar__action:after,.fd-calendar__action:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action:not(:last-child,:first-child){margin-inline:var(--fdCalendar_Action_Padding)}.fd-calendar__action:first-child{-webkit-margin-end:var(--fdCalendar_Action_Padding);margin-inline-end:var(--fdCalendar_Action_Padding)}.fd-calendar__action:last-child{-webkit-margin-start:var(--fdCalendar_Action_Padding);margin-inline-start:var(--fdCalendar_Action_Padding)}.fd-calendar__action>[type=button]{width:100%}.fd-calendar__action--arrow-left,.fd-calendar__action--arrow-right{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:var(--fdCalendar_Action_Width)}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{-webkit-margin-start:auto;margin-inline-start:auto}.fd-calendar__action [class*=sap-icon][dir=rtl],[dir=rtl] .fd-calendar__action [class*=sap-icon]{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fd-calendar__text-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.fd-calendar__text-wrapper:after,.fd-calendar__text-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__item{height:var(--fdCalendar_Item_Height)}.fd-calendar__item.is-hover,.fd-calendar__item:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item.is-disabled,.fd-calendar__item:disabled,.fd-calendar__item[aria-disabled=true]{opacity:.4;pointer-events:none}.fd-calendar__item--weekend{--fdCalendar_Item_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar__item--weekend.is-hover,.fd-calendar__item--weekend:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background);-webkit-filter:brightness(1.05);filter:brightness(1.05)}.fd-calendar__item--other{--fdCalendar_Item_Background:var(--fdCalendar_Background)}.fd-calendar__item--other.is-hover,.fd-calendar__item--other:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item--other .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor)}.fd-calendar__item--selected{--fdCalendar_Item_Background:var(--sapContent_Selected_Background);--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border)}.fd-calendar__item--selected.is-hover,.fd-calendar__item--selected:hover{--fdCalendar_Item_Background:var(--fdCalendar_Item_Active_Background_Hover)}.fd-calendar__item--selected .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_Selected_TextColor);font-family:var(--fdCalendar_Active_Item_Font_Weight)}.fd-calendar__item--range{--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border);--fdCalendar_Item_Background:var(--sapList_SelectionBackgroundColor)}.fd-calendar__item--range.is-hover,.fd-calendar__item--range:hover{--fdCalendar_Item_Background:var(--sapList_Hover_SelectionBackground)}.fd-calendar__item--today.fd-calendar__item--range:after,.fd-calendar__item--today.fd-calendar__item--selected:after{border:.0625rem solid var(--sapList_SelectionBorderColor);border-radius:var(--fdCalendar_Item_Today_Selected_Bottom_Radius);bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item--today{--fdCalendar_Item_Border:solid .125rem var(--sapLegend_CurrentDateTime);-webkit-box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;position:relative}.fd-calendar__item--today:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item.fd-calendar__item--selected.is-focus,.fd-calendar__item.fd-calendar__item--selected:focus{z-index:5}.fd-calendar__item.fd-calendar__item--selected.is-focus .fd-calendar__text-wrapper,.fd-calendar__item.fd-calendar__item--selected:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Item_Text_Active_Focus)}.fd-calendar__item:focus-visible{outline:none}.fd-calendar__item.is-focus,.fd-calendar__item:focus{z-index:5}.fd-calendar__item.is-focus .fd-calendar__text-wrapper,.fd-calendar__item:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Text_Wrapper_Border);-webkit-box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);height:var(--fdCalendar_Text_Wrapper_Height);margin-block:var(--fdCalendar_Text_Wrapper_Margin);margin-inline:var(--fdCalendar_Text_Wrapper_Margin)}.fd-calendar__item.is-focus .fd-calendar__text,.fd-calendar__item:focus .fd-calendar__text{border:var(--fdCalendar_Text_Border_Focus)}.fd-calendar__item--side-helper{-ms-flex-item-align:center;align-self:center;pointer-events:none;--fdCalendar_Item_Height:var(--fdCalendar_Item_Side_Helper,var(--fdCalendar_Item_Helper_Height));--fdCalendar_Item_Background:var(--sapList_Background)}.fd-calendar__item--side-helper .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor);--fdCalendar_Item_Font_Size:var(--sapFontSmallSize)}.fd-calendar .fd-calendar__my-item{max-height:var(--fdCalendar_Item_Height)}.fd-calendar .fd-calendar__my-item-button{min-width:100%;padding-block:0;padding-inline:0}.fd-calendar .fd-calendar__my-item .fd-calendar__text{color:inherit}.fd-calendar__content{border:0;border-spacing:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;width:100%}.fd-calendar__content:after,.fd-calendar__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__content--months,.fd-calendar__content--years{-webkit-padding-before:var(--fdCalendar_Item_Helper_Height);padding-block-start:var(--fdCalendar_Item_Helper_Height);--fdCalendar_Item_Background:transparent}.fd-calendar__content--screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin-block:-1px;margin-inline:-1px;overflow:hidden;padding-block:0;padding-inline:0;white-space:nowrap;width:1px}.fd-calendar__group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table-row-group;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__group:after,.fd-calendar__group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__row:after,.fd-calendar__row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:.1875rem;color:var(--fdCalendar_Item_Text_Color);font-size:var(--fdCalendar_Item_Font_Size);height:var(--fdCalendar_Item_Text_Height);min-width:1.375rem;text-shadow:var(--fdCalendar_Text_Shadow);-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:calc(100% - .7rem);position:relative}.fd-calendar__text:after,.fd-calendar__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text.is-focus,.fd-calendar__text:focus{border:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth);z-index:5}.fd-calendar[class*=-compact],.fd-calendar[class*=-condensed],[class*=-compact] .fd-calendar:not([class*=-cozy]),[class*=-condensed] .fd-calendar:not([class*=-cozy]){--fdCalendar_Width:calc(var(--fdCalendar_Action_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Padding:.5rem;--fdCalendar_Item_Text_Height:1.375rem;--fdCalendar_Item_Height:2rem;--fdCalendar_Button_Horizontal_Space:.1875rem;--fdCalendar_Action_Width:2rem;--fdCalendar_Item_Width:var(--fdCalendar_Action_Width)}.fd-calendar--mobile-landscape,.fd-calendar--mobile-portrait{height:100%;width:100%}.fd-calendar--mobile-landscape{--fdCalendar_Padding:0;--fdCalendar_Item_Side_Helper:1.625rem}.fd-calendar--mobile-landscape .fd-calendar__navigation--main{max-width:20rem}.fd-calendar--mobile-portrait{--fdCalendar_Padding:0;-webkit-padding-before:1rem;padding-block-start:1rem}.fd-calendar-legend{background:var(--sapList_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);-webkit-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);-moz-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:.5rem;padding-inline:0;padding-inline:.5rem}.fd-calendar-legend:after,.fd-calendar-legend:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend--auto-column{--fdCalendar_Legend_Column_Width:auto}.fd-calendar-legend__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;border-radius:.25rem;-ms-flex-direction:row;flex-direction:row;gap:.5rem;min-width:7.5rem;padding-block:var(--fdCalendar_Legend_Item_Padding,.25rem);padding-inline:var(--fdCalendar_Legend_Item_Padding,.25rem)}.fd-calendar-legend__item:after,.fd-calendar-legend__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:focus{z-index:5}.fd-calendar-legend__item.is-active,.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:active,.fd-calendar-legend__item:focus{-webkit-box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset;box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset}.fd-calendar-legend__item--appointment{--fdCalendar_Legend_Marker_Border_Radius:1rem}.fd-calendar-legend__item--today{--fdCalendar_Legend_Marker_Border_Width:.125rem;--fdCalendar_Legend_Marker_Background:var(--sapList_Background);--fdCalendar_Legend_Marker_Border_Color:var(--sapLegend_CurrentDateTime)}.fd-calendar-legend__item--selected{--fdCalendar_Legend_Marker_Background:var(--sapSelectedColor)}.fd-calendar-legend__item--work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_WorkingBackground)}.fd-calendar-legend__item--non-work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar-legend__item--placeholder-1{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor1)}.fd-calendar-legend__item--placeholder-2{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor2)}.fd-calendar-legend__item--placeholder-3{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor3)}.fd-calendar-legend__item--placeholder-4{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor4)}.fd-calendar-legend__item--placeholder-5{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor5)}.fd-calendar-legend__item--placeholder-6{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor6)}.fd-calendar-legend__item--placeholder-7{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor7)}.fd-calendar-legend__item--placeholder-8{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor8)}.fd-calendar-legend__item--placeholder-9{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor9)}.fd-calendar-legend__item--placeholder-10{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor10)}.fd-calendar-legend__item--placeholder-11{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor11)}.fd-calendar-legend__item--placeholder-12{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor12)}.fd-calendar-legend__item--placeholder-13{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor13)}.fd-calendar-legend__item--placeholder-14{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor14)}.fd-calendar-legend__item--placeholder-15{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor15)}.fd-calendar-legend__item--placeholder-16{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor16)}.fd-calendar-legend__item--placeholder-17{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor17)}.fd-calendar-legend__item--placeholder-18{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor18)}.fd-calendar-legend__item--placeholder-19{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor19)}.fd-calendar-legend__item--placeholder-20{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor20)}.fd-calendar-legend__marker{background:var(--fdCalendar_Legend_Marker_Background,var(--sapList_Background));border:0;border-color:var(--fdCalendar_Legend_Marker_Border_Color,var(--sapContent_ForegroundBorderColor));border-radius:var(--fdCalendar_Legend_Marker_Border_Radius,0);border-style:solid;border-width:var(--fdCalendar_Legend_Marker_Border_Width,.0625rem);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;max-height:1rem;max-width:1rem;min-height:1rem;min-width:1rem;padding-block:0;padding-inline:0;width:1rem}.fd-calendar-legend__marker:after,.fd-calendar-legend__marker:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_LabelColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1rem;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;vertical-align:middle;white-space:pre-line}.fd-calendar-legend__text:after,.fd-calendar-legend__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend[class*=-compact],.fd-calendar-legend[class*=-condensed],[class*=-compact] .fd-calendar-legend:not([class*=-cozy]),[class*=-condensed] .fd-calendar-legend:not([class*=-cozy]){--fdCalendar_Legend_Item_Padding:.125rem}.fd-has-display-block{display:block}.fd-calendar__text{max-width:calc(100% - .375rem)}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/calendar.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: \"ngmodule\", type: ContentDensityModule }, { kind: \"component\", type: CalendarHeaderComponent, selector: \"fd-calendar-header\", inputs: [\"activeView\", \"currentlyDisplayed\", \"previousButtonDisabled\", \"nextButtonDisabled\", \"calendarYearGrid\", \"id\", \"mobileLandscape\"], outputs: [\"activeViewChange\", \"previousClicked\", \"nextClicked\"] }, { kind: \"component\", type: CalendarDayViewComponent, selector: \"fd-calendar-day-view\", inputs: [\"currentlyDisplayed\", \"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\", \"startingDayOfWeek\", \"calType\", \"id\", \"associatedLegendId\", \"rangeHoverEffect\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"focusEscapeFunction\", \"specialDaysRules\"], outputs: [\"nextMonthSelect\", \"previousMonthSelect\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"disableFunctionChange\", \"disableRangeStartFunctionChange\", \"disableRangeEndFunctionChange\", \"startingDayOfWeekChange\", \"calTypeChange\", \"rangeHoverEffectChange\", \"allowMultipleSelectionChange\"] }, { kind: \"component\", type: CalendarMonthViewComponent, selector: \"fd-calendar-month-view\", inputs: [\"id\", \"monthSelected\", \"focusEscapeFunction\", \"year\", \"isDateRangeMonthYearFormat\", \"rangeHoverEffect\", \"selectedRangeDate\"], outputs: [\"monthClicked\", \"selectedRangeDateChange\"] }, { kind: \"component\", type: CalendarYearViewComponent, selector: \"fd-calendar-year-view\", inputs: [\"id\", \"focusEscapeFunction\", \"yearSelected\", \"yearViewGrid\", \"isDateRangeYearFormat\", \"rangeHoverEffect\", \"selectedRangeDate\"], outputs: [\"yearClicked\", \"selectedRangeDateChange\"] }, { kind: \"component\", type: CalendarAggregatedYearViewComponent, selector: \"fd-calendar-aggregated-year-view\", inputs: [\"id\", \"focusEscapeFunction\", \"yearSelected\", \"aggregatedYearsViewGrid\", \"yearViewGrid\"], outputs: [\"yearsClicked\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar', encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE,\n useFactory: patchDeprecatedI18nLabels\n }\n ], host: {\n '[attr.id]': 'id',\n class: 'fd-calendar fd-has-display-block'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n ContentDensityModule,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent\n ], template: \"<fd-calendar-header\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [activeView]=\\\"activeView\\\"\\n [id]=\\\"id\\\"\\n [calendarYearGrid]=\\\"yearGrid\\\"\\n (closeClicked)=\\\"closeClicked.emit()\\\"\\n (nextClicked)=\\\"handleNextArrowClick()\\\"\\n (previousClicked)=\\\"handlePreviousArrowClick()\\\"\\n [previousButtonDisabled]=\\\"previousButtonDisabled\\\"\\n [nextButtonDisabled]=\\\"nextButtonDisabled\\\"\\n (activeViewChange)=\\\"handleActiveViewChange($event)\\\"\\n></fd-calendar-header>\\n@if (_currentlyDisplayed) {\\n @if (activeView === 'day') {\\n <fd-calendar-day-view\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n (selectedDateChange)=\\\"selectedDateChanged($event)\\\"\\n (selectedMultipleDatesChange)=\\\"selectedMultipleDatesChanged($event)\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"selectedMultipleDateRangesChanged($event)\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [startingDayOfWeek]=\\\"getWeekStartDay()\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [calType]=\\\"calType\\\"\\n [id]=\\\"id\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n (nextMonthSelect)=\\\"displayNextMonth()\\\"\\n (previousMonthSelect)=\\\"displayPreviousMonth()\\\"\\n [associatedLegendId]=\\\"associatedLegendId\\\"\\n ></fd-calendar-day-view>\\n } @else if (activeView === 'month') {\\n <fd-calendar-month-view\\n [monthSelected]=\\\"_currentlyDisplayed.month\\\"\\n [year]=\\\"_currentlyDisplayed.year\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeMonthYearFormat]=\\\"isDateRangeMonthFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (monthClicked)=\\\"handleMonthViewChange($event)\\\"\\n ></fd-calendar-month-view>\\n } @else if (activeView === 'year') {\\n <fd-calendar-year-view\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeYearFormat]=\\\"isDateRangeYearFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (yearClicked)=\\\"selectedYear($event)\\\"\\n >\\n </fd-calendar-year-view>\\n } @else if (activeView === 'aggregatedYear') {\\n <fd-calendar-aggregated-year-view\\n (yearsClicked)=\\\"selectedYears($event)\\\"\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [aggregatedYearsViewGrid]=\\\"aggregatedYearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n >\\n </fd-calendar-aggregated-year-view>\\n }\\n}\\n\", styles: [\".fd-calendar .fd-calendar__my-item,.fd-calendar__item{background-color:var(--fdCalendar_Item_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-block:var(--fdCalendar_Item_Spacing);margin-inline:0;margin-inline:var(--fdCalendar_Item_Spacing);min-width:var(--fdCalendar_Item_Width);overflow:hidden;padding-block:0;padding-inline:0;position:relative;-webkit-box-flex:1;border:var(--fdCalendar_Item_Border);cursor:pointer;display:inline-block;-ms-flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2);flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2)}.fd-calendar .fd-calendar__my-item:after,.fd-calendar .fd-calendar__my-item:before,.fd-calendar__item:after,.fd-calendar__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{border-bottom:none;border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:0;content:\\\"\\\";height:.3125rem;left:0;position:absolute;right:0;width:100%}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus{z-index:5}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus .fd-calendar__text-wrapper:after,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus .fd-calendar__text-wrapper:after{z-index:var(--fdCalendar_Text_Wrapper_After_Z)}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus{z-index:5}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text-wrapper:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text-wrapper:after{border-bottom:none}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text:after{bottom:0;content:\\\"\\\";height:.1875rem;left:0;position:absolute;right:0;width:100%}.fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:.5rem;left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today[class*=fd-calendar__item--legend-][dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-1:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-1:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-1:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor1);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-1[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-2:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-2:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-2:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor2);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-2[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-3:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-3:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-3:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor3);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-3[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-4:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-4:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-4:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor4);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-4[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-5:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-5:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-5:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor5);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-5[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-6:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-6:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-6:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor6);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-6[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-7:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-7:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-7:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor7);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-7[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-8:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-8:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-8:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor8);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-8[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-9:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-9:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-9:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor9);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-9[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-10:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-10:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-10:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor10);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-10[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-11:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-11:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-11:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor11);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-11[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-12:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-12:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-12:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor12);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-12[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-13:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-13:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-13:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor13);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-13[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-14:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-14:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-14:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor14);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-14[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-15:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-15:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-15:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor15);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-15[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-16:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-16:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-16:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor16);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-16[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-17:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-17:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-17:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor17);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-17[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-18:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-18:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-18:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor18);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-18[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-19:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-19:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-19:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor19);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-19[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-20:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-20:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-20:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor20);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-20[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar{--fdCalendar_Item_Width:2rem;--fdCalendar_Item_Height:2.75rem;--fdCalendar_Padding:.5rem;--fdCalendar_Background:var(--sapList_Background);--fdCalendar_Width:calc(var(--fdCalendar_Item_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Action_Padding:.25rem;--fdCalendar_Action_Width:auto;--fdCalendar_Button_Horizontal_Space:.25rem;--fdCalendar_Item_Spacing:.0625rem;--fdCalendar_Item_Background:var(--sapLegend_WorkingBackground);--fdCalendar_Item_Helper_Height:1.875rem;--fdCalendar_Item_Font_Size:var(--sapFontSize);--fdCalendar_Item_Border:0;--fdCalendar_Item_Current_Border_Width:.125rem;--fdCalendar_Item_Text_Color:var(--sapTextColor);--fdCalendar_Item_Text_Height:2.125rem;background-color:var(--fdCalendar_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Padding);padding-inline:0;padding-inline:var(--fdCalendar_Padding);width:var(--fdCalendar_Width)}.fd-calendar:after,.fd-calendar:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__navigation{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Button_Horizontal_Space);padding-inline:0;position:relative;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-calendar__navigation:after,.fd-calendar__navigation:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.fd-calendar__action:after,.fd-calendar__action:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action:not(:last-child,:first-child){margin-inline:var(--fdCalendar_Action_Padding)}.fd-calendar__action:first-child{-webkit-margin-end:var(--fdCalendar_Action_Padding);margin-inline-end:var(--fdCalendar_Action_Padding)}.fd-calendar__action:last-child{-webkit-margin-start:var(--fdCalendar_Action_Padding);margin-inline-start:var(--fdCalendar_Action_Padding)}.fd-calendar__action>[type=button]{width:100%}.fd-calendar__action--arrow-left,.fd-calendar__action--arrow-right{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:var(--fdCalendar_Action_Width)}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{-webkit-margin-start:auto;margin-inline-start:auto}.fd-calendar__action [class*=sap-icon][dir=rtl],[dir=rtl] .fd-calendar__action [class*=sap-icon]{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fd-calendar__text-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.fd-calendar__text-wrapper:after,.fd-calendar__text-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__item{height:var(--fdCalendar_Item_Height)}.fd-calendar__item.is-hover,.fd-calendar__item:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item.is-disabled,.fd-calendar__item:disabled,.fd-calendar__item[aria-disabled=true]{opacity:.4;pointer-events:none}.fd-calendar__item--weekend{--fdCalendar_Item_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar__item--weekend.is-hover,.fd-calendar__item--weekend:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background);-webkit-filter:brightness(1.05);filter:brightness(1.05)}.fd-calendar__item--other{--fdCalendar_Item_Background:var(--fdCalendar_Background)}.fd-calendar__item--other.is-hover,.fd-calendar__item--other:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item--other .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor)}.fd-calendar__item--selected{--fdCalendar_Item_Background:var(--sapContent_Selected_Background);--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border)}.fd-calendar__item--selected.is-hover,.fd-calendar__item--selected:hover{--fdCalendar_Item_Background:var(--fdCalendar_Item_Active_Background_Hover)}.fd-calendar__item--selected .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_Selected_TextColor);font-family:var(--fdCalendar_Active_Item_Font_Weight)}.fd-calendar__item--range{--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border);--fdCalendar_Item_Background:var(--sapList_SelectionBackgroundColor)}.fd-calendar__item--range.is-hover,.fd-calendar__item--range:hover{--fdCalendar_Item_Background:var(--sapList_Hover_SelectionBackground)}.fd-calendar__item--today.fd-calendar__item--range:after,.fd-calendar__item--today.fd-calendar__item--selected:after{border:.0625rem solid var(--sapList_SelectionBorderColor);border-radius:var(--fdCalendar_Item_Today_Selected_Bottom_Radius);bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item--today{--fdCalendar_Item_Border:solid .125rem var(--sapLegend_CurrentDateTime);-webkit-box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;position:relative}.fd-calendar__item--today:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item.fd-calendar__item--selected.is-focus,.fd-calendar__item.fd-calendar__item--selected:focus{z-index:5}.fd-calendar__item.fd-calendar__item--selected.is-focus .fd-calendar__text-wrapper,.fd-calendar__item.fd-calendar__item--selected:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Item_Text_Active_Focus)}.fd-calendar__item:focus-visible{outline:none}.fd-calendar__item.is-focus,.fd-calendar__item:focus{z-index:5}.fd-calendar__item.is-focus .fd-calendar__text-wrapper,.fd-calendar__item:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Text_Wrapper_Border);-webkit-box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);height:var(--fdCalendar_Text_Wrapper_Height);margin-block:var(--fdCalendar_Text_Wrapper_Margin);margin-inline:var(--fdCalendar_Text_Wrapper_Margin)}.fd-calendar__item.is-focus .fd-calendar__text,.fd-calendar__item:focus .fd-calendar__text{border:var(--fdCalendar_Text_Border_Focus)}.fd-calendar__item--side-helper{-ms-flex-item-align:center;align-self:center;pointer-events:none;--fdCalendar_Item_Height:var(--fdCalendar_Item_Side_Helper,var(--fdCalendar_Item_Helper_Height));--fdCalendar_Item_Background:var(--sapList_Background)}.fd-calendar__item--side-helper .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor);--fdCalendar_Item_Font_Size:var(--sapFontSmallSize)}.fd-calendar .fd-calendar__my-item{max-height:var(--fdCalendar_Item_Height)}.fd-calendar .fd-calendar__my-item-button{min-width:100%;padding-block:0;padding-inline:0}.fd-calendar .fd-calendar__my-item .fd-calendar__text{color:inherit}.fd-calendar__content{border:0;border-spacing:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;width:100%}.fd-calendar__content:after,.fd-calendar__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__content--months,.fd-calendar__content--years{-webkit-padding-before:var(--fdCalendar_Item_Helper_Height);padding-block-start:var(--fdCalendar_Item_Helper_Height);--fdCalendar_Item_Background:transparent}.fd-calendar__content--screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin-block:-1px;margin-inline:-1px;overflow:hidden;padding-block:0;padding-inline:0;white-space:nowrap;width:1px}.fd-calendar__group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table-row-group;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__group:after,.fd-calendar__group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__row:after,.fd-calendar__row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:.1875rem;color:var(--fdCalendar_Item_Text_Color);font-size:var(--fdCalendar_Item_Font_Size);height:var(--fdCalendar_Item_Text_Height);min-width:1.375rem;text-shadow:var(--fdCalendar_Text_Shadow);-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:calc(100% - .7rem);position:relative}.fd-calendar__text:after,.fd-calendar__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text.is-focus,.fd-calendar__text:focus{border:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth);z-index:5}.fd-calendar[class*=-compact],.fd-calendar[class*=-condensed],[class*=-compact] .fd-calendar:not([class*=-cozy]),[class*=-condensed] .fd-calendar:not([class*=-cozy]){--fdCalendar_Width:calc(var(--fdCalendar_Action_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Padding:.5rem;--fdCalendar_Item_Text_Height:1.375rem;--fdCalendar_Item_Height:2rem;--fdCalendar_Button_Horizontal_Space:.1875rem;--fdCalendar_Action_Width:2rem;--fdCalendar_Item_Width:var(--fdCalendar_Action_Width)}.fd-calendar--mobile-landscape,.fd-calendar--mobile-portrait{height:100%;width:100%}.fd-calendar--mobile-landscape{--fdCalendar_Padding:0;--fdCalendar_Item_Side_Helper:1.625rem}.fd-calendar--mobile-landscape .fd-calendar__navigation--main{max-width:20rem}.fd-calendar--mobile-portrait{--fdCalendar_Padding:0;-webkit-padding-before:1rem;padding-block-start:1rem}.fd-calendar-legend{background:var(--sapList_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);-webkit-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);-moz-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:.5rem;padding-inline:0;padding-inline:.5rem}.fd-calendar-legend:after,.fd-calendar-legend:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend--auto-column{--fdCalendar_Legend_Column_Width:auto}.fd-calendar-legend__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;border-radius:.25rem;-ms-flex-direction:row;flex-direction:row;gap:.5rem;min-width:7.5rem;padding-block:var(--fdCalendar_Legend_Item_Padding,.25rem);padding-inline:var(--fdCalendar_Legend_Item_Padding,.25rem)}.fd-calendar-legend__item:after,.fd-calendar-legend__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:focus{z-index:5}.fd-calendar-legend__item.is-active,.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:active,.fd-calendar-legend__item:focus{-webkit-box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset;box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset}.fd-calendar-legend__item--appointment{--fdCalendar_Legend_Marker_Border_Radius:1rem}.fd-calendar-legend__item--today{--fdCalendar_Legend_Marker_Border_Width:.125rem;--fdCalendar_Legend_Marker_Background:var(--sapList_Background);--fdCalendar_Legend_Marker_Border_Color:var(--sapLegend_CurrentDateTime)}.fd-calendar-legend__item--selected{--fdCalendar_Legend_Marker_Background:var(--sapSelectedColor)}.fd-calendar-legend__item--work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_WorkingBackground)}.fd-calendar-legend__item--non-work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar-legend__item--placeholder-1{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor1)}.fd-calendar-legend__item--placeholder-2{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor2)}.fd-calendar-legend__item--placeholder-3{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor3)}.fd-calendar-legend__item--placeholder-4{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor4)}.fd-calendar-legend__item--placeholder-5{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor5)}.fd-calendar-legend__item--placeholder-6{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor6)}.fd-calendar-legend__item--placeholder-7{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor7)}.fd-calendar-legend__item--placeholder-8{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor8)}.fd-calendar-legend__item--placeholder-9{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor9)}.fd-calendar-legend__item--placeholder-10{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor10)}.fd-calendar-legend__item--placeholder-11{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor11)}.fd-calendar-legend__item--placeholder-12{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor12)}.fd-calendar-legend__item--placeholder-13{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor13)}.fd-calendar-legend__item--placeholder-14{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor14)}.fd-calendar-legend__item--placeholder-15{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor15)}.fd-calendar-legend__item--placeholder-16{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor16)}.fd-calendar-legend__item--placeholder-17{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor17)}.fd-calendar-legend__item--placeholder-18{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor18)}.fd-calendar-legend__item--placeholder-19{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor19)}.fd-calendar-legend__item--placeholder-20{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor20)}.fd-calendar-legend__marker{background:var(--fdCalendar_Legend_Marker_Background,var(--sapList_Background));border:0;border-color:var(--fdCalendar_Legend_Marker_Border_Color,var(--sapContent_ForegroundBorderColor));border-radius:var(--fdCalendar_Legend_Marker_Border_Radius,0);border-style:solid;border-width:var(--fdCalendar_Legend_Marker_Border_Width,.0625rem);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;max-height:1rem;max-width:1rem;min-height:1rem;min-width:1rem;padding-block:0;padding-inline:0;width:1rem}.fd-calendar-legend__marker:after,.fd-calendar-legend__marker:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_LabelColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1rem;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;vertical-align:middle;white-space:pre-line}.fd-calendar-legend__text:after,.fd-calendar-legend__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend[class*=-compact],.fd-calendar-legend[class*=-condensed],[class*=-compact] .fd-calendar-legend:not([class*=-cozy]),[class*=-condensed] .fd-calendar-legend:not([class*=-cozy]){--fdCalendar_Legend_Item_Padding:.125rem}.fd-has-display-block{display:block}.fd-calendar__text{max-width:calc(100% - .375rem)}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/calendar.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.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], allowMultipleSelection: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.fd-calendar--mobile-landscape']\n }], mobilePortrait: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.fd-calendar--mobile-portrait']\n }], activeView: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], calType: [{\n type: Input\n }], id: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], dateRangeFormat: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }], isValidDateChange: [{\n type: Output\n }], closeCalendar: [{\n type: Output\n }], closeClicked: [{\n type: Output\n }], _dayViewComponent: [{\n type: ViewChild,\n args: [CalendarDayViewComponent]\n }], _monthViewComponent: [{\n type: ViewChild,\n args: [CalendarMonthViewComponent]\n }], _yearViewComponent: [{\n type: ViewChild,\n args: [CalendarYearViewComponent]\n }], _aggregatedYearViewComponent: [{\n type: ViewChild,\n args: [CalendarAggregatedYearViewComponent]\n }], _calendarHeaderComponent: [{\n type: ViewChild,\n args: [CalendarHeaderComponent]\n }], previousButtonDisableFunction: [{\n type: Input\n }], nextButtonDisableFunction: [{\n type: Input\n }], associatedLegendId: [{\n type: Input\n }], escapeFocusFunction: [{\n type: Input\n }], disableFunction: [{\n type: Input\n }], disableRangeStartFunction: [{\n type: Input\n }], disableRangeEndFunction: [{\n type: Input\n }], focusOut: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlyRyxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0ZBQXdGLENBQUM7QUFDN0ksT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDaEgsT0FBTyxFQUFF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blN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7IFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZHVsZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IgfSBmcm9tICcuL2NhbGVuZGFyLWVycm9ycyc7XG5pbXBvcnQgeyBDYWxlbmRhckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3L2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckRheVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWRheS12aWV3L2NhbGVuZGFyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRlZFllYXIgfSBmcm9tICcuL21vZGVscy9hZ2dyZWdhdGVkLXllYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXJDdXJyZW50IH0gZnJvbSAnLi9tb2RlbHMvY2FsZW5kYXItY3VycmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IERpc2FibGVEYXRlRnVuY3Rpb24sIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuL21vZGVscy9kYXRlLXJhbmdlJztcbmltcG9ydCB7IHBhdGNoRGVwcmVjYXRlZEkxOG5MYWJlbHMgfSBmcm9tICcuL3BhdGNoLWRlcHJlY2F0ZWQtaTE4bi1sYWJlbHMnO1xuaW1wb3J0IHtcbiAgICBDYWxlbmRhclR5cGUsXG4gICAgQ2FsZW5kYXJUeXBlRW51bSxcbiAgICBEYXlzT2ZXZWVrLFxuICAgIEZkQ2FsZW5kYXJWaWV3LFxuICAgIEZkQ2FsZW5kYXJWaWV3RW51bSxcbiAgICBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uXG59IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgY2FsZW5kYXJVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogTW9udGhzOiAxID0gSmFudWFyeSwgMTIgPSBkZWNlbWJlci5cbiAqIERheXM6IDEgPSBTdW5kYXksIDcgPSBTYXR1cmRheVxuICpcbiAqIENhbGVuZGFyIGNvbXBvbmVudCB1c2VkIGZvciBzZWxlY3RpbmcgZGF0ZXMsIHR5cGljYWxseSB1c2VkIGJ5IHRoZSBEYXRlUGlja2VyIGFuZCBEYXRlVGltZVBpY2tlciBjb21wb25lbnRzLlxuICogU3VwcG9ydHMgdGhlIEFuZ3VsYXIgZm9ybXMgbW9kdWxlLCBlbmFibGluZyBmb3JtIHZhbGlkaXR5LCBuZ01vZGVsLCBldGMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtY2FsZW5kYXI+PC9mZC1jYWxlbmRhcj5cbiAqIGBgYFxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9MQU5HVUFHRSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IHBhdGNoRGVwcmVjYXRlZEkxOG5MYWJlbHNcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhciBmZC1oYXMtZGlzcGxheS1ibG9jaydcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgICAgIENhbGVuZGFySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckRheVZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIHNpbmdsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gbXVsdGlwbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlczogQXJyYXk8RD47XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIHdpdGggc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgd2l0aCBtdWx0aXBsZSByYW5nZXMuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlczogQXJyYXk8RGF0ZVJhbmdlPEQ+PiA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgc3VuZGF5L3NhdHVyZGF5IHdpdGggYGZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kYCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFya1dlZWtlbmRzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBzaG93IHdlZWsgbnVtYmVycyBuZXh0IHRvIGRheXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgbXVsdGlwbGUgZGF5cyBvciBtdWx0aXBsZSByYW5nZSBkYXRlcy5cbiAgICAgKiBJZiBgZGlzcGxheVdlZWtOdW1iZXJzYCBpcyB0cnVlLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIHdlZWsgbnVtYmVyIHRvIG1hcmsgdGhlIHJlbGF0ZWQgcm93LlxuICAgICAqIFRoZSB1c2VyIGNhbiBjbGljayBvbiB3ZWVrIGRheXMgdG8gbWFyayB0aGUgcmVsYXRlZCBjb2x1bW4uXG4gICAgICogTm90ZTogQ2xpY2thYmxlIHNlbGVjdGlvbiBmb3Igd2VlayByb3cgb3IgY29sdW1uIGRvZXMgbm90IHdvcmsgZm9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjYWxlbmRhciBpcyB1c2VkIGluc2lkZSBtb2JpbGUgaW4gbGFuZHNjYXBlIG1vZGUsIGl0IGFsc28gYWRkcyBjbG9zZSBidXR0b24gb24gcmlnaHQgc2lkZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1jYWxlbmRhci0tbW9iaWxlLWxhbmRzY2FwZScpXG4gICAgbW9iaWxlTGFuZHNjYXBlID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBjYWxlbmRhciBpcyB1c2VkIGluc2lkZSBtb2JpbGUgaW4gcG9ydHJhaXQgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1jYWxlbmRhci0tbW9iaWxlLXBvcnRyYWl0JylcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIEFjdHVhbGx5IHNob3duIGFjdGl2ZSB2aWV3IG9uZSBvZiAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcblxuICAgIC8qKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgb24uIDEgcmVwcmVzZW50cyBTdW5kYXksIDIgaXMgTW9uZGF5LCAzIGlzIFR1ZXNkYXksIGFuZCBzbyBvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgY2FsZW5kYXJcbiAgICAgKiAnc2luZ2xlJyBmb3Igc2luZ2xlIGRhdGUgc2VsZWN0aW9uXG4gICAgICogJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNhbFR5cGU6IENhbGVuZGFyVHlwZSA9IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlO1xuXG4gICAgLyoqIElkIG9mIHRoZSBjYWxlbmRhci4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSAnZmQtY2FsZW5kYXItJyArIGNhbGVuZGFyVW5pcXVlSWQrKztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9faXRlbS0tbGVnZW5kLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggRCBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBEKSA9PiBmZERhdGUuZ2V0RGF5KCkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzcGVjaWFsRGF5c1J1bGVzOiBTcGVjaWFsRGF5UnVsZTxEPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogNVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIGFnZ3JlZ2F0ZWQgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFnZ3JlZ2F0ZWRZZWFyR3JpZDogQ2FsZW5kYXJZZWFyR3JpZCA9IHtcbiAgICAgICAgcm93czogNCxcbiAgICAgICAgY29sczogM1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBkYXkgY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IGRhdGUgaXMgc2VsZWN0ZWQgb24gRGF5IFZpZXcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5nZUhvdmVyRWZmZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBwaWNrIHRoZSBkYXRlIHJhbmdlIGluIG1vbnRoIG9yIHllYXIgb3IgZGF5cyBmb3JtYXRcbiAgICAgKiBEYXkgZm9ybWF0IHdpbGwgaGF2ZSBhIG1vbnRoIGFuZCB5ZWFyIGluY2x1ZGluZyBkYXlcbiAgICAgKiBNb250aCBmb3JtYXQgd2lsbCBoYXZlIHllYXIgaW5jbHVkaW5nIG1vbnRoXG4gICAgICogWWVhciBmb3JtYXQgd2lsbCBoYXZlIGp1c3QgeWVhclxuICAgICAqIFZhbHVlcyBjYW4gYmUgJ21vbnRoJyBmb3IgTW9udGggZm9ybWF0LCAneWVhcicgZm9yIFllYXIgZm9ybWF0IG9yIG5vdGhpbmcgZm9yIGRheSBmb3JtYXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGVSYW5nZUZvcm1hdCA9ICcnO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIGFjdGl2ZSB2aWV3IGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhY3RpdmVWaWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+ID0gbmV3IEV2ZW50RW1pdHRlcjxGZENhbGVuZGFyVmlldz4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBkYXRlIGluIHNpbmdsZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEPiA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgaW4gbXVsdGlwbGUgbW9kZSBhcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIG11bHRpcGxlIHJhbmdlIG1vZGUgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PERhdGVSYW5nZTxEPj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgQXJyYXk8RGF0ZVJhbmdlPEQ+PlxuICAgID4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB3aGVuIHZhbHVlIGlzIG92ZXJ3cml0dGVuIGZyb20gb3V0c2lkZSBhbmQgdGhyb3cgYmFjayBpc1ZhbGlkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXNWYWxpZERhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB3aGVuIGNhbGVuZGFyIHNob3VsZCBiZSBjbG9zZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjbG9zZUNhbGVuZGFyOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2xvc2VDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50KVxuICAgIF9kYXlWaWV3Q29tcG9uZW50OiBDYWxlbmRhckRheVZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQpXG4gICAgX21vbnRoVmlld0NvbXBvbmVudDogQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudClcbiAgICBfeWVhclZpZXdDb21wb25lbnQ6IENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQpXG4gICAgX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQpXG4gICAgX2NhbGVuZGFySGVhZGVyQ29tcG9uZW50OiBDYWxlbmRhckhlYWRlckNvbXBvbmVudDxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gZGF0ZSBzZWxlY3RlZCBkYXRlXG4gICAgICogQHBhcmFtIGN1cnJlbnRseURpc3BsYXllZERhdGUgY3VycmVudGx5IGRpc3BsYXllZCBkYXRlXG4gICAgICogQHBhcmFtIGFjdGl2ZVZpZXcgY3VycmVudCB2aWV3IG9mIGNhbGVuZGFyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBuZXh0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqIEBwYXJhbSBkYXRlIHNlbGVjdGVkIGRhdGVcbiAgICAgKiBAcGFyYW0gY3VycmVudGx5RGlzcGxheWVkRGF0ZSBjdXJyZW50bHkgZGlzcGxheWVkIGRhdGVcbiAgICAgKiBAcGFyYW0gYWN0aXZlVmlldyBjdXJyZW50IHZpZXcgb2YgY2FsZW5kYXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKiogVGhlIHVuaXF1ZSBJRCBvZiB0aGUgY2FsZW5kYXIgbGVnZW5kLCBpZiB0aGUgY2FsZW5kYXIgaXMgdG8gZGlzcGxheSBhIGxlZ2VuZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFzc29jaWF0ZWRMZWdlbmRJZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEN1cnJlbnRseSBkaXNwbGF5ZWQgZGF5cyBkZXBlbmRpbmcgb24gbW9udGggYW5kIHllYXJcbiAgICAgKi9cbiAgICBfY3VycmVudGx5RGlzcGxheWVkOiBDYWxlbmRhckN1cnJlbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIHRoaXMuX2FkYXB0ZXJTdGFydGluZ0RheU9mV2VlayA9ICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSArIDEpIGFzIERheXNPZldlZWs7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogVGhhdCBhbGxvd3MgdG8gZGVmaW5lIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGhhcHBlbiwgd2hlbiBmb2N1cyBzaG91bGQgbm9ybWFsbHkgZXNjYXBlIG9mIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXNjYXBlRm9jdXNGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbiA9IChldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySGVhZGVyQ29tcG9uZW50Py5mb2N1cygpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246IERpc2FibGVEYXRlRnVuY3Rpb248RD4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIHN0YXJ0IHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb246IERpc2FibGVEYXRlRnVuY3Rpb248RD4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIGVuZCBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbjogRGlzYWJsZURhdGVGdW5jdGlvbjxEPiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFsnJGV2ZW50J10pXG4gICAgZm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAoXzogRCB8IEFycmF5PEQ+IHwgRGF0ZVJhbmdlPEQ+IHwgQXJyYXk8RGF0ZVJhbmdlPEQ+PikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICduZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAncHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb24nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdfY3VycmVudGx5RGlzcGxheWVkJyBpbiBjaGFuZ2VzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0V2Vla1N0YXJ0RGF5KCk6IERheXNPZldlZWsge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydGluZ0RheU9mV2VlayA9PT0gdW5kZWZpbmVkID8gdGhpcy5fYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrIDogdGhpcy5zdGFydGluZ0RheU9mV2VlaztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zLlxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IEQgfCBBcnJheTxEPiB8IERhdGVSYW5nZTxEPiB8IEFycmF5PERhdGVSYW5nZTxEPj4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IChkYXRlOiBEIHwgbnVsbCk6IGJvb2xlYW4gPT4gZGF0ZSAhPSBudWxsICYmIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgICAgICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSAocmFuZ2U6IERhdGVSYW5nZTxEPik6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgIHJhbmdlICE9IG51bGwgJiYgaXNWYWxpZERhdGUocmFuZ2Uuc3RhcnQpICYmIGlzVmFsaWREYXRlKHJhbmdlLmVuZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gKHNlbGVjdGVkIGFzIEFycmF5PEQ+KSA6IFtzZWxlY3RlZCBhcyBEXTtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGRhdGVzLmV2ZXJ5KGlzVmFsaWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZXMgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/IChzZWxlY3RlZCBhcyBBcnJheTxEYXRlUmFuZ2U8RD4+KSA6IFtdO1xuICAgICAgICAgICAgICAgIHZhbGlkID0gcmFuZ2VzLmV2ZXJ5KGlzVmFsaWRSYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyA9IHJhbmdlcy5tYXAoKHJhbmdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogcmFuZ2U/LnN0YXJ0IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogcmFuZ2U/LmVuZCB8fCBudWxsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGlzVmFsaWREYXRlKHNlbGVjdGVkIGFzIEQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQgYXMgRDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxUeXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG4gICAgICAgICAgICAgICAgdmFsaWQgPSByYW5nZSAmJiBpc1ZhbGlkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSByYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHsgc3RhcnQ6IHJhbmdlLnN0YXJ0IHx8IG51bGwsIGVuZDogcmFuZ2UuZW5kIHx8IG51bGwgfVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaXNWYWxpZERhdGVDaGFuZ2UuZW1pdCh2YWxpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBWYWxpZGF0b3IgSW50ZXJmYWNlLCBhZGRzIHZhbGlkYXRpb24gc3VwcG9ydCBmb3IgZm9ybXNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9kZWxWYWxpZCgpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZVZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqXG4gICAgICogRmlyZWQgYnkgY2FsZW5kYXIgaGVhZGVyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVBY3RpdmVWaWV3Q2hhbmdlKGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSB0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IGFjdGl2ZVZpZXc7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5vbk1vbnRoVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm9uWWVhclZpZXdTZWxlY3RlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXIpIHtcbiAgICAgICAgICAgIHRoaXMub25ZZWFyc1JhbmdlVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBzZWxlY3RlZERhdGVDaGFuZ2VkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIG11bHRpIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZWQoZGF0ZTogQXJyYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBkYXRlO1xuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHJhbmdlIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlZChkYXRlczogRGF0ZVJhbmdlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGRhdGVzLnN0YXJ0LCBlbmQ6IGRhdGVzLmVuZCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhci5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGRheSB2aWV3IGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZWQoZGF0ZXM6IEFycmF5PERhdGVSYW5nZTxEPj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZXM7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmV4dCBhcnJvdyBpY29uIGNsaWNrLCBkZXBlbmRpbmcgb24gY3VycmVudCB2aWV3IGl0IGNoYW5nZXMgbW9udGgsIHllYXIgb3IgbGlzdCBvZiB5ZWFycyAqL1xuICAgIGhhbmRsZU5leHRBcnJvd0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU5leHRNb250aCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLlllYXI6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXJMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZkQ2FsZW5kYXJWaWV3RW51bS5BZ2dyZWdhdGVkWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOZXh0WWVhcnNMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIHByZXZpb3VzIGFycm93IGljb24gY2xpY2ssIGRlcGVuZGluZyBvbiBjdXJyZW50IHZpZXcgaXQgY2hhbmdlcyBtb250aCwgeWVhciBvciBsaXN0IG9mIHllYXJzICovXG4gICAgaGFuZGxlUHJldmlvdXNBcnJvd0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLk1vbnRoOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzWWVhcigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZkQ2FsZW5kYXJWaWV3RW51bS5BZ2dyZWdhdGVkWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXJzTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBuZXh0IG1vbnRoICovXG4gICAgZGlzcGxheU5leHRNb250aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxLCBtb250aDogMSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggKyAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBwcmV2aW91cyBtb250aCAqL1xuICAgIGRpc3BsYXlQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIDw9IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxLCBtb250aDogMTIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhcixcbiAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIC0gMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gbmV4dCB5ZWFyICovXG4gICAgZGlzcGxheU5leHRZZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7IG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyICsgMSB9O1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gcHJldmlvdXMgeWVhciAqL1xuICAgIGRpc3BsYXlQcmV2aW91c1llYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgbW9udGg6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5sb2FkTmV4dFllYXJMaXN0KCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5fZmlyc3RZZWFySW5MaXN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50LmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5fZmlyc3RZZWFySW5MaXN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJzTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50LmxvYWROZXh0WWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gY2hhbmdlIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGgveWVhciBjb25maWd1cmF0aW9uLFxuICAgICAqIHdoaWNoIGFyZSBjb25uZWN0ZWQgdG8gZGF5cyBkaXNwbGF5ZWRcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50bHlEaXNwbGF5ZWQoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlISksXG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGluaXRpYWwgZm9jdXMgb24gb25lIG9mIHRoZSBjYWxlbmRhcidzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpbml0aWFsRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldEFjdGl2ZUZvY3VzYWJsZVZpZXcoKT8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIGNoYW5nZXMgZnJvbSBtb250aCB2aWV3IGNoaWxkIGNvbXBvbmVudCwgY2hhbmdlcyBhY3R1YWwgdmlldyBhbmQgY2hhbmdlcyBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoXG4gICAgICovXG4gICAgaGFuZGxlTW9udGhWaWV3Q2hhbmdlKG1vbnRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyBtb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgfTtcbiAgICAgICAgLy8gaWYgbW0veXl5eSBmb3JtYXQgZGF0ZSBpcyBub3QgZW5hYmxlZCB0aGVuIG9ubHkgc2hvdyBkYXlzIHZpZXdcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZVJhbmdlTW9udGhGb3JtYXQoKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcbiAgICAgICAgICAgIHRoaXMub25EYXlzVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgeWVhciAqL1xuICAgIHNlbGVjdGVkWWVhcih5ZWFyU2VsZWN0ZWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciA9IHllYXJTZWxlY3RlZDtcblxuICAgICAgICAvLyBpZiBtb250aCBmb3JtYXQgZGF0ZSByYW5nZSBpcyBlbmFibGVkIHRoZW4gb24gc2VsZWN0aW5nIHllYXIgc2hvdyBtb250aCB2aWV3IGVsc2Ugc2hvdyBkYXlzIHZpZXdcbiAgICAgICAgLy8gaWYgeWVhciBmb3JtYXQgZGF0ZSByYW5nZSBpcyBlbmFibGVkIHRoZW4gdmlldyByZW1haW5zIHNhbWUgb24gc2VsZWN0aW5nIHllYXJcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VNb250aEZvcm1hdCgpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg7XG4gICAgICAgICAgICB0aGlzLm9uTW9udGhWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCgpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICAgICAgICAgIHRoaXMub25ZZWFyVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uRGF5O1xuICAgICAgICAgICAgdGhpcy5vbkRheXNWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgeWVhciByYW5nZSAqL1xuICAgIHNlbGVjdGVkWWVhcnMoeWVhcnNTZWxlY3RlZDogQWdncmVnYXRlZFllYXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLlllYXI7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2N1cnJlbnRseURpc3BsYXllZCxcbiAgICAgICAgICAgIHllYXI6IHllYXJzU2VsZWN0ZWQuc3RhcnRZZWFyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25ZZWFyVmlld1NlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkRheXNWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fZGF5Vmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTW9udGhWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fbW9udGhWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25ZZWFyVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25ZZWFyc1JhbmdlVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgbW9kZWwgc2VsZWN0ZWQgZGF0ZS9kYXRlcyBoYXZlIHByb3Blcmx5IHR5cGVzIGFuZCBhcmUgdmFsaWQgKi9cbiAgICBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMuZXZlcnkoKGQpID0+IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGQpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmV2ZXJ5KChkcikgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZHIuc3RhcnQpKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmV2ZXJ5KChkcikgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZHIuZW5kKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5SYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcmFuZ2UgZm9ybWF0IGlzIG1vbnRoICovXG4gICAgaXNEYXRlUmFuZ2VNb250aEZvcm1hdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVJhbmdlRm9ybWF0ID09PSAnbW9udGgnO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHJhbmdlIGZvcm1hdCBpcyB5ZWFyICovXG4gICAgaXNEYXRlUmFuZ2VZZWFyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUmFuZ2VGb3JtYXQgPT09ICd5ZWFyJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTG9jYWxlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXJTdGFydGluZ0RheU9mV2VlayA9ICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSArIDEpIGFzIERheXNPZldlZWs7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBzZXRzIHVwIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHZhcmlhYmxlcywgbGlrZSBzaG93biBtb250aCBhbmQgeWVhci5cbiAgICAgKiBEYXkgZ3JpZCBpcyBiYXNlZCBvbiBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoIGFuZCB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJlcGFyZURpc3BsYXllZFZpZXcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWREYXRlLCBzZWxlY3RlZFJhbmdlRGF0ZSwgc2VsZWN0ZWRNdWx0aXBsZURhdGVzLCBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyB9ID0gdGhpcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlICYmXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZERhdGUpICYmXG4gICAgICAgICAgICAhdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkRGF0ZSBhcyBEKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZE11bHRpcGxlRGF0ZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50bHlEaXNwbGF5ZWQoc2VsZWN0ZWRNdWx0aXBsZURhdGVzWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFJhbmdlRGF0ZT8uc3RhcnQgJiYgIXRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFJhbmdlRGF0ZT8uZW5kICYmICF0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRseURpc3BsYXllZChzZWxlY3RlZFJhbmdlRGF0ZS5lbmQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLnN0YXJ0ICYmXG4gICAgICAgICAgICB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50bHlEaXNwbGF5ZWQoc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLmVuZCAmJlxuICAgICAgICAgICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLmVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHRvZGF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSksXG4gICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVGb2N1c2FibGVWaWV3KCk6IEZvY3VzYWJsZUNhbGVuZGFyVmlldyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXlWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLlllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZWQgPSB0aGlzLl9pc05hdmlnYXRpb25CdXR0b25EaXNhYmxlZCh0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uKTtcbiAgICAgICAgdGhpcy5uZXh0QnV0dG9uRGlzYWJsZWQgPSB0aGlzLl9pc05hdmlnYXRpb25CdXR0b25EaXNhYmxlZCh0aGlzLm5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb24pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVkKGRpc2FibGVGdW5jdGlvbj86IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBkaXNhYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGRpc2FibGVGdW5jdGlvbih0aGlzLnNlbGVjdGVkRGF0ZSwgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLCB0aGlzLmFjdGl2ZVZpZXcpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGZkLWNhbGVuZGFyLWhlYWRlclxuICAgIFtjdXJyZW50bHlEaXNwbGF5ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZFwiXG4gICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbY2FsZW5kYXJZZWFyR3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgKGNsb3NlQ2xpY2tlZCk9XCJjbG9zZUNsaWNrZWQuZW1pdCgpXCJcbiAgICAobmV4dENsaWNrZWQpPVwiaGFuZGxlTmV4dEFycm93Q2xpY2soKVwiXG4gICAgKHByZXZpb3VzQ2xpY2tlZCk9XCJoYW5kbGVQcmV2aW91c0Fycm93Q2xpY2soKVwiXG4gICAgW3ByZXZpb3VzQnV0dG9uRGlzYWJsZWRdPVwicHJldmlvdXNCdXR0b25EaXNhYmxlZFwiXG4gICAgW25leHRCdXR0b25EaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4+PC9mZC1jYWxlbmRhci1oZWFkZXI+XG5AaWYgKF9jdXJyZW50bHlEaXNwbGF5ZWQpIHtcbiAgICBAaWYgKGFjdGl2ZVZpZXcgPT09ICdkYXknKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci1kYXktdmlld1xuICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkTXVsdGlwbGVEYXRlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZXNcIlxuICAgICAgICAgICAgW3NlbGVjdGVkUmFuZ2VEYXRlXT1cInNlbGVjdGVkUmFuZ2VEYXRlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cInNlbGVjdGVkRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlKT1cInNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKT1cInNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgIFthbGxvd011bHRpcGxlU2VsZWN0aW9uXT1cImFsbG93TXVsdGlwbGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgW2N1cnJlbnRseURpc3BsYXllZF09XCJfY3VycmVudGx5RGlzcGxheWVkXCJcbiAgICAgICAgICAgIFtzdGFydGluZ0RheU9mV2Vla109XCJnZXRXZWVrU3RhcnREYXkoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2Rpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvblwiXG4gICAgICAgICAgICBbY2FsVHlwZV09XCJjYWxUeXBlXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbcmFuZ2VIb3ZlckVmZmVjdF09XCJyYW5nZUhvdmVyRWZmZWN0XCJcbiAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgW2ZvY3VzRXNjYXBlRnVuY3Rpb25dPVwiZXNjYXBlRm9jdXNGdW5jdGlvblwiXG4gICAgICAgICAgICAobmV4dE1vbnRoU2VsZWN0KT1cImRpc3BsYXlOZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAocHJldmlvdXNNb250aFNlbGVjdCk9XCJkaXNwbGF5UHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgICAgIFthc3NvY2lhdGVkTGVnZW5kSWRdPVwiYXNzb2NpYXRlZExlZ2VuZElkXCJcbiAgICAgICAgPjwvZmQtY2FsZW5kYXItZGF5LXZpZXc+XG4gICAgfSBAZWxzZSBpZiAoYWN0aXZlVmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICA8ZmQtY2FsZW5kYXItbW9udGgtdmlld1xuICAgICAgICAgICAgW21vbnRoU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC5tb250aFwiXG4gICAgICAgICAgICBbeWVhcl09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2lzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0XT1cImlzRGF0ZVJhbmdlTW9udGhGb3JtYXQoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKG1vbnRoQ2xpY2tlZCk9XCJoYW5kbGVNb250aFZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyLW1vbnRoLXZpZXc+XG4gICAgfSBAZWxzZSBpZiAoYWN0aXZlVmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci15ZWFyLXZpZXdcbiAgICAgICAgICAgIFt5ZWFyU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgIFt5ZWFyVmlld0dyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2lzRGF0ZVJhbmdlWWVhckZvcm1hdF09XCJpc0RhdGVSYW5nZVllYXJGb3JtYXQoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKHllYXJDbGlja2VkKT1cInNlbGVjdGVkWWVhcigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNhbGVuZGFyLXllYXItdmlldz5cbiAgICB9IEBlbHNlIGlmIChhY3RpdmVWaWV3ID09PSAnYWdncmVnYXRlZFllYXInKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlld1xuICAgICAgICAgICAgKHllYXJzQ2xpY2tlZCk9XCJzZWxlY3RlZFllYXJzKCRldmVudClcIlxuICAgICAgICAgICAgW3llYXJTZWxlY3RlZF09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW3llYXJWaWV3R3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgICAgICAgICBbYWdncmVnYXRlZFllYXJzVmlld0dyaWRdPVwiYWdncmVnYXRlZFllYXJHcmlkXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZm9jdXNFc2NhcGVGdW5jdGlvbl09XCJlc2NhcGVGb2N1c0Z1bmN0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3PlxuICAgIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { CalendarCloseButtonDirective } from './calendar-directives';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarComponent } from './calendar.component';\nimport * as i0 from \"@angular/core\";\nexport class CalendarModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, imports: [CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective], exports: [CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, imports: [CalendarComponent,\n CalendarHeaderComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent, ContentDensityModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective\n ],\n exports: [\n CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzdJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQXVCekQsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBbkJuQixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLG1DQUFtQztZQUNuQyw0QkFBNEIsYUFHNUIsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4Qix1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQixtQ0FBbUM7WUFDbkMsNEJBQTRCO1lBQzVCLG9CQUFvQjsrR0FHZixjQUFjLFlBbkJuQixpQkFBaUI7WUFDakIsdUJBQXVCO1lBRXZCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsbUNBQW1DLEVBV25DLG9CQUFvQjs7MkZBR2YsY0FBYztrQkFyQjFCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUN6QixtQ0FBbUM7d0JBQ25DLDRCQUE0QjtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7d0JBQ3ZCLHlCQUF5Qjt3QkFDekIsMEJBQTBCO3dCQUMxQixtQ0FBbUM7d0JBQ25DLDRCQUE0Qjt3QkFDNUIsb0JBQW9CO3FCQUN2QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbnRlbnREZW5zaXR5TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBDYWxlbmRhckNsb3NlQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9jYWxlbmRhci1kaXJlY3RpdmVzJztcbmltcG9ydCB7IENhbGVuZGFySGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItZGF5LXZpZXcvY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckRheVZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJDbG9zZUJ1dHRvbkRpcmVjdGl2ZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckNsb3NlQnV0dG9uRGlyZWN0aXZlLFxuICAgICAgICBDb250ZW50RGVuc2l0eU1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvZnVuZGFtZW50YWwtbmd4LWNvcmUtY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["i1.CalendarService","i1","i2.CalendarLegendFocusingService","CalendarActiveDayCellStrategy","i3"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-calendar.mjs","sources":["../tmp-esm2022/calendar/calendar-directives.js","../tmp-esm2022/calendar/calendar.service.js","../tmp-esm2022/calendar/types.js","../tmp-esm2022/calendar/calendar-header/calendar-header.component.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend-focusing.service.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend-item.component.js","../tmp-esm2022/calendar/calendar-legend/calendar-legend.component.js","../tmp-esm2022/calendar/models/common.js","../tmp-esm2022/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.js","../tmp-esm2022/calendar/models/calendar-day.js","../tmp-esm2022/calendar/models/date-range.js","../tmp-esm2022/calendar/calendar-views/calendar-day-view/calendar-day-view.component.js","../tmp-esm2022/calendar/calendar-views/calendar-month-view/calendar-month-view.component.js","../tmp-esm2022/calendar/calendar-views/calendar-year-view/calendar-year-view.component.js","../tmp-esm2022/calendar/calendar-errors.js","../tmp-esm2022/calendar/i18n/calendar-i18n-labels.js","../tmp-esm2022/calendar/patch-deprecated-i18n-labels.js","../tmp-esm2022/calendar/calendar.component.js","../tmp-esm2022/calendar/calendar.module.js","../tmp-esm2022/calendar/fundamental-ngx-core-calendar.js"],"sourcesContent":["import { Attribute, Directive } from '@angular/core';\nimport { resolveTranslationSignal } from '@fundamental-ngx/i18n';\nimport * as i0 from \"@angular/core\";\nexport class CalendarCloseButtonDirective {\n /** @hidden */\n constructor(_originalAriaLabel, _originalTitle) {\n this._originalAriaLabel = _originalAriaLabel;\n this._originalTitle = _originalTitle;\n /** @hidden */\n this._closeCalendarLabel = resolveTranslationSignal('coreCalendar.closeCalendarLabel');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarCloseButtonDirective, deps: [{ token: 'aria-label', attribute: true }, { token: 'title', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: CalendarCloseButtonDirective, isStandalone: true, selector: \"[fd-calendar-close-button]\", host: { properties: { \"attr.aria-label\": \"_originalAriaLabel || _closeCalendarLabel()\", \"attr.title\": \"_originalTitle || _closeCalendarLabel()\" }, classAttribute: \"fd-calendar__close-button\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarCloseButtonDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-calendar-close-button]',\n host: {\n class: 'fd-calendar__close-button',\n '[attr.aria-label]': '_originalAriaLabel || _closeCalendarLabel()',\n '[attr.title]': '_originalTitle || _closeCalendarLabel()'\n },\n standalone: true\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Attribute,\n args: ['aria-label']\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['title']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1kaXJlY3RpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVlqRSxNQUFNLE9BQU8sNEJBQTRCO0lBSXJDLGNBQWM7SUFDZCxZQUN1QyxrQkFBMEIsRUFDL0IsY0FBc0I7UUFEakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBTnhELGNBQWM7UUFDSix3QkFBbUIsR0FBRyx3QkFBd0IsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBTXpGLENBQUM7OEdBUkssNEJBQTRCLGtCQU10QixZQUFZLDhCQUNaLE9BQU87a0dBUGIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQVZ4QyxTQUFTO21CQUFDO29CQUNQLDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSwyQkFBMkI7d0JBQ2xDLG1CQUFtQixFQUFFLDZDQUE2Qzt3QkFDbEUsY0FBYyxFQUFFLHlDQUF5QztxQkFDNUQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFPUSxTQUFTOzJCQUFDLFlBQVk7OzBCQUN0QixTQUFTOzJCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0aW9uU2lnbmFsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC1jYWxlbmRhci1jbG9zZS1idXR0b25dJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtY2FsZW5kYXJfX2Nsb3NlLWJ1dHRvbicsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdfb3JpZ2luYWxBcmlhTGFiZWwgfHwgX2Nsb3NlQ2FsZW5kYXJMYWJlbCgpJyxcbiAgICAgICAgJ1thdHRyLnRpdGxlXSc6ICdfb3JpZ2luYWxUaXRsZSB8fCBfY2xvc2VDYWxlbmRhckxhYmVsKCknXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ2xvc2VCdXR0b25EaXJlY3RpdmUge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9jbG9zZUNhbGVuZGFyTGFiZWwgPSByZXNvbHZlVHJhbnNsYXRpb25TaWduYWwoJ2NvcmVDYWxlbmRhci5jbG9zZUNhbGVuZGFyTGFiZWwnKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSBwcm90ZWN0ZWQgX29yaWdpbmFsQXJpYUxhYmVsOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RpdGxlJykgcHJvdGVjdGVkIF9vcmlnaW5hbFRpdGxlOiBzdHJpbmdcbiAgICApIHt9XG59XG4iXX0=","import { Injectable, Optional } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class CalendarService {\n /** @hidden */\n constructor(_rtlService) {\n this._rtlService = _rtlService;\n /** Row amount */\n this.rowAmount = 3;\n /** Column amount */\n this.colAmount = 4;\n /** Event thrown, when the element is selected by space or enter keys */\n this.onKeySelect = new Subject();\n /** Event thrown, when the focus goes after list of elements */\n this.onListEndApproach = new Subject();\n /** Event thrown, when the focus goes before list of elements */\n this.onListStartApproach = new Subject();\n /** Event thrown, when the focus is changed. */\n this.onFocusIdChange = new Subject();\n }\n /**\n * Standardized method to calculate grid [x][y] to index number\n */\n getId(row, col) {\n return row * this.colAmount + col;\n }\n /**\n * Method that handles keydown events, dedicated for All Calendar views, which have a list with row x col elements.\n * Triggers the events, when the focus approaches start and end of list. Or when there is basic change of focus.\n * Triggers also event, when the element is selected by enter key, or space bar.\n * @param event KeyboardEvent\n * @param index which is number (0 - (rowAmount * colAmount))\n */\n onKeydownHandler(event, index) {\n const rtl = !!this._rtlService?.rtlSignal();\n switch (event.key) {\n case 'Spacebar':\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.onKeySelect.next({ index, event });\n break;\n }\n case 'Left':\n case 'ArrowLeft': {\n event.preventDefault();\n if (!rtl) {\n this.focusLeftElement(index);\n }\n else {\n this.focusRightElement(index);\n }\n break;\n }\n case 'Right':\n case 'ArrowRight': {\n event.preventDefault();\n if (!rtl) {\n this.focusRightElement(index);\n }\n else {\n this.focusLeftElement(index);\n }\n break;\n }\n case 'Up':\n case 'ArrowUp': {\n event.preventDefault();\n if (index <= this.colAmount - 1) {\n this.onListStartApproach.next(this.getId(this.rowAmount - 1, 0) + index);\n }\n else {\n this.onFocusIdChange.next(index - this.colAmount);\n }\n break;\n }\n case 'Down':\n case 'ArrowDown': {\n event.preventDefault();\n if (index >= this.getId(this.rowAmount - 1, 0)) {\n this.onListEndApproach.next(index - this.getId(this.rowAmount - 1, 0));\n }\n else {\n this.onFocusIdChange.next(index + this.colAmount);\n }\n break;\n }\n case 'Tab': {\n if (!event.shiftKey) {\n if (typeof this.focusEscapeFunction === 'function') {\n this.focusEscapeFunction(event);\n }\n else {\n const element = document.getElementById(this.leftArrowId);\n if (element) {\n element.focus();\n }\n }\n event.preventDefault();\n break;\n }\n }\n }\n }\n /**\n * @hidden\n * Right Element focus trigger\n */\n focusRightElement(index) {\n if (index === this.getId(this.rowAmount, 0) - 1) {\n this.onListEndApproach.next(0);\n }\n else {\n this.onFocusIdChange.next(index + 1);\n }\n }\n /**\n * @hidden\n * Left Element focus trigger\n */\n focusLeftElement(index) {\n if (index === 0) {\n this.onListStartApproach.next(this.getId(this.rowAmount, 0) - 1);\n }\n else {\n this.onFocusIdChange.next(index - 1);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService, deps: [{ token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.RtlService, decorators: [{\n type: Optional\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFJeEQsTUFBTSxPQUFPLGVBQWU7SUE0QnhCLGNBQWM7SUFDZCxZQUFnQyxXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTVCdkQsaUJBQWlCO1FBQ2pCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFFZCxvQkFBb0I7UUFDcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkLHdFQUF3RTtRQUN4RSxnQkFBVyxHQUFxRCxJQUFJLE9BQU8sRUFHdkUsQ0FBQztRQUVMLCtEQUErRDtRQUMvRCxzQkFBaUIsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUUzRCxnRUFBZ0U7UUFDaEUsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QsK0NBQStDO1FBQy9DLG9CQUFlLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFTQyxDQUFDO0lBRTNEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQzFCLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDaEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFFNUMsUUFBUSxLQUFLLENBQUMsR0FBRyxF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Q0FBQzs0QkFDVixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3BCLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzFCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7OEdBdklRLGVBQWU7a0hBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBOEJNLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRXNjYXBlRm9jdXNGdW5jdGlvbiB9IGZyb20gJy4vbW9kZWxzL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2Uge1xuICAgIC8qKiBSb3cgYW1vdW50ICovXG4gICAgcm93QW1vdW50ID0gMztcblxuICAgIC8qKiBDb2x1bW4gYW1vdW50ICovXG4gICAgY29sQW1vdW50ID0gNDtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgc3BhY2Ugb3IgZW50ZXIga2V5cyAqL1xuICAgIG9uS2V5U2VsZWN0OiBTdWJqZWN0PHsgaW5kZXg6IG51bWJlcjsgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfT4gPSBuZXcgU3ViamVjdDx7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50O1xuICAgIH0+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHRoZSBmb2N1cyBnb2VzIGFmdGVyIGxpc3Qgb2YgZWxlbWVudHMgKi9cbiAgICBvbkxpc3RFbmRBcHByb2FjaDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiB0aGUgZm9jdXMgZ29lcyBiZWZvcmUgbGlzdCBvZiBlbGVtZW50cyAqL1xuICAgIG9uTGlzdFN0YXJ0QXBwcm9hY2g6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gdGhlIGZvY3VzIGlzIGNoYW5nZWQuICovXG4gICAgb25Gb2N1c0lkQ2hhbmdlOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICAvKiogTGVmdCBBcnJvdyBJZCwgd2hpY2ggd2lsbCBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQgb24gZm9jdXMgZXNjYXBlICovXG4gICAgbGVmdEFycm93SWQ6IHN0cmluZztcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBmb2N1cyB3b3VsZCBlc2NhcGUgdGhlIGVsZW1lbnQuICovXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSkge31cblxuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkaXplZCBtZXRob2QgdG8gY2FsY3VsYXRlIGdyaWQgW3hdW3ldIHRvIGluZGV4IG51bWJlclxuICAgICAqL1xuICAgIGdldElkKHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiByb3cgKiB0aGlzLmNvbEFtb3VudCArIGNvbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGtleWRvd24gZXZlbnRzLCBkZWRpY2F0ZWQgZm9yIEFsbCBDYWxlbmRhciB2aWV3cywgd2hpY2ggaGF2ZSBhIGxpc3Qgd2l0aCByb3cgeCBjb2wgZWxlbWVudHMuXG4gICAgICogVHJpZ2dlcnMgdGhlIGV2ZW50cywgd2hlbiB0aGUgZm9jdXMgYXBwcm9hY2hlcyBzdGFydCBhbmQgZW5kIG9mIGxpc3QuIE9yIHdoZW4gdGhlcmUgaXMgYmFzaWMgY2hhbmdlIG9mIGZvY3VzLlxuICAgICAqIFRyaWdnZXJzIGFsc28gZXZlbnQsIHdoZW4gdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYnkgZW50ZXIga2V5LCBvciBzcGFjZSBiYXIuXG4gICAgICogQHBhcmFtIGV2ZW50IEtleWJvYXJkRXZlbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggd2hpY2ggaXMgbnVtYmVyICgwIC0gKHJvd0Ftb3VudCAqIGNvbEFtb3VudCkpXG4gICAgICovXG4gICAgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBydGwgPSAhIXRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdTcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICcgJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleVNlbGVjdC5uZXh0KHsgaW5kZXgsIGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnTGVmdCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJ0bCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTGVmdEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSaWdodEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJ0bCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUmlnaHRFbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTGVmdEVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VwJzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPD0gdGhpcy5jb2xBbW91bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25MaXN0U3RhcnRBcHByb2FjaC5uZXh0KHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQgLSAxLCAwKSArIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXNJZENoYW5nZS5uZXh0KGluZGV4IC0gdGhpcy5jb2xBbW91bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQgLSAxLCAwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTGlzdEVuZEFwcHJvYWNoLm5leHQoaW5kZXggLSB0aGlzLmdldElkKHRoaXMucm93QW1vdW50IC0gMSwgMCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggKyB0aGlzLmNvbEFtb3VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVGFiJzoge1xuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5sZWZ0QXJyb3dJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmlnaHQgRWxlbWVudCBmb2N1cyB0cmlnZ2VyXG4gICAgICovXG4gICAgZm9jdXNSaWdodEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZ2V0SWQodGhpcy5yb3dBbW91bnQsIDApIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RFbmRBcHByb2FjaC5uZXh0KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzSWRDaGFuZ2UubmV4dChpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExlZnQgRWxlbWVudCBmb2N1cyB0cmlnZ2VyXG4gICAgICovXG4gICAgZm9jdXNMZWZ0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5vbkxpc3RTdGFydEFwcHJvYWNoLm5leHQodGhpcy5nZXRJZCh0aGlzLnJvd0Ftb3VudCwgMCkgLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1c0lkQ2hhbmdlLm5leHQoaW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==","/** Enum of calendarTypes */\nexport var CalendarTypeEnum;\n(function (CalendarTypeEnum) {\n CalendarTypeEnum[\"Single\"] = \"single\";\n CalendarTypeEnum[\"Range\"] = \"range\";\n})(CalendarTypeEnum || (CalendarTypeEnum = {}));\n/** Type for the calendar view */\nexport var FdCalendarViewEnum;\n(function (FdCalendarViewEnum) {\n FdCalendarViewEnum[\"Day\"] = \"day\";\n FdCalendarViewEnum[\"Month\"] = \"month\";\n FdCalendarViewEnum[\"Year\"] = \"year\";\n FdCalendarViewEnum[\"AggregatedYear\"] = \"aggregatedYear\";\n})(FdCalendarViewEnum || (FdCalendarViewEnum = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsNEJBQTRCO0FBQzVCLE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDeEIscUNBQWlCLENBQUE7SUFDakIsbUNBQWUsQ0FBQTtBQUNuQixDQUFDLEVBSFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUczQjtBQUtELGlDQUFpQztBQUNqQyxNQUFNLENBQU4sSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzFCLGlDQUFXLENBQUE7SUFDWCxxQ0FBZSxDQUFBO0lBQ2YsbUNBQWEsQ0FBQTtJQUNiLHVEQUFpQyxDQUFBO0FBQ3JDLENBQUMsRUFMVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcblxuLyoqIFR5cGUgb2YgY2FsZW5kYXIgKi9cbmV4cG9ydCB0eXBlIENhbGVuZGFyVHlwZSA9ICdzaW5nbGUnIHwgJ3JhbmdlJztcblxuLyoqIEVudW0gb2YgY2FsZW5kYXJUeXBlcyAqL1xuZXhwb3J0IGVudW0gQ2FsZW5kYXJUeXBlRW51bSB7XG4gICAgU2luZ2xlID0gJ3NpbmdsZScsXG4gICAgUmFuZ2UgPSAncmFuZ2UnXG59XG5cbi8qKiBUeXBlIGZvciB0aGUgY2FsZW5kYXIgdmlldyAqL1xuZXhwb3J0IHR5cGUgRmRDYWxlbmRhclZpZXcgPSAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgfCAnYWdncmVnYXRlZFllYXInO1xuXG4vKiogVHlwZSBmb3IgdGhlIGNhbGVuZGFyIHZpZXcgKi9cbmV4cG9ydCBlbnVtIEZkQ2FsZW5kYXJWaWV3RW51bSB7XG4gICAgRGF5ID0gJ2RheScsXG4gICAgTW9udGggPSAnbW9udGgnLFxuICAgIFllYXIgPSAneWVhcicsXG4gICAgQWdncmVnYXRlZFllYXIgPSAnYWdncmVnYXRlZFllYXInXG59XG5cbi8qKiBUeXBlIGZvciB0aGUgZGF5cyBvZiB0aGUgd2Vlay4gKi9cbmV4cG9ydCB0eXBlIERheXNPZldlZWsgPSAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3O1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+ID0gKFxuICAgIGRhdGU6IE51bGxhYmxlPEQ+LFxuICAgIGN1cnJlbnRseURpc3BsYXllZERhdGU6IENhbGVuZGFyQ3VycmVudCxcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlld1xuKSA9PiBib29sZWFuO1xuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../calendar.service';\nimport { FdCalendarViewEnum } from '../types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/**\n * Internal use only.\n * Header of the calendar component.\n */\nexport class CalendarHeaderComponent {\n /**\n * Object to customize year grid\n */\n set calendarYearGrid(yearGrid) {\n this._amountOfYearsPerPeriod = yearGrid.cols * yearGrid.rows - 1;\n this._calculateSelectAggregatedYearLabel();\n }\n /** Aria label for the previous button. Depends on the active view. */\n get previousAriaLabel() {\n return this.isOnDayView ? 'coreCalendar.previousMonthLabel' : 'coreCalendar.previousYearLabel';\n }\n /** Aria label for the next button. Depends on the active view. */\n get nextAriaLabel() {\n return this.isOnDayView ? 'coreCalendar.nextMonthLabel' : 'coreCalendar.nextYearLabel';\n }\n /** Button aria label to open month selection view. */\n get selectMonthAriaLabel() {\n return this.isOnMonthView ? 'coreCalendar.dateSelectionLabel' : 'coreCalendar.monthSelectionLabel';\n }\n /** Button aria label to open aggregated years selection view. */\n get selectAggregatedYearAriaLabel() {\n return this.isOnAggregatedYearsView\n ? 'coreCalendar.dateSelectionLabel'\n : 'coreCalendar.yearsRangeSelectionLabel';\n }\n /** Get information is calendar is on aggregated years view */\n get isOnAggregatedYearsView() {\n return this.activeView === FdCalendarViewEnum.AggregatedYear;\n }\n /** Get information is calendar is on year view */\n get isOnYearView() {\n return this.activeView === FdCalendarViewEnum.Year;\n }\n /** Get information is calendar is on month view */\n get isOnMonthView() {\n return this.activeView === FdCalendarViewEnum.Month;\n }\n /** Get information is calendar is on day view */\n get isOnDayView() {\n return this.activeView === FdCalendarViewEnum.Day;\n }\n /**\n * Component id\n */\n get viewId() {\n return this.id + '-header';\n }\n /**\n * @hidden\n * Previous button id\n */\n get _prevButtonId() {\n return this.viewId + '-left-arrow';\n }\n /**\n * @hidden\n * Next button id\n */\n get _nextButtonId() {\n return this.viewId + '-right-arrow';\n }\n /**\n * @hidden\n * Month label id\n */\n get _monthButtonLabelId() {\n return this.viewId + '-month-label';\n }\n /**\n * @hidden\n * Select month aria label id\n */\n get _selectMonthButtonAriaLabelId() {\n return this.viewId + '-select-month-aria-label';\n }\n /**\n * @hidden\n * Year label id\n */\n get _yearButtonLabelId() {\n return this.viewId + '-year-label';\n }\n /**\n * @hidden\n * Select year aria label id\n */\n get _selectYearButtonAriaLabelId() {\n return this.viewId + '-select-year-aria-label';\n }\n /**\n * @hidden\n * Years range label id\n */\n get _yearsRangeButtonLabelId() {\n return this.viewId + '-years-range-label';\n }\n /**\n * @hidden\n * Select years range aria label id\n */\n get _selectYearsRangeButtonAriaLabelId() {\n return this.viewId + '-select-years-range-aria-label';\n }\n /** @hidden */\n constructor(_changeDetRef, _calendarService, _dateTimeAdapter) {\n this._changeDetRef = _changeDetRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** Whether calendar should be rendered in mobile landscape mode. */\n this.mobileLandscape = false;\n /** Event emitted when the active view should change. */\n this.activeViewChange = new EventEmitter();\n /** Event emitted when the previous button is clicked. */\n this.previousClicked = new EventEmitter();\n /** Event emitted when the next button is clicked. */\n this.nextClicked = new EventEmitter();\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** Month names */\n this._monthNames = [];\n /** Get information about amount of years displayed at once on year view */\n this._amountOfYearsPerPeriod = 1;\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ((changes.currentlyDisplayed && !changes.currentlyDisplayed.firstChange) ||\n (changes.activeView && !changes.activeView.firstChange)) {\n this._calculateLabels();\n }\n }\n /** @hidden */\n ngOnInit() {\n this._calendarService.leftArrowId = this._prevButtonId;\n this._calculateMonthNames();\n this._calculateLabels();\n this._listenToLocaleChanges();\n }\n /**\n * Focus on focusable control within the header\n */\n focus() {\n this._prevButtonComponent.nativeElement?.focus();\n }\n /** @hidden */\n _processViewChange(type, event) {\n if (event) {\n event.stopPropagation();\n }\n this.activeView = type === this.activeView ? FdCalendarViewEnum.Day : type;\n this.activeViewChange.emit(this.activeView);\n }\n /** @hidden */\n _listenToLocaleChanges() {\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._calculateMonthNames();\n this._calculateLabels();\n this._changeDetRef.markForCheck();\n });\n }\n /** @hidden */\n _calculateLabels() {\n this._calculateSelectMonthLabel();\n this._calculateSelectYearLabel();\n this._calculateSelectAggregatedYearLabel();\n }\n /** @hidden */\n _calculateSelectMonthLabel() {\n this.selectMonthLabel = this._monthNames[this._getNormalizedDate().month - 1];\n }\n /** @hidden */\n _calculateSelectYearLabel() {\n this.selectYearLabel = this._getYearName(this._getNormalizedDate().year);\n }\n /** @hidden */\n _calculateSelectAggregatedYearLabel() {\n this.selectAggregatedYearLabel = `${this._getYearName(this._getNormalizedDate().year)}-${this._getYearName(this._getNormalizedDate().year + this._amountOfYearsPerPeriod)}`;\n }\n /** @hidden */\n _calculateMonthNames() {\n this._monthNames = this._dateTimeAdapter.getMonthNames('long');\n }\n /** @hidden */\n _getYearName(year) {\n return this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year));\n }\n /** @hidden */\n _getNormalizedDate() {\n return {\n year: isNaN(this.currentlyDisplayed.year)\n ? this._dateTimeAdapter.getYear(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.year,\n month: isNaN(this.currentlyDisplayed.month)\n ? this._dateTimeAdapter.getMonth(this._dateTimeAdapter.now())\n : this.currentlyDisplayed.month\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarHeaderComponent, isStandalone: true, selector: \"fd-calendar-header\", inputs: { activeView: \"activeView\", currentlyDisplayed: \"currentlyDisplayed\", previousButtonDisabled: \"previousButtonDisabled\", nextButtonDisabled: \"nextButtonDisabled\", calendarYearGrid: \"calendarYearGrid\", id: \"id\", mobileLandscape: \"mobileLandscape\" }, outputs: { activeViewChange: \"activeViewChange\", previousClicked: \"previousClicked\", nextClicked: \"nextClicked\" }, host: { properties: { \"attr.id\": \"viewId\" } }, viewQueries: [{ propertyName: \"_prevButtonComponent\", first: true, predicate: [\"prevButton\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<header class=\\\"fd-calendar__navigation\\\" [class.fd-calendar__navigation--main]=\\\"mobileLandscape\\\">\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-left\\\">\\n <button\\n #prevButton\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-left\\\"\\n [attr.id]=\\\"_prevButtonId\\\"\\n [disabled]=\\\"previousButtonDisabled\\\"\\n [attr.title]=\\\"previousAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"previousAriaLabel | fdTranslate\\\"\\n type=\\\"button\\\"\\n (click)=\\\"previousClicked.emit()\\\"\\n ></button>\\n </div>\\n @if (isOnDayView || isOnMonthView) {\\n @if (!isOnMonthView) {\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select month button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-month]=\\\"currentlyDisplayed.month\\\"\\n (click)=\\\"_processViewChange('month', $event)\\\"\\n >\\n <span [attr.id]=\\\"_monthButtonLabelId\\\">{{ selectMonthLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select year button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-year]=\\\"currentlyDisplayed.year\\\"\\n (click)=\\\"_processViewChange('year', $event)\\\"\\n >\\n <span [attr.id]=\\\"_yearButtonLabelId\\\">{{ selectYearLabel }}</span>\\n </button>\\n </div>\\n }\\n @if (isOnAggregatedYearsView || isOnYearView) {\\n <div class=\\\"fd-calendar__action\\\" aria-live=\\\"polite\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\\\"\\n (click)=\\\"_processViewChange('aggregatedYear', $event)\\\"\\n type=\\\"button\\\"\\n >\\n <span [attr.id]=\\\"_yearsRangeButtonLabelId\\\">{{ selectAggregatedYearLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-right\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-right\\\"\\n [attr.id]=\\\"_nextButtonId\\\"\\n [disabled]=\\\"nextButtonDisabled\\\"\\n [attr.title]=\\\"nextAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"nextAriaLabel | fdTranslate\\\"\\n (click)=\\\"nextClicked.emit()\\\"\\n type=\\\"button\\\"\\n ></button>\\n </div>\\n</header>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_selectMonthButtonAriaLabelId\\\">{{ selectMonthAriaLabel | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearButtonAriaLabelId\\\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearsRangeButtonAriaLabelId\\\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarHeaderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-header', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<header class=\\\"fd-calendar__navigation\\\" [class.fd-calendar__navigation--main]=\\\"mobileLandscape\\\">\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-left\\\">\\n <button\\n #prevButton\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-left\\\"\\n [attr.id]=\\\"_prevButtonId\\\"\\n [disabled]=\\\"previousButtonDisabled\\\"\\n [attr.title]=\\\"previousAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"previousAriaLabel | fdTranslate\\\"\\n type=\\\"button\\\"\\n (click)=\\\"previousClicked.emit()\\\"\\n ></button>\\n </div>\\n @if (isOnDayView || isOnMonthView) {\\n @if (!isOnMonthView) {\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select month button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_monthButtonLabelId + ' ' + _selectMonthButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-month]=\\\"currentlyDisplayed.month\\\"\\n (click)=\\\"_processViewChange('month', $event)\\\"\\n >\\n <span [attr.id]=\\\"_monthButtonLabelId\\\">{{ selectMonthLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action\\\">\\n <!-- Select year button -->\\n <button\\n fd-button\\n type=\\\"button\\\"\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearButtonLabelId + ' ' + _selectYearButtonAriaLabelId\\\"\\n [attr.data-fd-calendar-year]=\\\"currentlyDisplayed.year\\\"\\n (click)=\\\"_processViewChange('year', $event)\\\"\\n >\\n <span [attr.id]=\\\"_yearButtonLabelId\\\">{{ selectYearLabel }}</span>\\n </button>\\n </div>\\n }\\n @if (isOnAggregatedYearsView || isOnYearView) {\\n <div class=\\\"fd-calendar__action\\\" aria-live=\\\"polite\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [attr.aria-labelledby]=\\\"_yearsRangeButtonLabelId + ' ' + _selectYearsRangeButtonAriaLabelId\\\"\\n (click)=\\\"_processViewChange('aggregatedYear', $event)\\\"\\n type=\\\"button\\\"\\n >\\n <span [attr.id]=\\\"_yearsRangeButtonLabelId\\\">{{ selectAggregatedYearLabel }}</span>\\n </button>\\n </div>\\n }\\n <div class=\\\"fd-calendar__action fd-calendar__action--arrow-right\\\">\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n glyph=\\\"slim-arrow-right\\\"\\n [attr.id]=\\\"_nextButtonId\\\"\\n [disabled]=\\\"nextButtonDisabled\\\"\\n [attr.title]=\\\"nextAriaLabel | fdTranslate\\\"\\n [ariaLabel]=\\\"nextAriaLabel | fdTranslate\\\"\\n (click)=\\\"nextClicked.emit()\\\"\\n type=\\\"button\\\"\\n ></button>\\n </div>\\n</header>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_selectMonthButtonAriaLabelId\\\">{{ selectMonthAriaLabel | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearButtonAriaLabelId\\\">{{ 'coreCalendar.yearSelectionLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectYearsRangeButtonAriaLabelId\\\">{{ selectAggregatedYearAriaLabel | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }], propDecorators: { activeView: [{\n type: Input\n }], currentlyDisplayed: [{\n type: Input\n }], previousButtonDisabled: [{\n type: Input\n }], nextButtonDisabled: [{\n type: Input\n }], calendarYearGrid: [{\n type: Input\n }], id: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], previousClicked: [{\n type: Output\n }], nextClicked: [{\n type: Output\n }], _prevButtonComponent: [{\n type: ViewChild,\n args: ['prevButton', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RCxPQUFPLEVBQWtCLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7O0FBRTlEOzs7R0FHRztBQVlILE1BQU0sT0FBTyx1QkFBdUI7SUFpQmhDOztPQUVHO0lBQ0gsSUFDSSxnQkFBZ0IsQ0FBQyxRQUEwQjtRQUMzQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBMEJELHNFQUFzRTtJQUN0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QWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDO2tKQUszQyxVQUFVO3NCQURULEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVFOLEVBQUU7c0JBREQsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUR4QixNQUFNO2dCQUtFLGVBQWU7c0JBRHZCLE1BQU07Z0JBS0UsV0FBVztzQkFEbkIsTUFBTTtnQkFLUCxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyQ3VycmVudCB9IGZyb20gJy4uL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IEZkQ2FsZW5kYXJWaWV3LCBGZENhbGVuZGFyVmlld0VudW0gfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBIZWFkZXIgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIEN1cnJlbnRseSBhY3RpdmUgdmlldy4gTmVlZGVkIGZvciBhMTF5IGxhYmVscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3O1xuXG4gICAgLyoqIEN1cnJlbnRseSBkaXNwbGF5ZWQgZGF0ZSBvbiB0aGUgY2FsZW5kYXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW50bHlEaXNwbGF5ZWQ6IENhbGVuZGFyQ3VycmVudDtcblxuICAgIC8qKiB3aGV0aGVyIHByZXZpb3VzIG5hdmlnYXRpb24gYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB0aGUgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiB3aGV0aGVyIG5leHQgbmF2aWdhdGlvbiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHRoZSBoZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBuZXh0QnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhbGVuZGFyWWVhckdyaWQoeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQpIHtcbiAgICAgICAgdGhpcy5fYW1vdW50T2ZZZWFyc1BlclBlcmlvZCA9IHllYXJHcmlkLmNvbHMgKiB5ZWFyR3JpZC5yb3dzIC0gMTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCgpO1xuICAgIH1cblxuICAgIC8qKiBDYWxlbmRhciBJRCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIHNob3VsZCBiZSByZW5kZXJlZCBpbiBtb2JpbGUgbGFuZHNjYXBlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFjdGl2ZSB2aWV3IHNob3VsZCBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBwcmV2aW91cyBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwcmV2aW91c0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbmV4dENsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncHJldkJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIF9wcmV2QnV0dG9uQ29tcG9uZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24uIERlcGVuZHMgb24gdGhlIGFjdGl2ZSB2aWV3LiAqL1xuICAgIGdldCBwcmV2aW91c0FyaWFMYWJlbCgpOiAnY29yZUNhbGVuZGFyLnByZXZpb3VzTW9udGhMYWJlbCcgfCAnY29yZUNhbGVuZGFyLnByZXZpb3VzWWVhckxhYmVsJyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT25EYXlWaWV3ID8gJ2NvcmVDYWxlbmRhci5wcmV2aW91c01vbnRoTGFiZWwnIDogJ2NvcmVDYWxlbmRhci5wcmV2aW91c1llYXJMYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBuZXh0IGJ1dHRvbi4gRGVwZW5kcyBvbiB0aGUgYWN0aXZlIHZpZXcuICovXG4gICAgZ2V0IG5leHRBcmlhTGFiZWwoKTogJ2NvcmVDYWxlbmRhci5uZXh0TW9udGhMYWJlbCcgfCAnY29yZUNhbGVuZGFyLm5leHRZZWFyTGFiZWwnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPbkRheVZpZXcgPyAnY29yZUNhbGVuZGFyLm5leHRNb250aExhYmVsJyA6ICdjb3JlQ2FsZW5kYXIubmV4dFllYXJMYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEJ1dHRvbiBhcmlhIGxhYmVsIHRvIG9wZW4gbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gICAgZ2V0IHNlbGVjdE1vbnRoQXJpYUxhYmVsKCk6ICdjb3JlQ2FsZW5kYXIubW9udGhTZWxlY3Rpb25MYWJlbCcgfCAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09uTW9udGhWaWV3ID8gJ2NvcmVDYWxlbmRhci5kYXRlU2VsZWN0aW9uTGFiZWwnIDogJ2NvcmVDYWxlbmRhci5tb250aFNlbGVjdGlvbkxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogQnV0dG9uIGFyaWEgbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIGdldCBzZWxlY3RBZ2dyZWdhdGVkWWVhckFyaWFMYWJlbCgpOiAnY29yZUNhbGVuZGFyLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbCcgfCAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09uQWdncmVnYXRlZFllYXJzVmlld1xuICAgICAgICAgICAgPyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3Rpb25MYWJlbCdcbiAgICAgICAgICAgIDogJ2NvcmVDYWxlbmRhci55ZWFyc1JhbmdlU2VsZWN0aW9uTGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBCdXR0b24gbGFiZWwgdG8gb3BlbiBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RNb250aExhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQnV0dG9uIGxhYmVsIHRvIG9wZW4geWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgICBzZWxlY3RZZWFyTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBCdXR0b24gbGFiZWwgdG8gb3BlbiBhZ2dyZWdhdGVkIHllYXJzIHNlbGVjdGlvbiB2aWV3LiAqL1xuICAgIHNlbGVjdEFnZ3JlZ2F0ZWRZZWFyTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gaXMgY2FsZW5kYXIgaXMgb24gYWdncmVnYXRlZCB5ZWFycyB2aWV3ICovXG4gICAgZ2V0IGlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEdldCBpbmZvcm1hdGlvbiBpcyBjYWxlbmRhciBpcyBvbiB5ZWFyIHZpZXcgKi9cbiAgICBnZXQgaXNPblllYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICB9XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGlzIGNhbGVuZGFyIGlzIG9uIG1vbnRoIHZpZXcgKi9cbiAgICBnZXQgaXNPbk1vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gRmRDYWxlbmRhclZpZXdFbnVtLk1vbnRoO1xuICAgIH1cblxuICAgIC8qKiBHZXQgaW5mb3JtYXRpb24gaXMgY2FsZW5kYXIgaXMgb24gZGF5IHZpZXcgKi9cbiAgICBnZXQgaXNPbkRheVZpZXcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5EYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IGlkXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICctaGVhZGVyJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJldmlvdXMgYnV0dG9uIGlkXG4gICAgICovXG4gICAgZ2V0IF9wcmV2QnV0dG9uSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1sZWZ0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTmV4dCBidXR0b24gaWRcbiAgICAgKi9cbiAgICBnZXQgX25leHRCdXR0b25JZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXJpZ2h0LWFycm93JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTW9udGggbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX21vbnRoQnV0dG9uTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLW1vbnRoLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IG1vbnRoIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdE1vbnRoQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QtbW9udGgtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFllYXIgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3llYXJCdXR0b25MYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICcteWVhci1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFyIGFyaWEgbGFiZWwgaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdC15ZWFyLWFyaWEtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBZZWFycyByYW5nZSBsYWJlbCBpZFxuICAgICAqL1xuICAgIGdldCBfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy15ZWFycy1yYW5nZS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCB5ZWFycyByYW5nZSBhcmlhIGxhYmVsIGlkXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RZZWFyc1JhbmdlQnV0dG9uQXJpYUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3QteWVhcnMtcmFuZ2UtYXJpYS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBNb250aCBuYW1lcyAqL1xuICAgIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogR2V0IGluZm9ybWF0aW9uIGFib3V0IGFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgYXQgb25jZSBvbiB5ZWFyIHZpZXcgICovXG4gICAgcHJpdmF0ZSBfYW1vdW50T2ZZZWFyc1BlclBlcmlvZCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGNoYW5nZXMuY3VycmVudGx5RGlzcGxheWVkICYmICFjaGFuZ2VzLmN1cnJlbnRseURpc3BsYXllZC5maXJzdENoYW5nZSkgfHxcbiAgICAgICAgICAgIChjaGFuZ2VzLmFjdGl2ZVZpZXcgJiYgIWNoYW5nZXMuYWN0aXZlVmlldy5maXJzdENoYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYWJlbHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sZWZ0QXJyb3dJZCA9IHRoaXMuX3ByZXZCdXR0b25JZDtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVNb250aE5hbWVzKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2NhbGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgb24gZm9jdXNhYmxlIGNvbnRyb2wgd2l0aGluIHRoZSBoZWFkZXJcbiAgICAgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldkJ1dHRvbkNvbXBvbmVudC5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2Nlc3NWaWV3Q2hhbmdlKHR5cGU6IEZkQ2FsZW5kYXJWaWV3LCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IHR5cGUgPT09IHRoaXMuYWN0aXZlVmlldyA/IEZkQ2FsZW5kYXJWaWV3RW51bS5EYXkgOiB0eXBlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTW9udGhOYW1lcygpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFiZWxzKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFiZWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVTZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVTZWxlY3RNb250aExhYmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdE1vbnRoTGFiZWwgPSB0aGlzLl9tb250aE5hbWVzW3RoaXMuX2dldE5vcm1hbGl6ZWREYXRlKCkubW9udGggLSAxXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVNlbGVjdFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RZZWFyTGFiZWwgPSB0aGlzLl9nZXRZZWFyTmFtZSh0aGlzLl9nZXROb3JtYWxpemVkRGF0ZSgpLnllYXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlU2VsZWN0QWdncmVnYXRlZFllYXJMYWJlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsID0gYCR7dGhpcy5fZ2V0WWVhck5hbWUodGhpcy5fZ2V0Tm9ybWFsaXplZERhdGUoKS55ZWFyKX0tJHt0aGlzLl9nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2dldE5vcm1hbGl6ZWREYXRlKCkueWVhciArIHRoaXMuX2Ftb3VudE9mWWVhcnNQZXJQZXJpb2RcbiAgICAgICAgKX1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTW9udGhOYW1lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5vcm1hbGl6ZWREYXRlKCk6IENhbGVuZGFyQ3VycmVudCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLm5vdygpKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhcixcbiAgICAgICAgICAgIG1vbnRoOiBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLl9kYXRlVGltZUFkYXB0ZXIubm93KCkpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbmF2aWdhdGlvblwiIFtjbGFzcy5mZC1jYWxlbmRhcl9fbmF2aWdhdGlvbi0tbWFpbl09XCJtb2JpbGVMYW5kc2NhcGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1sZWZ0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICNwcmV2QnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIl9wcmV2QnV0dG9uSWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXZpb3VzQnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicHJldmlvdXNBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cInByZXZpb3VzQXJpYUxhYmVsIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNDbGlja2VkLmVtaXQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICBAaWYgKGlzT25EYXlWaWV3IHx8IGlzT25Nb250aFZpZXcpIHtcbiAgICAgICAgQGlmICghaXNPbk1vbnRoVmlldykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdCBtb250aCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9tb250aEJ1dHRvbkxhYmVsSWQgKyAnICcgKyBfc2VsZWN0TW9udGhCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItbW9udGhdPVwiY3VycmVudGx5RGlzcGxheWVkLm1vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnbW9udGgnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmlkXT1cIl9tb250aEJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RNb250aExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX19hY3Rpb25cIj5cbiAgICAgICAgICAgIDwhLS0gU2VsZWN0IHllYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci15ZWFyXT1cImN1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX3Byb2Nlc3NWaWV3Q2hhbmdlKCd5ZWFyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuaWRdPVwiX3llYXJCdXR0b25MYWJlbElkXCI+e3sgc2VsZWN0WWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGlzT25BZ2dyZWdhdGVkWWVhcnNWaWV3IHx8IGlzT25ZZWFyVmlldykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3llYXJzUmFuZ2VCdXR0b25MYWJlbElkICsgJyAnICsgX3NlbGVjdFllYXJzUmFuZ2VCdXR0b25BcmlhTGFiZWxJZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9wcm9jZXNzVmlld0NoYW5nZSgnYWdncmVnYXRlZFllYXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5pZF09XCJfeWVhcnNSYW5nZUJ1dHRvbkxhYmVsSWRcIj57eyBzZWxlY3RBZ2dyZWdhdGVkWWVhckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2FjdGlvbiBmZC1jYWxlbmRhcl9fYWN0aW9uLS1hcnJvdy1yaWdodFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1yaWdodFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJfbmV4dEJ1dHRvbklkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibmV4dEFyaWFMYWJlbCB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibmV4dEFyaWFMYWJlbCB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0Q2xpY2tlZC5lbWl0KClcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvaGVhZGVyPlxuPCEtLSBIaWRkZW4gZWxlbWVudHMgZm9yIGFyaWEgcHVycG9zZXMgLS0+XG48ZGl2IGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9zZWxlY3RNb250aEJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0TW9udGhBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdFllYXJCdXR0b25BcmlhTGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIueWVhclNlbGVjdGlvbkxhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfc2VsZWN0WWVhcnNSYW5nZUJ1dHRvbkFyaWFMYWJlbElkXCI+e3sgc2VsZWN0QWdncmVnYXRlZFllYXJBcmlhTGFiZWwgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuPC9kaXY+XG4iXX0=","import { Injectable, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class CalendarLegendFocusingService {\n constructor() {\n /** Signal to track the focused special day number. Only one legend item can have focus at a time. */\n this.focusedSpecialDayNumber = signal(null, ...(ngDevMode ? [{ debugName: \"focusedSpecialDayNumber\" }] : []));\n }\n /** Clearing the focused element */\n clearFocusedElement() {\n this.focusedSpecialDayNumber.set(null);\n }\n /** Setting the special day number that is currently focused */\n handleLegendItemFocus(specialDayNumber) {\n this.focusedSpecialDayNumber.set(specialDayNumber);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendFocusingService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLWZvY3VzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvY2FsZW5kYXItbGVnZW5kL2NhbGVuZGFyLWxlZ2VuZC1mb2N1c2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUluRCxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRUkscUdBQXFHO1FBQzVGLDRCQUF1QixHQUFHLE1BQU0sQ0FBbUIsSUFBSSxtRUFBQyxDQUFDO0tBV3JFO0lBVEcsbUNBQW1DO0lBQ25DLG1CQUFtQjtRQUNmLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxxQkFBcUIsQ0FBQyxnQkFBa0M7UUFDcEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OEdBWlEsNkJBQTZCO2tIQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2Uge1xuICAgIC8qKiBTaWduYWwgdG8gdHJhY2sgdGhlIGZvY3VzZWQgc3BlY2lhbCBkYXkgbnVtYmVyLiBPbmx5IG9uZSBsZWdlbmQgaXRlbSBjYW4gaGF2ZSBmb2N1cyBhdCBhIHRpbWUuICovXG4gICAgcmVhZG9ubHkgZm9jdXNlZFNwZWNpYWxEYXlOdW1iZXIgPSBzaWduYWw8TnVsbGFibGU8bnVtYmVyPj4obnVsbCk7XG5cbiAgICAvKiogQ2xlYXJpbmcgdGhlIGZvY3VzZWQgZWxlbWVudCAqL1xuICAgIGNsZWFyRm9jdXNlZEVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXNlZFNwZWNpYWxEYXlOdW1iZXIuc2V0KG51bGwpO1xuICAgIH1cblxuICAgIC8qKiBTZXR0aW5nIHRoZSBzcGVjaWFsIGRheSBudW1iZXIgdGhhdCBpcyBjdXJyZW50bHkgZm9jdXNlZCAqL1xuICAgIGhhbmRsZUxlZ2VuZEl0ZW1Gb2N1cyhzcGVjaWFsRGF5TnVtYmVyOiBOdWxsYWJsZTxudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXNlZFNwZWNpYWxEYXlOdW1iZXIuc2V0KHNwZWNpYWxEYXlOdW1iZXIpO1xuICAgIH1cbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class CalendarLegendItemComponent {\n constructor() {\n /** The text of the legend item */\n this.text = input(...(ngDevMode ? [undefined, { debugName: \"text\" }] : []));\n /** The color of the legend item marker */\n this.color = input(...(ngDevMode ? [undefined, { debugName: \"color\" }] : []));\n /** If the marker is a circle or a square */\n this.circle = input(...(ngDevMode ? [undefined, { debugName: \"circle\" }] : []));\n /** @hidden */\n this.class = input('', ...(ngDevMode ? [{ debugName: \"class\" }] : []));\n /** @hidden */\n this.elementRef = inject(ElementRef);\n /** @hidden Computed CSS classes based on inputs */\n this._componentClasses = computed(() => {\n const classes = ['fd-calendar-legend__item'];\n classes.push(this.class());\n if (this.circle()) {\n classes.push('fd-calendar-legend__item--appointment');\n }\n if (this.color()) {\n classes.push(`fd-calendar-legend__item--${this.color()}`);\n }\n return classes.join(' ');\n }, ...(ngDevMode ? [{ debugName: \"_componentClasses\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.1.4\", type: CalendarLegendItemComponent, isStandalone: true, selector: \"fd-calendar-legend-item\", inputs: { text: { classPropertyName: \"text\", publicName: \"text\", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: \"color\", publicName: \"color\", isSignal: true, isRequired: false, transformFunction: null }, circle: { classPropertyName: \"circle\", publicName: \"circle\", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: \"class\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabindex\": \"0\" }, properties: { \"class\": \"_componentClasses()\" } }, ngImport: i0, template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendItemComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'fd-calendar-legend-item',\n standalone: true,\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"fd-calendar-legend__marker\"></span>\n <span class=\"fd-calendar-legend__text\">\n <ng-content>{{ text() }}</ng-content>\n </span>\n `,\n host: {\n tabindex: '0',\n '[class]': '_componentClasses()'\n }\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLWxlZ2VuZC9jYWxlbmRhci1sZWdlbmQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQzs7QUFtQnZCLE1BQU0sT0FBTywyQkFBMkI7SUFqQnhDO1FBa0JJLGtDQUFrQztRQUNsQyxTQUFJLEdBQUcsS0FBSywwREFBc0IsQ0FBQztRQUVuQywwQ0FBMEM7UUFDMUMsVUFBSyxHQUFHLEtBQUssMkRBQVUsQ0FBQztRQUV4Qiw0Q0FBNEM7UUFDNUMsV0FBTSxHQUFHLEtBQUssNERBQVcsQ0FBQztRQUUxQixjQUFjO1FBQ2QsVUFBSyxHQUFHLEtBQUssQ0FBcUIsRUFBRSxpREFBQyxDQUFDO1FBRXRDLGNBQWM7UUFDTCxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpDLG1EQUFtRDtRQUNoQyxzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pELE1BQU0sT0FBTyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUU3QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFDO1lBRTVCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsQ0FBQyw2REFBQyxDQUFDO0tBQ047OEdBL0JZLDJCQUEyQjtrR0FBM0IsMkJBQTJCLDBwQkFYMUI7Ozs7O0tBS1Q7OzJGQU1RLDJCQUEyQjtrQkFqQnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxFQUFFO29CQUNYLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFOzs7OztLQUtUO29CQUNELElBQUksRUFBRTt3QkFDRixRQUFRLEVBQUUsR0FBRzt3QkFDYixTQUFTLEVBQUUscUJBQXFCO3FCQUNuQztpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC1jYWxlbmRhci1sZWdlbmRfX21hcmtlclwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC1jYWxlbmRhci1sZWdlbmRfX3RleHRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50Pnt7IHRleHQoKSB9fTwvbmctY29udGVudD5cbiAgICAgICAgPC9zcGFuPlxuICAgIGAsXG4gICAgaG9zdDoge1xuICAgICAgICB0YWJpbmRleDogJzAnLFxuICAgICAgICAnW2NsYXNzXSc6ICdfY29tcG9uZW50Q2xhc3NlcygpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJMZWdlbmRJdGVtQ29tcG9uZW50IHtcbiAgICAvKiogVGhlIHRleHQgb2YgdGhlIGxlZ2VuZCBpdGVtICovXG4gICAgdGV4dCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBUaGUgY29sb3Igb2YgdGhlIGxlZ2VuZCBpdGVtIG1hcmtlciAqL1xuICAgIGNvbG9yID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqIElmIHRoZSBtYXJrZXIgaXMgYSBjaXJjbGUgb3IgYSBzcXVhcmUgKi9cbiAgICBjaXJjbGUgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oJycpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gQ29tcHV0ZWQgQ1NTIGNsYXNzZXMgYmFzZWQgb24gaW5wdXRzICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb21wb25lbnRDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gWydmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0nXTtcblxuICAgICAgICBjbGFzc2VzLnB1c2godGhpcy5jbGFzcygpISk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2lyY2xlKCkpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnZmQtY2FsZW5kYXItbGVnZW5kX19pdGVtLS1hcHBvaW50bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29sb3IoKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGBmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0tLSR7dGhpcy5jb2xvcigpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9KTtcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { FocusableItemDirective, FocusableListDirective } from '@fundamental-ngx/cdk/utils';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from './calendar-legend-focusing.service';\nimport { CalendarLegendItemComponent } from './calendar-legend-item.component';\nimport * as i0 from \"@angular/core\";\nexport class CalendarLegendComponent {\n constructor() {\n /**\n * Make it a column instead\n */\n this.col = input(false, ...(ngDevMode ? [{ debugName: \"col\" }] : []));\n /** Whether to display the legend item for today's date. */\n this.displayTodayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayTodayLegendItem\" }] : []));\n /** Whether to display the legend item for the currently selected date. */\n this.displaySelectedLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displaySelectedLegendItem\" }] : []));\n /** Whether to display the legend item for work days. */\n this.displayWorkDayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayWorkDayLegendItem\" }] : []));\n /** Whether to display the legend item for non-work days. */\n this.displayNonWorkDayLegendItem = input(true, ...(ngDevMode ? [{ debugName: \"displayNonWorkDayLegendItem\" }] : []));\n /**\n * Special days rules to be displayed in the legend\n */\n this.specialDaysRules = input([], ...(ngDevMode ? [{ debugName: \"specialDaysRules\" }] : []));\n /** @hidden */\n this._focusingService = inject(CalendarLegendFocusingService, { optional: true });\n }\n /** @hidden */\n _handleFocusedElementEvent(specialDayNumber) {\n this._focusingService?.handleLegendItemFocus(specialDayNumber);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarLegendComponent, isStandalone: true, selector: \"fd-calendar-legend\", inputs: { col: { classPropertyName: \"col\", publicName: \"col\", isSignal: true, isRequired: false, transformFunction: null }, displayTodayLegendItem: { classPropertyName: \"displayTodayLegendItem\", publicName: \"displayTodayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displaySelectedLegendItem: { classPropertyName: \"displaySelectedLegendItem\", publicName: \"displaySelectedLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displayWorkDayLegendItem: { classPropertyName: \"displayWorkDayLegendItem\", publicName: \"displayWorkDayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, displayNonWorkDayLegendItem: { classPropertyName: \"displayNonWorkDayLegendItem\", publicName: \"displayNonWorkDayLegendItem\", isSignal: true, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class.fd-calendar-legend--auto-column\": \"col()\" }, classAttribute: \"fd-calendar-legend\" }, ngImport: i0, template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"'coreCalendar.dateSelectedLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"'coreCalendar.workDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"'coreCalendar.nonWorkDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `, isInline: true, dependencies: [{ kind: \"component\", type: CalendarLegendItemComponent, selector: \"fd-calendar-legend-item\", inputs: [\"text\", \"color\", \"circle\", \"class\"] }, { kind: \"directive\", type: FocusableListDirective, selector: \"[fdkFocusableList]\", inputs: [\"focusable\", \"navigationDirection\", \"contentDirection\", \"wrap\", \"listFocusedEventAnnouncer\"], outputs: [\"itemFocused\"], exportAs: [\"fdkFocusableList\"] }, { kind: \"directive\", type: FocusableItemDirective, selector: \"[fdkFocusableItem]\", inputs: [\"fdkFocusableItem\", \"cellFocusedEventAnnouncer\"], outputs: [\"cellFocused\", \"focusableChildElementFocused\", \"_parentFocusableItemFocused\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarLegendComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'fd-calendar-legend',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content></ng-content>\n <ng-container>\n <div fdkFocusableList>\n @if (displayTodayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--today\"\n [text]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displaySelectedLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--selected\"\n [text]=\"'coreCalendar.dateSelectedLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--work\"\n [text]=\"'coreCalendar.workDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n @if (displayNonWorkDayLegendItem()) {\n <fd-calendar-legend-item\n fdkFocusableItem\n class=\"fd-calendar-legend__item--non-work\"\n [text]=\"'coreCalendar.nonWorkDayLabel' | fdTranslate\"\n (focus)=\"_handleFocusedElementEvent(null)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n\n @for (rule of specialDaysRules(); track rule.specialDayNumber) {\n <fd-calendar-legend-item\n fdkFocusableItem\n [text]=\"rule.legendText\"\n [circle]=\"rule.appointment\"\n [color]=\"'placeholder-' + rule.specialDayNumber\"\n (focus)=\"_handleFocusedElementEvent(rule.specialDayNumber)\"\n (blur)=\"_handleFocusedElementEvent(null)\"\n ></fd-calendar-legend-item>\n }\n </div>\n </ng-container>\n `,\n host: {\n class: 'fd-calendar-legend',\n '[class.fd-calendar-legend--auto-column]': 'col()'\n },\n imports: [CalendarLegendItemComponent, FocusableListDirective, FocusableItemDirective, FdTranslatePipe]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGVnZW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci1sZWdlbmQvY2FsZW5kYXItbGVnZW5kLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQWtFL0UsTUFBTSxPQUFPLHVCQUF1QjtJQWhFcEM7UUFpRUk7O1dBRUc7UUFDSCxRQUFHLEdBQUcsS0FBSyxDQUFVLEtBQUssK0NBQUMsQ0FBQztRQUU1QiwyREFBMkQ7UUFDM0QsMkJBQXNCLEdBQUcsS0FBSyxDQUFVLElBQUksa0VBQUMsQ0FBQztRQUU5QywwRUFBMEU7UUFDMUUsOEJBQXlCLEdBQUcsS0FBSyxDQUFVLElBQUkscUVBQUMsQ0FBQztRQUVqRCx3REFBd0Q7UUFDeEQsNkJBQXdCLEdBQUcsS0FBSyxDQUFVLElBQUksb0VBQUMsQ0FBQztRQUVoRCw0REFBNEQ7UUFDNUQsZ0NBQTJCLEdBQUcsS0FBSyxDQUFVLElBQUksdUVBQUMsQ0FBQztRQUVuRDs7V0FFRztRQUNILHFCQUFnQixHQUFHLEtBQUssQ0FBc0IsRUFBRSw0REFBQyxDQUFDO1FBRWxELGNBQWM7UUFDRyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQU1qRztJQUpHLGNBQWM7SUFDZCwwQkFBMEIsQ0FBQyxnQkFBa0M7UUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQzs4R0E3QlEsdUJBQXVCO2tHQUF2Qix1QkFBdUIsaXFDQTVEdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBcURULDREQUtTLDJCQUEyQixrSEFBRSxzQkFBc0IsZ09BQUUsc0JBQXNCLDhNQUFFLGVBQWU7OzJGQUU3Rix1QkFBdUI7a0JBaEVuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXFEVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLG9CQUFvQjt3QkFDM0IseUNBQXlDLEVBQUUsT0FBTztxQkFDckQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxDQUFDO2lCQUMxRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzYWJsZUl0ZW1EaXJlY3RpdmUsIEZvY3VzYWJsZUxpc3REaXJlY3RpdmUsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXItbGVnZW5kLWZvY3VzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJMZWdlbmRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1sZWdlbmQtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWxlZ2VuZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGZka0ZvY3VzYWJsZUxpc3Q+XG4gICAgICAgICAgICAgICAgQGlmIChkaXNwbGF5VG9kYXlMZWdlbmRJdGVtKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZGtGb2N1c2FibGVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyLWxlZ2VuZF9faXRlbS0tdG9kYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGRpc3BsYXlTZWxlY3RlZExlZ2VuZEl0ZW0oKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZka0ZvY3VzYWJsZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXItbGVnZW5kX19pdGVtLS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGRpc3BsYXlXb3JrRGF5TGVnZW5kSXRlbSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxmZC1jYWxlbmRhci1sZWdlbmQtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgZmRrRm9jdXNhYmxlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhci1sZWdlbmRfX2l0ZW0tLXdvcmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ2NvcmVDYWxlbmRhci53b3JrRGF5TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIl9oYW5kbGVGb2N1c2VkRWxlbWVudEV2ZW50KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl9oYW5kbGVGb2N1c2VkRWxlbWVudEV2ZW50KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoZGlzcGxheU5vbldvcmtEYXlMZWdlbmRJdGVtKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGZkLWNhbGVuZGFyLWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBmZGtGb2N1c2FibGVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyLWxlZ2VuZF9faXRlbS0tbm9uLXdvcmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ2NvcmVDYWxlbmRhci5ub25Xb3JrRGF5TGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIl9oYW5kbGVGb2N1c2VkRWxlbWVudEV2ZW50KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl9oYW5kbGVGb2N1c2VkRWxlbWVudEV2ZW50KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGZvciAocnVsZSBvZiBzcGVjaWFsRGF5c1J1bGVzKCk7IHRyYWNrIHJ1bGUuc3BlY2lhbERheU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICA8ZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZka0ZvY3VzYWJsZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInJ1bGUubGVnZW5kVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInJ1bGUuYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidwbGFjZWhvbGRlci0nICsgcnVsZS5zcGVjaWFsRGF5TnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChydWxlLnNwZWNpYWxEYXlOdW1iZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl9oYW5kbGVGb2N1c2VkRWxlbWVudEV2ZW50KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtY2FsZW5kYXItbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIGAsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLWNhbGVuZGFyLWxlZ2VuZCcsXG4gICAgICAgICdbY2xhc3MuZmQtY2FsZW5kYXItbGVnZW5kLS1hdXRvLWNvbHVtbl0nOiAnY29sKCknXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbQ2FsZW5kYXJMZWdlbmRJdGVtQ29tcG9uZW50LCBGb2N1c2FibGVMaXN0RGlyZWN0aXZlLCBGb2N1c2FibGVJdGVtRGlyZWN0aXZlLCBGZFRyYW5zbGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTGVnZW5kQ29tcG9uZW50PEQ+IHtcbiAgICAvKipcbiAgICAgKiBNYWtlIGl0IGEgY29sdW1uIGluc3RlYWRcbiAgICAgKi9cbiAgICBjb2wgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBsZWdlbmQgaXRlbSBmb3IgdG9kYXkncyBkYXRlLiAqL1xuICAgIGRpc3BsYXlUb2RheUxlZ2VuZEl0ZW0gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGxlZ2VuZCBpdGVtIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gICAgZGlzcGxheVNlbGVjdGVkTGVnZW5kSXRlbSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgbGVnZW5kIGl0ZW0gZm9yIHdvcmsgZGF5cy4gKi9cbiAgICBkaXNwbGF5V29ya0RheUxlZ2VuZEl0ZW0gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGxlZ2VuZCBpdGVtIGZvciBub24td29yayBkYXlzLiAqL1xuICAgIGRpc3BsYXlOb25Xb3JrRGF5TGVnZW5kSXRlbSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBkYXlzIHJ1bGVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbGVnZW5kXG4gICAgICovXG4gICAgc3BlY2lhbERheXNSdWxlcyA9IGlucHV0PFNwZWNpYWxEYXlSdWxlPEQ+W10+KFtdKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNpbmdTZXJ2aWNlID0gaW5qZWN0KENhbGVuZGFyTGVnZW5kRm9jdXNpbmdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlRm9jdXNlZEVsZW1lbnRFdmVudChzcGVjaWFsRGF5TnVtYmVyOiBOdWxsYWJsZTxudW1iZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzaW5nU2VydmljZT8uaGFuZGxlTGVnZW5kSXRlbUZvY3VzKHNwZWNpYWxEYXlOdW1iZXIpO1xuICAgIH1cbn1cbiJdfQ==","/**\n * Calendar active cell strategy\n */\nexport class AbstractCalendarActiveCellStrategy {\n}\nexport class DefaultCalendarActiveCellStrategy extends AbstractCalendarActiveCellStrategy {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells) {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n return cells[0] || null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL21vZGVscy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEJBOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixrQ0FBa0M7Q0FLdkQ7QUFFRCxNQUFNLE9BQU8saUNBRVgsU0FBUSxrQ0FBcUM7SUFDM0M7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBVTtRQUNwQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbi8qKlxuICogQmFzZSBDYWxlbmRhciBDZWxsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNhbGVuZGFyQ2VsbCB7XG4gICAgLyoqIFJlcHJlc2VudGF0aW9uIGluIHN0cmluZyAqL1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIGNlbGwgdW5pcXVlIGlkICovXG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgLyoqIGN1cnJlbnRseSBhY3RpdmUgKHRvZGF5KSAqL1xuICAgIGN1cnJlbnQ/OiBib29sZWFuO1xuICAgIC8qKiBzZWxlY3RlZCBjZWxsICovXG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIC8qKiBkaXNhYmxlZCBjZWxsICovXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIC8qKiBjZWxsIHRhYmluZGV4ICovXG4gICAgdGFiSW5kZXg/OiBudW1iZXI7XG4gICAgLyoqIGFyaWEtbGFiZWwgKi9cbiAgICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSAqL1xuICAgIGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nO1xuICAgIC8qKiBsaXN0IGluZGV4ICovXG4gICAgaW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IHtcbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIENhbGVuZGFyIGFjdGl2ZSBjZWxsIHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PFQgZXh0ZW5kcyBCYXNlQ2FsZW5kYXJDZWxsID0gQmFzZUNhbGVuZGFyQ2VsbD4ge1xuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB3aGljaCB0YWJsZSBjZWxsIHNob3VsZCBiZSBhY3RpdmVcbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRBY3RpdmVDZWxsKGNlbGxzOiBUW10pOiBUIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneTxcbiAgICBUIGV4dGVuZHMgQmFzZUNhbGVuZGFyQ2VsbCA9IEJhc2VDYWxlbmRhckNlbGxcbj4gZXh0ZW5kcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PFQ+IHtcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgd2hpY2ggdGFibGUgY2VsbCBzaG91bGQgYmUgYWN0aXZlXG4gICAgICovXG4gICAgZ2V0QWN0aXZlQ2VsbChjZWxsczogVFtdKTogVCB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuc2VsZWN0ZWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsc1swXSB8fCBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgRXNjYXBlRm9jdXNGdW5jdGlvbiA9IE51bGxhYmxlPChldmVudD86IEtleWJvYXJkRXZlbnQpID0+IHZvaWQ+O1xuXG5leHBvcnQgdHlwZSBEaXNhYmxlRGF0ZUZ1bmN0aW9uPEQ+ID0gTnVsbGFibGU8KGRhdGU6IEQpID0+IGJvb2xlYW4+O1xuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\nexport class CalendarAggregatedYearViewComponent {\n /**\n * View ID\n */\n get viewId() {\n return this.id + '-years-range-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /** Event fired when a year is selected. */\n this.yearsClicked = new EventEmitter();\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected - this._yearsInOnePeriod();\n this._constructYearsGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearsGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated &&\n ('yearSelected' in changes ||\n 'aggregatedYearsViewGrid' in changes ||\n 'yearViewGrid' in changes ||\n 'id' in changes)) {\n this._constructYearsGrid();\n }\n }\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear, event) {\n if (event) {\n event.stopPropagation();\n }\n this._yearsSelected = selectedYear.years;\n this.yearsClicked.emit(this._yearsSelected);\n }\n /** Method used to load the previous 12 years to be displayed. */\n loadNextYearsList() {\n this._firstYearInList += this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n /** Method used to load the next 12 years to be displayed. */\n loadPreviousYearsList() {\n this._firstYearInList -= this._periodsAmount() * this._yearsInOnePeriod();\n this._constructYearsGrid();\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearsList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /** Method for handling the keyboard navigation. */\n _onKeydownYearHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Method returning index of aggregated year index cell\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Get id of calendar's aggregated year item\n */\n _getId(index) {\n return this.viewId + '-aggregated-years-' + index;\n }\n /**\n * @hidden\n * Check if specified year is between start year and end year)\n */\n _isBetween(aggregatedYear, yearToCheck) {\n return aggregatedYear.endYear >= yearToCheck && aggregatedYear.startYear <= yearToCheck;\n }\n /** @hidden */\n _constructYearsGrid() {\n const displayedYearsAmount = this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n const calendarYearList = [];\n this._calendarYearListGrid = [];\n for (let index = 0; index < displayedYearsAmount; ++index) {\n /**\n * Generates object with certain period of years,\n * which depends on amount of years displayed in year view\n */\n const years = {\n startYear: this._firstYearInList + this._yearsInOnePeriod() * index,\n endYear: this._firstYearInList + this._yearsInOnePeriod() * (index + 1) - 1\n };\n calendarYearList.push({\n years,\n label: this._getYearsName(years),\n ariaLabel: this._getAriaYearsName(years),\n selected: this._isBetween(years, this.yearSelected),\n current: this._isBetween(years, this._currentYear),\n index\n });\n }\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.aggregatedYearsViewGrid.cols));\n }\n const yearsCellSelected = calendarYearList.find((cell) => this._isBetween(cell.years, this.yearSelected));\n this._yearsSelected = yearsCellSelected ? yearsCellSelected.years : null;\n this._activeYear = this._getActiveYear();\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.years === this._activeYear ? 0 : -1;\n });\n });\n this._changeDetectorRef.detectChanges();\n }\n /**\n * @hidden\n * Returns year name as a string.\n */\n _getYearsName(years) {\n const startYearFormatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(years.startYear, 1, 1));\n const endYearFormatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(years.endYear, 1, 1));\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(years.endYear, endYearFormatted)}`;\n }\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n _getAriaYearsName(years) {\n const startYearFormatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(years.startYear, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n const endYearFormatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(years.endYear, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n return `${this._getYearString(years.startYear, startYearFormatted)} - ${this._getYearString(years.endYear, endYearFormatted)}`;\n }\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n _getYearString(year, defaultStr) {\n if (typeof this.aggregatedYearsViewGrid.yearMapping === 'function') {\n return this.aggregatedYearsViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n _yearsInOnePeriod() {\n if (this.yearViewGrid) {\n return this.yearViewGrid.cols * this.yearViewGrid.rows;\n }\n else {\n return 12;\n }\n }\n /**\n * @hidden\n * Amount of years displayed in aggregated year view\n */\n _periodsAmount() {\n return this.aggregatedYearsViewGrid.cols * this.aggregatedYearsViewGrid.rows;\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n _getActiveYear() {\n const selectedYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this.yearSelected));\n if (selectedYearCell) {\n return selectedYearCell.years;\n }\n const currentYearCell = this._getYearsList().find(({ years }) => this._isBetween(years, this._currentYear));\n if (currentYearCell) {\n return currentYearCell.years;\n }\n return this._calendarYearListGrid[0][0].years;\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n _getYearsList() {\n return [].concat(...this._calendarYearListGrid);\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.rowAmount = this.aggregatedYearsViewGrid.rows;\n this._calendarService.colAmount = this.aggregatedYearsViewGrid.cols;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index }) => this.selectYear(this._getYearsList()[index]));\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearsList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarAggregatedYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarAggregatedYearViewComponent, isStandalone: true, selector: \"fd-calendar-aggregated-year-view\", inputs: { id: \"id\", focusEscapeFunction: \"focusEscapeFunction\", yearSelected: \"yearSelected\", aggregatedYearsViewGrid: \"aggregatedYearsViewGrid\", yearViewGrid: \"yearViewGrid\" }, outputs: { yearsClicked: \"yearsClicked\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsRangeViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\">\\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"cell.current\\\"\\n [class.is-active]=\\\"cell.selected\\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.tabindex]=\\\"cell.tabIndex\\\"\\n [attr.data-fd-calendar-years]=\\\"cell.years.startYear + '-' + cell.years.endYear\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, cell.index)\\\"\\n (click)=\\\"selectYear(cell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"cell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ cell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarAggregatedYearViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-aggregated-year-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {\n '[attr.id]': 'viewId'\n }, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsRangeViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\">\\n @for (cell of colYears; track cell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"cell.current\\\"\\n [class.is-active]=\\\"cell.selected\\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.tabindex]=\\\"cell.tabIndex\\\"\\n [attr.data-fd-calendar-years]=\\\"cell.years.startYear + '-' + cell.years.endYear\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, cell.index)\\\"\\n (click)=\\\"selectYear(cell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"cell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ cell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { id: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], yearSelected: [{\n type: Input\n }], aggregatedYearsViewGrid: [{\n type: Input\n }], yearViewGrid: [{\n type: Input\n }], yearsClicked: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3L2NhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4saUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXJHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBOEMsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQWFwSCxNQUFNLE9BQU8sbUNBQW1DO0lBNkI1Qzs7T0FFRztJQUNILElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJ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RGxCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFPTixZQUFZO3NCQURYLEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZWRZZWFyLCBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FnZ3JlZ2F0ZWQteWVhcic7XG5pbXBvcnQgeyBDYWxlbmRhclllYXJHcmlkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLXllYXItZ3JpZCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlldy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0J1dHRvbkNvbXBvbmVudCwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBQYXJhbWV0ZXIgdXNlZCBpbiBpZCBvZiB5ZWFycyB1c2VkIGZvciBoZWxwIHdpdGggZm9jdXNpbmcgb24gdGhlIGNvcnJlY3QgZWxlbWVudCBkdXJpbmcga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZm9jdXMgd291bGQgZXNjYXBlIHRoZSBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9jdXNFc2NhcGVGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbjtcblxuICAgIC8qKiBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgeWVhciB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJTZWxlY3RlZDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJzVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gY3VzdG9taXplIHllYXIgZ3JpZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhclZpZXdHcmlkOiBDYWxlbmRhclllYXJHcmlkO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJzQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEFnZ3JlZ2F0ZWRZZWFyPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWdncmVnYXRlZFllYXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IElEXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCArICcteWVhcnMtcmFuZ2Utdmlldyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZGF5IGNlbGwgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3RvZGF5TGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXRvZGF5LWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0ZWQgZGF0ZSBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0ZWREYXRlTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdGVkLWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSB3aGljaCB5ZWFyIGZyb20gY2FsZW5kYXJZZWFyTGlzdCBzaG91bGQgYmUgZm9jdXNhYmxlIGJ5IHRhYiBrZXlcbiAgICAgKi9cbiAgICBfYWN0aXZlWWVhcjogQWdncmVnYXRlZFllYXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIFBhcmFtZXRlciB0aGF0IHN0b3JlcyB0aGUgZG96ZW4gb2YgeWVhcnMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC5cbiAgICAgKi9cbiAgICBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ6IENhbGVuZGFyQWdncmVnYXRlZFllYXJbXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEN1cnJlbnQgcGVyaW9kIG9mIHllYXJzIHNlbGVjdGVkXG4gICAgICovXG4gICAgX3llYXJzU2VsZWN0ZWQ6IEFnZ3JlZ2F0ZWRZZWFyIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfZmlyc3RZZWFySW5MaXN0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy55ZWFyU2VsZWN0ZWQgLSB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG5cbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmxvY2FsZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyc0dyaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5faW5pdGlhdGVkICYmXG4gICAgICAgICAgICAoJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICdhZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZCcgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgICAgICd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICAgICAnaWQnIGluIGNoYW5nZXMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhcnNHcmlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgc2VuZHMgdGhlIHllYXIgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgd2hlbiBpdCBpcyBjbGlja2VkLiAqL1xuICAgIHNlbGVjdFllYXIoc2VsZWN0ZWRZZWFyOiBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl95ZWFyc1NlbGVjdGVkID0gc2VsZWN0ZWRZZWFyLnllYXJzO1xuICAgICAgICB0aGlzLnllYXJzQ2xpY2tlZC5lbWl0KHRoaXMuX3llYXJzU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBwcmV2aW91cyAxMiB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCArPSB0aGlzLl9wZXJpb2RzQW1vdW50KCkgKiB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJzR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IDEyIHllYXJzIHRvIGJlIGRpc3BsYXllZC4gKi9cbiAgICBsb2FkUHJldmlvdXNZZWFyc0xpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpcnN0WWVhckluTGlzdCAtPSB0aGlzLl9wZXJpb2RzQW1vdW50KCkgKiB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJzR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0WWVhcnNMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uLiAqL1xuICAgIF9vbktleWRvd25ZZWFySGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGluZGV4IG9mIGFnZ3JlZ2F0ZWQgeWVhciBpbmRleCBjZWxsXG4gICAgICovXG4gICAgX2dldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdldElkKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCBpZCBvZiBjYWxlbmRhcidzIGFnZ3JlZ2F0ZWQgeWVhciBpdGVtXG4gICAgICovXG4gICAgX2dldElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLWFnZ3JlZ2F0ZWQteWVhcnMtJyArIGluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayBpZiBzcGVjaWZpZWQgeWVhciBpcyBiZXR3ZWVuIHN0YXJ0IHllYXIgYW5kIGVuZCB5ZWFyKVxuICAgICAqL1xuICAgIF9pc0JldHdlZW4oYWdncmVnYXRlZFllYXI6IEFnZ3JlZ2F0ZWRZZWFyLCB5ZWFyVG9DaGVjazogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGVkWWVhci5lbmRZZWFyID49IHllYXJUb0NoZWNrICYmIGFnZ3JlZ2F0ZWRZZWFyLnN0YXJ0WWVhciA8PSB5ZWFyVG9DaGVjaztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJzR3JpZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheWVkWWVhcnNBbW91bnQ6IG51bWJlciA9IHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scyAqIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQucm93cztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJZZWFyTGlzdDogQ2FsZW5kYXJBZ2dyZWdhdGVkWWVhcltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRpc3BsYXllZFllYXJzQW1vdW50OyArK2luZGV4KSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdlbmVyYXRlcyBvYmplY3Qgd2l0aCBjZXJ0YWluIHBlcmlvZCBvZiB5ZWFycyxcbiAgICAgICAgICAgICAqIHdoaWNoIGRlcGVuZHMgb24gYW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBjb25zdCB5ZWFyczogQWdncmVnYXRlZFllYXIgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRZZWFyOiB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCkgKiBpbmRleCxcbiAgICAgICAgICAgICAgICBlbmRZZWFyOiB0aGlzLl9maXJzdFllYXJJbkxpc3QgKyB0aGlzLl95ZWFyc0luT25lUGVyaW9kKCkgKiAoaW5kZXggKyAxKSAtIDFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2dldFllYXJzTmFtZSh5ZWFycyksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhcnNOYW1lKHllYXJzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLnllYXJTZWxlY3RlZCksXG4gICAgICAgICAgICAgICAgY3VycmVudDogdGhpcy5faXNCZXR3ZWVuKHllYXJzLCB0aGlzLl9jdXJyZW50WWVhciksXG4gICAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIENyZWF0aW5nIDJkIGdyaWQgKi9cbiAgICAgICAgd2hpbGUgKGNhbGVuZGFyWWVhckxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclllYXJMaXN0R3JpZC5wdXNoKGNhbGVuZGFyWWVhckxpc3Quc3BsaWNlKDAsIHRoaXMuYWdncmVnYXRlZFllYXJzVmlld0dyaWQuY29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeWVhcnNDZWxsU2VsZWN0ZWQgPSBjYWxlbmRhclllYXJMaXN0LmZpbmQoKGNlbGwpID0+IHRoaXMuX2lzQmV0d2VlbihjZWxsLnllYXJzLCB0aGlzLnllYXJTZWxlY3RlZCkpO1xuICAgICAgICB0aGlzLl95ZWFyc1NlbGVjdGVkID0geWVhcnNDZWxsU2VsZWN0ZWQgPyB5ZWFyc0NlbGxTZWxlY3RlZC55ZWFycyA6IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVllYXIgPSB0aGlzLl9nZXRBY3RpdmVZZWFyKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgcm93LmZvckVhY2goKGNlbGwsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5pZCA9IHRoaXMuX2dldElkKHRoaXMuX2dldEluZGV4KHJvd0luZGV4LCBjb2xJbmRleCkpO1xuICAgICAgICAgICAgICAgIGNlbGwudGFiSW5kZXggPSBjZWxsLnllYXJzID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhcnNOYW1lKHllYXJzOiBBZ2dyZWdhdGVkWWVhcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLnN0YXJ0WWVhciwgMSwgMSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kWWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyTmFtZShcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXJzLmVuZFllYXIsIDEsIDEpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXJzLnN0YXJ0WWVhciwgc3RhcnRZZWFyRm9ybWF0dGVkKX0gLSAke3RoaXMuX2dldFllYXJTdHJpbmcoXG4gICAgICAgICAgICB5ZWFycy5lbmRZZWFyLFxuICAgICAgICAgICAgZW5kWWVhckZvcm1hdHRlZFxuICAgICAgICApfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgYXJpYSB5ZWFyIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QXJpYVllYXJzTmFtZSh5ZWFyczogQWdncmVnYXRlZFllYXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdGFydFllYXJGb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhcnMuc3RhcnRZZWFyLCAxLCAxKSxcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LnllYXJBMTF5TGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZW5kWWVhckZvcm1hdHRlZCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFycy5lbmRZZWFyLCAxLCAxKSxcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5LnllYXJBMTF5TGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2dldFllYXJTdHJpbmcoeWVhcnMuc3RhcnRZZWFyLCBzdGFydFllYXJGb3JtYXR0ZWQpfSAtICR7dGhpcy5fZ2V0WWVhclN0cmluZyhcbiAgICAgICAgICAgIHllYXJzLmVuZFllYXIsXG4gICAgICAgICAgICBlbmRZZWFyRm9ybWF0dGVkXG4gICAgICAgICl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB5ZWFyIG5hbWUgdGFraW5nIGludG8gYWNjb3VudCB5ZWFyTWFwcGluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyU3RyaW5nKHllYXI6IG51bWJlciwgZGVmYXVsdFN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnllYXJNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW1vdW50IG9mIHllYXJzIGRpc3BsYXllZCBpbiB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF95ZWFyc0luT25lUGVyaW9kKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnllYXJWaWV3R3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhclZpZXdHcmlkLmNvbHMgKiB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFtb3VudCBvZiB5ZWFycyBkaXNwbGF5ZWQgaW4gYWdncmVnYXRlZCB5ZWFyIHZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9wZXJpb2RzQW1vdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLmNvbHMgKiB0aGlzLmFnZ3JlZ2F0ZWRZZWFyc1ZpZXdHcmlkLnJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHJldHVybnMgYWN0aXZlIGNlbGwsIHdoaWNoIG1lYW5zOlxuICAgICAqIGlmIHRoZXJlIGlzIGFueSBzZWxlY3RlZCB5ZWFyLCByZXR1cm4gc2VsZWN0ZWQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIHllYXIsIGJ1dCB0aGVyZSBpcyBjdXJyZW50IHllYXIsIHJldHVybiBjdXJyZW50IHllYXJcbiAgICAgKiBpZiB0aGVyZSBpcyBubyBjdXJyZW50IHllYXIsIG9yIHNlbGVjdGVkLCByZXR1cm4gZmlyc3Qgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlWWVhcigpOiBBZ2dyZWdhdGVkWWVhciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyc0xpc3QoKS5maW5kKCh7IHllYXJzIH0pID0+IHRoaXMuX2lzQmV0d2Vlbih5ZWFycywgdGhpcy55ZWFyU2VsZWN0ZWQpKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkWWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFllYXJDZWxsLnllYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhcnNMaXN0KCkuZmluZCgoeyB5ZWFycyB9KSA9PiB0aGlzLl9pc0JldHdlZW4oeWVhcnMsIHRoaXMuX2N1cnJlbnRZZWFyKSk7XG4gICAgICAgIGlmIChjdXJyZW50WWVhckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50WWVhckNlbGwueWVhcnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCB5ZWFyIGdyaWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhcnNMaXN0KCk6IENhbGVuZGFyQWdncmVnYXRlZFllYXJbXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyQWdncmVnYXRlZFllYXJbXT5bXSkuY29uY2F0KC4uLnRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHB1dCBjb25maWd1cmF0aW9uIGFuZCBsaXN0ZW5lcnMgb24gY2FsZW5kYXIga2V5Ym9hcmQgc2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY29sQW1vdW50ID0gdGhpcy5hZ2dyZWdhdGVkWWVhcnNWaWV3R3JpZC5jb2xzO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5mb2N1c0VzY2FwZUZ1bmN0aW9uID0gdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkZvY3VzSWRDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCB9KSA9PiB0aGlzLnNlbGVjdFllYXIodGhpcy5fZ2V0WWVhcnNMaXN0KClbaW5kZXhdKSk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdFN0YXJ0QXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyc0xpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLXllYXJzXCJcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiJ2NvcmVDYWxlbmRhci5jYWxlbmRhclllYXJzUmFuZ2VWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICBAZm9yIChjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IHRyYWNrIGNvbFllYXJzICsgJycgKyByb3dJbmRleDsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2VsbCBvZiBjb2xZZWFyczsgdHJhY2sgY2VsbCArICcnICsgY29sSW5kZXg7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJjZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLXllYXJzXT1cImNlbGwueWVhcnMuc3RhcnRZZWFyICsgJy0nICsgY2VsbC55ZWFycy5lbmRZZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIGNlbGwuaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RZZWFyKGNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtYWN0aXZlXT1cImNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hcmlhLWxhYmVsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuY3VycmVudCA/IF90b2RheUxhYmVsSWQgKyAnICcgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2VsbC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFthdHRyLmlkXT1cImNlbGwuaWQgKyAnLWFyaWEtbGFiZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { AbstractCalendarActiveCellStrategy } from './common';\n/**\n * Active Calendar Day cell strategy\n */\nexport class ActiveCalendarDayCellStrategy extends AbstractCalendarActiveCellStrategy {\n /**\n * Calculate which table cell should be active\n */\n getActiveCell(cells) {\n const selected = cells.find((cell) => cell.selected);\n if (selected) {\n return selected;\n }\n const current = cells.find((cell) => cell.current);\n if (current) {\n return current;\n }\n const fistDayInMonth = cells.find((cell) => cell.monthStatus === 'current');\n if (fistDayInMonth) {\n return fistDayInMonth;\n }\n return cells[0] || null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL21vZGVscy9jYWxlbmRhci1kYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtDQUFrQyxFQUFvQixNQUFNLFVBQVUsQ0FBQztBQWlCaEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNkJBQTJDLFNBQVEsa0NBQWtEO0lBQzlHOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQXVCO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDNUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEJhc2VDYWxlbmRhckNlbGwgfSBmcm9tICcuL2NvbW1vbic7XG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRGF5PEQ+IGV4dGVuZHMgQmFzZUNhbGVuZGFyQ2VsbCB7XG4gICAgZGF0ZTogRDsgLy8gZGF0ZSByZXByZXNlbnRhdGlvblxuICAgIHdlZWtEYXk6IG51bWJlcjsgLy8gd2Vla3MgbnVtYmVyIGluIHRoZSB5ZWFyXG4gICAgd2Vla2VuZDogYm9vbGVhbjsgLy8gdG8gaGlnaGxpZ2h0IFNhdHVyZGF5IGFuZCBTdW5kYXlcbiAgICBtb250aFN0YXR1cz86ICdwcmV2aW91cycgfCAnY3VycmVudCcgfCAnbmV4dCc7IC8vIHRvIG1hcmsgZGF5cyBmcm9tIHNpYmxpbmcgbW9udGhzXG4gICAgc3BlY2lhbERheU51bWJlcj86IG51bWJlcjsgLy8gc3BlY2lhbCBkYXkgbWFya2VyIGZsYWdcbiAgICBzaG91bGRIaWRlU3BlY2lhbERheU1hcmtlcj86IGJvb2xlYW47IC8vIGlmIHRoZSBzcGVjaWFsIGRheSBzaG91bGQgYmUgbWFya2VkXG4gICAgYmxvY2tlZD86IGJvb2xlYW47IC8vIGJsb2NrZWQgZGF0ZVxuICAgIHBhc3Q/OiBib29sZWFuOyAvLyBkYXRlIGluIHBhc3RcbiAgICBzZWxlY3RlZEZpcnN0PzogYm9vbGVhbjsgLy8gdG8gaGlnaGxpZ2h0IHRoZSBmaXJzdCBzZWxlY3RlZCBkYXRlIGluIHRoZSByYW5nZVxuICAgIHNlbGVjdGVkTGFzdD86IGJvb2xlYW47IC8vIHRvIGhpZ2hsaWdodCB0aGUgbGFzdCBzZWxlY3RlZCBkYXRlIGluIHRoZSByYW5nZVxuICAgIHNlbGVjdGVkUmFuZ2U/OiBib29sZWFuOyAvLyB0byBoaWdobGlnaHQgZGF0ZXMgaW4gdGhlIHJhbmdlIGJldHdlZW4gc2VsZWN0ZWRGaXJzdCBhbmQgc2VsZWN0ZWRMYXN0XG4gICAgaG92ZXJSYW5nZT86IGJvb2xlYW47IC8vIFwidHJ1ZVwiIGZvciBkYXlzIGluY2x1ZGVkIGluIGRhdGUgcmFuZ2Ugc2VsZWN0aW9uIGJlZm9yZSB0aGUgdGhlIHNlbGVjdGlvbiBpcyBjb25maXJtZWRcbiAgICBpc1RhYkluZGV4ZWQ/OiBib29sZWFuOyAvLyBpZiBcInRydWVcIiBzZXRzIGRheSBjZWxsIHRhYmluZGV4IHRvIFwiMFwiXG59XG5cbi8qKlxuICogQWN0aXZlIENhbGVuZGFyIERheSBjZWxsIHN0cmF0ZWd5XG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmVDYWxlbmRhckRheUNlbGxTdHJhdGVneTxEID0gdW5rbm93bj4gZXh0ZW5kcyBBYnN0cmFjdENhbGVuZGFyQWN0aXZlQ2VsbFN0cmF0ZWd5PENhbGVuZGFyRGF5PEQ+PiB7XG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHdoaWNoIHRhYmxlIGNlbGwgc2hvdWxkIGJlIGFjdGl2ZVxuICAgICAqL1xuICAgIGdldEFjdGl2ZUNlbGwoY2VsbHM6IENhbGVuZGFyRGF5PEQ+W10pOiBDYWxlbmRhckRheTxEPiB8IG51bGwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuc2VsZWN0ZWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpc3REYXlJbk1vbnRoID0gY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5tb250aFN0YXR1cyA9PT0gJ2N1cnJlbnQnKTtcbiAgICAgICAgaWYgKGZpc3REYXlJbk1vbnRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlzdERheUluTW9udGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxzWzBdIHx8IG51bGw7XG4gICAgfVxufVxuIl19","/** A class representing a range of dates. */\nexport class DateRange {\n /**\n * Date range.\n * @param start\n * @param end\n */\n constructor(\n /** The start date of the range. */\n start, \n /** The end date of the range. */\n end) {\n this.start = start;\n this.end = end;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9tb2RlbHMvZGF0ZS1yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2Q0FBNkM7QUFDN0MsTUFBTSxPQUFPLFNBQVM7SUFDbEI7Ozs7T0FJRztJQUNIO0lBQ0ksbUNBQW1DO0lBQzFCLEtBQWU7SUFDeEIsaUNBQWlDO0lBQ3hCLEdBQWE7UUFGYixVQUFLLEdBQUwsS0FBSyxDQUFVO1FBRWYsUUFBRyxHQUFILEdBQUcsQ0FBVTtJQUN2QixDQUFDO0NBQ1AiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBjbGFzcyByZXByZXNlbnRpbmcgYSByYW5nZSBvZiBkYXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2U8RD4ge1xuICAgIC8qKlxuICAgICAqIERhdGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHN0YXJ0XG4gICAgICogQHBhcmFtIGVuZFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvKiogVGhlIHN0YXJ0IGRhdGUgb2YgdGhlIHJhbmdlLiAqL1xuICAgICAgICByZWFkb25seSBzdGFydDogRCB8IG51bGwsXG4gICAgICAgIC8qKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJhbmdlLiAqL1xuICAgICAgICByZWFkb25seSBlbmQ6IEQgfCBudWxsXG4gICAgKSB7fVxufVxuIl19","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, ElementRef, EventEmitter, Inject, inject, Input, input, model, Output, ViewEncapsulation } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport equal from 'fast-deep-equal';\nimport { ActiveCalendarDayCellStrategy as CalendarActiveDayCellStrategy } from '../../models/calendar-day';\nimport { DateRange } from '../../models/date-range';\nimport { NgClass } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarLegendFocusingService } from '../../calendar-legend/calendar-legend-focusing.service';\nimport { CalendarService } from '../../calendar.service';\nimport { CalendarTypeEnum } from '../../types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the day view of the calendar. */\nexport class CalendarDayViewComponent {\n /** Currently displayed month and year for days */\n set currentlyDisplayed(currentlyDisplayed) {\n if (!equal(currentlyDisplayed, this._currentlyDisplayed)) {\n this._currentlyDisplayed = currentlyDisplayed;\n this._buildDayViewGrid();\n }\n }\n get currentlyDisplayed() {\n return this._currentlyDisplayed;\n }\n /** The currently selected date model in single mode. */\n set selectedDate(date) {\n this._selectedDate = date;\n if (this._dayViewGrid) {\n const dayFromDate = this._calendarDayList.find((day) => this._isSameDay(day.date, date));\n this._changeSelectedSingleDay(dayFromDate, this._calendarDayList);\n }\n }\n get selectedDate() {\n return this._selectedDate;\n }\n /** The currently selected date model in multiple mode. */\n set selectedMultipleDates(dates) {\n this._selectedMultipleDates = dates;\n if (dates && this._dayViewGrid) {\n const formattedDates = this._calendarDayList.filter((day) => dates?.some((date) => this._isSameDay(day.date, date)));\n this._changeSelectedMultipleDays(formattedDates, this._calendarDayList);\n }\n }\n get selectedMultipleDates() {\n return this._selectedMultipleDates;\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDay(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDay(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._dayViewGrid) {\n this._changeSelectedRangeDays(dateRange, this._calendarDayList);\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /** The currently selected FdDates model start and end in multiple range mode. */\n set selectedMultipleDateRanges(dateRanges) {\n if (dateRanges &&\n this.selectedMultipleDateRanges &&\n dateRanges.length === this.selectedMultipleDateRanges.length &&\n dateRanges.every((range, index) => this._isSameDay(range.start, this.selectedMultipleDateRanges[index].start) &&\n this._isSameDay(range.end, this.selectedMultipleDateRanges[index].end))) {\n return;\n }\n this._selectedMultipleDateRanges = dateRanges || [];\n if (this._dayViewGrid) {\n this._changeSelectedMultipleRangeDays(dateRanges, this._calendarDayList);\n }\n }\n get selectedMultipleDateRanges() {\n return this._selectedMultipleDateRanges;\n }\n /** @hidden */\n constructor(eRef, changeDetRef, calendarService, _dateTimeFormats, _dateTimeAdapter) {\n this.eRef = eRef;\n this.changeDetRef = changeDetRef;\n this.calendarService = calendarService;\n this._dateTimeFormats = _dateTimeFormats;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** Event emitted always, when next month is selected, by focus */\n this.nextMonthSelect = new EventEmitter();\n /** Event emitted always, when previous month is selected, by focus */\n this.previousMonthSelect = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /**\n * Function used to disable certain dates in the calendar.\n * @param date date type\n */\n this.disableFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableFunction\" }] : []));\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n * @param date date representation\n */\n this.disableRangeStartFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableRangeStartFunction\" }] : []));\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n * @param date date representation\n */\n this.disableRangeEndFunction = model(...(ngDevMode ? [undefined, { debugName: \"disableRangeEndFunction\" }] : []));\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n this.startingDayOfWeek = model(...(ngDevMode ? [undefined, { debugName: \"startingDayOfWeek\" }] : []));\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n this.calType = model(CalendarTypeEnum.Single, ...(ngDevMode ? [{ debugName: \"calType\" }] : []));\n /** Id of the calendar. If none is provided, one will be generated. */\n this.id = input(...(ngDevMode ? [undefined, { debugName: \"id\" }] : []));\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected.\n */\n this.rangeHoverEffect = model(false, ...(ngDevMode ? [{ debugName: \"rangeHoverEffect\" }] : []));\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = input(false, ...(ngDevMode ? [{ debugName: \"markWeekends\" }] : []));\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = input(true, ...(ngDevMode ? [{ debugName: \"showWeekNumbers\" }] : []));\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = model(false, ...(ngDevMode ? [{ debugName: \"allowMultipleSelection\" }] : []));\n /** Function that allows to specify which function would be called, when focus wants to escape */\n this.focusEscapeFunction = input(...(ngDevMode ? [undefined, { debugName: \"focusEscapeFunction\" }] : []));\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with date object as a parameter. ex:\n * `rule: (date: D) => this.dateAdapter.getDay(date) === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = input([], ...(ngDevMode ? [{ debugName: \"specialDaysRules\" }] : []));\n /**\n * @hidden\n * Array of CSS classes for each week day in calendar header, computed based on whether the calendar type is 'multi'\n * and the date is not disabled.\n */\n this._weekHeaderClasses = [];\n /**\n * @hidden\n * Computed signal for the focused special day number\n */\n this._focusedSpecialDayNumber = computed(() => this.legendFocusedService?.focusedSpecialDayNumber() ?? null, ...(ngDevMode ? [{ debugName: \"_focusedSpecialDayNumber\" }] : []));\n /** @hidden */\n this._selectedMultipleDates = [];\n /** @hidden */\n this._selectedMultipleDateRanges = [];\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /**\n * @hidden\n * Days per week\n */\n this._amountOfCols = 7;\n /** @hidden */\n this._isOnRangePick = false;\n /** @hidden */\n this._isInitiated = false;\n /**\n * @hidden\n * global variable to store the new range.\n */\n this._newRange = null;\n /**\n * @hidden\n * Cache of days with special markers for efficient legend focus updates\n */\n this._daysWithSpecialMarkers = [];\n /** @hidden */\n this.legendFocusedService = inject(CalendarLegendFocusingService, { optional: true });\n // Effect to update grid when legend focus changes\n effect(() => {\n const focusedNumber = this._focusedSpecialDayNumber();\n if (this._dayViewGrid && this._isInitiated) {\n this._updateLegendFocusState(focusedNumber);\n }\n });\n }\n /** @hidden */\n ngOnInit() {\n this._isInitiated = true;\n this._setupKeyboardService();\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this._computeWeekHeaderClasses();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._refreshShortWeekDays();\n this._buildDayViewGrid();\n this.changeDetRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n /** Changes of those properties are done inside its setters */\n if (!changes['selectedDate'] &&\n !changes['selectedMultipleDates'] &&\n !changes['selectedRangeDate'] &&\n !changes['currentlyDisplayed']) {\n this._buildDayViewGrid();\n }\n if (changes['startingDayOfWeek']) {\n this._refreshShortWeekDays();\n }\n if (changes['specialDaysRules']) {\n this._buildDayViewGrid();\n }\n }\n /**\n * @hidden\n * Selects a date in single mode, toggles selection in multi mode, or sets the range in range mode.\n * Handles the selection of a date based on the calendar type.\n * @param day The calendar day to be selected.\n * @param event Optional mouse event for handling event propagation.\n */\n selectDate(day, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (day.disabled || day.blocked) {\n return;\n }\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._toggleMultiDate(day);\n }\n else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectMultipleRangeDates(day);\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Single) {\n this._selectSingleDate(day);\n }\n else if (this.calType() === CalendarTypeEnum.Range) {\n this._selectRangeDate(day);\n }\n }\n this._handleRangeHoverEffect(event);\n this.changeDetRef.markForCheck();\n }\n /**\n * Toggles the selection of a week on the calendar.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n handleWeekSelectionByDays(selectedWeek) {\n this.toggleWeekSelection(selectedWeek);\n }\n /**\n * Toggles the selection of a week on the calendar based on the weekday index.\n * If the provided week is already fully selected, it will deselect it.\n * If the provided week is not fully selected, it will select the entire week and clear any previous selections.\n * @param weekDayIndex The index of the weekday to be toggled.\n */\n handleWeekSelectionByIndex(weekDayIndex) {\n const selectedWeek = this._dayViewGrid.map((row) => row[weekDayIndex]);\n this.toggleWeekSelection(selectedWeek);\n }\n /**\n * Set focus on default focusable cell\n */\n setFocusOnCell() {\n const cellToFocus = new CalendarActiveDayCellStrategy().getActiveCell(this._calendarDayList);\n if (!cellToFocus?.index && cellToFocus?.index !== 0) {\n return;\n }\n this.focusOnCellByIndex(cellToFocus.index);\n }\n /** @hidden */\n _refreshHoverRange(day) {\n if (this.allowMultipleSelection()) {\n this._handleMultiRangeHover(day);\n }\n else {\n this._handleSingleRangeHover(day);\n }\n }\n /**\n * @hidden\n * Amount of selected days\n * 0, when there is no day selected, or start date is invalid,\n * 1, when there is only valid start date, or end date is same as start date,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDay(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /**\n * @hidden\n * Total amount of selected days across multiple ranges.\n * Sums the counts of valid days in each date range.\n */\n get _selectMultipleCounter() {\n let counter = this._selectedMultipleDateRanges.reduce((count, range) => {\n if (range.start) {\n count++;\n }\n if (range.end) {\n count++;\n }\n return count;\n }, 0);\n // Account for the newRange\n if (this._newRange) {\n if (this._newRange.start) {\n counter++;\n }\n if (this._newRange.end) {\n counter++;\n }\n }\n return counter;\n }\n /**\n * @hidden\n * Method that returns short weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get shortWeekDays() {\n return this._shortWeekDays;\n }\n /**\n * @hidden\n * Method that returns weekday name.\n * Can be changed by user by providing other class which implements DatetimeAdapter\n */\n get longWeekDays() {\n return this._longWeekDays;\n }\n /**\n * @hidden\n * Function that gives array of all displayed CalendarDays\n */\n get _calendarDayList() {\n return this._dayViewGrid.reduce((totalCalendarRows, calendarRow) => {\n if (!calendarRow) {\n calendarRow = [];\n }\n return totalCalendarRows.concat(calendarRow);\n }, []);\n }\n /**\n * View ID\n */\n get viewId() {\n return this.id() + '-day-view';\n }\n /**\n * @hidden\n * Week column header ID\n */\n get _weekNumbersColumnHeaderId() {\n return this.viewId + '-week-column-header';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /**\n * @hidden\n * Date range start date label ID\n */\n get _dateRangeStartLabelId() {\n return this.viewId + '-range-start-date-label';\n }\n /**\n * @hidden\n * Date range end date label ID\n */\n get _dateRangeEndLabelId() {\n return this.viewId + '-range-end-date-label';\n }\n /**\n * @hidden\n * Date in past label ID\n */\n get _dateInPastLabelId() {\n return this.viewId + '-day-in-past-label';\n }\n /**\n * @hidden\n * Method that handles day cells keydown events,\n * @param event KeyboardEvent\n * @param cell CalendarDay\n * @param index with specified column and row as a x and y\n */\n _onKeydownDayHandler(event, cell, index) {\n if (event.key === 'Tab' && !event.shiftKey) {\n if (this.focusEscapeFunction()) {\n this.focusEscapeFunction()(event);\n }\n }\n else {\n this.calendarService.onKeydownHandler(event, index);\n }\n }\n /**\n * @hidden\n * Method that allow to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this.eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex, colIndex) {\n return this.calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Method that selects previous month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n _selectPreviousMonth() {\n this._currentlyDisplayed = this._getPreviousMonth();\n this._buildDayViewGrid();\n this.previousMonthSelect.emit();\n }\n /**\n * @hidden\n * Method that selects next month\n * Triggered only when the month is changed during changing focus\n * Also triggers event to parent calendar component and rebuilds day view grid\n */\n _selectNextMonth() {\n this._currentlyDisplayed = this._getNextMonth();\n this._buildDayViewGrid();\n this.nextMonthSelect.emit();\n }\n /**\n * @hidden\n * Updates the legend focus state for calendar days with special markers\n * @param focusedSpecialDayNumber The currently focused special day number, or null/undefined if no legend item is focused\n */\n _updateLegendFocusState(focusedSpecialDayNumber) {\n if (!this._dayViewGrid || this._daysWithSpecialMarkers.length === 0) {\n return;\n }\n // Only iterate through days that have special markers (typically 2-10 days instead of 42)\n this._daysWithSpecialMarkers.forEach((day) => {\n if (focusedSpecialDayNumber == null) {\n // No legend item focused - show all markers\n day.shouldHideSpecialDayMarker = false;\n }\n else {\n // Legend item focused - hide markers that don't match\n day.shouldHideSpecialDayMarker = day.specialDayNumber !== focusedSpecialDayNumber;\n }\n });\n this.changeDetRef.markForCheck();\n }\n /**\n * @hidden\n * Method that creates array of CalendarDay models which will be shown on day grid,\n * depending on current month and year.\n */\n _populateCalendar() {\n let calendar = [];\n calendar = this._getPreviousMonthDays(calendar);\n calendar = calendar.concat(this._getCurrentMonthDays());\n calendar = this._getNextMonthDays(calendar);\n calendar.forEach((call, index) => {\n call.id = this._getCellIdByIndex(index);\n call.index = index;\n });\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedMultipleDates) {\n const _days = calendar.filter((day) => this._selectedMultipleDates?.some((date) => this._isSameDay(day.date, date)));\n this._changeSelectedMultipleDays(_days, calendar);\n }\n if (this.calType() === CalendarTypeEnum.Range && this._selectedMultipleDateRanges) {\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, calendar);\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Single && this._selectedDate) {\n const _day = calendar.find((day) => this._isSameDay(day.date, this._selectedDate));\n this._changeSelectedSingleDay(_day, calendar);\n }\n if (this.calType() === CalendarTypeEnum.Range && this._selectedRangeDate) {\n this._changeSelectedRangeDays(this._selectedRangeDate, calendar);\n }\n }\n return calendar;\n }\n /**\n * @hidden\n * Method that builds 2 dimensions day view grid, also sets up currently displayed month, or year,\n * when there is not any.\n */\n _buildDayViewGrid() {\n if (!this._isInitiated) {\n return;\n }\n if (!this.currentlyDisplayed || this._isInvalidDate()) {\n if (this.selectedDate) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(this.selectedDate),\n year: this._dateTimeAdapter.getYear(this.selectedDate)\n };\n }\n else {\n const today = this._dateTimeAdapter.today();\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(today),\n year: this._dateTimeAdapter.getYear(today)\n };\n }\n }\n const calendarDays = this._populateCalendar();\n const dayViewGrid = [];\n while (calendarDays.length > 0) {\n dayViewGrid.push(calendarDays.splice(0, this._amountOfCols));\n }\n this.calendarService.rowAmount = dayViewGrid.length;\n this._dayViewGrid = dayViewGrid;\n this._weeks = this._refreshWeekCount();\n // Cache days with special markers for efficient legend focus updates\n this._daysWithSpecialMarkers = this._calendarDayList.filter((day) => day.specialDayNumber !== undefined);\n }\n /** @hidden */\n _isInvalidDate() {\n return isNaN(this.currentlyDisplayed.year) || isNaN(this.currentlyDisplayed.month);\n }\n /**\n * @hidden\n * Get id of calendar's day item\n */\n _getCellIdByIndex(index) {\n return this.viewId + '-day-' + index + '';\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains every single day of currently shown month/year.\n */\n _getCurrentMonthDays() {\n const month = this.currentlyDisplayed.month;\n const year = this.currentlyDisplayed.year;\n const calendarDays = [];\n const amountOfDaysInCurrentMonth = this._dateTimeAdapter.getNumDaysInMonth(this._dateTimeAdapter.createDate(year, month, 1));\n const now = this._dateTimeAdapter.now();\n for (let dayNumber = 1; dayNumber <= amountOfDaysInCurrentMonth; dayNumber++) {\n const date = this._dateTimeAdapter.createDate(year, month, dayNumber);\n calendarDays.push({\n ...this._getDay(date),\n monthStatus: 'current',\n current: this._isSameDay(now, date)\n });\n }\n const cell = this._getActiveCell(calendarDays);\n cell && (cell.isTabIndexed = true);\n return calendarDays;\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected day, return selected day\n * if there is no selected day, but there is today day, return today day\n * if there is no today, or selected, return first one\n */\n _getActiveCell(calendarDays) {\n return new CalendarActiveDayCellStrategy().getActiveCell(calendarDays);\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay,\n * which contains last 0-6 days of previous month/year. Theses days\n * fills the gap between starting startingDayOfWeek and first day of current month\n */\n _getPreviousMonthDays(calendarDays) {\n const month = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.month - 1 : 12;\n const year = this.currentlyDisplayed.month > 1 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year - 1;\n const amountOfDaysInCurrentMonth = this._dateTimeAdapter.getNumDaysInMonth(this._dateTimeAdapter.createDate(year, month, 1));\n const prevMonthLastDate = this._dateTimeAdapter.createDate(year, month, amountOfDaysInCurrentMonth);\n const prevMonthLastDay = amountOfDaysInCurrentMonth;\n let prevMonthLastWeekDay = this._dateTimeAdapter.getDayOfWeek(prevMonthLastDate) - this.startingDayOfWeek();\n /** Checking if there are some days cut by startingDayOfWeek option\n * If yes, there is whole week added, to avoid hiding\n */\n if (prevMonthLastWeekDay < 0) {\n prevMonthLastWeekDay = prevMonthLastWeekDay + 7;\n }\n if (prevMonthLastWeekDay < 6) {\n while (prevMonthLastWeekDay >= 0) {\n const prevMonthDay = prevMonthLastDay - prevMonthLastWeekDay;\n const date = this._dateTimeAdapter.createDate(year, month, prevMonthDay);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'previous' });\n prevMonthLastWeekDay--;\n }\n }\n return calendarDays;\n }\n /**\n * @hidden\n * Method which provides array of CalendarDay, which contains first days of next month/year. Theses days\n * fills the gap between last day of current day and end of 6-weeks calendar grid.\n */\n _getNextMonthDays(calendarDays) {\n const month = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.month + 1 : 1;\n const year = this.currentlyDisplayed.month < 12 ? this.currentlyDisplayed.year : this.currentlyDisplayed.year + 1;\n // The calendar grid can have 5 (35 days) or 6 (42 days) weeks\n const nextMonthDisplayedDays = (42 - calendarDays.length) % 7;\n for (let nextD = 1; nextD <= nextMonthDisplayedDays; nextD++) {\n const date = this._dateTimeAdapter.createDate(year, month, nextD);\n calendarDays.push({ ...this._getDay(date), monthStatus: 'next' });\n }\n return calendarDays;\n }\n /** @hidden */\n _isWeekendDay(dayOfWeek) {\n return dayOfWeek === 1 || dayOfWeek === 7;\n }\n /**\n * @hidden\n * Method that generates whole day model basing on date, disabling functions, block functions, and actually\n * chosen range / single date.\n */\n _getDay(date) {\n const weekDay = this._dateTimeAdapter.getDayOfWeek(date);\n const dayOfMonth = this._dateTimeAdapter.getDate(date);\n const dateNames = this._dateTimeAdapter.getDateNames();\n const isPast = this._dateTimeAdapter.compareDate(date, this._dateTimeAdapter.today()) < 0;\n const day = {\n date,\n label: dateNames[dayOfMonth - 1],\n weekDay,\n weekend: this._isWeekendDay(weekDay),\n ariaLabel: this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateA11yLabel),\n specialDayNumber: this._getSpecialDay(date) ?? undefined,\n past: isPast,\n shouldHideSpecialDayMarker: false\n };\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n day.disabled = this.disableFunction()(date);\n }\n return day;\n }\n /**\n * @hidden\n * Method that is called to refresh i18n short week days.\n */\n _refreshShortWeekDays() {\n const shortDayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('short');\n const dayOfWeekNames = this._dateTimeAdapter.getDayOfWeekNames('long');\n this._shortWeekDays = shortDayOfWeekNames\n .slice(this.startingDayOfWeek() - 1)\n .concat(shortDayOfWeekNames.slice(0, this.startingDayOfWeek() - 1));\n this._longWeekDays = dayOfWeekNames\n .slice(this.startingDayOfWeek() - 1)\n .concat(dayOfWeekNames.slice(0, this.startingDayOfWeek() - 1));\n this.changeDetRef.markForCheck();\n }\n /**\n * @hidden\n * Gets special day number of specified date model\n */\n _getSpecialDay(date) {\n const specialDay = this.specialDaysRules().find((specialDayRule) => specialDayRule.rule(date));\n if (specialDay) {\n return specialDay.specialDayNumber;\n }\n return null;\n }\n /**\n * @hidden\n * Method that returns array of week's count\n */\n _refreshWeekCount() {\n const calendarDayList = this._calendarDayList;\n const weekNumbers = [];\n for (let index = 6; index < calendarDayList.length; index = index + 6) {\n weekNumbers.push(this._dateTimeAdapter.getWeekName(calendarDayList[index].date));\n }\n return weekNumbers;\n }\n /**\n * @hidden\n * Get year and month for previous year\n */\n _getPreviousMonth() {\n if (this._currentlyDisplayed.month > 1) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month - 1 };\n }\n else {\n return { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n }\n /**\n * @hidden\n * Get year and month for next year\n */\n _getNextMonth() {\n if (this._currentlyDisplayed.month < 12) {\n return { year: this._currentlyDisplayed.year, month: this._currentlyDisplayed.month + 1 };\n }\n else {\n return { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this.calendarService.colAmount = this._amountOfCols;\n this.calendarService.focusEscapeFunction = this.focusEscapeFunction();\n this.calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._refreshHoverRange(this._calendarDayList[index]);\n this.focusOnCellByIndex(index);\n });\n this.calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectDate(this._calendarDayList[index], event);\n });\n this.calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectPreviousMonth();\n /**\n * Calculate focused cell in new grid\n */\n const originalMonth = this._getNextMonth(); // month that was before moving back\n const originalAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(originalMonth.year, originalMonth.month, this.startingDayOfWeek());\n const prevMonthAmountOfWeeks = this._dateTimeAdapter.getAmountOfWeeks(this._currentlyDisplayed.year, this._currentlyDisplayed.month, this.startingDayOfWeek());\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index - 7 * (originalAmountOfWeeks - prevMonthAmountOfWeeks));\n });\n this.calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._selectNextMonth();\n // trigger rendering for new grid so focus can be set\n this.changeDetRef.detectChanges();\n this.focusOnCellByIndex(index);\n });\n }\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n */\n _changeSelectedSingleDay(day, calendar) {\n calendar.forEach((_day) => (_day.selected = false));\n if (day && !day.blocked && !day.disabled) {\n day.selected = true;\n }\n this.refreshTabIndex(calendar);\n }\n /**\n * @hidden\n * Change selection flag on days to false, besides the selected one\n *\n * @param dates - An array of CalendarDay objects to be marked as selected\n * @param calendar - The calendar array containing all CalendarDay objects\n */\n _changeSelectedMultipleDays(dates, calendar) {\n calendar.forEach((day) => (day.selected = false));\n if (dates) {\n dates.forEach((date) => {\n const matchingDay = calendar.find((day) => this._isSameDay(day.date, date.date));\n if (matchingDay && !matchingDay.blocked && !matchingDay.disabled) {\n matchingDay.selected = true;\n }\n });\n }\n this.refreshTabIndex(calendar);\n }\n /**\n * @hidden\n * Change properties of range days, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected days.\n */\n _changeSelectedRangeDays(dates, calendar) {\n /** Pull list of calendar days */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_day) => (_day.selectedFirst =\n _day.selectedLast =\n _day.selected =\n _day.isTabIndexed =\n _day.disabled =\n _day.hoverRange =\n _day.selectedRange =\n false));\n if (dates) {\n let startDay;\n let endDay;\n if (dates.start) {\n /** Find start date and mark it as selected */\n startDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay &&\n !startDay.blocked &&\n !startDay.disabled &&\n (typeof this.disableRangeStartFunction() !== 'function' ||\n !this.disableRangeStartFunction()?.(startDay.date))) {\n startDay.selected = true;\n startDay.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end date and mark it as selected */\n endDay = calendarList.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay &&\n !endDay.blocked &&\n !endDay.disabled &&\n (typeof this.disableRangeEndFunction() !== 'function' ||\n !this.disableRangeEndFunction()?.(endDay.date))) {\n endDay.selected = true;\n endDay.selectedLast = true;\n }\n }\n /** Verify if start day and end day is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all days, which are between start and end date */\n calendarList\n .filter((_day) => (_day.selectedRange = this._dateTimeAdapter.isBetween(_day.date, dates.start, dates.end)))\n .forEach((_day) => (_day.selectedRange = true));\n }\n }\n this.refreshTabIndex(calendarList);\n /** Apply disabled state to days marked with passed function */\n if (this.disableFunction()) {\n calendarList.forEach((_day) => (_day.disabled = this.disableFunction()(_day.date)));\n }\n if ((this._selectCounter === 0 || this._selectCounter === 2) && this.disableRangeStartFunction()) {\n calendarList.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()(_day.date)));\n }\n else if (this._selectCounter === 1 && this.disableRangeEndFunction()) {\n calendarList.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()(_day.date)));\n }\n }\n /**\n * @hidden\n * Change properties of range days for multiple ranges.\n * This method is called to not rebuild the whole grid from scratch.\n * It just changes properties of newly selected/unselected days.\n */\n _changeSelectedMultipleRangeDays(datesArray, calendar) {\n // Reset changing properties\n calendar.forEach((_day) => {\n _day.selectedFirst = false;\n _day.selectedLast = false;\n _day.selectedRange = false;\n _day.selected = false;\n _day.isTabIndexed = false;\n _day.disabled = false;\n _day.hoverRange = false;\n _day.disabled = false;\n });\n datesArray.forEach((dates) => {\n if (dates) {\n let startDay;\n let endDay;\n if (dates.start) {\n // Find start date and mark it as selected\n startDay = calendar.find((_day) => this._isSameDay(_day.date, dates.start));\n if (startDay) {\n startDay.selectedFirst = true;\n startDay.selected = true;\n }\n }\n if (dates.end) {\n // Find end date and mark it as selected\n endDay = calendar.find((_day) => this._isSameDay(_day.date, dates.end));\n if (endDay) {\n endDay.selectedLast = true;\n endDay.selected = true;\n }\n }\n // Mark all days between start and end as selected range\n if (dates.start && dates.end) {\n calendar.forEach((_day) => {\n if (this._isDateInRange(_day.date, dates)) {\n _day.selectedRange = true;\n _day.selected = true;\n }\n });\n }\n }\n });\n this.refreshTabIndex(calendar);\n // Apply disabled state to days marked with passed function\n if (this.disableFunction()) {\n calendar.forEach((_day) => (_day.disabled = this.disableFunction()(_day.date)));\n }\n if ((this._selectMultipleCounter === 0 || this._selectMultipleCounter % 2 === 0) &&\n this.disableRangeStartFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeStartFunction()(_day.date)));\n }\n else if (this._selectMultipleCounter % 2 === 1 && this.disableRangeEndFunction()) {\n calendar.forEach((_day) => (_day.disabled = _day.disabled || this.disableRangeEndFunction()(_day.date)));\n }\n }\n /** @hidden */\n refreshTabIndex(calendar) {\n calendar.forEach((_day) => (_day.isTabIndexed = false));\n const cell = this._getActiveCell(calendar.filter((_day) => _day.monthStatus === 'current'));\n cell && (cell.isTabIndexed = true);\n }\n /** @hidden */\n focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getCellIdByIndex(index)}`);\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDay(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Selects a single date and updates the selected date in single mode.\n * @param day The calendar day to be selected.\n */\n _selectSingleDate(day) {\n this._calendarDayList.forEach((_day) => (_day.selected = false));\n day.selected = true;\n this._selectedDate = day.date;\n this.selectedDateChange.emit(day.date);\n }\n /**\n * @hidden\n * Toggles the selection of a date in multi mode.\n * Adds the date if not selected, removes it if already selected.\n * @param day The calendar day to be toggled.\n */\n _toggleMultiDate(day) {\n const dateIndex = this._selectedMultipleDates.findIndex((d) => this._isSameDay(d, day.date));\n let newSelectedDates;\n if (dateIndex > -1) {\n newSelectedDates = this._selectedMultipleDates.filter((_, index) => index !== dateIndex);\n day.selected = false;\n }\n else {\n newSelectedDates = [...this._selectedMultipleDates, day.date];\n day.selected = true;\n }\n this._selectedMultipleDates = newSelectedDates;\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param day The calendar day to be selected or updated in the range.\n */\n _selectRangeDate(day) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: day.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, day.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeDays(this._selectedRangeDate, this._calendarDayList);\n }\n /**\n * @hidden\n * Selects or updates multiple ranges of dates in range mode.\n * Handles the start and end dates and updates the selected ranges.\n * @param day The calendar day to be selected or updated in the range.\n */\n _selectMultipleRangeDates(day) {\n let tempRanges = this._selectedMultipleDateRanges?.filter((range) => range.start || range.end) || [];\n // Handles the existing range by updating or merging it with the new day selection.\n tempRanges = this._handleExistingRange(tempRanges, day);\n if (this._selectMultipleCounter % 2 === 0) {\n // Start a new range\n this._newRange = { start: day.date, end: null };\n }\n else {\n // Check for reverse selection\n if (this._newRange &&\n this._newRange.start &&\n this._dateTimeAdapter.compareDate(this._newRange.start, day.date) > 0) {\n this._newRange = { start: day.date, end: this._newRange.start };\n }\n else if (this._newRange) {\n this._newRange.end = day.date;\n }\n if (this._newRange) {\n tempRanges.push(this._newRange);\n }\n this._newRange = null;\n }\n tempRanges = this._mergeOverlappingRanges(tempRanges);\n this._selectedMultipleDateRanges = tempRanges;\n // Check if all ranges have both start and end dates filled\n const allRangesComplete = this._selectedMultipleDateRanges.every((range) => range.start && range.end);\n if (allRangesComplete && tempRanges.length > 0) {\n this.selectedMultipleDateRangesChange.emit(this._selectedMultipleDateRanges);\n }\n // Update the calendar view\n this._changeSelectedMultipleRangeDays(this._selectedMultipleDateRanges, this._calendarDayList);\n }\n /**\n * Merges overlapping date ranges into a single range.\n *\n * @param ranges - An array of date ranges to be merged.\n * @returns An array of merged date ranges.\n */\n _mergeOverlappingRanges(ranges) {\n if (ranges.length <= 1) {\n return ranges;\n }\n ranges.sort((a, b) => this._dateTimeAdapter.compareDate(a.start, b.start));\n const mergedRanges = [];\n let currentRange = ranges[0];\n for (let i = 1; i < ranges.length; i++) {\n const nextRange = ranges[i];\n if (this._dateTimeAdapter.compareDate(currentRange.end, nextRange.start) >= 0) {\n currentRange = {\n start: currentRange.start,\n end: this._dateTimeAdapter.compareDate(currentRange.end, nextRange.end) >= 0\n ? currentRange.end\n : nextRange.end\n };\n }\n else {\n mergedRanges.push(currentRange);\n currentRange = nextRange;\n }\n }\n mergedRanges.push(currentRange);\n return mergedRanges;\n }\n /**\n * Handles the case where the selected day is part of an existing range.\n *\n * @param tempRanges - An array of date ranges to be checked.\n * @param day - The calendar day to be checked.\n * @returns An array of date ranges with the updated range if the selected day is part of an existing range.\n */\n _handleExistingRange(tempRanges, day) {\n if (tempRanges.length > 0) {\n const existingRangeIndex = tempRanges.findIndex((range) => this._isDateInRange(day.date, range));\n const existingRange = tempRanges[existingRangeIndex];\n if (existingRangeIndex !== -1 && existingRange.end) {\n tempRanges.splice(existingRangeIndex, 1);\n }\n }\n return tempRanges;\n }\n /**\n * @hidden\n * Checks if a date is within a given date range.\n * @param date The date to check.\n * @param range The date range.\n * @returns True if the date is in the range, false otherwise.\n */\n _isDateInRange(date, range) {\n return this._dateTimeAdapter.isBetween(date, range.start, range.end);\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.allowMultipleSelection()) {\n if (this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectMultipleCounter === 1 &&\n event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n else {\n if (this.calType() === CalendarTypeEnum.Range &&\n this.rangeHoverEffect() &&\n this._selectCounter === 1 &&\n event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n }\n /**\n * Helper method to toggle the selection of a week.\n * @param selectedWeek Array of CalendarDay objects representing the week to be toggled.\n */\n toggleWeekSelection(selectedWeek) {\n const selectableDays = selectedWeek.filter((day) => !day.disabled);\n const isCurrentWeekSelected = selectableDays.every((day) => day.selected);\n if (!isCurrentWeekSelected) {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = true;\n if (!this._selectedMultipleDates.some((selectedDate) => this._isSameDay(selectedDate, day.date))) {\n this._selectedMultipleDates.push(day.date);\n }\n }\n });\n }\n else {\n selectedWeek.forEach((day) => {\n if (!day.disabled) {\n day.selected = false;\n this._selectedMultipleDates = this._selectedMultipleDates.filter((selectedDate) => !this._isSameDay(selectedDate, day.date));\n }\n });\n }\n this.selectedMultipleDatesChange.emit(this._selectedMultipleDates);\n }\n /**\n * @hidden\n * Computes the CSS class for each week day in calendar header based on whether the calendar type is 'multi'\n * and the date is not disabled.\n * Stores the computed classes in the weekHeaderClasses array.\n */\n _computeWeekHeaderClasses() {\n this._weekHeaderClasses = this._calendarDayList.map(() => this.calType() !== CalendarTypeEnum.Range && this.allowMultipleSelection() && this.disableFunction()\n ? 'event-enabled'\n : '');\n }\n /**\n * @hidden\n * Handles hover effect for single-range selection mode.\n * @param day The calendar day that is hovered.\n */\n _handleSingleRangeHover(day) {\n // Handle single range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(day.date, start) < 0) {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) < 0;\n });\n }\n else {\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Handles hover effect for multi-range selection mode.\n * @param day The calendar day that is hovered.\n */\n _handleMultiRangeHover(day) {\n // Determine the start date from the most recent range with a null end date\n let startDate = this._newRange?.start;\n if (this._selectedMultipleDateRanges.length > 0) {\n // Find the most recent range with an end date of null\n const activeRanges = this._selectedMultipleDateRanges.filter((range) => range.end === null);\n if (activeRanges.length > 0) {\n const mostRecentRange = activeRanges[activeRanges.length - 1];\n startDate = mostRecentRange.start;\n }\n }\n if (startDate && startDate) {\n if (this._dateTimeAdapter.compareDate(day.date, startDate) < 0) {\n // Hovering backwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) > 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) < 0;\n });\n }\n else {\n // Hovering forwards from the start date to the selected date\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange =\n this._dateTimeAdapter.compareDate(_day.date, day.date) < 0 &&\n this._dateTimeAdapter.compareDate(_day.date, startDate) > 0;\n });\n }\n }\n else {\n // No start date, clear hover\n this._calendarDayList.forEach((_day) => {\n _day.hoverRange = false;\n });\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarDayViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarDayViewComponent, isStandalone: true, selector: \"fd-calendar-day-view\", inputs: { currentlyDisplayed: { classPropertyName: \"currentlyDisplayed\", publicName: \"currentlyDisplayed\", isSignal: false, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: \"selectedDate\", publicName: \"selectedDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDates: { classPropertyName: \"selectedMultipleDates\", publicName: \"selectedMultipleDates\", isSignal: false, isRequired: false, transformFunction: null }, selectedRangeDate: { classPropertyName: \"selectedRangeDate\", publicName: \"selectedRangeDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDateRanges: { classPropertyName: \"selectedMultipleDateRanges\", publicName: \"selectedMultipleDateRanges\", isSignal: false, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: \"disableFunction\", publicName: \"disableFunction\", isSignal: true, isRequired: false, transformFunction: null }, disableRangeStartFunction: { classPropertyName: \"disableRangeStartFunction\", publicName: \"disableRangeStartFunction\", isSignal: true, isRequired: false, transformFunction: null }, disableRangeEndFunction: { classPropertyName: \"disableRangeEndFunction\", publicName: \"disableRangeEndFunction\", isSignal: true, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: \"startingDayOfWeek\", publicName: \"startingDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, calType: { classPropertyName: \"calType\", publicName: \"calType\", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: \"id\", publicName: \"id\", isSignal: true, isRequired: false, transformFunction: null }, rangeHoverEffect: { classPropertyName: \"rangeHoverEffect\", publicName: \"rangeHoverEffect\", isSignal: true, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: \"markWeekends\", publicName: \"markWeekends\", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: \"showWeekNumbers\", publicName: \"showWeekNumbers\", isSignal: true, isRequired: false, transformFunction: null }, allowMultipleSelection: { classPropertyName: \"allowMultipleSelection\", publicName: \"allowMultipleSelection\", isSignal: true, isRequired: false, transformFunction: null }, focusEscapeFunction: { classPropertyName: \"focusEscapeFunction\", publicName: \"focusEscapeFunction\", isSignal: true, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nextMonthSelect: \"nextMonthSelect\", previousMonthSelect: \"previousMonthSelect\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", disableFunction: \"disableFunctionChange\", disableRangeStartFunction: \"disableRangeStartFunctionChange\", disableRangeEndFunction: \"disableRangeEndFunctionChange\", startingDayOfWeek: \"startingDayOfWeekChange\", calType: \"calTypeChange\", rangeHoverEffect: \"rangeHoverEffectChange\", allowMultipleSelection: \"allowMultipleSelectionChange\" }, host: { properties: { \"attr.id\": \"viewId\" }, classAttribute: \"fd-calendar__dates\" }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--dates\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarDayViewDescription' | fdTranslate\\\"\\n>\\n <thead class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n role=\\\"columnheader\\\"\\n [attr.id]=\\\"_weekNumbersColumnHeaderId\\\"\\n [attr.aria-label]=\\\"'coreCalendar.weekColumnLabel' | fdTranslate\\\"\\n ></th>\\n }\\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"_weekHeaderClasses[i]\\\"\\n role=\\\"columnheader\\\"\\n [attr.aria-label]=\\\"longWeekDays[i]\\\"\\n (click)=\\\"handleWeekSelectionByIndex(i)\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">{{ day }}</span>\\n </div>\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\\\"\\n role=\\\"rowheader\\\"\\n scope=\\\"row\\\"\\n [attr.data-fd-calendar-week]=\\\"_weeks[rowIndex]\\\"\\n [attr.id]=\\\"viewId + '-week-' + _weeks[rowIndex]\\\"\\n [attr.aria-labelledby]=\\\"\\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\\n \\\"\\n (click)=\\\"handleWeekSelectionByDays(row)\\\"\\n >\\n @if (_weeks && _weeks[rowIndex]) {\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">\\n {{ _weeks[rowIndex] }}\\n </span>\\n </div>\\n }\\n </th>\\n }\\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\\n <td\\n class=\\\"fd-calendar__item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__item--selected]=\\\"cell.selectedFirst || cell.selectedLast || cell.selected\\\"\\n [class.fd-calendar__item--range]=\\\"\\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\\n \\\"\\n [class.fd-calendar__item--today]=\\\"cell.current\\\"\\n [class.fd-calendar__item--weekend]=\\\"\\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\\n \\\"\\n [class.fd-calendar__item--other]=\\\"cell.monthStatus !== 'current'\\\"\\n [class.is-disabled]=\\\"cell.disabled\\\"\\n [class]=\\\"\\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\\n : ''\\n \\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.data-fd-calendar-date-day]=\\\"cell.label\\\"\\n [attr.data-fd-calendar-day]=\\\"cell.index\\\"\\n [attr.aria-selected]=\\\"cell.selected\\\"\\n [attr.aria-disabled]=\\\"cell.disabled\\\"\\n [attr.tabindex]=\\\"cell.isTabIndexed ? 0 : -1\\\"\\n (click)=\\\"selectDate(cell, $event)\\\"\\n (mouseenter)=\\\"_refreshHoverRange(cell)\\\"\\n (keydown)=\\\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span\\n class=\\\"fd-calendar__text\\\"\\n role=\\\"button\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\\n (cell.past ? _dateInPastLabelId : '')\\n \\\"\\n >{{ cell.label }}</span\\n >\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n @if (_dayViewGrid.length <= 5) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n @if (_dayViewGrid.length === 4) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeStartLabelId\\\">{{ 'coreCalendar.rangeStartLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeEndLabelId\\\">{{ 'coreCalendar.rangeEndLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateInPastLabelId\\\">{{ 'coreCalendar.dayInPastLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\".hidden-day{visibility:hidden}.event-enabled{pointer-events:auto}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { 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: CalendarDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-day-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId',\n class: 'fd-calendar__dates'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FdTranslatePipe, NgClass], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--dates\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarDayViewDescription' | fdTranslate\\\"\\n>\\n <thead class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n role=\\\"columnheader\\\"\\n [attr.id]=\\\"_weekNumbersColumnHeaderId\\\"\\n [attr.aria-label]=\\\"'coreCalendar.weekColumnLabel' | fdTranslate\\\"\\n ></th>\\n }\\n @for (day of shortWeekDays; track day + '' + i; let i = $index) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"_weekHeaderClasses[i]\\\"\\n role=\\\"columnheader\\\"\\n [attr.aria-label]=\\\"longWeekDays[i]\\\"\\n (click)=\\\"handleWeekSelectionByIndex(i)\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">{{ day }}</span>\\n </div>\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (row of _dayViewGrid; track row + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @if (showWeekNumbers()) {\\n <th\\n class=\\\"fd-calendar__item fd-calendar__item--side-helper\\\"\\n [ngClass]=\\\"{ 'event-enabled': allowMultipleSelection() && calType() !== 'range' }\\\"\\n role=\\\"rowheader\\\"\\n scope=\\\"row\\\"\\n [attr.data-fd-calendar-week]=\\\"_weeks[rowIndex]\\\"\\n [attr.id]=\\\"viewId + '-week-' + _weeks[rowIndex]\\\"\\n [attr.aria-labelledby]=\\\"\\n _weekNumbersColumnHeaderId + ' ' + (viewId + '-week-' + _weeks[rowIndex])\\n \\\"\\n (click)=\\\"handleWeekSelectionByDays(row)\\\"\\n >\\n @if (_weeks && _weeks[rowIndex]) {\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span class=\\\"fd-calendar__text\\\">\\n {{ _weeks[rowIndex] }}\\n </span>\\n </div>\\n }\\n </th>\\n }\\n @for (cell of row; track cell + '' + cellIndex; let cellIndex = $index) {\\n <td\\n class=\\\"fd-calendar__item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__item--selected]=\\\"cell.selectedFirst || cell.selectedLast || cell.selected\\\"\\n [class.fd-calendar__item--range]=\\\"\\n (cell.selectedRange || cell.hoverRange) && !cell.selectedFirst && !cell.selectedLast\\n \\\"\\n [class.fd-calendar__item--today]=\\\"cell.current\\\"\\n [class.fd-calendar__item--weekend]=\\\"\\n cell.weekend && markWeekends() && cell.monthStatus === 'current'\\n \\\"\\n [class.fd-calendar__item--other]=\\\"cell.monthStatus !== 'current'\\\"\\n [class.is-disabled]=\\\"cell.disabled\\\"\\n [class]=\\\"\\n cell.specialDayNumber && !cell.shouldHideSpecialDayMarker\\n ? 'fd-calendar__item--legend-' + cell.specialDayNumber\\n : ''\\n \\\"\\n [attr.id]=\\\"cell.id\\\"\\n [attr.data-fd-calendar-date-day]=\\\"cell.label\\\"\\n [attr.data-fd-calendar-day]=\\\"cell.index\\\"\\n [attr.aria-selected]=\\\"cell.selected\\\"\\n [attr.aria-disabled]=\\\"cell.disabled\\\"\\n [attr.tabindex]=\\\"cell.isTabIndexed ? 0 : -1\\\"\\n (click)=\\\"selectDate(cell, $event)\\\"\\n (mouseenter)=\\\"_refreshHoverRange(cell)\\\"\\n (keydown)=\\\"_onKeydownDayHandler($event, cell, _getIndex(rowIndex, cellIndex))\\\"\\n >\\n <div class=\\\"fd-calendar__text-wrapper\\\">\\n <span\\n class=\\\"fd-calendar__text\\\"\\n role=\\\"button\\\"\\n [attr.aria-labelledby]=\\\"\\n cell.id +\\n '-aria-label ' +\\n (cell.selectedFirst ? _dateRangeStartLabelId + ' ' : '') +\\n (cell.selectedLast ? _dateRangeEndLabelId + ' ' : '') +\\n (cell.current ? _todayLabelId + ' ' : '') +\\n (cell.selected && calType() === 'single' ? _selectedDateLabelId + ' ' : '') +\\n (cell.past ? _dateInPastLabelId : '')\\n \\\"\\n >{{ cell.label }}</span\\n >\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"cell.id + '-aria-label'\\\">\\n {{ cell.ariaLabel }}\\n </span>\\n </div>\\n </td>\\n }\\n </tr>\\n }\\n @if (_dayViewGrid.length <= 5) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n @if (_dayViewGrid.length === 4) {\\n <tr class=\\\"fd-calendar__row\\\">\\n <td class=\\\"fd-calendar__item hidden-day\\\"></td>\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeStartLabelId\\\">{{ 'coreCalendar.rangeStartLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateRangeEndLabelId\\\">{{ 'coreCalendar.rangeEndLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_dateInPastLabelId\\\">{{ 'coreCalendar.dayInPastLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\".hidden-day{visibility:hidden}.event-enabled{pointer-events:auto}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.DatetimeAdapter }], propDecorators: { currentlyDisplayed: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], nextMonthSelect: [{\n type: Output\n }], previousMonthSelect: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLWRheS12aWV3L2NhbGVuZGFyLWRheS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1kYXktdmlldy9jYWxlbmRhci1kYXktdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUdwQyxPQUFPLEVBQUUsNkJBQTZCLElBQUksNkJBQTZCLEVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1B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c0JBRDNCLE1BQU07Z0JBS0Usa0JBQWtCO3NCQUQxQixNQUFNO2dCQUtFLDJCQUEyQjtzQkFEbkMsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBS0UsZ0NBQWdDO3NCQUR4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyLCBEYXRlVGltZUZvcm1hdHMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuaW1wb3J0IHsgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuXG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXItY3VycmVudCc7XG5pbXBvcnQgeyBBY3RpdmVDYWxlbmRhckRheUNlbGxTdHJhdGVneSBhcyBDYWxlbmRhckFjdGl2ZURheUNlbGxTdHJhdGVneSwgQ2FsZW5kYXJEYXkgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXItZGF5JztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRlLXJhbmdlJztcblxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLWxlZ2VuZC9jYWxlbmRhci1sZWdlbmQtZm9jdXNpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IERpc2FibGVEYXRlRnVuY3Rpb24sIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgQ2FsZW5kYXJUeXBlLCBDYWxlbmRhclR5cGVFbnVtLCBEYXlzT2ZXZWVrIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG4vKiogQ29tcG9uZW50IHJlcHJlc2VudGluZyB0aGUgZGF5IHZpZXcgb2YgdGhlIGNhbGVuZGFyLiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci1kYXktdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCcsXG4gICAgICAgIGNsYXNzOiAnZmQtY2FsZW5kYXJfX2RhdGVzJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW0ZkVHJhbnNsYXRlUGlwZSwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB7XG4gICAgLyoqIEN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGggYW5kIHllYXIgZm9yIGRheXMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjdXJyZW50bHlEaXNwbGF5ZWQoY3VycmVudGx5RGlzcGxheWVkOiBDYWxlbmRhckN1cnJlbnQpIHtcbiAgICAgICAgaWYgKCFlcXVhbChjdXJyZW50bHlEaXNwbGF5ZWQsIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IGN1cnJlbnRseURpc3BsYXllZDtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkRGF5Vmlld0dyaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjdXJyZW50bHlEaXNwbGF5ZWQoKTogQ2FsZW5kYXJDdXJyZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZDtcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIHNpbmdsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkRGF0ZShkYXRlOiBOdWxsYWJsZTxEPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBkYXRlO1xuICAgICAgICBpZiAodGhpcy5fZGF5Vmlld0dyaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRheUZyb21EYXRlID0gdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZpbmQoKGRheSkgPT4gdGhpcy5faXNTYW1lRGF5KGRheS5kYXRlLCBkYXRlKSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFNpbmdsZURheShkYXlGcm9tRGF0ZSwgdGhpcy5fY2FsZW5kYXJEYXlMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZERhdGUoKTogTnVsbGFibGU8RD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gbXVsdGlwbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZE11bHRpcGxlRGF0ZXMoZGF0ZXM6IEFycmF5PEQ+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICBpZiAoZGF0ZXMgJiYgdGhpcy5fZGF5Vmlld0dyaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGVzID0gdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZpbHRlcigoZGF5KSA9PlxuICAgICAgICAgICAgICAgIGRhdGVzPy5zb21lKChkYXRlKSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIGRhdGUpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkTXVsdGlwbGVEYXlzKGZvcm1hdHRlZERhdGVzLCB0aGlzLl9jYWxlbmRhckRheUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkTXVsdGlwbGVEYXRlcygpOiBOdWxsYWJsZTxBcnJheTxEPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIEZkRGF0ZXMgbW9kZWwgc3RhcnQgYW5kIGVuZCBpbiByYW5nZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkUmFuZ2VEYXRlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGVSYW5nZSAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSAmJlxuICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF5KGRhdGVSYW5nZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzU2FtZURheShkYXRlUmFuZ2UuZW5kLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUgPSBkYXRlUmFuZ2U7XG4gICAgICAgIGlmICh0aGlzLl9kYXlWaWV3R3JpZCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZURheXMoZGF0ZVJhbmdlLCB0aGlzLl9jYWxlbmRhckRheUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkUmFuZ2VEYXRlKCk6IERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBGZERhdGVzIG1vZGVsIHN0YXJ0IGFuZCBlbmQgaW4gbXVsdGlwbGUgcmFuZ2UgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlUmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGVSYW5nZXMgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgJiZcbiAgICAgICAgICAgIGRhdGVSYW5nZXMubGVuZ3RoID09PSB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmxlbmd0aCAmJlxuICAgICAgICAgICAgZGF0ZVJhbmdlcy5ldmVyeShcbiAgICAgICAgICAgICAgICAocmFuZ2UsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXkocmFuZ2Uuc3RhcnQsIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbaW5kZXhdLnN0YXJ0KSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXkocmFuZ2UuZW5kLCB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzW2luZGV4XS5lbmQpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZVJhbmdlcyB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMuX2RheVZpZXdHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZE11bHRpcGxlUmFuZ2VEYXlzKGRhdGVSYW5nZXMsIHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMoKTogQXJyYXk8RGF0ZVJhbmdlPEQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcztcbiAgICB9XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBhbHdheXMsIHdoZW4gbmV4dCBtb250aCBpcyBzZWxlY3RlZCwgYnkgZm9jdXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBuZXh0TW9udGhTZWxlY3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIGFsd2F5cywgd2hlbiBwcmV2aW91cyBtb250aCBpcyBzZWxlY3RlZCwgYnkgZm9jdXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwcmV2aW91c01vbnRoU2VsZWN0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIGRhdGVzIGluIG11bHRpcGxlIG1vZGUgYXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBmaXJzdCBvciBsYXN0IGRhdGUgaW4gcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U8RD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgdGhlIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiBtdWx0aXBsZSByYW5nZSBtb2RlIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEYXRlUmFuZ2U8RD4+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIEFycmF5PERhdGVSYW5nZTxEPj5cbiAgICA+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICogQHBhcmFtIGRhdGUgZGF0ZSB0eXBlXG4gICAgICovXG4gICAgZGlzYWJsZUZ1bmN0aW9uID0gbW9kZWw8RGlzYWJsZURhdGVGdW5jdGlvbjxEPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIHN0YXJ0IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0gZGF0ZSBkYXRlIHJlcHJlc2VudGF0aW9uXG4gICAgICovXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbiA9IG1vZGVsPERpc2FibGVEYXRlRnVuY3Rpb248RD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYXRlIGRhdGUgcmVwcmVzZW50YXRpb25cbiAgICAgKi9cbiAgICBkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbiA9IG1vZGVsPERpc2FibGVEYXRlRnVuY3Rpb248RD4+KCk7XG5cbiAgICAvKiogVGhlIGRheSBvZiB0aGUgd2VlayB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IG9uLiAxIHJlcHJlc2VudHMgU3VuZGF5LCAyIGlzIE1vbmRheSwgMyBpcyBUdWVzZGF5LCBhbmQgc28gb24uICovXG4gICAgc3RhcnRpbmdEYXlPZldlZWsgPSBtb2RlbDxEYXlzT2ZXZWVrPigpO1xuXG4gICAgLyoqIFRoZSB0eXBlIG9mIGNhbGVuZGFyLCAnc2luZ2xlJyBmb3Igc2luZ2xlIGRhdGUgc2VsZWN0aW9uIG9yICdyYW5nZScgZm9yIGEgcmFuZ2Ugb2YgZGF0ZXMuICovXG4gICAgY2FsVHlwZSA9IG1vZGVsPENhbGVuZGFyVHlwZT4oQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpO1xuXG4gICAgLyoqIElkIG9mIHRoZSBjYWxlbmRhci4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgZGF5IGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCBkYXRlIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIHJhbmdlSG92ZXJFZmZlY3QgPSBtb2RlbChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayBzdW5kYXkvc2F0dXJkYXkgd2l0aCBgZmQtY2FsZW5kYXJfX2l0ZW0tLXdlZWtlbmRgIGNsYXNzXG4gICAgICovXG4gICAgbWFya1dlZWtlbmRzID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIHNob3cgd2VlayBudW1iZXJzIG5leHQgdG8gZGF5c1xuICAgICAqL1xuICAgIHNob3dXZWVrTnVtYmVycyA9IGlucHV0KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgbXVsdGlwbGUgZGF5cyBvciBtdWx0aXBsZSByYW5nZSBkYXRlcy5cbiAgICAgKiBJZiBgZGlzcGxheVdlZWtOdW1iZXJzYCBpcyB0cnVlLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIHdlZWsgbnVtYmVyIHRvIG1hcmsgdGhlIHJlbGF0ZWQgcm93LlxuICAgICAqIFRoZSB1c2VyIGNhbiBjbGljayBvbiB3ZWVrIGRheXMgdG8gbWFyayB0aGUgcmVsYXRlZCBjb2x1bW4uXG4gICAgICogTm90ZTogQ2xpY2thYmxlIHNlbGVjdGlvbiBmb3Igd2VlayByb3cgb3IgY29sdW1uIGRvZXMgbm90IHdvcmsgZm9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gICAgICovXG4gICAgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA9IG1vZGVsKGZhbHNlKTtcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzcGVjaWZ5IHdoaWNoIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCwgd2hlbiBmb2N1cyB3YW50cyB0byBlc2NhcGUgKi9cbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uID0gaW5wdXQ8RXNjYXBlRm9jdXNGdW5jdGlvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgZGF5cyBtYXJrLCBpdCBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGFycmF5IG9mIG9iamVjdCB3aXRoXG4gICAgICogU3BlY2lhbCBkYXkgbnVtYmVyLCBsaXN0IDEtMjAgW2NsYXNzOmBmZC1jYWxlbmRhcl9faXRlbS0tbGVnZW5kLXt7bnVtYmVyfX1gXSBpcyBhdmFpbGFibGUgdGhlcmU6XG4gICAgICogaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL2Z1bmRhbWVudGFsLXN0eWxlcy9jb21wb25lbnRzL2NhbGVuZGFyLmh0bWwgY2FsZW5kYXIgc3BlY2lhbCBkYXlzIHNlY3Rpb25cbiAgICAgKiBSdWxlIGFjY2VwdHMgbWV0aG9kIHdpdGggZGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZGF0ZTogRCkgPT4gdGhpcy5kYXRlQWRhcHRlci5nZXREYXkoZGF0ZSkgPT09IDFgLCB3aGljaCB3aWxsIG1hcmsgYWxsIHN1bmRheXMgYXMgc3BlY2lhbCBkYXkuXG4gICAgICovXG4gICAgc3BlY2lhbERheXNSdWxlcyA9IGlucHV0PFNwZWNpYWxEYXlSdWxlPEQ+W10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBY3R1YWwgZGF5IGdyaWQgd2l0aCBwcmV2aW91cy9jdXJyZW50L25leHQgbW9udGggZGF5c1xuICAgICAqL1xuICAgIF9kYXlWaWV3R3JpZDogQ2FsZW5kYXJEYXk8RD5bXVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFycmF5IG9mIHdlZWsgbnVtYmVycyBkaXNwbGF5ZWQgZm9yIGN1cnJlbnQgbW9udGgveWVhclxuICAgICAqL1xuICAgIF93ZWVrczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQXJyYXkgb2YgQ1NTIGNsYXNzZXMgZm9yIGVhY2ggd2VlayBkYXkgaW4gY2FsZW5kYXIgaGVhZGVyLCBjb21wdXRlZCBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjYWxlbmRhciB0eXBlIGlzICdtdWx0aSdcbiAgICAgKiBhbmQgdGhlIGRhdGUgaXMgbm90IGRpc2FibGVkLlxuICAgICAqL1xuICAgIF93ZWVrSGVhZGVyQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ29tcHV0ZWQgc2lnbmFsIGZvciB0aGUgZm9jdXNlZCBzcGVjaWFsIGRheSBudW1iZXJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2ZvY3VzZWRTcGVjaWFsRGF5TnVtYmVyID0gY29tcHV0ZWQ8TnVsbGFibGU8bnVtYmVyPj4oXG4gICAgICAgICgpID0+IHRoaXMubGVnZW5kRm9jdXNlZFNlcnZpY2U/LmZvY3VzZWRTcGVjaWFsRGF5TnVtYmVyKCkgPz8gbnVsbFxuICAgICk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkTXVsdGlwbGVEYXRlczogQXJyYXk8RD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXlzIHBlciB3ZWVrXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZDb2xzID0gNztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzT25SYW5nZVBpY2sgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzSW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRseURpc3BsYXllZDogQ2FsZW5kYXJDdXJyZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHRoYXQgY29udGFpbnMgc2hvcnQgd2Vla2RheSBuYW1lcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG9ydFdlZWtEYXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWYXJpYWJsZSB0aGF0IGNvbnRhaW5zIHNob3J0IHdlZWtkYXkgbmFtZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbG9uZ1dlZWtEYXlzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBnbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIG5ldyByYW5nZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9uZXdSYW5nZTogeyBzdGFydDogRCB8IG51bGw7IGVuZDogRCB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhY2hlIG9mIGRheXMgd2l0aCBzcGVjaWFsIG1hcmtlcnMgZm9yIGVmZmljaWVudCBsZWdlbmQgZm9jdXMgdXBkYXRlc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2RheXNXaXRoU3BlY2lhbE1hcmtlcnM6IENhbGVuZGFyRGF5PEQ+W10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBsZWdlbmRGb2N1c2VkU2VydmljZSA9IGluamVjdChDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHVibGljIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPlxuICAgICkge1xuICAgICAgICAvLyBFZmZlY3QgdG8gdXBkYXRlIGdyaWQgd2hlbiBsZWdlbmQgZm9jdXMgY2hhbmdlc1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZE51bWJlciA9IHRoaXMuX2ZvY3VzZWRTcGVjaWFsRGF5TnVtYmVyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGF5Vmlld0dyaWQgJiYgdGhpcy5faXNJbml0aWF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVMZWdlbmRGb2N1c1N0YXRlKGZvY3VzZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc0luaXRpYXRlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fc2V0dXBLZXlib2FyZFNlcnZpY2UoKTtcblxuICAgICAgICB0aGlzLl9yZWZyZXNoU2hvcnRXZWVrRGF5cygpO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkRGF5Vmlld0dyaWQoKTtcblxuICAgICAgICB0aGlzLl9jb21wdXRlV2Vla0hlYWRlckNsYXNzZXMoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hTaG9ydFdlZWtEYXlzKCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZERheVZpZXdHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8qKiBDaGFuZ2VzIG9mIHRob3NlIHByb3BlcnRpZXMgYXJlIGRvbmUgaW5zaWRlIGl0cyBzZXR0ZXJzICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjaGFuZ2VzWydzZWxlY3RlZERhdGUnXSAmJlxuICAgICAgICAgICAgIWNoYW5nZXNbJ3NlbGVjdGVkTXVsdGlwbGVEYXRlcyddICYmXG4gICAgICAgICAgICAhY2hhbmdlc1snc2VsZWN0ZWRSYW5nZURhdGUnXSAmJlxuICAgICAgICAgICAgIWNoYW5nZXNbJ2N1cnJlbnRseURpc3BsYXllZCddXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fYnVpbGREYXlWaWV3R3JpZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydzdGFydGluZ0RheU9mV2VlayddKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoU2hvcnRXZWVrRGF5cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydzcGVjaWFsRGF5c1J1bGVzJ10pIHtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkRGF5Vmlld0dyaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RzIGEgZGF0ZSBpbiBzaW5nbGUgbW9kZSwgdG9nZ2xlcyBzZWxlY3Rpb24gaW4gbXVsdGkgbW9kZSwgb3Igc2V0cyB0aGUgcmFuZ2UgaW4gcmFuZ2UgbW9kZS5cbiAgICAgKiBIYW5kbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSBkYXRlIGJhc2VkIG9uIHRoZSBjYWxlbmRhciB0eXBlLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0byBiZSBzZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0gZXZlbnQgT3B0aW9uYWwgbW91c2UgZXZlbnQgZm9yIGhhbmRsaW5nIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAgICAqL1xuICAgIHNlbGVjdERhdGUoZGF5OiBDYWxlbmRhckRheTxEPiwgZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXkuZGlzYWJsZWQgfHwgZGF5LmJsb2NrZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpRGF0ZShkYXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbFR5cGUoKSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5SYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlUmFuZ2VEYXRlcyhkYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFNpbmdsZURhdGUoZGF5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxUeXBlKCkgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RSYW5nZURhdGUoZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2hhbmRsZVJhbmdlSG92ZXJFZmZlY3QoZXZlbnQpO1xuICAgICAgICB0aGlzLmNoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSB3ZWVrIG9uIHRoZSBjYWxlbmRhci5cbiAgICAgKiBJZiB0aGUgcHJvdmlkZWQgd2VlayBpcyBhbHJlYWR5IGZ1bGx5IHNlbGVjdGVkLCBpdCB3aWxsIGRlc2VsZWN0IGl0LlxuICAgICAqIElmIHRoZSBwcm92aWRlZCB3ZWVrIGlzIG5vdCBmdWxseSBzZWxlY3RlZCwgaXQgd2lsbCBzZWxlY3QgdGhlIGVudGlyZSB3ZWVrIGFuZCBjbGVhciBhbnkgcHJldmlvdXMgc2VsZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWRXZWVrIEFycmF5IG9mIENhbGVuZGFyRGF5IG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgaGFuZGxlV2Vla1NlbGVjdGlvbkJ5RGF5cyhzZWxlY3RlZFdlZWs6IEFycmF5PENhbGVuZGFyRGF5PEQ+Pik6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZVdlZWtTZWxlY3Rpb24oc2VsZWN0ZWRXZWVrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gb2YgYSB3ZWVrIG9uIHRoZSBjYWxlbmRhciBiYXNlZCBvbiB0aGUgd2Vla2RheSBpbmRleC5cbiAgICAgKiBJZiB0aGUgcHJvdmlkZWQgd2VlayBpcyBhbHJlYWR5IGZ1bGx5IHNlbGVjdGVkLCBpdCB3aWxsIGRlc2VsZWN0IGl0LlxuICAgICAqIElmIHRoZSBwcm92aWRlZCB3ZWVrIGlzIG5vdCBmdWxseSBzZWxlY3RlZCwgaXQgd2lsbCBzZWxlY3QgdGhlIGVudGlyZSB3ZWVrIGFuZCBjbGVhciBhbnkgcHJldmlvdXMgc2VsZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gd2Vla0RheUluZGV4IFRoZSBpbmRleCBvZiB0aGUgd2Vla2RheSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIGhhbmRsZVdlZWtTZWxlY3Rpb25CeUluZGV4KHdlZWtEYXlJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkV2VlazogQXJyYXk8Q2FsZW5kYXJEYXk8RD4+ID0gdGhpcy5fZGF5Vmlld0dyaWQubWFwKChyb3cpID0+IHJvd1t3ZWVrRGF5SW5kZXhdKTtcbiAgICAgICAgdGhpcy50b2dnbGVXZWVrU2VsZWN0aW9uKHNlbGVjdGVkV2Vlayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGZvY3VzIG9uIGRlZmF1bHQgZm9jdXNhYmxlIGNlbGxcbiAgICAgKi9cbiAgICBzZXRGb2N1c09uQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbFRvRm9jdXMgPSBuZXcgQ2FsZW5kYXJBY3RpdmVEYXlDZWxsU3RyYXRlZ3koKS5nZXRBY3RpdmVDZWxsKHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgICAgIGlmICghY2VsbFRvRm9jdXM/LmluZGV4ICYmIGNlbGxUb0ZvY3VzPy5pbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNPbkNlbGxCeUluZGV4KGNlbGxUb0ZvY3VzLmluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yZWZyZXNoSG92ZXJSYW5nZShkYXk6IENhbGVuZGFyRGF5PEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTXVsdGlSYW5nZUhvdmVyKGRheSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTaW5nbGVSYW5nZUhvdmVyKGRheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIEFtb3VudCBvZiBzZWxlY3RlZCBkYXlzXG4gICAgICogIDAsIHdoZW4gdGhlcmUgaXMgbm8gZGF5IHNlbGVjdGVkLCBvciBzdGFydCBkYXRlIGlzIGludmFsaWQsXG4gICAgICogIDEsIHdoZW4gdGhlcmUgaXMgb25seSB2YWxpZCBzdGFydCBkYXRlLCBvciBlbmQgZGF0ZSBpcyBzYW1lIGFzIHN0YXJ0IGRhdGUsXG4gICAgICogIDIsIHdoZW4gYm90aCBkYXRlcyBhcmUgdmFsaWRcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdENvdW50ZXIoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlIHx8ICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCAmJlxuICAgICAgICAgICAgKCF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXkodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpICYmXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG90YWwgYW1vdW50IG9mIHNlbGVjdGVkIGRheXMgYWNyb3NzIG11bHRpcGxlIHJhbmdlcy5cbiAgICAgKiBTdW1zIHRoZSBjb3VudHMgb2YgdmFsaWQgZGF5cyBpbiBlYWNoIGRhdGUgcmFuZ2UuXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RNdWx0aXBsZUNvdW50ZXIoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcy5yZWR1Y2UoKGNvdW50LCByYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9LCAwKTtcblxuICAgICAgICAvLyBBY2NvdW50IGZvciB0aGUgbmV3UmFuZ2VcbiAgICAgICAgaWYgKHRoaXMuX25ld1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbmV3UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbmV3UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHJldHVybnMgc2hvcnQgd2Vla2RheSBuYW1lLlxuICAgICAqIENhbiBiZSBjaGFuZ2VkIGJ5IHVzZXIgYnkgcHJvdmlkaW5nIG90aGVyIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgRGF0ZXRpbWVBZGFwdGVyXG4gICAgICovXG4gICAgZ2V0IHNob3J0V2Vla0RheXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvcnRXZWVrRGF5cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyB3ZWVrZGF5IG5hbWUuXG4gICAgICogQ2FuIGJlIGNoYW5nZWQgYnkgdXNlciBieSBwcm92aWRpbmcgb3RoZXIgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cyBEYXRldGltZUFkYXB0ZXJcbiAgICAgKi9cbiAgICBnZXQgbG9uZ1dlZWtEYXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdXZWVrRGF5cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBnaXZlcyBhcnJheSBvZiBhbGwgZGlzcGxheWVkIENhbGVuZGFyRGF5c1xuICAgICAqL1xuICAgIGdldCBfY2FsZW5kYXJEYXlMaXN0KCk6IENhbGVuZGFyRGF5PEQ+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF5Vmlld0dyaWQucmVkdWNlKCh0b3RhbENhbGVuZGFyUm93czogQ2FsZW5kYXJEYXk8RD5bXSwgY2FsZW5kYXJSb3c6IENhbGVuZGFyRGF5PEQ+W10pID0+IHtcbiAgICAgICAgICAgIGlmICghY2FsZW5kYXJSb3cpIHtcbiAgICAgICAgICAgICAgICBjYWxlbmRhclJvdyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsQ2FsZW5kYXJSb3dzLmNvbmNhdChjYWxlbmRhclJvdyk7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWaWV3IElEXG4gICAgICovXG4gICAgZ2V0IHZpZXdJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCgpICsgJy1kYXktdmlldyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdlZWsgY29sdW1uIGhlYWRlciBJRFxuICAgICAqL1xuICAgIGdldCBfd2Vla051bWJlcnNDb2x1bW5IZWFkZXJJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXdlZWstY29sdW1uLWhlYWRlcic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZGF5IGNlbGwgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3RvZGF5TGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXRvZGF5LWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0ZWQgZGF0ZSBsYWJlbCBJRFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0ZWREYXRlTGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXNlbGVjdGVkLWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIHJhbmdlIHN0YXJ0IGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX2RhdGVSYW5nZVN0YXJ0TGFiZWxJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWQgKyAnLXJhbmdlLXN0YXJ0LWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIHJhbmdlIGVuZCBkYXRlIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF9kYXRlUmFuZ2VFbmRMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctcmFuZ2UtZW5kLWRhdGUtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBEYXRlIGluIHBhc3QgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJblBhc3RMYWJlbElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICctZGF5LWluLXBhc3QtbGFiZWwnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBoYW5kbGVzIGRheSBjZWxscyBrZXlkb3duIGV2ZW50cyxcbiAgICAgKiBAcGFyYW0gZXZlbnQgS2V5Ym9hcmRFdmVudFxuICAgICAqIEBwYXJhbSBjZWxsIENhbGVuZGFyRGF5XG4gICAgICogQHBhcmFtIGluZGV4IHdpdGggc3BlY2lmaWVkIGNvbHVtbiBhbmQgcm93IGFzIGEgeCBhbmQgeVxuICAgICAqL1xuICAgIF9vbktleWRvd25EYXlIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjZWxsOiBDYWxlbmRhckRheTxEPiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbigpIShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5vbktleWRvd25IYW5kbGVyKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIE1ldGhvZCB0aGF0IGFsbG93IHRvIGZvY3VzIGVsZW1lbnRzIGluc2lkZSB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuICAgIF9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCA9IHRoaXMuZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdGFuZGFyZGl6ZWQgbWV0aG9kIHRvIGNhbGN1bGF0ZSBncmlkIFt4XVt5XSB0byBpbmRleCBudW1iZXIgb2YgZmxhdHRlbiBsaXN0XG4gICAgICovXG4gICAgX2dldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgc2VsZWN0cyBwcmV2aW91cyBtb250aFxuICAgICAqIFRyaWdnZXJlZCBvbmx5IHdoZW4gdGhlIG1vbnRoIGlzIGNoYW5nZWQgZHVyaW5nIGNoYW5naW5nIGZvY3VzXG4gICAgICogQWxzbyB0cmlnZ2VycyBldmVudCB0byBwYXJlbnQgY2FsZW5kYXIgY29tcG9uZW50IGFuZCByZWJ1aWxkcyBkYXkgdmlldyBncmlkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0gdGhpcy5fZ2V0UHJldmlvdXNNb250aCgpO1xuICAgICAgICB0aGlzLl9idWlsZERheVZpZXdHcmlkKCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aFNlbGVjdC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHNlbGVjdHMgbmV4dCBtb250aFxuICAgICAqIFRyaWdnZXJlZCBvbmx5IHdoZW4gdGhlIG1vbnRoIGlzIGNoYW5nZWQgZHVyaW5nIGNoYW5naW5nIGZvY3VzXG4gICAgICogQWxzbyB0cmlnZ2VycyBldmVudCB0byBwYXJlbnQgY2FsZW5kYXIgY29tcG9uZW50IGFuZCByZWJ1aWxkcyBkYXkgdmlldyBncmlkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB0aGlzLl9nZXROZXh0TW9udGgoKTtcbiAgICAgICAgdGhpcy5fYnVpbGREYXlWaWV3R3JpZCgpO1xuICAgICAgICB0aGlzLm5leHRNb250aFNlbGVjdC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVwZGF0ZXMgdGhlIGxlZ2VuZCBmb2N1cyBzdGF0ZSBmb3IgY2FsZW5kYXIgZGF5cyB3aXRoIHNwZWNpYWwgbWFya2Vyc1xuICAgICAqIEBwYXJhbSBmb2N1c2VkU3BlY2lhbERheU51bWJlciBUaGUgY3VycmVudGx5IGZvY3VzZWQgc3BlY2lhbCBkYXkgbnVtYmVyLCBvciBudWxsL3VuZGVmaW5lZCBpZiBubyBsZWdlbmQgaXRlbSBpcyBmb2N1c2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTGVnZW5kRm9jdXNTdGF0ZShmb2N1c2VkU3BlY2lhbERheU51bWJlcjogTnVsbGFibGU8bnVtYmVyPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2RheVZpZXdHcmlkIHx8IHRoaXMuX2RheXNXaXRoU3BlY2lhbE1hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGl0ZXJhdGUgdGhyb3VnaCBkYXlzIHRoYXQgaGF2ZSBzcGVjaWFsIG1hcmtlcnMgKHR5cGljYWxseSAyLTEwIGRheXMgaW5zdGVhZCBvZiA0MilcbiAgICAgICAgdGhpcy5fZGF5c1dpdGhTcGVjaWFsTWFya2Vycy5mb3JFYWNoKChkYXkpID0+IHtcbiAgICAgICAgICAgIGlmIChmb2N1c2VkU3BlY2lhbERheU51bWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gbGVnZW5kIGl0ZW0gZm9jdXNlZCAtIHNob3cgYWxsIG1hcmtlcnNcbiAgICAgICAgICAgICAgICBkYXkuc2hvdWxkSGlkZVNwZWNpYWxEYXlNYXJrZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTGVnZW5kIGl0ZW0gZm9jdXNlZCAtIGhpZGUgbWFya2VycyB0aGF0IGRvbid0IG1hdGNoXG4gICAgICAgICAgICAgICAgZGF5LnNob3VsZEhpZGVTcGVjaWFsRGF5TWFya2VyID0gZGF5LnNwZWNpYWxEYXlOdW1iZXIgIT09IGZvY3VzZWRTcGVjaWFsRGF5TnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNyZWF0ZXMgYXJyYXkgb2YgQ2FsZW5kYXJEYXkgbW9kZWxzIHdoaWNoIHdpbGwgYmUgc2hvd24gb24gZGF5IGdyaWQsXG4gICAgICogZGVwZW5kaW5nIG9uIGN1cnJlbnQgbW9udGggYW5kIHllYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcG9wdWxhdGVDYWxlbmRhcigpOiBDYWxlbmRhckRheTxEPltdIHtcbiAgICAgICAgbGV0IGNhbGVuZGFyOiBDYWxlbmRhckRheTxEPltdID0gW107XG5cbiAgICAgICAgY2FsZW5kYXIgPSB0aGlzLl9nZXRQcmV2aW91c01vbnRoRGF5cyhjYWxlbmRhcik7XG4gICAgICAgIGNhbGVuZGFyID0gY2FsZW5kYXIuY29uY2F0KHRoaXMuX2dldEN1cnJlbnRNb250aERheXMoKSk7XG4gICAgICAgIGNhbGVuZGFyID0gdGhpcy5fZ2V0TmV4dE1vbnRoRGF5cyhjYWxlbmRhcik7XG5cbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoY2FsbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY2FsbC5pZCA9IHRoaXMuX2dldENlbGxJZEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgY2FsbC5pbmRleCA9IGluZGV4O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbFR5cGUoKSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUgJiYgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2RheXMgPSBjYWxlbmRhci5maWx0ZXIoKGRheSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzPy5zb21lKChkYXRlKSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIGRhdGUpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZURheXMoX2RheXMsIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRNdWx0aXBsZVJhbmdlRGF5cyh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcywgY2FsZW5kYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSAmJiB0aGlzLl9zZWxlY3RlZERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfZGF5ID0gY2FsZW5kYXIuZmluZCgoZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoZGF5LmRhdGUsIHRoaXMuX3NlbGVjdGVkRGF0ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkU2luZ2xlRGF5KF9kYXksIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZURheXModGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUsIGNhbGVuZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWxlbmRhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgYnVpbGRzIDIgZGltZW5zaW9ucyBkYXkgdmlldyBncmlkLCBhbHNvIHNldHMgdXAgY3VycmVudGx5IGRpc3BsYXllZCBtb250aCwgb3IgeWVhcixcbiAgICAgKiB3aGVuIHRoZXJlIGlzIG5vdCBhbnkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYnVpbGREYXlWaWV3R3JpZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRseURpc3BsYXllZCB8fCB0aGlzLl9pc0ludmFsaWREYXRlKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aCh0aGlzLnNlbGVjdGVkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRZZWFyKHRoaXMuc2VsZWN0ZWREYXRlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIodG9kYXkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHRoaXMuX3BvcHVsYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgY29uc3QgZGF5Vmlld0dyaWQ6IENhbGVuZGFyRGF5PEQ+W11bXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlIChjYWxlbmRhckRheXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF5Vmlld0dyaWQucHVzaChjYWxlbmRhckRheXMuc3BsaWNlKDAsIHRoaXMuX2Ftb3VudE9mQ29scykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gZGF5Vmlld0dyaWQubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuX2RheVZpZXdHcmlkID0gZGF5Vmlld0dyaWQ7XG4gICAgICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fcmVmcmVzaFdlZWtDb3VudCgpO1xuXG4gICAgICAgIC8vIENhY2hlIGRheXMgd2l0aCBzcGVjaWFsIG1hcmtlcnMgZm9yIGVmZmljaWVudCBsZWdlbmQgZm9jdXMgdXBkYXRlc1xuICAgICAgICB0aGlzLl9kYXlzV2l0aFNwZWNpYWxNYXJrZXJzID0gdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZpbHRlcigoZGF5KSA9PiBkYXkuc3BlY2lhbERheU51bWJlciAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzSW52YWxpZERhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyKSB8fCBpc05hTih0aGlzLmN1cnJlbnRseURpc3BsYXllZC5tb250aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCBpZCBvZiBjYWxlbmRhcidzIGRheSBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0Q2VsbElkQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1kYXktJyArIGluZGV4ICsgJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB3aGljaCBwcm92aWRlcyBhcnJheSBvZiBDYWxlbmRhckRheSxcbiAgICAgKiB3aGljaCBjb250YWlucyBldmVyeSBzaW5nbGUgZGF5IG9mIGN1cnJlbnRseSBzaG93biBtb250aC95ZWFyLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbnRNb250aERheXMoKTogQ2FsZW5kYXJEYXk8RD5bXSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGg7XG4gICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyO1xuICAgICAgICBjb25zdCBjYWxlbmRhckRheXM6IENhbGVuZGFyRGF5PEQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYW1vdW50T2ZEYXlzSW5DdXJyZW50TW9udGg6IG51bWJlciA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBub3cgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubm93KCk7XG4gICAgICAgIGZvciAobGV0IGRheU51bWJlciA9IDE7IGRheU51bWJlciA8PSBhbW91bnRPZkRheXNJbkN1cnJlbnRNb250aDsgZGF5TnVtYmVyKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGU6IEQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5TnVtYmVyKTtcbiAgICAgICAgICAgIGNhbGVuZGFyRGF5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9nZXREYXkoZGF0ZSksXG4gICAgICAgICAgICAgICAgbW9udGhTdGF0dXM6ICdjdXJyZW50JyxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiB0aGlzLl9pc1NhbWVEYXkobm93LCBkYXRlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuX2dldEFjdGl2ZUNlbGwoY2FsZW5kYXJEYXlzKTtcbiAgICAgICAgY2VsbCAmJiAoY2VsbC5pc1RhYkluZGV4ZWQgPSB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyRGF5cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIGRheSwgcmV0dXJuIHNlbGVjdGVkIGRheVxuICAgICAqIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIGRheSwgYnV0IHRoZXJlIGlzIHRvZGF5IGRheSwgcmV0dXJuIHRvZGF5IGRheVxuICAgICAqIGlmIHRoZXJlIGlzIG5vIHRvZGF5LCBvciBzZWxlY3RlZCwgcmV0dXJuIGZpcnN0IG9uZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFjdGl2ZUNlbGwoY2FsZW5kYXJEYXlzOiBDYWxlbmRhckRheTxEPltdKTogQ2FsZW5kYXJEYXk8RD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYWxlbmRhckFjdGl2ZURheUNlbGxTdHJhdGVneTxEPigpLmdldEFjdGl2ZUNlbGwoY2FsZW5kYXJEYXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHdoaWNoIHByb3ZpZGVzIGFycmF5IG9mIENhbGVuZGFyRGF5LFxuICAgICAqIHdoaWNoIGNvbnRhaW5zIGxhc3QgMC02IGRheXMgb2YgcHJldmlvdXMgbW9udGgveWVhci4gVGhlc2VzIGRheXNcbiAgICAgKiBmaWxscyB0aGUgZ2FwIGJldHdlZW4gc3RhcnRpbmcgc3RhcnRpbmdEYXlPZldlZWsgYW5kIGZpcnN0IGRheSBvZiBjdXJyZW50IG1vbnRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNNb250aERheXMoY2FsZW5kYXJEYXlzOiBDYWxlbmRhckRheTxEPltdKTogQ2FsZW5kYXJEYXk8RD5bXSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPiAxID8gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggLSAxIDogMTI7XG4gICAgICAgIGNvbnN0IHllYXIgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPiAxID8gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQueWVhciA6IHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxO1xuICAgICAgICBjb25zdCBhbW91bnRPZkRheXNJbkN1cnJlbnRNb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByZXZNb250aExhc3REYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgsIGFtb3VudE9mRGF5c0luQ3VycmVudE1vbnRoKTtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTGFzdERheSA9IGFtb3VudE9mRGF5c0luQ3VycmVudE1vbnRoO1xuICAgICAgICBsZXQgcHJldk1vbnRoTGFzdFdlZWtEYXkgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrKHByZXZNb250aExhc3REYXRlKSAtIHRoaXMuc3RhcnRpbmdEYXlPZldlZWsoKSE7XG5cbiAgICAgICAgLyoqIENoZWNraW5nIGlmIHRoZXJlIGFyZSBzb21lIGRheXMgY3V0IGJ5IHN0YXJ0aW5nRGF5T2ZXZWVrIG9wdGlvblxuICAgICAgICAgKiAgSWYgeWVzLCB0aGVyZSBpcyB3aG9sZSB3ZWVrIGFkZGVkLCB0byBhdm9pZCBoaWRpbmdcbiAgICAgICAgICovXG4gICAgICAgIGlmIChwcmV2TW9udGhMYXN0V2Vla0RheSA8IDApIHtcbiAgICAgICAgICAgIHByZXZNb250aExhc3RXZWVrRGF5ID0gcHJldk1vbnRoTGFzdFdlZWtEYXkgKyA3O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZNb250aExhc3RXZWVrRGF5IDwgNikge1xuICAgICAgICAgICAgd2hpbGUgKHByZXZNb250aExhc3RXZWVrRGF5ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2TW9udGhEYXkgPSBwcmV2TW9udGhMYXN0RGF5IC0gcHJldk1vbnRoTGFzdFdlZWtEYXk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoLCBwcmV2TW9udGhEYXkpO1xuICAgICAgICAgICAgICAgIGNhbGVuZGFyRGF5cy5wdXNoKHsgLi4udGhpcy5fZ2V0RGF5KGRhdGUpLCBtb250aFN0YXR1czogJ3ByZXZpb3VzJyB9KTtcbiAgICAgICAgICAgICAgICBwcmV2TW9udGhMYXN0V2Vla0RheS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxlbmRhckRheXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB3aGljaCBwcm92aWRlcyBhcnJheSBvZiBDYWxlbmRhckRheSwgd2hpY2ggY29udGFpbnMgZmlyc3QgZGF5cyBvZiBuZXh0IG1vbnRoL3llYXIuIFRoZXNlcyBkYXlzXG4gICAgICogZmlsbHMgdGhlIGdhcCBiZXR3ZWVuIGxhc3QgZGF5IG9mIGN1cnJlbnQgZGF5IGFuZCBlbmQgb2YgNi13ZWVrcyBjYWxlbmRhciBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE5leHRNb250aERheXMoY2FsZW5kYXJEYXlzOiBDYWxlbmRhckRheTxEPltdKTogQ2FsZW5kYXJEYXk8RD5bXSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPCAxMiA/IHRoaXMuY3VycmVudGx5RGlzcGxheWVkLm1vbnRoICsgMSA6IDE7XG4gICAgICAgIGNvbnN0IHllYXIgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggPCAxMiA/IHRoaXMuY3VycmVudGx5RGlzcGxheWVkLnllYXIgOiB0aGlzLmN1cnJlbnRseURpc3BsYXllZC55ZWFyICsgMTtcblxuICAgICAgICAvLyBUaGUgY2FsZW5kYXIgZ3JpZCBjYW4gaGF2ZSA1ICgzNSBkYXlzKSBvciA2ICg0MiBkYXlzKSB3ZWVrc1xuICAgICAgICBjb25zdCBuZXh0TW9udGhEaXNwbGF5ZWREYXlzID0gKDQyIC0gY2FsZW5kYXJEYXlzLmxlbmd0aCkgJSA3O1xuXG4gICAgICAgIGZvciAobGV0IG5leHREID0gMTsgbmV4dEQgPD0gbmV4dE1vbnRoRGlzcGxheWVkRGF5czsgbmV4dEQrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoLCBuZXh0RCk7XG4gICAgICAgICAgICBjYWxlbmRhckRheXMucHVzaCh7IC4uLnRoaXMuX2dldERheShkYXRlKSwgbW9udGhTdGF0dXM6ICduZXh0JyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsZW5kYXJEYXlzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNXZWVrZW5kRGF5KGRheU9mV2VlazogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkYXlPZldlZWsgPT09IDEgfHwgZGF5T2ZXZWVrID09PSA3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBnZW5lcmF0ZXMgd2hvbGUgZGF5IG1vZGVsIGJhc2luZyBvbiBkYXRlLCBkaXNhYmxpbmcgZnVuY3Rpb25zLCBibG9jayBmdW5jdGlvbnMsIGFuZCBhY3R1YWxseVxuICAgICAqIGNob3NlbiByYW5nZSAvIHNpbmdsZSBkYXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldERheShkYXRlOiBEKTogQ2FsZW5kYXJEYXk8RD4ge1xuICAgICAgICBjb25zdCB3ZWVrRGF5ID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgY29uc3QgZGF5T2ZNb250aCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXREYXRlKGRhdGUpO1xuICAgICAgICBjb25zdCBkYXRlTmFtZXMgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZU5hbWVzKCk7XG4gICAgICAgIGNvbnN0IGlzUGFzdCA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShkYXRlLCB0aGlzLl9kYXRlVGltZUFkYXB0ZXIudG9kYXkoKSkgPCAwO1xuICAgICAgICBjb25zdCBkYXk6IENhbGVuZGFyRGF5PEQ+ID0ge1xuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGxhYmVsOiBkYXRlTmFtZXNbZGF5T2ZNb250aCAtIDFdLFxuICAgICAgICAgICAgd2Vla0RheSxcbiAgICAgICAgICAgIHdlZWtlbmQ6IHRoaXMuX2lzV2Vla2VuZERheSh3ZWVrRGF5KSxcbiAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS5kYXRlQTExeUxhYmVsKSxcbiAgICAgICAgICAgIHNwZWNpYWxEYXlOdW1iZXI6IHRoaXMuX2dldFNwZWNpYWxEYXkoZGF0ZSkgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFzdDogaXNQYXN0LFxuICAgICAgICAgICAgc2hvdWxkSGlkZVNwZWNpYWxEYXlNYXJrZXI6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqIEFwcGx5IGRpc2FibGVkIHN0YXRlIHRvIGRheXMgbWFya2VkIHdpdGggcGFzc2VkIGZ1bmN0aW9uICovXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBkYXkuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVGdW5jdGlvbigpIShkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZWZyZXNoIGkxOG4gc2hvcnQgd2VlayBkYXlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hTaG9ydFdlZWtEYXlzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG9ydERheU9mV2Vla05hbWVzID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCdzaG9ydCcpO1xuICAgICAgICBjb25zdCBkYXlPZldlZWtOYW1lcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbG9uZycpO1xuXG4gICAgICAgIHRoaXMuX3Nob3J0V2Vla0RheXMgPSBzaG9ydERheU9mV2Vla05hbWVzXG4gICAgICAgICAgICAuc2xpY2UodGhpcy5zdGFydGluZ0RheU9mV2VlaygpISAtIDEpXG4gICAgICAgICAgICAuY29uY2F0KHNob3J0RGF5T2ZXZWVrTmFtZXMuc2xpY2UoMCwgdGhpcy5zdGFydGluZ0RheU9mV2VlaygpISAtIDEpKTtcblxuICAgICAgICB0aGlzLl9sb25nV2Vla0RheXMgPSBkYXlPZldlZWtOYW1lc1xuICAgICAgICAgICAgLnNsaWNlKHRoaXMuc3RhcnRpbmdEYXlPZldlZWsoKSEgLSAxKVxuICAgICAgICAgICAgLmNvbmNhdChkYXlPZldlZWtOYW1lcy5zbGljZSgwLCB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrKCkhIC0gMSkpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHZXRzIHNwZWNpYWwgZGF5IG51bWJlciBvZiBzcGVjaWZpZWQgZGF0ZSBtb2RlbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFNwZWNpYWxEYXkoZGF0ZTogRCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBzcGVjaWFsRGF5ID0gdGhpcy5zcGVjaWFsRGF5c1J1bGVzKCkuZmluZCgoc3BlY2lhbERheVJ1bGUpID0+IHNwZWNpYWxEYXlSdWxlLnJ1bGUoZGF0ZSkpO1xuICAgICAgICBpZiAoc3BlY2lhbERheSkge1xuICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxEYXkuc3BlY2lhbERheU51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhcnJheSBvZiB3ZWVrJ3MgY291bnRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoV2Vla0NvdW50KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJEYXlMaXN0ID0gdGhpcy5fY2FsZW5kYXJEYXlMaXN0O1xuICAgICAgICBjb25zdCB3ZWVrTnVtYmVyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSA2OyBpbmRleCA8IGNhbGVuZGFyRGF5TGlzdC5sZW5ndGg7IGluZGV4ID0gaW5kZXggKyA2KSB7XG4gICAgICAgICAgICB3ZWVrTnVtYmVycy5wdXNoKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRXZWVrTmFtZShjYWxlbmRhckRheUxpc3RbaW5kZXhdLmRhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2Vla051bWJlcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCB5ZWFyIGFuZCBtb250aCBmb3IgcHJldmlvdXMgeWVhclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFByZXZpb3VzTW9udGgoKTogQ2FsZW5kYXJDdXJyZW50IHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLCBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIC0gMSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxLCBtb250aDogMTIgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHZXQgeWVhciBhbmQgbW9udGggZm9yIG5leHQgeWVhclxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE5leHRNb250aCgpOiBDYWxlbmRhckN1cnJlbnQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLCBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoICsgMSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxLCBtb250aDogMSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY29sQW1vdW50ID0gdGhpcy5fYW1vdW50T2ZDb2xzO1xuXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmZvY3VzRXNjYXBlRnVuY3Rpb24gPSB0aGlzLmZvY3VzRXNjYXBlRnVuY3Rpb24oKSE7XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoSG92ZXJSYW5nZSh0aGlzLl9jYWxlbmRhckRheUxpc3RbaW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uub25LZXlTZWxlY3QucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoeyBpbmRleCwgZXZlbnQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKHRoaXMuX2NhbGVuZGFyRGF5TGlzdFtpbmRleF0sIGV2ZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2Uub25MaXN0U3RhcnRBcHByb2FjaC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0UHJldmlvdXNNb250aCgpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDYWxjdWxhdGUgZm9jdXNlZCBjZWxsIGluIG5ldyBncmlkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsTW9udGggPSB0aGlzLl9nZXROZXh0TW9udGgoKTsgLy8gbW9udGggdGhhdCB3YXMgYmVmb3JlIG1vdmluZyBiYWNrXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEFtb3VudE9mV2Vla3MgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0QW1vdW50T2ZXZWVrcyhcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1vbnRoLnllYXIsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNb250aC5tb250aCxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrKCkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcHJldk1vbnRoQW1vdW50T2ZXZWVrcyA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRBbW91bnRPZldlZWtzKFxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLFxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCxcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0aW5nRGF5T2ZXZWVrKCkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciByZW5kZXJpbmcgZm9yIG5ldyBncmlkIHNvIGZvY3VzIGNhbiBiZSBzZXRcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4IC0gNyAqIChvcmlnaW5hbEFtb3VudE9mV2Vla3MgLSBwcmV2TW9udGhBbW91bnRPZldlZWtzKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uTGlzdEVuZEFwcHJvYWNoLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3ROZXh0TW9udGgoKTtcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgcmVuZGVyaW5nIGZvciBuZXcgZ3JpZCBzbyBmb2N1cyBjYW4gYmUgc2V0XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGFuZ2Ugc2VsZWN0aW9uIGZsYWcgb24gZGF5cyB0byBmYWxzZSwgYmVzaWRlcyB0aGUgc2VsZWN0ZWQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlU2VsZWN0ZWRTaW5nbGVEYXkoZGF5OiBOdWxsYWJsZTxDYWxlbmRhckRheTxEPj4sIGNhbGVuZGFyOiBDYWxlbmRhckRheTxEPltdKTogdm9pZCB7XG4gICAgICAgIGNhbGVuZGFyLmZvckVhY2goKF9kYXkpID0+IChfZGF5LnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgICAgaWYgKGRheSAmJiAhZGF5LmJsb2NrZWQgJiYgIWRheS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZnJlc2hUYWJJbmRleChjYWxlbmRhcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoYW5nZSBzZWxlY3Rpb24gZmxhZyBvbiBkYXlzIHRvIGZhbHNlLCBiZXNpZGVzIHRoZSBzZWxlY3RlZCBvbmVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlcyAtIEFuIGFycmF5IG9mIENhbGVuZGFyRGF5IG9iamVjdHMgdG8gYmUgbWFya2VkIGFzIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIGNhbGVuZGFyIC0gVGhlIGNhbGVuZGFyIGFycmF5IGNvbnRhaW5pbmcgYWxsIENhbGVuZGFyRGF5IG9iamVjdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RlZE11bHRpcGxlRGF5cyhkYXRlczogTnVsbGFibGU8QXJyYXk8Q2FsZW5kYXJEYXk8RD4+PiwgY2FsZW5kYXI6IENhbGVuZGFyRGF5PEQ+W10pOiB2b2lkIHtcbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoZGF5KSA9PiAoZGF5LnNlbGVjdGVkID0gZmFsc2UpKTtcblxuICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgIGRhdGVzLmZvckVhY2goKGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ0RheSA9IGNhbGVuZGFyLmZpbmQoKGRheSkgPT4gdGhpcy5faXNTYW1lRGF5KGRheS5kYXRlLCBkYXRlLmRhdGUpKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdEYXkgJiYgIW1hdGNoaW5nRGF5LmJsb2NrZWQgJiYgIW1hdGNoaW5nRGF5LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nRGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaFRhYkluZGV4KGNhbGVuZGFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hhbmdlIHByb3BlcnRpZXMgb2YgcmFuZ2UgZGF5cywgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0byBub3QgcmVidWlsZCB3aG9sZSBncmlkIGZyb20gc2NyYXRjaCxcbiAgICAgKiBpdCBqdXN0IGNoYW5nZXMgcHJvcGVydGllcyBvZiBuZXdseSBzZWxlY3RlZC91bnNlbGVjdGVkIGRheXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlU2VsZWN0ZWRSYW5nZURheXMoZGF0ZXM6IERhdGVSYW5nZTxEPiwgY2FsZW5kYXI6IENhbGVuZGFyRGF5PEQ+W10pOiB2b2lkIHtcbiAgICAgICAgLyoqIFB1bGwgbGlzdCBvZiBjYWxlbmRhciBkYXlzICovXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTGlzdCA9IGNhbGVuZGFyO1xuXG4gICAgICAgIC8qKiBSZXNldCBjaGFuZ2luZyBwcm9wZXJ0aWVzICovXG4gICAgICAgIGNhbGVuZGFyTGlzdC5mb3JFYWNoKFxuICAgICAgICAgICAgKF9kYXkpID0+XG4gICAgICAgICAgICAgICAgKF9kYXkuc2VsZWN0ZWRGaXJzdCA9XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWRMYXN0ID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuaXNUYWJJbmRleGVkID1cbiAgICAgICAgICAgICAgICAgICAgX2RheS5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWRSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgIGxldCBzdGFydERheTogQ2FsZW5kYXJEYXk8RD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZW5kRGF5OiBDYWxlbmRhckRheTxEPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChkYXRlcy5zdGFydCkge1xuICAgICAgICAgICAgICAgIC8qKiBGaW5kIHN0YXJ0IGRhdGUgYW5kIG1hcmsgaXQgYXMgc2VsZWN0ZWQgKi9cbiAgICAgICAgICAgICAgICBzdGFydERheSA9IGNhbGVuZGFyTGlzdC5maW5kKChfZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoX2RheS5kYXRlLCBkYXRlcy5zdGFydCkpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXN0YXJ0RGF5LmJsb2NrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgIXN0YXJ0RGF5LmRpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgdGhpcy5kaXNhYmxlUmFuZ2VTdGFydEZ1bmN0aW9uKCkgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb24oKT8uKHN0YXJ0RGF5LmRhdGUpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydERheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5LnNlbGVjdGVkRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvKiogRmluZCBlbmQgZGF0ZSBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIGVuZERheSA9IGNhbGVuZGFyTGlzdC5maW5kKChfZGF5KSA9PiB0aGlzLl9pc1NhbWVEYXkoX2RheS5kYXRlLCBkYXRlcy5lbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGVuZERheSAmJlxuICAgICAgICAgICAgICAgICAgICAhZW5kRGF5LmJsb2NrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWVuZERheS5kaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMuZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24oKSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24oKT8uKGVuZERheS5kYXRlKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF5LnNlbGVjdGVkTGFzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiogVmVyaWZ5IGlmIHN0YXJ0IGRheSBhbmQgZW5kIGRheSBpcyB2YWxpZCwgb3RoZXJ3aXNlIGRvbid0IHB1dCByYW5nZSBzZWxlY3Rpb24gKi9cbiAgICAgICAgICAgIGlmIChkYXRlcy5zdGFydCAmJiBkYXRlcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvKiogTWFyayBhbGwgZGF5cywgd2hpY2ggYXJlIGJldHdlZW4gc3RhcnQgYW5kIGVuZCBkYXRlICovXG4gICAgICAgICAgICAgICAgY2FsZW5kYXJMaXN0XG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoX2RheSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2RheS5zZWxlY3RlZFJhbmdlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzQmV0d2VlbihfZGF5LmRhdGUsIGRhdGVzLnN0YXJ0ISwgZGF0ZXMuZW5kISkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKF9kYXkpID0+IChfZGF5LnNlbGVjdGVkUmFuZ2UgPSB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hUYWJJbmRleChjYWxlbmRhckxpc3QpO1xuXG4gICAgICAgIC8qKiBBcHBseSBkaXNhYmxlZCBzdGF0ZSB0byBkYXlzIG1hcmtlZCB3aXRoIHBhc3NlZCBmdW5jdGlvbiAqL1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgY2FsZW5kYXJMaXN0LmZvckVhY2goKF9kYXkpID0+IChfZGF5LmRpc2FibGVkID0gdGhpcy5kaXNhYmxlRnVuY3Rpb24oKSEoX2RheS5kYXRlKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh0aGlzLl9zZWxlY3RDb3VudGVyID09PSAwIHx8IHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDIpICYmIHRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBjYWxlbmRhckxpc3QuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoX2RheSkgPT4gKF9kYXkuZGlzYWJsZWQgPSBfZGF5LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbigpIShfZGF5LmRhdGUpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zZWxlY3RDb3VudGVyID09PSAxICYmIHRoaXMuZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgY2FsZW5kYXJMaXN0LmZvckVhY2goXG4gICAgICAgICAgICAgICAgKF9kYXkpID0+IChfZGF5LmRpc2FibGVkID0gX2RheS5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVSYW5nZUVuZEZ1bmN0aW9uKCkhKF9kYXkuZGF0ZSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoYW5nZSBwcm9wZXJ0aWVzIG9mIHJhbmdlIGRheXMgZm9yIG11bHRpcGxlIHJhbmdlcy5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbm90IHJlYnVpbGQgdGhlIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLlxuICAgICAqIEl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgZGF5cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VTZWxlY3RlZE11bHRpcGxlUmFuZ2VEYXlzKGRhdGVzQXJyYXk6IEFycmF5PERhdGVSYW5nZTxEPj4sIGNhbGVuZGFyOiBDYWxlbmRhckRheTxEPltdKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IGNoYW5naW5nIHByb3BlcnRpZXNcbiAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgX2RheS5zZWxlY3RlZEZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LnNlbGVjdGVkTGFzdCA9IGZhbHNlO1xuICAgICAgICAgICAgX2RheS5zZWxlY3RlZFJhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LmlzVGFiSW5kZXhlZCA9IGZhbHNlO1xuICAgICAgICAgICAgX2RheS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgX2RheS5ob3ZlclJhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICBfZGF5LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGVzQXJyYXkuZm9yRWFjaCgoZGF0ZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgICAgIGxldCBzdGFydERheTogQ2FsZW5kYXJEYXk8RD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGVuZERheTogQ2FsZW5kYXJEYXk8RD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgc3RhcnQgZGF0ZSBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IGNhbGVuZGFyLmZpbmQoKF9kYXkpID0+IHRoaXMuX2lzU2FtZURheShfZGF5LmRhdGUsIGRhdGVzLnN0YXJ0KSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkuc2VsZWN0ZWRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydERheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGVuZCBkYXRlIGFuZCBtYXJrIGl0IGFzIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIGVuZERheSA9IGNhbGVuZGFyLmZpbmQoKF9kYXkpID0+IHRoaXMuX2lzU2FtZURheShfZGF5LmRhdGUsIGRhdGVzLmVuZCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREYXkuc2VsZWN0ZWRMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFsbCBkYXlzIGJldHdlZW4gc3RhcnQgYW5kIGVuZCBhcyBzZWxlY3RlZCByYW5nZVxuICAgICAgICAgICAgICAgIGlmIChkYXRlcy5zdGFydCAmJiBkYXRlcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzRGF0ZUluUmFuZ2UoX2RheS5kYXRlLCBkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGF5LnNlbGVjdGVkUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaFRhYkluZGV4KGNhbGVuZGFyKTtcblxuICAgICAgICAvLyBBcHBseSBkaXNhYmxlZCBzdGF0ZSB0byBkYXlzIG1hcmtlZCB3aXRoIHBhc3NlZCBmdW5jdGlvblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlRnVuY3Rpb24oKSkge1xuICAgICAgICAgICAgY2FsZW5kYXIuZm9yRWFjaCgoX2RheSkgPT4gKF9kYXkuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVGdW5jdGlvbigpIShfZGF5LmRhdGUpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAodGhpcy5fc2VsZWN0TXVsdGlwbGVDb3VudGVyID09PSAwIHx8IHRoaXMuX3NlbGVjdE11bHRpcGxlQ291bnRlciAlIDIgPT09IDApICYmXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb24oKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLmZvckVhY2goKF9kYXkpID0+IChfZGF5LmRpc2FibGVkID0gX2RheS5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb24oKSEoX2RheS5kYXRlKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NlbGVjdE11bHRpcGxlQ291bnRlciAlIDIgPT09IDEgJiYgdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbigpKSB7XG4gICAgICAgICAgICBjYWxlbmRhci5mb3JFYWNoKChfZGF5KSA9PiAoX2RheS5kaXNhYmxlZCA9IF9kYXkuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbigpIShfZGF5LmRhdGUpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVmcmVzaFRhYkluZGV4KGNhbGVuZGFyOiBDYWxlbmRhckRheTxEPltdKTogdm9pZCB7XG4gICAgICAgIGNhbGVuZGFyLmZvckVhY2goKF9kYXkpID0+IChfZGF5LmlzVGFiSW5kZXhlZCA9IGZhbHNlKSk7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLl9nZXRBY3RpdmVDZWxsKGNhbGVuZGFyLmZpbHRlcigoX2RheSkgPT4gX2RheS5tb250aFN0YXR1cyA9PT0gJ2N1cnJlbnQnKSk7XG4gICAgICAgIGNlbGwgJiYgKGNlbGwuaXNUYWJJbmRleGVkID0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGZvY3VzT25DZWxsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke3RoaXMuX2dldENlbGxJZEJ5SW5kZXgoaW5kZXgpfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayBpZiBkYXRlcyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1NhbWVEYXkoZGF0ZTE6IE51bGxhYmxlPEQ+LCBkYXRlMjogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGUxLCBkYXRlMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdHMgYSBzaW5nbGUgZGF0ZSBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZS5cbiAgICAgKiBAcGFyYW0gZGF5IFRoZSBjYWxlbmRhciBkYXkgdG8gYmUgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0U2luZ2xlRGF0ZShkYXk6IENhbGVuZGFyRGF5PEQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyRGF5TGlzdC5mb3JFYWNoKChfZGF5KSA9PiAoX2RheS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIGRheS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IGRheS5kYXRlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRheS5kYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlcyB0aGUgc2VsZWN0aW9uIG9mIGEgZGF0ZSBpbiBtdWx0aSBtb2RlLlxuICAgICAqIEFkZHMgdGhlIGRhdGUgaWYgbm90IHNlbGVjdGVkLCByZW1vdmVzIGl0IGlmIGFscmVhZHkgc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIGRheSBUaGUgY2FsZW5kYXIgZGF5IHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlTXVsdGlEYXRlKGRheTogQ2FsZW5kYXJEYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0ZUluZGV4ID0gdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzLmZpbmRJbmRleCgoZCkgPT4gdGhpcy5faXNTYW1lRGF5KGQsIGRheS5kYXRlKSk7XG4gICAgICAgIGxldCBuZXdTZWxlY3RlZERhdGVzOiBEW107XG5cbiAgICAgICAgaWYgKGRhdGVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdTZWxlY3RlZERhdGVzID0gdGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSBkYXRlSW5kZXgpO1xuICAgICAgICAgICAgZGF5LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTZWxlY3RlZERhdGVzID0gWy4uLnRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcywgZGF5LmRhdGVdO1xuICAgICAgICAgICAgZGF5LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IG5ld1NlbGVjdGVkRGF0ZXM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0cyBvciB1cGRhdGVzIHRoZSByYW5nZSBvZiBkYXRlcyBpbiByYW5nZSBtb2RlLlxuICAgICAqIEhhbmRsZXMgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgYW5kIHVwZGF0ZXMgdGhlIHNlbGVjdGVkIHJhbmdlLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0byBiZSBzZWxlY3RlZCBvciB1cGRhdGVkIGluIHRoZSByYW5nZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RSYW5nZURhdGUoZGF5OiBDYWxlbmRhckRheTxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMCB8fCB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGRheS5kYXRlLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9zZWxlY3RDb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHRoaXMuX2dldE9yZGVyZWRSYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0ISwgZGF5LmRhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkUmFuZ2VEYXlzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCB0aGlzLl9jYWxlbmRhckRheUxpc3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RzIG9yIHVwZGF0ZXMgbXVsdGlwbGUgcmFuZ2VzIG9mIGRhdGVzIGluIHJhbmdlIG1vZGUuXG4gICAgICogSGFuZGxlcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2VzLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0byBiZSBzZWxlY3RlZCBvciB1cGRhdGVkIGluIHRoZSByYW5nZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RNdWx0aXBsZVJhbmdlRGF0ZXMoZGF5OiBDYWxlbmRhckRheTxEPik6IHZvaWQge1xuICAgICAgICBsZXQgdGVtcFJhbmdlcyA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzPy5maWx0ZXIoKHJhbmdlKSA9PiByYW5nZS5zdGFydCB8fCByYW5nZS5lbmQpIHx8IFtdO1xuXG4gICAgICAgIC8vIEhhbmRsZXMgdGhlIGV4aXN0aW5nIHJhbmdlIGJ5IHVwZGF0aW5nIG9yIG1lcmdpbmcgaXQgd2l0aCB0aGUgbmV3IGRheSBzZWxlY3Rpb24uXG4gICAgICAgIHRlbXBSYW5nZXMgPSB0aGlzLl9oYW5kbGVFeGlzdGluZ1JhbmdlKHRlbXBSYW5nZXMsIGRheSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdE11bHRpcGxlQ291bnRlciAlIDIgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFN0YXJ0IGEgbmV3IHJhbmdlXG4gICAgICAgICAgICB0aGlzLl9uZXdSYW5nZSA9IHsgc3RhcnQ6IGRheS5kYXRlLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXZlcnNlIHNlbGVjdGlvblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX25ld1JhbmdlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbmV3UmFuZ2Uuc3RhcnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fbmV3UmFuZ2Uuc3RhcnQsIGRheS5kYXRlKSA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25ld1JhbmdlID0geyBzdGFydDogZGF5LmRhdGUsIGVuZDogdGhpcy5fbmV3UmFuZ2Uuc3RhcnQgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbmV3UmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXdSYW5nZS5lbmQgPSBkYXkuZGF0ZSBhcyBEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX25ld1JhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlcy5wdXNoKHRoaXMuX25ld1JhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX25ld1JhbmdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlbXBSYW5nZXMgPSB0aGlzLl9tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKHRlbXBSYW5nZXMpO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gdGVtcFJhbmdlcztcblxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgcmFuZ2VzIGhhdmUgYm90aCBzdGFydCBhbmQgZW5kIGRhdGVzIGZpbGxlZFxuICAgICAgICBjb25zdCBhbGxSYW5nZXNDb21wbGV0ZSA9IHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmV2ZXJ5KChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kKTtcblxuICAgICAgICBpZiAoYWxsUmFuZ2VzQ29tcGxldGUgJiYgdGVtcFJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciB2aWV3XG4gICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkTXVsdGlwbGVSYW5nZURheXModGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMsIHRoaXMuX2NhbGVuZGFyRGF5TGlzdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIG92ZXJsYXBwaW5nIGRhdGUgcmFuZ2VzIGludG8gYSBzaW5nbGUgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmFuZ2VzIC0gQW4gYXJyYXkgb2YgZGF0ZSByYW5nZXMgdG8gYmUgbWVyZ2VkLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG1lcmdlZCBkYXRlIHJhbmdlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKHJhbmdlczogQXJyYXk8RGF0ZVJhbmdlPEQ+Pik6IEFycmF5PERhdGVSYW5nZTxEPj4ge1xuICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmFuZ2VzLnNvcnQoKGEsIGIpID0+IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShhLnN0YXJ0ISwgYi5zdGFydCEpKTtcblxuICAgICAgICBjb25zdCBtZXJnZWRSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSYW5nZSA9IHJhbmdlc1swXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFJhbmdlID0gcmFuZ2VzW2ldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGN1cnJlbnRSYW5nZS5lbmQhLCBuZXh0UmFuZ2Uuc3RhcnQhKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogY3VycmVudFJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoY3VycmVudFJhbmdlLmVuZCEsIG5leHRSYW5nZS5lbmQhKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50UmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXh0UmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmFuZ2VzLnB1c2goY3VycmVudFJhbmdlKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBuZXh0UmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZWRSYW5nZXMucHVzaChjdXJyZW50UmFuZ2UpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkUmFuZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHNlbGVjdGVkIGRheSBpcyBwYXJ0IG9mIGFuIGV4aXN0aW5nIHJhbmdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRlbXBSYW5nZXMgLSBBbiBhcnJheSBvZiBkYXRlIHJhbmdlcyB0byBiZSBjaGVja2VkLlxuICAgICAqIEBwYXJhbSBkYXkgLSBUaGUgY2FsZW5kYXIgZGF5IHRvIGJlIGNoZWNrZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0ZSByYW5nZXMgd2l0aCB0aGUgdXBkYXRlZCByYW5nZSBpZiB0aGUgc2VsZWN0ZWQgZGF5IGlzIHBhcnQgb2YgYW4gZXhpc3RpbmcgcmFuZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlRXhpc3RpbmdSYW5nZSh0ZW1wUmFuZ2VzOiBEYXRlUmFuZ2U8RD5bXSwgZGF5OiBDYWxlbmRhckRheTxEPik6IERhdGVSYW5nZTxEPltdIHtcbiAgICAgICAgaWYgKHRlbXBSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSYW5nZUluZGV4ID0gdGVtcFJhbmdlcy5maW5kSW5kZXgoKHJhbmdlKSA9PiB0aGlzLl9pc0RhdGVJblJhbmdlKGRheS5kYXRlLCByYW5nZSkpO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSYW5nZSA9IHRlbXBSYW5nZXNbZXhpc3RpbmdSYW5nZUluZGV4XTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nUmFuZ2VJbmRleCAhPT0gLTEgJiYgZXhpc3RpbmdSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICB0ZW1wUmFuZ2VzLnNwbGljZShleGlzdGluZ1JhbmdlSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wUmFuZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVja3MgaWYgYSBkYXRlIGlzIHdpdGhpbiBhIGdpdmVuIGRhdGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHJhbmdlIFRoZSBkYXRlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGUgaXMgaW4gdGhlIHJhbmdlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlSW5SYW5nZShkYXRlOiBELCByYW5nZTogRGF0ZVJhbmdlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNCZXR3ZWVuKGRhdGUsIHJhbmdlLnN0YXJ0ISwgcmFuZ2UuZW5kISk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9yZGVycyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBmb3IgdGhlIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBFbnN1cmVzIHRoZSBzdGFydCBkYXRlIGlzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUxIFRoZSBmaXJzdCBkYXRlLlxuICAgICAqIEBwYXJhbSBkYXRlMiBUaGUgc2Vjb25kIGRhdGUuXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgc3RhcnQgYW5kIGVuZCBkYXRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRPcmRlcmVkUmFuZ2UoZGF0ZTE6IEQsIGRhdGUyOiBEKTogeyBzdGFydDogRDsgZW5kOiBEIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikgPCAwXG4gICAgICAgICAgICA/IHsgc3RhcnQ6IGRhdGUxLCBlbmQ6IGRhdGUyIH1cbiAgICAgICAgICAgIDogeyBzdGFydDogZGF0ZTIsIGVuZDogZGF0ZTEgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyB0aGUgaG92ZXIgZWZmZWN0IGZvciByYW5nZSBzZWxlY3Rpb24uXG4gICAgICogVG9nZ2xlcyB0aGUgaG92ZXIgZWZmZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gc3RhdGUgYW5kIGV2ZW50LlxuICAgICAqIEBwYXJhbSBldmVudCBPcHRpb25hbCBtb3VzZSBldmVudCBmb3IgaGFuZGxpbmcgaG92ZXIgZWZmZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVJhbmdlSG92ZXJFZmZlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmNhbFR5cGUoKSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5SYW5nZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VIb3ZlckVmZmVjdCgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0TXVsdGlwbGVDb3VudGVyID09PSAxICYmXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzT25SYW5nZVBpY2sgPSAhdGhpcy5faXNPblJhbmdlUGljaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuY2FsVHlwZSgpID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZUhvdmVyRWZmZWN0KCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAxICYmXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzT25SYW5nZVBpY2sgPSAhdGhpcy5faXNPblJhbmdlUGljaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIG1ldGhvZCB0byB0b2dnbGUgdGhlIHNlbGVjdGlvbiBvZiBhIHdlZWsuXG4gICAgICogQHBhcmFtIHNlbGVjdGVkV2VlayBBcnJheSBvZiBDYWxlbmRhckRheSBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgdG9nZ2xlV2Vla1NlbGVjdGlvbihzZWxlY3RlZFdlZWs6IEFycmF5PENhbGVuZGFyRGF5PEQ+Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlRGF5cyA9IHNlbGVjdGVkV2Vlay5maWx0ZXIoKGRheSkgPT4gIWRheS5kaXNhYmxlZCk7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFdlZWtTZWxlY3RlZCA9IHNlbGVjdGFibGVEYXlzLmV2ZXJ5KChkYXkpID0+IGRheS5zZWxlY3RlZCk7XG5cbiAgICAgICAgaWYgKCFpc0N1cnJlbnRXZWVrU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkV2Vlay5mb3JFYWNoKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRheS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBkYXkuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcy5zb21lKChzZWxlY3RlZERhdGUpID0+IHRoaXMuX2lzU2FtZURheShzZWxlY3RlZERhdGUsIGRheS5kYXRlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTXVsdGlwbGVEYXRlcy5wdXNoKGRheS5kYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRXZWVrLmZvckVhY2goKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGF5LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkRGF0ZSkgPT4gIXRoaXMuX2lzU2FtZURheShzZWxlY3RlZERhdGUsIGRheS5kYXRlKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb21wdXRlcyB0aGUgQ1NTIGNsYXNzIGZvciBlYWNoIHdlZWsgZGF5IGluIGNhbGVuZGFyIGhlYWRlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBjYWxlbmRhciB0eXBlIGlzICdtdWx0aSdcbiAgICAgKiBhbmQgdGhlIGRhdGUgaXMgbm90IGRpc2FibGVkLlxuICAgICAqIFN0b3JlcyB0aGUgY29tcHV0ZWQgY2xhc3NlcyBpbiB0aGUgd2Vla0hlYWRlckNsYXNzZXMgYXJyYXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29tcHV0ZVdlZWtIZWFkZXJDbGFzc2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl93ZWVrSGVhZGVyQ2xhc3NlcyA9IHRoaXMuX2NhbGVuZGFyRGF5TGlzdC5tYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FsVHlwZSgpICE9PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlICYmIHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbigpISAmJiB0aGlzLmRpc2FibGVGdW5jdGlvbigpIVxuICAgICAgICAgICAgICAgID8gJ2V2ZW50LWVuYWJsZWQnXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGhvdmVyIGVmZmVjdCBmb3Igc2luZ2xlLXJhbmdlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlUmFuZ2VIb3ZlcihkYXk6IENhbGVuZGFyRGF5PEQ+KTogdm9pZCB7XG4gICAgICAgIC8vIEhhbmRsZSBzaW5nbGUgcmFuZ2UgaG92ZXJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlPy5zdGFydDtcbiAgICAgICAgaWYgKHRoaXMuX2lzT25SYW5nZVBpY2sgJiYgc3RhcnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF5LmRhdGUsIHN0YXJ0KSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckRheUxpc3QuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgZGF5LmRhdGUpID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgc3RhcnQpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZvckVhY2goKF9kYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgX2RheS5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfZGF5LmRhdGUsIGRheS5kYXRlKSA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfZGF5LmRhdGUsIHN0YXJ0KSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBob3ZlciBlZmZlY3QgZm9yIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqIEBwYXJhbSBkYXkgVGhlIGNhbGVuZGFyIGRheSB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlSYW5nZUhvdmVyKGRheTogQ2FsZW5kYXJEYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFydCBkYXRlIGZyb20gdGhlIG1vc3QgcmVjZW50IHJhbmdlIHdpdGggYSBudWxsIGVuZCBkYXRlXG4gICAgICAgIGxldCBzdGFydERhdGU6IEQgfCBudWxsIHwgYW55ID0gdGhpcy5fbmV3UmFuZ2U/LnN0YXJ0O1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgbW9zdCByZWNlbnQgcmFuZ2Ugd2l0aCBhbiBlbmQgZGF0ZSBvZiBudWxsXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVSYW5nZXMgPSB0aGlzLl9zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcy5maWx0ZXIoKHJhbmdlKSA9PiByYW5nZS5lbmQgPT09IG51bGwpO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJhbmdlID0gYWN0aXZlUmFuZ2VzW2FjdGl2ZVJhbmdlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBtb3N0UmVjZW50UmFuZ2Uuc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBzdGFydERhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF5LmRhdGUsIHN0YXJ0RGF0ZSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gSG92ZXJpbmcgYmFja3dhcmRzIGZyb20gdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIHNlbGVjdGVkIGRhdGVcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckRheUxpc3QuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgZGF5LmRhdGUpID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgc3RhcnREYXRlKSA8IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhvdmVyaW5nIGZvcndhcmRzIGZyb20gdGhlIHN0YXJ0IGRhdGUgdG8gdGhlIHNlbGVjdGVkIGRhdGVcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhckRheUxpc3QuZm9yRWFjaCgoX2RheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgZGF5LmRhdGUpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9kYXkuZGF0ZSwgc3RhcnREYXRlKSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBzdGFydCBkYXRlLCBjbGVhciBob3ZlclxuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJEYXlMaXN0LmZvckVhY2goKF9kYXkpID0+IHtcbiAgICAgICAgICAgICAgICBfZGF5LmhvdmVyUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHRhYmxlXG4gICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudCBmZC1jYWxlbmRhcl9fY29udGVudC0tZGF0ZXNcIlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZUNhbGVuZGFyLmNhbGVuZGFyRGF5Vmlld0Rlc2NyaXB0aW9uJyB8IGZkVHJhbnNsYXRlXCJcbj5cbiAgICA8dGhlYWQgY2xhc3M9XCJmZC1jYWxlbmRhcl9fZ3JvdXBcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICAgICAgICAgIEBpZiAoc2hvd1dlZWtOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbSBmZC1jYWxlbmRhcl9faXRlbS0tc2lkZS1oZWxwZXJcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiX3dlZWtOdW1iZXJzQ29sdW1uSGVhZGVySWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidjb3JlQ2FsZW5kYXIud2Vla0NvbHVtbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICA+PC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKGRheSBvZiBzaG9ydFdlZWtEYXlzOyB0cmFjayBkYXkgKyAnJyArIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW0gZmQtY2FsZW5kYXJfX2l0ZW0tLXNpZGUtaGVscGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiX3dlZWtIZWFkZXJDbGFzc2VzW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9uZ1dlZWtEYXlzW2ldXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVdlZWtTZWxlY3Rpb25CeUluZGV4KGkpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0XCI+e3sgZGF5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIEBmb3IgKHJvdyBvZiBfZGF5Vmlld0dyaWQ7IHRyYWNrIHJvdyArICcnICsgcm93SW5kZXg7IGxldCByb3dJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZmQtY2FsZW5kYXJfX3Jvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dXZWVrTnVtYmVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbSBmZC1jYWxlbmRhcl9faXRlbS0tc2lkZS1oZWxwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZXZlbnQtZW5hYmxlZCc6IGFsbG93TXVsdGlwbGVTZWxlY3Rpb24oKSAmJiBjYWxUeXBlKCkgIT09ICdyYW5nZScgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicm93aGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXItd2Vla109XCJfd2Vla3Nbcm93SW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInZpZXdJZCArICctd2Vlay0nICsgX3dlZWtzW3Jvd0luZGV4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dlZWtOdW1iZXJzQ29sdW1uSGVhZGVySWQgKyAnICcgKyAodmlld0lkICsgJy13ZWVrLScgKyBfd2Vla3Nbcm93SW5kZXhdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVXZWVrU2VsZWN0aW9uQnlEYXlzKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF93ZWVrcyAmJiBfd2Vla3Nbcm93SW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhbGVuZGFyX190ZXh0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX3dlZWtzW3Jvd0luZGV4XSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBmb3IgKGNlbGwgb2Ygcm93OyB0cmFjayBjZWxsICsgJycgKyBjZWxsSW5kZXg7IGxldCBjZWxsSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLXNlbGVjdGVkXT1cImNlbGwuc2VsZWN0ZWRGaXJzdCB8fCBjZWxsLnNlbGVjdGVkTGFzdCB8fCBjZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9faXRlbS0tcmFuZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGwuc2VsZWN0ZWRSYW5nZSB8fCBjZWxsLmhvdmVyUmFuZ2UpICYmICFjZWxsLnNlbGVjdGVkRmlyc3QgJiYgIWNlbGwuc2VsZWN0ZWRMYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19pdGVtLS10b2RheV09XCJjZWxsLmN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19pdGVtLS13ZWVrZW5kXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwud2Vla2VuZCAmJiBtYXJrV2Vla2VuZHMoKSAmJiBjZWxsLm1vbnRoU3RhdHVzID09PSAnY3VycmVudCdcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtY2FsZW5kYXJfX2l0ZW0tLW90aGVyXT1cImNlbGwubW9udGhTdGF0dXMgIT09ICdjdXJyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiY2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5zcGVjaWFsRGF5TnVtYmVyICYmICFjZWxsLnNob3VsZEhpZGVTcGVjaWFsRGF5TWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2ZkLWNhbGVuZGFyX19pdGVtLS1sZWdlbmQtJyArIGNlbGwuc3BlY2lhbERheU51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiY2VsbC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWZkLWNhbGVuZGFyLWRhdGUtZGF5XT1cImNlbGwubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci1kYXldPVwiY2VsbC5pbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJjZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImNlbGwuaXNUYWJJbmRleGVkID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXRlKGNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiX3JlZnJlc2hIb3ZlclJhbmdlKGNlbGwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25EYXlIYW5kbGVyKCRldmVudCwgY2VsbCwgX2dldEluZGV4KHJvd0luZGV4LCBjZWxsSW5kZXgpKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLnNlbGVjdGVkRmlyc3QgPyBfZGF0ZVJhbmdlU3RhcnRMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLnNlbGVjdGVkTGFzdCA/IF9kYXRlUmFuZ2VFbmRMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZWxsLnNlbGVjdGVkICYmIGNhbFR5cGUoKSA9PT0gJ3NpbmdsZScgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbC5wYXN0ID8gX2RhdGVJblBhc3RMYWJlbElkIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjZWxsLmxhYmVsIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJjZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjZWxsLmFyaWFMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChfZGF5Vmlld0dyaWQubGVuZ3RoIDw9IDUpIHtcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmZC1jYWxlbmRhcl9faXRlbSBoaWRkZW4tZGF5XCI+PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChfZGF5Vmlld0dyaWQubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2l0ZW0gaGlkZGVuLWRheVwiPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfZGF0ZVJhbmdlU3RhcnRMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci5yYW5nZVN0YXJ0TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8ZGl2IFthdHRyLmlkXT1cIl9kYXRlUmFuZ2VFbmRMYWJlbElkXCI+e3sgJ2NvcmVDYWxlbmRhci5yYW5nZUVuZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPGRpdiBbYXR0ci5pZF09XCJfZGF0ZUluUGFzdExhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRheUluUGFzdExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the month view of the calendar. */\nexport class CalendarMonthViewComponent {\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeFormats, _dateTimeAdapter) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeFormats = _dateTimeFormats;\n this._dateTimeAdapter = _dateTimeAdapter;\n /** An event fired when a new month is selected */\n this.monthClicked = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /**\n * Whether user wants to mark month cells on hover.\n * Works only on range mode, when start month is selected.\n */\n this.rangeHoverEffect = false;\n /**\n * @hidden\n * A number offset used to achieve the 1-12 representation of the calendar\n */\n this._monthOffset = 1;\n /** @hidden */\n this._amountOfColPerRow = 3;\n /** @hidden */\n this._amountOfRows = 4;\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n this._isOnRangePick = false;\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._constructMonthGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructMonthGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated && ('monthSelected' in changes || 'year' in changes || 'id' in changes)) {\n this._constructMonthGrid();\n }\n }\n /** Get a number (1-12) representing the current month */\n get currentMonth() {\n return this._dateTimeAdapter.getMonth(this._dateTimeAdapter.today());\n }\n /** Getter for the private class member _monthOffset */\n get monthOffset() {\n return this._monthOffset;\n }\n /** View ID */\n get viewId() {\n return this.id + '-month-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarMonthListGrid) {\n this._changeSelectedRangeMonths(dateRange, this._getMonthList());\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /**\n * @hidden\n * Amount of selected months\n * 0, when there is no month selected, or start month is invalid,\n * 1, when there is only valid start month, or end month is same as start month,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /**\n * @hidden\n * Method for handling the keyboard events (a11y)\n */\n _onKeydownMonthHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Method returning id of month cell\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * @param index month grid cell index\n */\n _getId(index) {\n return this.viewId + '-month-' + index;\n }\n /**\n * @hidden\n * Method that checks if this is current month\n */\n _isCurrent(id) {\n return id + this._monthOffset === this.currentMonth;\n }\n /**\n * @hidden\n * Method that check if this is selected month\n */\n _isSelected(id) {\n return id + this._monthOffset === this.monthSelected;\n }\n /** Method for handling the mouse click event when a month is selected */\n selectMonth(monthCell, event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.monthSelected = monthCell.month;\n this.monthClicked.emit(this.monthSelected);\n // when date range start date is selected start the hover effect between the date range\n if (this.isDateRangeMonthYearFormat) {\n this._selectRangeDate(monthCell);\n this._handleRangeHoverEffect(event);\n }\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getMonthList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param month The calendar month that is hovered.\n */\n _handleRangeHover(month) {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(month.date, start) < 0) {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) > 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) < 0;\n });\n }\n else {\n this._getMonthList().forEach((_month) => {\n _month.hoverRange =\n this._dateTimeAdapter.compareDate(_month.date, month.date) < 0 &&\n this._dateTimeAdapter.compareDate(_month.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.isDateRangeMonthYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n /**\n * @hidden\n * Selects or updates the range of dates in range mode.\n * Handles the start and end dates and updates the selected range.\n * @param month The calendar month to be selected or updated in the range.\n */\n _selectRangeDate(month) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: month.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, month.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeMonths(this._selectedRangeDate, this._getMonthList());\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Change properties of range months, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected months.\n */\n _changeSelectedRangeMonths(dates, calendar) {\n /** Pull list of calendar month */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_month) => (_month.selectedFirst =\n _month.selectedLast =\n _month.selected =\n _month.disabled =\n _month.hoverRange =\n _month.selectedRange =\n false));\n if (dates) {\n let startMonth;\n let endMonth;\n if (dates.start) {\n /** Find start month and mark it as selected */\n startMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.start));\n if (startMonth) {\n startMonth.selected = true;\n startMonth.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end month and mark it as selected */\n endMonth = calendarList.find((_month) => this._isSameDate(_month.date, dates.end));\n if (endMonth) {\n endMonth.selected = true;\n endMonth.selectedLast = true;\n }\n }\n /** Verify if start month and end month is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all months, which are between start and end date */\n calendarList\n .filter((_month) => (_month.selectedRange = this._dateTimeAdapter.isBetween(_month.date, dates.start, dates.end)))\n .forEach((_month) => (_month.selectedRange = true));\n }\n }\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDate(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Method that create month grid with required meta data\n */\n _constructMonthGrid() {\n const monthNames = this.isDateRangeMonthYearFormat\n ? this._dateTimeAdapter.getMonthNames('long')\n : this._dateTimeAdapter.getMonthNames('short');\n const monthList = monthNames.map((monthName, index) => {\n const month = index + this.monthOffset;\n return {\n date: this._dateTimeAdapter.createDate(this.year, month),\n month,\n label: monthName,\n ariaLabel: this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(this.year, month, 1), this._dateTimeFormats.display.monthA11yLabel),\n index,\n selected: month === this.monthSelected,\n current: month === this.currentMonth,\n tabIndex: month === this.monthSelected ? 0 : -1\n };\n });\n // if the date range is selected\n if (this.isDateRangeMonthYearFormat) {\n this._changeSelectedRangeMonths(this._selectedRangeDate, monthList);\n }\n this._calendarMonthListGrid = [];\n /** Creating 2d grid */\n while (monthList.length) {\n this._calendarMonthListGrid.push(monthList.splice(0, this._amountOfColPerRow));\n }\n this._calendarMonthListGrid.forEach((row, rowIndex) => {\n row.forEach((monthCell, colIndex) => {\n monthCell.id = this._getId(this._getIndex(rowIndex, colIndex));\n });\n });\n this._changeDetectorRef.markForCheck();\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.rowAmount = this._amountOfRows;\n this._calendarService.colAmount = this._amountOfColPerRow;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getMonthList()[index]);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(({ index, event }) => this.selectMonth(this._getMonthList()[index], event));\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d month grid.\n */\n _getMonthList() {\n return [].concat(...this._calendarMonthListGrid);\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarMonthViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: DATE_TIME_FORMATS }, { token: i2.DatetimeAdapter }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarMonthViewComponent, isStandalone: true, selector: \"fd-calendar-month-view\", inputs: { id: \"id\", monthSelected: \"monthSelected\", focusEscapeFunction: \"focusEscapeFunction\", year: \"year\", isDateRangeMonthYearFormat: \"isDateRangeMonthYearFormat\", rangeHoverEffect: \"rangeHoverEffect\", selectedRangeDate: \"selectedRangeDate\" }, outputs: { monthClicked: \"monthClicked\", selectedRangeDateChange: \"selectedRangeDateChange\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--months\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"monthCell.current\\\"\\n [class.is-active]=\\\"monthCell.selected\\\"\\n [attr.tabIndex]=\\\"monthCell.tabIndex\\\"\\n [attr.id]=\\\"monthCell.id\\\"\\n [attr.aria-selected]=\\\"monthCell.selected\\\"\\n [attr.aria-disabled]=\\\"monthCell.disabled\\\"\\n [attr.data-fd-calendar-month]=\\\"monthCell.month\\\"\\n (keydown)=\\\"_onKeydownMonthHandler($event, monthCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(monthCell)\\\"\\n (click)=\\\"selectMonth(monthCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n monthCell.selectedRange ||\\n monthCell.hoverRange ||\\n monthCell.selectedFirst ||\\n monthCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"monthCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n monthCell.id +\\n '-aria-label ' +\\n (monthCell.current ? _todayLabelId + ' ' : '') +\\n (monthCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ monthCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"monthCell.id + '-aria-label'\\\">\\n {{ monthCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-month-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--months\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarMonthViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colMonths of _calendarMonthListGrid; track colMonths + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (monthCell of colMonths; track monthCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"monthCell.current\\\"\\n [class.is-active]=\\\"monthCell.selected\\\"\\n [attr.tabIndex]=\\\"monthCell.tabIndex\\\"\\n [attr.id]=\\\"monthCell.id\\\"\\n [attr.aria-selected]=\\\"monthCell.selected\\\"\\n [attr.aria-disabled]=\\\"monthCell.disabled\\\"\\n [attr.data-fd-calendar-month]=\\\"monthCell.month\\\"\\n (keydown)=\\\"_onKeydownMonthHandler($event, monthCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(monthCell)\\\"\\n (click)=\\\"selectMonth(monthCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n monthCell.selectedRange ||\\n monthCell.hoverRange ||\\n monthCell.selectedFirst ||\\n monthCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"monthCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n monthCell.id +\\n '-aria-label ' +\\n (monthCell.current ? _todayLabelId + ' ' : '') +\\n (monthCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ monthCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"monthCell.id + '-aria-label'\\\">\\n {{ monthCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.DatetimeAdapter }], propDecorators: { id: [{\n type: Input\n }], monthSelected: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], year: [{\n type: Input\n }], isDateRangeMonthYearFormat: [{\n type: Input\n }], monthClicked: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], rangeHoverEffect: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvY2FsZW5kYXItdmlld3MvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQThDLE1BQU0scUJBQXFCLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBRXBELDZEQUE2RDtBQVk3RCxNQUFNLE9BQU8sMEJBQTBCO0lBaUVuQyxjQUFjO0lBQ2QsWUFDWSxLQUFpQixFQUNqQixrQkFBcUMsRUFDckMsZ0JBQWlDLEVBQ04sZ0JBQWlD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Qiw2ZUN4Q3ZDLGlxR0E4REEsMEREeEJjLGVBQWUsMElBQUUsZUFBZTs7MkZBRWpDLDBCQUEwQjtrQkFYdEMsU0FBUzsrQkFDSSx3QkFBd0IsaUJBR25CLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0YsV0FBVyxFQUFFLFFBQVE7cUJBQ3hCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQzs7MEJBd0V0QyxNQUFNOzJCQUFDLGlCQUFpQjt1RUFuRTdCLEVBQUU7c0JBREQsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBS0csWUFBWTtzQkFEcEIsTUFBTTtnQkFLRSx1QkFBdUI7c0JBRC9CLE1BQU07Z0JBUVAsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBNkZGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZVRpbWVGb3JtYXRzLCBEYXRldGltZUFkYXB0ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aCB9IGZyb20gJy4uLy4uL21vZGVscy9jYWxlbmRhci1tb250aCc7XG5pbXBvcnQgeyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3ksIEVzY2FwZUZvY3VzRnVuY3Rpb24sIEZvY3VzYWJsZUNhbGVuZGFyVmlldyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGUtcmFuZ2UnO1xuXG4vKiogQ29tcG9uZW50IHJlcHJlc2VudGluZyB0aGUgbW9udGggdmlldyBvZiB0aGUgY2FsZW5kYXIuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyLW1vbnRoLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5pZF0nOiAndmlld0lkJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW0J1dHRvbkNvbXBvbmVudCwgRmRUcmFuc2xhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1vbnRoVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEEgbnVtYmVyICgxLTEyKSByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIG1vbnRoICovXG4gICAgQElucHV0KClcbiAgICBtb250aFNlbGVjdGVkOiBudW1iZXI7XG5cbiAgICAvKiogQSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZXNjYXBlIGZvY3VzICovXG4gICAgQElucHV0KClcbiAgICBmb2N1c0VzY2FwZUZ1bmN0aW9uOiBFc2NhcGVGb2N1c0Z1bmN0aW9uO1xuXG4gICAgLyoqIEEgeWVhciB0aGUgbW9udGggdmlldyBpcyByZWZlcnJpbmcgdG8gKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXI6IG51bWJlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHBpY2sgdGhlIGRhdGUgcmFuZ2UgaW4gbW9udGggeWVhciBmb3JtYXQgd2l0aG91dCBwaWNraW5nIGRheXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0OiBib29sZWFuO1xuXG4gICAgLyoqIEFuIGV2ZW50IGZpcmVkIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBtb250aENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIHJhbmdlIG1vZGUgaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPEQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgbW9udGggY2VsbHMgb24gaG92ZXIuXG4gICAgICogV29ya3Mgb25seSBvbiByYW5nZSBtb2RlLCB3aGVuIHN0YXJ0IG1vbnRoIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1vbnRoIGdyaWQgdGFibGVcbiAgICAgKi9cbiAgICBfY2FsZW5kYXJNb250aExpc3RHcmlkOiBDYWxlbmRhck1vbnRoPEQ+W11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBIG51bWJlciBvZmZzZXQgdXNlZCB0byBhY2hpZXZlIHRoZSAxLTEyIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWxlbmRhclxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vbnRoT2Zmc2V0OiBudW1iZXIgPSAxO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYW1vdW50T2ZDb2xQZXJSb3c6IG51bWJlciA9IDM7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hbW91bnRPZlJvd3M6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFuZ2VEYXRlOiBEYXRlUmFuZ2U8RD47XG5cbiAgICBwcml2YXRlIF9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKSBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD5cbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWF0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdE1vbnRoR3JpZCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faW5pdGlhdGVkICYmICgnbW9udGhTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAneWVhcicgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RNb250aEdyaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBHZXQgYSBudW1iZXIgKDEtMTIpIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBtb250aCAgKi9cbiAgICBnZXQgY3VycmVudE1vbnRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH1cblxuICAgIC8qKiAgR2V0dGVyIGZvciB0aGUgcHJpdmF0ZSBjbGFzcyBtZW1iZXIgX21vbnRoT2Zmc2V0ICovXG4gICAgZ2V0IG1vbnRoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aE9mZnNldDtcbiAgICB9XG5cbiAgICAvKiogVmlldyBJRCAqL1xuICAgIGdldCB2aWV3SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQgKyAnLW1vbnRoLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBGZERhdGVzIG1vZGVsIHN0YXJ0IGFuZCBlbmQgaW4gcmFuZ2UgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZFJhbmdlRGF0ZShkYXRlUmFuZ2U6IERhdGVSYW5nZTxEPikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRlUmFuZ2UgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUoZGF0ZVJhbmdlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KSAmJlxuICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF0ZShkYXRlUmFuZ2UuZW5kLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUgPSBkYXRlUmFuZ2U7XG4gICAgICAgIGlmICh0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkUmFuZ2VNb250aHMoZGF0ZVJhbmdlLCB0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRSYW5nZURhdGUoKTogRGF0ZVJhbmdlPEQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiAgQW1vdW50IG9mIHNlbGVjdGVkIG1vbnRoc1xuICAgICAqICAwLCB3aGVuIHRoZXJlIGlzIG5vIG1vbnRoIHNlbGVjdGVkLCBvciBzdGFydCBtb250aCBpcyBpbnZhbGlkLFxuICAgICAqICAxLCB3aGVuIHRoZXJlIGlzIG9ubHkgdmFsaWQgc3RhcnQgbW9udGgsIG9yIGVuZCBtb250aCBpcyBzYW1lIGFzIHN0YXJ0IG1vbnRoLFxuICAgICAqICAyLCB3aGVuIGJvdGggZGF0ZXMgYXJlIHZhbGlkXG4gICAgICovXG4gICAgZ2V0IF9zZWxlY3RDb3VudGVyKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSB8fCAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQgJiZcbiAgICAgICAgICAgICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5faXNTYW1lRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0LCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBldmVudHMgKGExMXkpXG4gICAgICovXG4gICAgX29uS2V5ZG93bk1vbnRoSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgcmV0dXJuaW5nIGlkIG9mIG1vbnRoIGNlbGxcbiAgICAgKi9cbiAgICBfZ2V0SW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZ2V0SWQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHBhcmFtIGluZGV4IG1vbnRoIGdyaWQgY2VsbCBpbmRleFxuICAgICAqL1xuICAgIF9nZXRJZChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1tb250aC0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGlzIGlzIGN1cnJlbnQgbW9udGhcbiAgICAgKi9cbiAgICBfaXNDdXJyZW50KGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkICsgdGhpcy5fbW9udGhPZmZzZXQgPT09IHRoaXMuY3VycmVudE1vbnRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBjaGVjayBpZiB0aGlzIGlzIHNlbGVjdGVkIG1vbnRoXG4gICAgICovXG4gICAgX2lzU2VsZWN0ZWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWQgKyB0aGlzLl9tb250aE9mZnNldCA9PT0gdGhpcy5tb250aFNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBtb3VzZSBjbGljayBldmVudCB3aGVuIGEgbW9udGggaXMgc2VsZWN0ZWQgICovXG4gICAgc2VsZWN0TW9udGgobW9udGhDZWxsOiBDYWxlbmRhck1vbnRoPEQ+LCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZCA9IG1vbnRoQ2VsbC5tb250aDtcbiAgICAgICAgdGhpcy5tb250aENsaWNrZWQuZW1pdCh0aGlzLm1vbnRoU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHdoZW4gZGF0ZSByYW5nZSBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIHN0YXJ0IHRoZSBob3ZlciBlZmZlY3QgYmV0d2VlbiB0aGUgZGF0ZSByYW5nZVxuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VEYXRlKG1vbnRoQ2VsbCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSYW5nZUhvdmVyRWZmZWN0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBmb2N1cyBvbiBtb250aCBjZWxsLlxuICAgICAqIEl0IGNhbiBiZSBhIHNlbGVjdGVkIGNlbGwsIGN1cnJlbnQgbW9udGggY2VsbCBvciBmaXJzdCBjZWxsIGluIHRoZSBsaXN0XG4gICAgICovXG4gICAgc2V0Rm9jdXNPbkNlbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0gbmV3IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSgpLmdldEFjdGl2ZUNlbGwodGhpcy5fZ2V0TW9udGhMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGhvdmVyIGVmZmVjdCBmb3IgcmFuZ2Ugc2VsZWN0aW9uIG1vZGUuXG4gICAgICogQHBhcmFtIG1vbnRoIFRoZSBjYWxlbmRhciBtb250aCB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgX2hhbmRsZVJhbmdlSG92ZXIobW9udGg6IENhbGVuZGFyTW9udGg8RD4pOiB2b2lkIHtcbiAgICAgICAgLy8gSGFuZGxlIHJhbmdlIGhvdmVyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZT8uc3RhcnQ7XG4gICAgICAgIGlmICh0aGlzLl9pc09uUmFuZ2VQaWNrICYmIHN0YXJ0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKG1vbnRoLmRhdGUsIHN0YXJ0KSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRNb250aExpc3QoKS5mb3JFYWNoKChfbW9udGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF9tb250aC5kYXRlLCBtb250aC5kYXRlKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfbW9udGguZGF0ZSwgc3RhcnQpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0TW9udGhMaXN0KCkuZm9yRWFjaCgoX21vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF9tb250aC5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfbW9udGguZGF0ZSwgbW9udGguZGF0ZSkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX21vbnRoLmRhdGUsIHN0YXJ0KSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyB0aGUgaG92ZXIgZWZmZWN0IGZvciByYW5nZSBzZWxlY3Rpb24uXG4gICAgICogVG9nZ2xlcyB0aGUgaG92ZXIgZWZmZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gc3RhdGUgYW5kIGV2ZW50LlxuICAgICAqIEBwYXJhbSBldmVudCBPcHRpb25hbCBtb3VzZSBldmVudCBmb3IgaGFuZGxpbmcgaG92ZXIgZWZmZWN0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVJhbmdlSG92ZXJFZmZlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdCAmJiB0aGlzLnJhbmdlSG92ZXJFZmZlY3QgJiYgdGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSAmJiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdHMgb3IgdXBkYXRlcyB0aGUgcmFuZ2Ugb2YgZGF0ZXMgaW4gcmFuZ2UgbW9kZS5cbiAgICAgKiBIYW5kbGVzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGFuZCB1cGRhdGVzIHRoZSBzZWxlY3RlZCByYW5nZS5cbiAgICAgKiBAcGFyYW0gbW9udGggVGhlIGNhbGVuZGFyIG1vbnRoIHRvIGJlIHNlbGVjdGVkIG9yIHVwZGF0ZWQgaW4gdGhlIHJhbmdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFJhbmdlRGF0ZShtb250aDogQ2FsZW5kYXJNb250aDxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMCB8fCB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IG1vbnRoLmRhdGUsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NlbGVjdENvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0gdGhpcy5fZ2V0T3JkZXJlZFJhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQhLCBtb250aC5kYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFJhbmdlTW9udGhzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCB0aGlzLl9nZXRNb250aExpc3QoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9yZGVycyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBmb3IgdGhlIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBFbnN1cmVzIHRoZSBzdGFydCBkYXRlIGlzIGJlZm9yZSBvciBlcXVhbCB0byB0aGUgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUxIFRoZSBmaXJzdCBkYXRlLlxuICAgICAqIEBwYXJhbSBkYXRlMiBUaGUgc2Vjb25kIGRhdGUuXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgc3RhcnQgYW5kIGVuZCBkYXRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRPcmRlcmVkUmFuZ2UoZGF0ZTE6IEQsIGRhdGUyOiBEKTogeyBzdGFydDogRDsgZW5kOiBEIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKGRhdGUxLCBkYXRlMikgPCAwXG4gICAgICAgICAgICA/IHsgc3RhcnQ6IGRhdGUxLCBlbmQ6IGRhdGUyIH1cbiAgICAgICAgICAgIDogeyBzdGFydDogZGF0ZTIsIGVuZDogZGF0ZTEgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hhbmdlIHByb3BlcnRpZXMgb2YgcmFuZ2UgbW9udGhzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHRvIG5vdCByZWJ1aWxkIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLFxuICAgICAqIGl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgbW9udGhzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoYW5nZVNlbGVjdGVkUmFuZ2VNb250aHMoZGF0ZXM6IERhdGVSYW5nZTxEPiwgY2FsZW5kYXI6IENhbGVuZGFyTW9udGg8RD5bXSk6IHZvaWQge1xuICAgICAgICAvKiogUHVsbCBsaXN0IG9mIGNhbGVuZGFyIG1vbnRoICovXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTGlzdCA9IGNhbGVuZGFyO1xuXG4gICAgICAgIC8qKiBSZXNldCBjaGFuZ2luZyBwcm9wZXJ0aWVzICovXG4gICAgICAgIGNhbGVuZGFyTGlzdC5mb3JFYWNoKFxuICAgICAgICAgICAgKF9tb250aCkgPT5cbiAgICAgICAgICAgICAgICAoX21vbnRoLnNlbGVjdGVkRmlyc3QgPVxuICAgICAgICAgICAgICAgICAgICBfbW9udGguc2VsZWN0ZWRMYXN0ID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgX21vbnRoLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICBfbW9udGguc2VsZWN0ZWRSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGF0ZXMpIHtcbiAgICAgICAgICAgIGxldCBzdGFydE1vbnRoOiBDYWxlbmRhck1vbnRoPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGVuZE1vbnRoOiBDYWxlbmRhck1vbnRoPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgc3RhcnQgbW9udGggYW5kIG1hcmsgaXQgYXMgc2VsZWN0ZWQgKi9cbiAgICAgICAgICAgICAgICBzdGFydE1vbnRoID0gY2FsZW5kYXJMaXN0LmZpbmQoKF9tb250aCkgPT4gdGhpcy5faXNTYW1lRGF0ZShfbW9udGguZGF0ZSwgZGF0ZXMuc3RhcnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRNb250aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE1vbnRoLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb250aC5zZWxlY3RlZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgZW5kIG1vbnRoIGFuZCBtYXJrIGl0IGFzIHNlbGVjdGVkICovXG4gICAgICAgICAgICAgICAgZW5kTW9udGggPSBjYWxlbmRhckxpc3QuZmluZCgoX21vbnRoKSA9PiB0aGlzLl9pc1NhbWVEYXRlKF9tb250aC5kYXRlLCBkYXRlcy5lbmQpKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kTW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9udGguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBlbmRNb250aC5zZWxlY3RlZExhc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqIFZlcmlmeSBpZiBzdGFydCBtb250aCBhbmQgZW5kIG1vbnRoIGlzIHZhbGlkLCBvdGhlcndpc2UgZG9uJ3QgcHV0IHJhbmdlIHNlbGVjdGlvbiAqL1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0ICYmIGRhdGVzLmVuZCkge1xuICAgICAgICAgICAgICAgIC8qKiBNYXJrIGFsbCBtb250aHMsIHdoaWNoIGFyZSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgZGF0ZSAqL1xuICAgICAgICAgICAgICAgIGNhbGVuZGFyTGlzdFxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKF9tb250aCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX21vbnRoLnNlbGVjdGVkUmFuZ2UgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNCZXR3ZWVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9udGguZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuc3RhcnQhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlcy5lbmQhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoX21vbnRoKSA9PiAoX21vbnRoLnNlbGVjdGVkUmFuZ2UgPSB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2sgaWYgZGF0ZXMgYXJlIGVxdWFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNTYW1lRGF0ZShkYXRlMTogTnVsbGFibGU8RD4sIGRhdGUyOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgY3JlYXRlIG1vbnRoIGdyaWQgd2l0aCByZXF1aXJlZCBtZXRhIGRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RNb250aEdyaWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5pc0RhdGVSYW5nZU1vbnRoWWVhckZvcm1hdFxuICAgICAgICAgICAgPyB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpXG4gICAgICAgICAgICA6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aE5hbWVzKCdzaG9ydCcpO1xuXG4gICAgICAgIGNvbnN0IG1vbnRoTGlzdDogQ2FsZW5kYXJNb250aDxEPltdID0gbW9udGhOYW1lcy5tYXAoKG1vbnRoTmFtZSwgaW5kZXgpOiBDYWxlbmRhck1vbnRoPEQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gaW5kZXggKyB0aGlzLm1vbnRoT2Zmc2V0O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLnllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICBsYWJlbDogbW9udGhOYW1lLFxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmZvcm1hdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy55ZWFyLCBtb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lRm9ybWF0cy5kaXNwbGF5Lm1vbnRoQTExeUxhYmVsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogbW9udGggPT09IHRoaXMubW9udGhTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiBtb250aCA9PT0gdGhpcy5jdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgdGFiSW5kZXg6IG1vbnRoID09PSB0aGlzLm1vbnRoU2VsZWN0ZWQgPyAwIDogLTFcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRlIHJhbmdlIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VTZWxlY3RlZFJhbmdlTW9udGhzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCBtb250aExpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJNb250aExpc3RHcmlkID0gW107XG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChtb250aExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQucHVzaChtb250aExpc3Quc3BsaWNlKDAsIHRoaXMuX2Ftb3VudE9mQ29sUGVyUm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgcm93LmZvckVhY2goKG1vbnRoQ2VsbCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBtb250aENlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRvIHB1dCBjb25maWd1cmF0aW9uIGFuZCBsaXN0ZW5lcnMgb24gY2FsZW5kYXIga2V5Ym9hcmQgc2VydmljZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldHVwS2V5Ym9hcmRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uucm93QW1vdW50ID0gdGhpcy5fYW1vdW50T2ZSb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY29sQW1vdW50ID0gdGhpcy5fYW1vdW50T2ZDb2xQZXJSb3c7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5mb2N1c0VzY2FwZUZ1bmN0aW9uID0gdGhpcy5mb2N1c0VzY2FwZUZ1bmN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkZvY3VzSWRDaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJhbmdlSG92ZXIodGhpcy5fZ2V0TW9udGhMaXN0KClbaW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCwgZXZlbnQgfSkgPT4gdGhpcy5zZWxlY3RNb250aCh0aGlzLl9nZXRNb250aExpc3QoKVtpbmRleF0sIGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgdHJhbnNmb3JtZWQgMWQgYXJyYXkgZnJvbSAyZCBtb250aCBncmlkLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE1vbnRoTGlzdCgpOiBDYWxlbmRhck1vbnRoPEQ+W10ge1xuICAgICAgICByZXR1cm4gKDxDYWxlbmRhck1vbnRoPEQ+W10+W10pLmNvbmNhdCguLi50aGlzLl9jYWxlbmRhck1vbnRoTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNFbGVtZW50QnlTZWxlY3RvcihgIyR7dGhpcy5fZ2V0SWQoaW5kZXgpfWApO1xuICAgIH1cbn1cbiIsIjx0YWJsZVxuICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX2NvbnRlbnQgZmQtY2FsZW5kYXJfX2NvbnRlbnQtLW1vbnRoc1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgIFthdHRyLmFyaWEtcm9sZWRlc2NyaXB0aW9uXT1cIidjb3JlQ2FsZW5kYXIuY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4+XG4gICAgPHRib2R5IGNsYXNzPVwiZmQtY2FsZW5kYXJfX2dyb3VwXCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIEBmb3IgKGNvbE1vbnRocyBvZiBfY2FsZW5kYXJNb250aExpc3RHcmlkOyB0cmFjayBjb2xNb250aHMgKyAnJyArIHJvd0luZGV4OyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImZkLWNhbGVuZGFyX19yb3dcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobW9udGhDZWxsIG9mIGNvbE1vbnRoczsgdHJhY2sgbW9udGhDZWxsICsgJycgKyBjb2xJbmRleDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbXktaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhbGVuZGFyX19teS1pdGVtLS1jdXJyZW50XT1cIm1vbnRoQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwibW9udGhDZWxsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYkluZGV4XT1cIm1vbnRoQ2VsbC50YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJtb250aENlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJtb250aENlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJtb250aENlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1mZC1jYWxlbmRhci1tb250aF09XCJtb250aENlbGwubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uS2V5ZG93bk1vbnRoSGFuZGxlcigkZXZlbnQsIG1vbnRoQ2VsbC5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiX2hhbmRsZVJhbmdlSG92ZXIobW9udGhDZWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGhDZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtYnV0dG9uLS10b2dnbGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuaG92ZXJSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRGaXJzdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aENlbGwuc2VsZWN0ZWRMYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNhbGVuZGFyX19teS1pdGVtLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWFjdGl2ZV09XCJtb250aENlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoQ2VsbC5pZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFyaWEtbGFiZWwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9udGhDZWxsLmN1cnJlbnQgPyBfdG9kYXlMYWJlbElkICsgJyAnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb250aENlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGhDZWxsLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBoaWRkZW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2F0dHIuaWRdPVwibW9udGhDZWxsLmlkICsgJy1hcmlhLWxhYmVsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, Inject, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { CalendarService } from '../../calendar.service';\nimport { DefaultCalendarActiveCellStrategy } from '../../models/common';\nimport { DateRange } from '../../models/date-range';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../calendar.service\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\n/** Component representing the YearView of the Calendar Component. */\nexport class CalendarYearViewComponent {\n /** View ID */\n get viewId() {\n return this.id + '-year-view';\n }\n /**\n * @hidden\n * Today cell label ID\n */\n get _todayLabelId() {\n return this.viewId + '-today-label';\n }\n /**\n * @hidden\n * Selected date label ID\n */\n get _selectedDateLabelId() {\n return this.viewId + '-selected-date-label';\n }\n /** @hidden */\n constructor(_eRef, _changeDetectorRef, _calendarService, _dateTimeAdapter, _dateTimeFormats) {\n this._eRef = _eRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._calendarService = _calendarService;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /**\n * Whether user wants to mark year cells on hover.\n * Works only on range mode, when start year is selected.\n */\n this.rangeHoverEffect = false;\n /** Event fired when a year is selected. */\n this.yearClicked = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /**\n * @hidden\n */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._initiated = false;\n /** @hidden */\n this._isOnRangePick = false;\n // default values\n this._currentYear = _dateTimeAdapter.getYear(_dateTimeAdapter.today());\n this._firstYearInList = this._currentYear;\n }\n /** @hidden */\n ngOnInit() {\n this._initiated = true;\n this._setupKeyboardService();\n this._firstYearInList = this.yearSelected;\n this._constructYearGrid();\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._constructYearGrid();\n this._changeDetectorRef.markForCheck();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this._initiated && ('yearViewGrid' in changes || 'yearSelected' in changes || 'id' in changes)) {\n this._constructYearGrid();\n }\n }\n /** The currently selected FdDates model start and end in range mode. */\n set selectedRangeDate(dateRange) {\n if (dateRange &&\n this.selectedRangeDate &&\n this._isSameDate(dateRange.start, this.selectedRangeDate.start) &&\n this._isSameDate(dateRange.end, this.selectedRangeDate.end)) {\n return;\n }\n this._selectedRangeDate = dateRange;\n if (this._calendarYearListGrid) {\n this._changeSelectedRangeYears(dateRange, this._getYearList());\n }\n }\n get selectedRangeDate() {\n return this._selectedRangeDate;\n }\n /**\n * @hidden\n * Amount of selected years\n * 0, when there is no year selected, or start year is invalid,\n * 1, when there is only valid start year, or end year is same as start year,\n * 2, when both dates are valid\n */\n get _selectCounter() {\n if (!this.selectedRangeDate || !this._dateTimeAdapter.isValid(this.selectedRangeDate.start)) {\n return 0;\n }\n if (this.selectedRangeDate.start &&\n (!this._dateTimeAdapter.isValid(this.selectedRangeDate.end) ||\n this._isSameDate(this.selectedRangeDate.start, this.selectedRangeDate.end))) {\n return 1;\n }\n if (this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end)) {\n return 2;\n }\n return 0;\n }\n /** Method used to load the previous {{col * row}} years to be displayed. */\n loadNextYearList() {\n this._firstYearInList += this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n /** Method used to load the next {{col * row}} years to be displayed. */\n loadPreviousYearList() {\n this._firstYearInList -= this._getAmountOfYearsShownAtOnce();\n this._constructYearGrid();\n }\n /** Method that sends the year to the parent component when it is clicked. */\n selectYear(selectedYear, event) {\n if (event) {\n event.stopPropagation();\n }\n this.yearSelected = selectedYear.year;\n this.yearClicked.emit(this.yearSelected);\n if (this.isDateRangeYearFormat) {\n this._selectRangeDate(selectedYear);\n this._handleRangeHoverEffect(event);\n }\n }\n /**\n * Set focus on month cell.\n * It can be a selected cell, current month cell or first cell in the list\n */\n setFocusOnCell() {\n const cellToFocus = new DefaultCalendarActiveCellStrategy().getActiveCell(this._getYearList());\n if (!cellToFocus?.id) {\n return;\n }\n this._focusElementBySelector(`#${cellToFocus.id}`);\n }\n /**\n * @hidden\n * Method for handling the keyboard navigation.\n */\n _onKeydownYearHandler(event, index) {\n this._calendarService.onKeydownHandler(event, index);\n }\n /**\n * @hidden\n * Method that allows to focus elements inside this component\n */\n _focusElementBySelector(elementSelector) {\n const elementToFocus = this._eRef.nativeElement.querySelector(elementSelector);\n if (elementToFocus?.focus) {\n elementToFocus.focus();\n }\n }\n /**\n * @hidden\n * Standardized method to calculate grid [x][y] to index number of flatten list\n */\n _getIndex(rowIndex, colIndex) {\n return this._calendarService.getId(rowIndex, colIndex);\n }\n /**\n * @hidden\n * Get grid cell id be index\n * @param index\n */\n _getId(index) {\n return this.viewId + '-year-' + index;\n }\n /**\n * @hidden\n * Handles hover effect for range selection mode.\n * @param year The calendar year that is hovered.\n */\n _handleRangeHover(year) {\n // Handle range hover\n const start = this.selectedRangeDate?.start;\n if (this._isOnRangePick && start) {\n if (this._dateTimeAdapter.compareDate(year.date, start) < 0) {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) > 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) < 0;\n });\n }\n else {\n this._getYearList().forEach((_year) => {\n _year.hoverRange =\n this._dateTimeAdapter.compareDate(_year.date, year.date) < 0 &&\n this._dateTimeAdapter.compareDate(_year.date, start) > 0;\n });\n }\n }\n }\n /**\n * @hidden\n * Method that returns active cell, which means:\n * if there is any selected year, return selected year\n * if there is no selected year, but there is current year, return current year\n * if there is no current year, or selected, return first one\n */\n _getActiveYear() {\n const selectedYearCell = this._getYearList().find(({ year }) => year === this.yearSelected);\n if (selectedYearCell) {\n return selectedYearCell.year;\n }\n const currentYearCell = this._getYearList().find(({ year }) => year === this._currentYear);\n if (currentYearCell) {\n return currentYearCell.year;\n }\n return this._calendarYearListGrid[0][0].year;\n }\n /** @hidden */\n _constructYearGrid() {\n const displayedYearsAmount = this.yearViewGrid.cols * this.yearViewGrid.rows;\n const calendarYearList = [];\n this._calendarYearListGrid = [];\n for (let x = 0; x < displayedYearsAmount; ++x) {\n const year = this._firstYearInList + x;\n calendarYearList.push({\n date: this._dateTimeAdapter.createDate(year),\n year,\n label: this._getYearName(year),\n ariaLabel: this._getAriaYearName(year),\n selected: year === this.yearSelected,\n current: year === this._currentYear,\n index: x\n });\n }\n // if the date range is selected\n if (this.isDateRangeYearFormat) {\n this._changeSelectedRangeYears(this._selectedRangeDate, calendarYearList);\n }\n /** Creating 2d grid */\n while (calendarYearList.length) {\n this._calendarYearListGrid.push(calendarYearList.splice(0, this.yearViewGrid.cols));\n }\n this._activeYear = this._getActiveYear();\n this._calendarYearListGrid.forEach((row, rowIndex) => {\n row.forEach((cell, colIndex) => {\n cell.id = this._getId(this._getIndex(rowIndex, colIndex));\n cell.tabIndex = cell.year === this._activeYear ? 0 : -1;\n });\n });\n this._changeDetectorRef.markForCheck();\n }\n /**\n * @hidden\n * Handles the hover effect for range selection.\n * Toggles the hover effect based on the selection state and event.\n * @param event Optional mouse event for handling hover effect.\n */\n _handleRangeHoverEffect(event) {\n if (this.isDateRangeYearFormat && this.rangeHoverEffect && this._selectCounter === 1 && event) {\n this._isOnRangePick = !this._isOnRangePick;\n }\n else {\n this._isOnRangePick = false;\n }\n }\n /**\n * @hidden\n * Change properties of range years, this method is called, to not rebuild whole grid from scratch,\n * it just changes properties of newly selected/unselected years.\n */\n _changeSelectedRangeYears(dates, calendar) {\n /** Pull list of calendar year */\n const calendarList = calendar;\n /** Reset changing properties */\n calendarList.forEach((_year) => (_year.selectedFirst =\n _year.selectedLast =\n _year.selected =\n _year.disabled =\n _year.hoverRange =\n _year.selectedRange =\n false));\n if (dates) {\n let startYear;\n let endYear;\n if (dates.start) {\n /** Find start year and mark it as selected */\n startYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.start));\n if (startYear) {\n startYear.selected = true;\n startYear.selectedFirst = true;\n }\n }\n if (dates.end) {\n /** Find end year and mark it as selected */\n endYear = calendarList.find((_year) => this._isSameDate(_year.date, dates.end));\n if (endYear) {\n endYear.selected = true;\n endYear.selectedLast = true;\n }\n }\n /** Verify if start year and end year is valid, otherwise don't put range selection */\n if (dates.start && dates.end) {\n /** Mark all years, which are between start and end date */\n calendarList\n .filter((_year) => (_year.selectedRange = this._dateTimeAdapter.isBetween(_year.date, dates.start, dates.end)))\n .forEach((_year) => (_year.selectedRange = true));\n }\n }\n }\n /**\n * @hidden\n * Check if dates are equal\n */\n _isSameDate(date1, date2) {\n return this._dateTimeAdapter.datesEqual(date1, date2);\n }\n /**\n * @hidden\n * Selects or updates the range of years in range mode.\n * Handles the start and end years and updates the selected range.\n * @param year The calendar year to be selected or updated in the range.\n */\n _selectRangeDate(year) {\n if (this._selectCounter === 0 || this._selectCounter === 2) {\n this._selectedRangeDate = { start: year.date, end: null };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n else if (this._selectCounter === 1) {\n this._selectedRangeDate = this._getOrderedRange(this.selectedRangeDate.start, year.date);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n }\n this._changeSelectedRangeYears(this._selectedRangeDate, this._getYearList());\n }\n /**\n * @hidden\n * Orders the start and end dates for the range selection.\n * Ensures the start date is before or equal to the end date.\n * @param date1 The first date.\n * @param date2 The second date.\n * @returns An object containing the ordered start and end dates.\n */\n _getOrderedRange(date1, date2) {\n return this._dateTimeAdapter.compareDate(date1, date2) < 0\n ? { start: date1, end: date2 }\n : { start: date2, end: date1 };\n }\n /**\n * @hidden\n * Returns year name as a string.\n */\n _getYearName(year) {\n const formatted = this._dateTimeAdapter.getYearName(this._dateTimeAdapter.createDate(year, 1, 1));\n return this._getYearString(year, formatted);\n }\n /**\n * @hidden\n * Returns aria year name as a string.\n */\n _getAriaYearName(year) {\n const formatted = this._dateTimeAdapter.format(this._dateTimeAdapter.createDate(year, 1, 1), this._dateTimeFormats.display.yearA11yLabel);\n return this._getYearString(year, formatted);\n }\n /**\n * @hidden\n * Returns year name taking into account yearMapping.\n */\n _getYearString(year, defaultStr) {\n if (typeof this.yearViewGrid.yearMapping === 'function') {\n return this.yearViewGrid.yearMapping(year);\n }\n return defaultStr;\n }\n /**\n * @hidden\n * Returns transformed 1d array from 2d year grid.\n */\n _getYearList() {\n return [].concat(...this._calendarYearListGrid);\n }\n /**\n * @hidden\n * Amount of years displayed in year view\n */\n _getAmountOfYearsShownAtOnce() {\n return this.yearViewGrid.rows * this.yearViewGrid.cols;\n }\n /**\n * @hidden\n * Method to put configuration and listeners on calendar keyboard service\n */\n _setupKeyboardService() {\n this._calendarService.colAmount = this.yearViewGrid.cols;\n this._calendarService.rowAmount = this.yearViewGrid.rows;\n this._calendarService.focusEscapeFunction = this.focusEscapeFunction;\n this._calendarService.onFocusIdChange.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this._handleRangeHover(this._getYearList()[index]);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onKeySelect.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(({ index, event }) => {\n this.selectYear(this._getYearList()[index], event);\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListStartApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadPreviousYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n this._calendarService.onListEndApproach.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((index) => {\n this.loadNextYearList();\n this._changeDetectorRef.detectChanges();\n this._focusOnCellByIndex(index);\n });\n }\n /** @hidden */\n _focusOnCellByIndex(index) {\n this._focusElementBySelector(`#${this._getId(index)}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarYearViewComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CalendarService }, { token: i2.DatetimeAdapter }, { token: DATE_TIME_FORMATS }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarYearViewComponent, isStandalone: true, selector: \"fd-calendar-year-view\", inputs: { id: \"id\", focusEscapeFunction: \"focusEscapeFunction\", yearSelected: \"yearSelected\", yearViewGrid: \"yearViewGrid\", isDateRangeYearFormat: \"isDateRangeYearFormat\", rangeHoverEffect: \"rangeHoverEffect\", selectedRangeDate: \"selectedRangeDate\" }, outputs: { yearClicked: \"yearClicked\", selectedRangeDateChange: \"selectedRangeDateChange\" }, host: { properties: { \"attr.id\": \"viewId\" } }, usesOnChanges: true, ngImport: i0, template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"yearCell.current\\\"\\n [class.is-active]=\\\"yearCell.selected\\\"\\n [attr.id]=\\\"yearCell.id\\\"\\n [attr.tabindex]=\\\"yearCell.tabIndex\\\"\\n [attr.aria-selected]=\\\"yearCell.selected\\\"\\n [attr.aria-disabled]=\\\"yearCell.disabled\\\"\\n [attr.data-fd-calendar-year]=\\\"yearCell.year\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, yearCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(yearCell)\\\"\\n (click)=\\\"selectYear(yearCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n yearCell.selectedRange ||\\n yearCell.hoverRange ||\\n yearCell.selectedFirst ||\\n yearCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"yearCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n yearCell.id +\\n '-aria-label ' +\\n (yearCell.current ? _todayLabelId + ' ' : '') +\\n (yearCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ yearCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"yearCell.id + '-aria-label'\\\">\\n {{ yearCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { 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: CalendarYearViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar-year-view', encapsulation: ViewEncapsulation.None, host: {\n '[attr.id]': 'viewId'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ButtonComponent, FdTranslatePipe], template: \"<table\\n class=\\\"fd-calendar__content fd-calendar__content--years\\\"\\n role=\\\"grid\\\"\\n [attr.aria-roledescription]=\\\"'coreCalendar.calendarYearsViewDescription' | fdTranslate\\\"\\n>\\n <tbody class=\\\"fd-calendar__group\\\" role=\\\"rowgroup\\\">\\n @for (colYears of _calendarYearListGrid; track colYears + '' + rowIndex; let rowIndex = $index) {\\n <tr class=\\\"fd-calendar__row\\\" role=\\\"row\\\">\\n @for (yearCell of colYears; track yearCell + '' + colIndex; let colIndex = $index) {\\n <td\\n class=\\\"fd-calendar__my-item\\\"\\n role=\\\"gridcell\\\"\\n [class.fd-calendar__my-item--current]=\\\"yearCell.current\\\"\\n [class.is-active]=\\\"yearCell.selected\\\"\\n [attr.id]=\\\"yearCell.id\\\"\\n [attr.tabindex]=\\\"yearCell.tabIndex\\\"\\n [attr.aria-selected]=\\\"yearCell.selected\\\"\\n [attr.aria-disabled]=\\\"yearCell.disabled\\\"\\n [attr.data-fd-calendar-year]=\\\"yearCell.year\\\"\\n (keydown)=\\\"_onKeydownYearHandler($event, yearCell.index)\\\"\\n (mouseenter)=\\\"_handleRangeHover(yearCell)\\\"\\n (click)=\\\"selectYear(yearCell, $event)\\\"\\n >\\n <button\\n fd-button\\n fdType=\\\"transparent\\\"\\n [class.fd-button--toggled]=\\\"\\n yearCell.selectedRange ||\\n yearCell.hoverRange ||\\n yearCell.selectedFirst ||\\n yearCell.selectedLast\\n \\\"\\n class=\\\"fd-calendar__my-item-button\\\"\\n [class.is-active]=\\\"yearCell.current\\\"\\n tabindex=\\\"-1\\\"\\n >\\n <span\\n class=\\\"fd-calendar__text\\\"\\n [attr.aria-labelledby]=\\\"\\n yearCell.id +\\n '-aria-label ' +\\n (yearCell.current ? _todayLabelId + ' ' : '') +\\n (yearCell.selected ? _selectedDateLabelId : '')\\n \\\"\\n >\\n {{ yearCell.label }}\\n </span>\\n </button>\\n <span hidden aria-hidden=\\\"true\\\" [attr.id]=\\\"yearCell.id + '-aria-label'\\\">\\n {{ yearCell.ariaLabel }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n</table>\\n<!-- Hidden elements for aria purposes -->\\n<div hidden aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_todayLabelId\\\">{{ 'coreCalendar.todayLabel' | fdTranslate }}</div>\\n <div [attr.id]=\\\"_selectedDateLabelId\\\">{{ 'coreCalendar.dateSelectedLabel' | fdTranslate }}</div>\\n</div>\\n\" }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CalendarService }, { type: i2.DatetimeAdapter }, { type: undefined, decorators: [{\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { id: [{\n type: Input\n }], focusEscapeFunction: [{\n type: Input\n }], yearSelected: [{\n type: Input\n }], yearViewGrid: [{\n type: Input\n }], isDateRangeYearFormat: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], yearClicked: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedRangeDate: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci12aWV3cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlDQUFpQyxFQUE4QyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUVwRCxxRUFBcUU7QUFZckUsTUFBTSxPQUFPLHlCQUF5QjtJQThEbEMsY0FBYztJQUNkLElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUM7SUFD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O2tCQVhyQyxTQUFTOytCQUNJLHVCQUF1QixpQkFHbEIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDRixXQUFXLEVBQUUsUUFBUTtxQkFDeEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDOzswQkF3R3RDLE1BQU07MkJBQUMsaUJBQWlCO3lDQW5HN0IsRUFBRTtzQkFERCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFRTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLHVCQUF1QjtzQkFEL0IsTUFBTTtnQkFpR0gsaUJBQWlCO3NCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERBVEVfVElNRV9GT1JNQVRTLCBEYXRlVGltZUZvcm1hdHMsIERhdGV0aW1lQWRhcHRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kYXRldGltZSc7XG5cbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxlbmRhclllYXIsIENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FsZW5kYXIteWVhci1ncmlkJztcbmltcG9ydCB7IERlZmF1bHRDYWxlbmRhckFjdGl2ZUNlbGxTdHJhdGVneSwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0ZS1yYW5nZSc7XG5cbi8qKiBDb21wb25lbnQgcmVwcmVzZW50aW5nIHRoZSBZZWFyVmlldyBvZiB0aGUgQ2FsZW5kYXIgQ29tcG9uZW50LiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYWxlbmRhci15ZWFyLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ3ZpZXdJZCdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtCdXR0b25Db21wb25lbnQsIEZkVHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudDxEPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBGb2N1c2FibGVDYWxlbmRhclZpZXcge1xuICAgIC8qKiBUaGUgaWQgb2YgdGhlIGNhbGVuZGFyIHBhc3NlZCBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGZvY3VzIHdvdWxkIGVzY2FwZSB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvY3VzRXNjYXBlRnVuY3Rpb246IEVzY2FwZUZvY3VzRnVuY3Rpb247XG5cbiAgICAvKiogUGFyYW1ldGVyIGhvbGRpbmcgdGhlIHllYXIgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyU2VsZWN0ZWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB5ZWFyVmlld0dyaWQ6IENhbGVuZGFyWWVhckdyaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZGF0ZSByYW5nZSBpcyB5ZWFyIGZvcm1hdCBvbmx5IGV4Y2x1ZGluZyBtb250aCBhbmQgZGF5ICovXG4gICAgQElucHV0KClcbiAgICBpc0RhdGVSYW5nZVllYXJGb3JtYXQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gbWFyayB5ZWFyIGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCB5ZWFyIGlzIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gYSB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHllYXJDbGlja2VkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIHllYXIgZnJvbSBjYWxlbmRhclllYXJMaXN0IHNob3VsZCBiZSBmb2N1c2FibGUgYnkgdGFiIGtleVxuICAgICAqL1xuICAgIF9hY3RpdmVZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHRoYXQgc3RvcmVzIHRoZSBkb3plbiBvZiB5ZWFycyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIF9jYWxlbmRhclllYXJMaXN0R3JpZDogQ2FsZW5kYXJZZWFyPEQ+W11bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBQYXJhbWV0ZXIgc3RvcmluZyB0aGUgeWVhciBvZiB0aGUgcHJlc2VudCBkYXkuXG4gICAgICovXG4gICAgX2N1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUGFyYW1ldGVyIHN0b3JpbmcgZmlyc3Qgc2hvd24geWVhciBvbiBsaXN0XG4gICAgICovXG4gICAgX2ZpcnN0WWVhckluTGlzdDogbnVtYmVyO1xuXG4gICAgLyoqIFZpZXcgSUQgKi9cbiAgICBnZXQgdmlld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJy15ZWFyLXZpZXcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2RheSBjZWxsIGxhYmVsIElEXG4gICAgICovXG4gICAgZ2V0IF90b2RheUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy10b2RheS1sYWJlbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdGVkIGRhdGUgbGFiZWwgSURcbiAgICAgKi9cbiAgICBnZXQgX3NlbGVjdGVkRGF0ZUxhYmVsSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0lkICsgJy1zZWxlY3RlZC1kYXRlLWxhYmVsJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc09uUmFuZ2VQaWNrID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUFkYXB0ZXI6IERhdGV0aW1lQWRhcHRlcjxEPixcbiAgICAgICAgQEluamVjdChEQVRFX1RJTUVfRk9STUFUUykgcHJpdmF0ZSBfZGF0ZVRpbWVGb3JtYXRzOiBEYXRlVGltZUZvcm1hdHNcbiAgICApIHtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5fY3VycmVudFllYXIgPSBfZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ID0gdGhpcy5fY3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9zZXR1cEtleWJvYXJkU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgPSB0aGlzLnllYXJTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0WWVhckdyaWQoKTtcblxuICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWF0ZWQgJiYgKCd5ZWFyVmlld0dyaWQnIGluIGNoYW5nZXMgfHwgJ3llYXJTZWxlY3RlZCcgaW4gY2hhbmdlcyB8fCAnaWQnIGluIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgRmREYXRlcyBtb2RlbCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWRSYW5nZURhdGUoZGF0ZVJhbmdlOiBEYXRlUmFuZ2U8RD4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0ZVJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlICYmXG4gICAgICAgICAgICB0aGlzLl9pc1NhbWVEYXRlKGRhdGVSYW5nZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUoZGF0ZVJhbmdlLmVuZCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlID0gZGF0ZVJhbmdlO1xuICAgICAgICBpZiAodGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZVNlbGVjdGVkUmFuZ2VZZWFycyhkYXRlUmFuZ2UsIHRoaXMuX2dldFllYXJMaXN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkUmFuZ2VEYXRlKCk6IERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogIEFtb3VudCBvZiBzZWxlY3RlZCB5ZWFyc1xuICAgICAqICAwLCB3aGVuIHRoZXJlIGlzIG5vIHllYXIgc2VsZWN0ZWQsIG9yIHN0YXJ0IHllYXIgaXMgaW52YWxpZCxcbiAgICAgKiAgMSwgd2hlbiB0aGVyZSBpcyBvbmx5IHZhbGlkIHN0YXJ0IHllYXIsIG9yIGVuZCB5ZWFyIGlzIHNhbWUgYXMgc3RhcnQgeWVhcixcbiAgICAgKiAgMiwgd2hlbiBib3RoIGRhdGVzIGFyZSB2YWxpZFxuICAgICAqL1xuICAgIGdldCBfc2VsZWN0Q291bnRlcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0ICYmXG4gICAgICAgICAgICAoIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuZW5kKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2lzU2FtZURhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpICYmXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHVzZWQgdG8gbG9hZCB0aGUgcHJldmlvdXMge3tjb2wgKiByb3d9fSB5ZWFycyB0byBiZSBkaXNwbGF5ZWQuICovXG4gICAgbG9hZE5leHRZZWFyTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RZZWFySW5MaXN0ICs9IHRoaXMuX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RZZWFyR3JpZCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdXNlZCB0byBsb2FkIHRoZSBuZXh0IHt7Y29sICogcm93fX0geWVhcnMgdG8gYmUgZGlzcGxheWVkLiAqL1xuICAgIGxvYWRQcmV2aW91c1llYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdFllYXJJbkxpc3QgLT0gdGhpcy5fZ2V0QW1vdW50T2ZZZWFyc1Nob3duQXRPbmNlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFllYXJHcmlkKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHNlbmRzIHRoZSB5ZWFyIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdoZW4gaXQgaXMgY2xpY2tlZC4gKi9cbiAgICBzZWxlY3RZZWFyKHNlbGVjdGVkWWVhcjogQ2FsZW5kYXJZZWFyPEQ+LCBldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQgPSBzZWxlY3RlZFllYXIueWVhcjtcbiAgICAgICAgdGhpcy55ZWFyQ2xpY2tlZC5lbWl0KHRoaXMueWVhclNlbGVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGVSYW5nZVllYXJGb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlRGF0ZShzZWxlY3RlZFllYXIpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgZm9jdXMgb24gbW9udGggY2VsbC5cbiAgICAgKiBJdCBjYW4gYmUgYSBzZWxlY3RlZCBjZWxsLCBjdXJyZW50IG1vbnRoIGNlbGwgb3IgZmlyc3QgY2VsbCBpbiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHNldEZvY3VzT25DZWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IG5ldyBEZWZhdWx0Q2FsZW5kYXJBY3RpdmVDZWxsU3RyYXRlZ3koKS5nZXRBY3RpdmVDZWxsKHRoaXMuX2dldFllYXJMaXN0KCkpO1xuICAgICAgICBpZiAoIWNlbGxUb0ZvY3VzPy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoYCMke2NlbGxUb0ZvY3VzLmlkfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgZm9yIGhhbmRsaW5nIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICAgIF9vbktleWRvd25ZZWFySGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25LZXlkb3duSGFuZGxlcihldmVudCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBhbGxvd3MgdG8gZm9jdXMgZWxlbWVudHMgaW5zaWRlIHRoaXMgY29tcG9uZW50XG4gICAgICovXG4gICAgX2ZvY3VzRWxlbWVudEJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50ID0gdGhpcy5fZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudFNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzPy5mb2N1cykge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdGFuZGFyZGl6ZWQgbWV0aG9kIHRvIGNhbGN1bGF0ZSBncmlkIFt4XVt5XSB0byBpbmRleCBudW1iZXIgb2YgZmxhdHRlbiBsaXN0XG4gICAgICovXG4gICAgX2dldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdldElkKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdldCBncmlkIGNlbGwgaWQgYmUgaW5kZXhcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKi9cbiAgICBfZ2V0SWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJZCArICcteWVhci0nICsgaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgaG92ZXIgZWZmZWN0IGZvciByYW5nZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKiBAcGFyYW0geWVhciBUaGUgY2FsZW5kYXIgeWVhciB0aGF0IGlzIGhvdmVyZWQuXG4gICAgICovXG4gICAgX2hhbmRsZVJhbmdlSG92ZXIoeWVhcjogQ2FsZW5kYXJZZWFyPEQ+KTogdm9pZCB7XG4gICAgICAgIC8vIEhhbmRsZSByYW5nZSBob3ZlclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGU/LnN0YXJ0O1xuICAgICAgICBpZiAodGhpcy5faXNPblJhbmdlUGljayAmJiBzdGFydCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZSh5ZWFyLmRhdGUsIHN0YXJ0KSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRZZWFyTGlzdCgpLmZvckVhY2goKF95ZWFyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLmhvdmVyUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF95ZWFyLmRhdGUsIHllYXIuZGF0ZSkgPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoX3llYXIuZGF0ZSwgc3RhcnQpIDwgMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0WWVhckxpc3QoKS5mb3JFYWNoKChfeWVhcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfeWVhci5ob3ZlclJhbmdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5jb21wYXJlRGF0ZShfeWVhci5kYXRlLCB5ZWFyLmRhdGUpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKF95ZWFyLmRhdGUsIHN0YXJ0KSA+IDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcmV0dXJucyBhY3RpdmUgY2VsbCwgd2hpY2ggbWVhbnM6XG4gICAgICogaWYgdGhlcmUgaXMgYW55IHNlbGVjdGVkIHllYXIsIHJldHVybiBzZWxlY3RlZCB5ZWFyXG4gICAgICogaWYgdGhlcmUgaXMgbm8gc2VsZWN0ZWQgeWVhciwgYnV0IHRoZXJlIGlzIGN1cnJlbnQgeWVhciwgcmV0dXJuIGN1cnJlbnQgeWVhclxuICAgICAqIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgeWVhciwgb3Igc2VsZWN0ZWQsIHJldHVybiBmaXJzdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVZZWFyKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhckNlbGwgPSB0aGlzLl9nZXRZZWFyTGlzdCgpLmZpbmQoKHsgeWVhciB9KSA9PiB5ZWFyID09PSB0aGlzLnllYXJTZWxlY3RlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRZZWFyQ2VsbC55ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudFllYXJDZWxsID0gdGhpcy5fZ2V0WWVhckxpc3QoKS5maW5kKCh7IHllYXIgfSkgPT4geWVhciA9PT0gdGhpcy5fY3VycmVudFllYXIpO1xuICAgICAgICBpZiAoY3VycmVudFllYXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFllYXJDZWxsLnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWRbMF1bMF0ueWVhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFllYXJHcmlkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDogbnVtYmVyID0gdGhpcy55ZWFyVmlld0dyaWQuY29scyAqIHRoaXMueWVhclZpZXdHcmlkLnJvd3M7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyWWVhckxpc3Q6IENhbGVuZGFyWWVhcjxEPltdID0gW107XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaXNwbGF5ZWRZZWFyc0Ftb3VudDsgKyt4KSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5fZmlyc3RZZWFySW5MaXN0ICsgeDtcbiAgICAgICAgICAgIGNhbGVuZGFyWWVhckxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0ZTogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciksXG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fZ2V0WWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLl9nZXRBcmlhWWVhck5hbWUoeWVhciksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHllYXIgPT09IHRoaXMueWVhclNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHllYXIgPT09IHRoaXMuX2N1cnJlbnRZZWFyLFxuICAgICAgICAgICAgICAgIGluZGV4OiB4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRlIHJhbmdlIGlzIHNlbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCBjYWxlbmRhclllYXJMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDcmVhdGluZyAyZCBncmlkICovXG4gICAgICAgIHdoaWxlIChjYWxlbmRhclllYXJMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQucHVzaChjYWxlbmRhclllYXJMaXN0LnNwbGljZSgwLCB0aGlzLnllYXJWaWV3R3JpZC5jb2xzKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hY3RpdmVZZWFyID0gdGhpcy5fZ2V0QWN0aXZlWWVhcigpO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyWWVhckxpc3RHcmlkLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKChjZWxsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaWQgPSB0aGlzLl9nZXRJZCh0aGlzLl9nZXRJbmRleChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gY2VsbC55ZWFyID09PSB0aGlzLl9hY3RpdmVZZWFyID8gMCA6IC0xO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIHRoZSBob3ZlciBlZmZlY3QgZm9yIHJhbmdlIHNlbGVjdGlvbi5cbiAgICAgKiBUb2dnbGVzIHRoZSBob3ZlciBlZmZlY3QgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiBzdGF0ZSBhbmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGV2ZW50IE9wdGlvbmFsIG1vdXNlIGV2ZW50IGZvciBoYW5kbGluZyBob3ZlciBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmFuZ2VIb3ZlckVmZmVjdChldmVudD86IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCAmJiB0aGlzLnJhbmdlSG92ZXJFZmZlY3QgJiYgdGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSAmJiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9ICF0aGlzLl9pc09uUmFuZ2VQaWNrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNPblJhbmdlUGljayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENoYW5nZSBwcm9wZXJ0aWVzIG9mIHJhbmdlIHllYXJzLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHRvIG5vdCByZWJ1aWxkIHdob2xlIGdyaWQgZnJvbSBzY3JhdGNoLFxuICAgICAqIGl0IGp1c3QgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIG5ld2x5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgeWVhcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKGRhdGVzOiBEYXRlUmFuZ2U8RD4sIGNhbGVuZGFyOiBDYWxlbmRhclllYXI8RD5bXSk6IHZvaWQge1xuICAgICAgICAvKiogUHVsbCBsaXN0IG9mIGNhbGVuZGFyIHllYXIgKi9cbiAgICAgICAgY29uc3QgY2FsZW5kYXJMaXN0ID0gY2FsZW5kYXI7XG5cbiAgICAgICAgLyoqIFJlc2V0IGNoYW5naW5nIHByb3BlcnRpZXMgKi9cbiAgICAgICAgY2FsZW5kYXJMaXN0LmZvckVhY2goXG4gICAgICAgICAgICAoX3llYXIpID0+XG4gICAgICAgICAgICAgICAgKF95ZWFyLnNlbGVjdGVkRmlyc3QgPVxuICAgICAgICAgICAgICAgICAgICBfeWVhci5zZWxlY3RlZExhc3QgPVxuICAgICAgICAgICAgICAgICAgICBfeWVhci5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgX3llYXIuaG92ZXJSYW5nZSA9XG4gICAgICAgICAgICAgICAgICAgIF95ZWFyLnNlbGVjdGVkUmFuZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICBsZXQgc3RhcnRZZWFyOiBDYWxlbmRhclllYXI8RD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZW5kWWVhcjogQ2FsZW5kYXJZZWFyPEQ+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGRhdGVzLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLyoqIEZpbmQgc3RhcnQgeWVhciBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIHN0YXJ0WWVhciA9IGNhbGVuZGFyTGlzdC5maW5kKChfeWVhcikgPT4gdGhpcy5faXNTYW1lRGF0ZShfeWVhci5kYXRlLCBkYXRlcy5zdGFydCkpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRZZWFyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRZZWFyLnNlbGVjdGVkRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAvKiogRmluZCBlbmQgeWVhciBhbmQgbWFyayBpdCBhcyBzZWxlY3RlZCAqL1xuICAgICAgICAgICAgICAgIGVuZFllYXIgPSBjYWxlbmRhckxpc3QuZmluZCgoX3llYXIpID0+IHRoaXMuX2lzU2FtZURhdGUoX3llYXIuZGF0ZSwgZGF0ZXMuZW5kKSk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZFllYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kWWVhci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVuZFllYXIuc2VsZWN0ZWRMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBWZXJpZnkgaWYgc3RhcnQgeWVhciBhbmQgZW5kIHllYXIgaXMgdmFsaWQsIG90aGVyd2lzZSBkb24ndCBwdXQgcmFuZ2Ugc2VsZWN0aW9uICovXG4gICAgICAgICAgICBpZiAoZGF0ZXMuc3RhcnQgJiYgZGF0ZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgLyoqIE1hcmsgYWxsIHllYXJzLCB3aGljaCBhcmUgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGRhdGUgKi9cbiAgICAgICAgICAgICAgICBjYWxlbmRhckxpc3RcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChfeWVhcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3llYXIuc2VsZWN0ZWRSYW5nZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc0JldHdlZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF95ZWFyLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzLnN0YXJ0ISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuZW5kIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKF95ZWFyKSA9PiAoX3llYXIuc2VsZWN0ZWRSYW5nZSA9IHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVjayBpZiBkYXRlcyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1NhbWVEYXRlKGRhdGUxOiBOdWxsYWJsZTxEPiwgZGF0ZTI6IE51bGxhYmxlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlMSwgZGF0ZTIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3RzIG9yIHVwZGF0ZXMgdGhlIHJhbmdlIG9mIHllYXJzIGluIHJhbmdlIG1vZGUuXG4gICAgICogSGFuZGxlcyB0aGUgc3RhcnQgYW5kIGVuZCB5ZWFycyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UuXG4gICAgICogQHBhcmFtIHllYXIgVGhlIGNhbGVuZGFyIHllYXIgdG8gYmUgc2VsZWN0ZWQgb3IgdXBkYXRlZCBpbiB0aGUgcmFuZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0UmFuZ2VEYXRlKHllYXI6IENhbGVuZGFyWWVhcjxEPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMCB8fCB0aGlzLl9zZWxlY3RDb3VudGVyID09PSAyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IHllYXIuZGF0ZSwgZW5kOiBudWxsIH07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc2VsZWN0Q291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRSYW5nZURhdGUgPSB0aGlzLl9nZXRPcmRlcmVkUmFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCEsIHllYXIuZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hhbmdlU2VsZWN0ZWRSYW5nZVllYXJzKHRoaXMuX3NlbGVjdGVkUmFuZ2VEYXRlLCB0aGlzLl9nZXRZZWFyTGlzdCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT3JkZXJzIHRoZSBzdGFydCBhbmQgZW5kIGRhdGVzIGZvciB0aGUgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAqIEVuc3VyZXMgdGhlIHN0YXJ0IGRhdGUgaXMgYmVmb3JlIG9yIGVxdWFsIHRvIHRoZSBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0gZGF0ZTEgVGhlIGZpcnN0IGRhdGUuXG4gICAgICogQHBhcmFtIGRhdGUyIFRoZSBzZWNvbmQgZGF0ZS5cbiAgICAgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBzdGFydCBhbmQgZW5kIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldE9yZGVyZWRSYW5nZShkYXRlMTogRCwgZGF0ZTI6IEQpOiB7IHN0YXJ0OiBEOyBlbmQ6IEQgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZTEsIGRhdGUyKSA8IDBcbiAgICAgICAgICAgID8geyBzdGFydDogZGF0ZTEsIGVuZDogZGF0ZTIgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0OiBkYXRlMiwgZW5kOiBkYXRlMSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIHllYXIgbmFtZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WWVhclN0cmluZyh5ZWFyLCBmb3JtYXR0ZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGFyaWEgeWVhciBuYW1lIGFzIGEgc3RyaW5nLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFyaWFZZWFyTmFtZSh5ZWFyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KFxuICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgMSwgMSksXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUZvcm1hdHMuZGlzcGxheS55ZWFyQTExeUxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRZZWFyU3RyaW5nKHllYXIsIGZvcm1hdHRlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJldHVybnMgeWVhciBuYW1lIHRha2luZyBpbnRvIGFjY291bnQgeWVhck1hcHBpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0WWVhclN0cmluZyh5ZWFyOiBudW1iZXIsIGRlZmF1bHRTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyVmlld0dyaWQueWVhck1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJWaWV3R3JpZC55ZWFyTWFwcGluZyh5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmV0dXJucyB0cmFuc2Zvcm1lZCAxZCBhcnJheSBmcm9tIDJkIHllYXIgZ3JpZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRZZWFyTGlzdCgpOiBDYWxlbmRhclllYXI8RD5bXSB7XG4gICAgICAgIHJldHVybiAoPENhbGVuZGFyWWVhcjxEPltdPltdKS5jb25jYXQoLi4udGhpcy5fY2FsZW5kYXJZZWFyTGlzdEdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBbW91bnQgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgdmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEFtb3VudE9mWWVhcnNTaG93bkF0T25jZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyVmlld0dyaWQucm93cyAqIHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBwdXQgY29uZmlndXJhdGlvbiBhbmQgbGlzdGVuZXJzIG9uIGNhbGVuZGFyIGtleWJvYXJkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXR1cEtleWJvYXJkU2VydmljZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNvbEFtb3VudCA9IHRoaXMueWVhclZpZXdHcmlkLmNvbHM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5yb3dBbW91bnQgPSB0aGlzLnllYXJWaWV3R3JpZC5yb3dzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZm9jdXNFc2NhcGVGdW5jdGlvbiA9IHRoaXMuZm9jdXNFc2NhcGVGdW5jdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25Gb2N1c0lkQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSYW5nZUhvdmVyKHRoaXMuX2dldFllYXJMaXN0KClbaW5kZXhdKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbktleVNlbGVjdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGluZGV4LCBldmVudCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFllYXIodGhpcy5fZ2V0WWVhckxpc3QoKVtpbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzT25DZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5vbkxpc3RTdGFydEFwcHJvYWNoLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2Uub25MaXN0RW5kQXBwcm9hY2gucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRZZWFyTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNPbkNlbGxCeUluZGV4KGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c09uQ2VsbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0VsZW1lbnRCeVNlbGVjdG9yKGAjJHt0aGlzLl9nZXRJZChpbmRleCl9YCk7XG4gICAgfVxufVxuIiwiPHRhYmxlXG4gICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fY29udGVudCBmZC1jYWxlbmRhcl9fY29udGVudC0teWVhcnNcIlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICBbYXR0ci5hcmlhLXJvbGVkZXNjcmlwdGlvbl09XCInY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb24nIHwgZmRUcmFuc2xhdGVcIlxuPlxuICAgIDx0Ym9keSBjbGFzcz1cImZkLWNhbGVuZGFyX19ncm91cFwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICBAZm9yIChjb2xZZWFycyBvZiBfY2FsZW5kYXJZZWFyTGlzdEdyaWQ7IHRyYWNrIGNvbFllYXJzICsgJycgKyByb3dJbmRleDsgbGV0IHJvd0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmZC1jYWxlbmRhcl9fcm93XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHllYXJDZWxsIG9mIGNvbFllYXJzOyB0cmFjayB5ZWFyQ2VsbCArICcnICsgY29sSW5kZXg7IGxldCBjb2xJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2FsZW5kYXJfX215LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYWxlbmRhcl9fbXktaXRlbS0tY3VycmVudF09XCJ5ZWFyQ2VsbC5jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwieWVhckNlbGwuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwieWVhckNlbGwudGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ5ZWFyQ2VsbC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInllYXJDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtZmQtY2FsZW5kYXIteWVhcl09XCJ5ZWFyQ2VsbC55ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd25ZZWFySGFuZGxlcigkZXZlbnQsIHllYXJDZWxsLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJfaGFuZGxlUmFuZ2VIb3Zlcih5ZWFyQ2VsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhckNlbGwsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1idXR0b24tLXRvZ2dsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLnNlbGVjdGVkUmFuZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhckNlbGwuaG92ZXJSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyQ2VsbC5zZWxlY3RlZEZpcnN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLnNlbGVjdGVkTGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fbXktaXRlbS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwieWVhckNlbGwuY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYWxlbmRhcl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJDZWxsLmlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYXJpYS1sYWJlbCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5ZWFyQ2VsbC5jdXJyZW50ID8gX3RvZGF5TGFiZWxJZCArICcgJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeWVhckNlbGwuc2VsZWN0ZWQgPyBfc2VsZWN0ZWREYXRlTGFiZWxJZCA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgeWVhckNlbGwubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGhpZGRlbiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYXR0ci5pZF09XCJ5ZWFyQ2VsbC5pZCArICctYXJpYS1sYWJlbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyQ2VsbC5hcmlhTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG4gICAgPC90Ym9keT5cbjwvdGFibGU+XG48IS0tIEhpZGRlbiBlbGVtZW50cyBmb3IgYXJpYSBwdXJwb3NlcyAtLT5cbjxkaXYgaGlkZGVuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3RvZGF5TGFiZWxJZFwiPnt7ICdjb3JlQ2FsZW5kYXIudG9kYXlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX3NlbGVjdGVkRGF0ZUxhYmVsSWRcIj57eyAnY29yZUNhbGVuZGFyLmRhdGVTZWxlY3RlZExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9kaXY+XG48L2Rpdj5cbiJdfQ==","/** Create an Error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`Calendar: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwRkFBMEY7QUFDMUYsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQWdCO0lBQ2pFLE9BQU8sS0FBSyxDQUNSLG1DQUFtQyxRQUFRLHlDQUF5QztRQUNoRixtRUFBbUU7UUFDbkUsd0JBQXdCLENBQy9CLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENyZWF0ZSBhbiBFcnJvciB0byBiZSB0aHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIHVzZSBhbiBpbnZhbGlkIGRhdGUgaW1wbGVtZW50YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yKHByb3ZpZGVyOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgcmV0dXJuIEVycm9yKFxuICAgICAgICBgQ2FsZW5kYXI6IE5vIHByb3ZpZGVyIGZvdW5kIGZvciAke3Byb3ZpZGVyfS4gWW91IG11c3QgaW1wb3J0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGAgK1xuICAgICAgICAgICAgYG1vZHVsZXMgYXQgeW91ciBhcHBsaWNhdGlvbiByb290OiBGZERhdGV0aW1lTW9kdWxlLCBvciBwcm92aWRlIGEgYCArXG4gICAgICAgICAgICBgY3VzdG9tIGltcGxlbWVudGF0aW9uLmBcbiAgICApO1xufVxuIl19","import { FD_LANGUAGE_ENGLISH } from '@fundamental-ngx/i18n';\nimport { Subject } from 'rxjs';\n/**\n * Provides i18n support for labels inside the calendar component.\n * @deprecated use i18n `coreCalendar` key instead\n */\nexport class CalendarI18nLabels {\n constructor() {\n /** This is event that should be called, when labels are changed, to let component detect an changes. */\n this.labelsChange = new Subject();\n /** Year selection aria label. Used on the button to navigate to the years view. */\n this.yearSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearSelectionLabel;\n /** Years range selection aria label. Used on the button to navigate to the years range view. */\n this.yearsRangeSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.yearsRangeSelectionLabel;\n /** Month selection aria label. Used on the button to navigate to the months view. */\n this.monthSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.monthSelectionLabel;\n /** Day selection aria label. Used on the button to navigate to the day view. */\n this.dateSelectionLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectionLabel;\n /** Previous year aria label. Used on the button to switch to a previous year in the years view. */\n this.previousYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousYearLabel;\n /** Next year aria label. Used on the button to switch to a next year in the years view. */\n this.nextYearLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextYearLabel;\n /** Previous month aria label. Used on the button to switch to a previous month in the months view. */\n this.previousMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.previousMonthLabel;\n /** Next month aria label. Used on the button to switch to a next month in the months view. */\n this.nextMonthLabel = FD_LANGUAGE_ENGLISH.coreCalendar.nextMonthLabel;\n /** Week number column label */\n this.weekColumnLabel = FD_LANGUAGE_ENGLISH.coreCalendar.weekColumnLabel;\n /** Selected date label. Used on the selected day/month/year cell. */\n this.dateSelectedLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dateSelectedLabel;\n /** Is used to describe present date */\n this.todayLabel = FD_LANGUAGE_ENGLISH.coreCalendar.todayLabel;\n /** Range start label. Used for date range selection */\n this.rangeStartLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeStartLabel;\n /** Range end label. Used for date range selection */\n this.rangeEndLabel = FD_LANGUAGE_ENGLISH.coreCalendar.rangeEndLabel;\n /** Past days aria label. Used when days in the past are accessed */\n this.dayInPastLabel = FD_LANGUAGE_ENGLISH.coreCalendar.dayInPastLabel;\n /** Past days aria label. Used when days in the past are accessed */\n this.closeCalendarLabel = FD_LANGUAGE_ENGLISH.coreCalendar.closeCalendarLabel;\n /** Calendar day view aria role description. */\n this.calendarDayViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarDayViewDescription;\n /** Calendar month view aria role description. */\n this.calendarMonthViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarMonthViewDescription;\n /** Calendar years view aria role description. */\n this.calendarYearsViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsViewDescription;\n /** Calendar years range view aria role description. */\n this.calendarYearsRangeViewDescription = FD_LANGUAGE_ENGLISH.coreCalendar.calendarYearsRangeViewDescription;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaTE4bi1sYWJlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvaTE4bi9jYWxlbmRhci1pMThuLWxhYmVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFBL0I7UUFDSSx3R0FBd0c7UUFDL0YsaUJBQVksR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCxtRkFBbUY7UUFDbkYsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLGdHQUFnRztRQUNoRyw2QkFBd0IsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUM7UUFFckYscUZBQXFGO1FBQ3JGLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUUzRSxnRkFBZ0Y7UUFDaEYsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLG1HQUFtRztRQUNuRyxzQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFFdkUsMkZBQTJGO1FBQzNGLGtCQUFhLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUUvRCxzR0FBc0c7UUFDdEcsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLDhGQUE4RjtRQUM5RixtQkFBYyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7UUFFakUsK0JBQStCO1FBQy9CLG9CQUFlLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztRQUVuRSxxRUFBcUU7UUFDckUsc0JBQWlCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBRXZFLHVDQUF1QztRQUN2QyxlQUFVLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUV6RCx1REFBdUQ7UUFDdkQsb0JBQWUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBRW5FLHFEQUFxRDtRQUNyRCxrQkFBYSxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFFL0Qsb0VBQW9FO1FBQ3BFLG1CQUFjLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUVqRSxvRUFBb0U7UUFDcEUsdUJBQWtCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBRXpFLCtDQUErQztRQUMvQywrQkFBMEIsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUM7UUFFekYsaURBQWlEO1FBQ2pELGlDQUE0QixHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQztRQUU3RixpREFBaUQ7UUFDakQsaUNBQTRCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDO1FBRTdGLHVEQUF1RDtRQUN2RCxzQ0FBaUMsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsaUNBQWlDLENBQUM7SUFDM0csQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRkRfTEFOR1VBR0VfRU5HTElTSCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgaTE4biBzdXBwb3J0IGZvciBsYWJlbHMgaW5zaWRlIHRoZSBjYWxlbmRhciBjb21wb25lbnQuXG4gKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBgY29yZUNhbGVuZGFyYCBrZXkgaW5zdGVhZFxuICovXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJJMThuTGFiZWxzIHtcbiAgICAvKiogVGhpcyBpcyBldmVudCB0aGF0IHNob3VsZCBiZSBjYWxsZWQsIHdoZW4gbGFiZWxzIGFyZSBjaGFuZ2VkLCB0byBsZXQgY29tcG9uZW50IGRldGVjdCBhbiBjaGFuZ2VzLiAqL1xuICAgIHJlYWRvbmx5IGxhYmVsc0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKiogWWVhciBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSB5ZWFycyB2aWV3LiAqL1xuICAgIHllYXJTZWxlY3Rpb25MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnllYXJTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBZZWFycyByYW5nZSBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSB5ZWFycyByYW5nZSB2aWV3LiAqL1xuICAgIHllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnllYXJzUmFuZ2VTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBNb250aCBzZWxlY3Rpb24gYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIG5hdmlnYXRlIHRvIHRoZSBtb250aHMgdmlldy4gKi9cbiAgICBtb250aFNlbGVjdGlvbkxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIubW9udGhTZWxlY3Rpb25MYWJlbDtcblxuICAgIC8qKiBEYXkgc2VsZWN0aW9uIGFyaWEgbGFiZWwuIFVzZWQgb24gdGhlIGJ1dHRvbiB0byBuYXZpZ2F0ZSB0byB0aGUgZGF5IHZpZXcuICovXG4gICAgZGF0ZVNlbGVjdGlvbkxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGlvbkxhYmVsO1xuXG4gICAgLyoqIFByZXZpb3VzIHllYXIgYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIHN3aXRjaCB0byBhIHByZXZpb3VzIHllYXIgaW4gdGhlIHllYXJzIHZpZXcuICovXG4gICAgcHJldmlvdXNZZWFyTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5wcmV2aW91c1llYXJMYWJlbDtcblxuICAgIC8qKiBOZXh0IHllYXIgYXJpYSBsYWJlbC4gVXNlZCBvbiB0aGUgYnV0dG9uIHRvIHN3aXRjaCB0byBhIG5leHQgeWVhciBpbiB0aGUgeWVhcnMgdmlldy4gKi9cbiAgICBuZXh0WWVhckxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIubmV4dFllYXJMYWJlbDtcblxuICAgIC8qKiBQcmV2aW91cyBtb250aCBhcmlhIGxhYmVsLiBVc2VkIG9uIHRoZSBidXR0b24gdG8gc3dpdGNoIHRvIGEgcHJldmlvdXMgbW9udGggaW4gdGhlIG1vbnRocyB2aWV3LiAqL1xuICAgIHByZXZpb3VzTW9udGhMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLnByZXZpb3VzTW9udGhMYWJlbDtcblxuICAgIC8qKiBOZXh0IG1vbnRoIGFyaWEgbGFiZWwuIFVzZWQgb24gdGhlIGJ1dHRvbiB0byBzd2l0Y2ggdG8gYSBuZXh0IG1vbnRoIGluIHRoZSBtb250aHMgdmlldy4gKi9cbiAgICBuZXh0TW9udGhMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLm5leHRNb250aExhYmVsO1xuXG4gICAgLyoqIFdlZWsgbnVtYmVyIGNvbHVtbiBsYWJlbCAqL1xuICAgIHdlZWtDb2x1bW5MYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLndlZWtDb2x1bW5MYWJlbDtcblxuICAgIC8qKiBTZWxlY3RlZCBkYXRlIGxhYmVsLiBVc2VkIG9uIHRoZSBzZWxlY3RlZCBkYXkvbW9udGgveWVhciBjZWxsLiAqL1xuICAgIGRhdGVTZWxlY3RlZExhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuZGF0ZVNlbGVjdGVkTGFiZWw7XG5cbiAgICAvKiogSXMgdXNlZCB0byBkZXNjcmliZSBwcmVzZW50IGRhdGUgKi9cbiAgICB0b2RheUxhYmVsID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIudG9kYXlMYWJlbDtcblxuICAgIC8qKiBSYW5nZSBzdGFydCBsYWJlbC4gVXNlZCBmb3IgZGF0ZSByYW5nZSBzZWxlY3Rpb24gKi9cbiAgICByYW5nZVN0YXJ0TGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5yYW5nZVN0YXJ0TGFiZWw7XG5cbiAgICAvKiogUmFuZ2UgZW5kIGxhYmVsLiBVc2VkIGZvciBkYXRlIHJhbmdlIHNlbGVjdGlvbiAqL1xuICAgIHJhbmdlRW5kTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5yYW5nZUVuZExhYmVsO1xuXG4gICAgLyoqIFBhc3QgZGF5cyBhcmlhIGxhYmVsLiBVc2VkIHdoZW4gZGF5cyBpbiB0aGUgcGFzdCBhcmUgYWNjZXNzZWQgKi9cbiAgICBkYXlJblBhc3RMYWJlbCA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmRheUluUGFzdExhYmVsO1xuXG4gICAgLyoqIFBhc3QgZGF5cyBhcmlhIGxhYmVsLiBVc2VkIHdoZW4gZGF5cyBpbiB0aGUgcGFzdCBhcmUgYWNjZXNzZWQgKi9cbiAgICBjbG9zZUNhbGVuZGFyTGFiZWwgPSBGRF9MQU5HVUFHRV9FTkdMSVNILmNvcmVDYWxlbmRhci5jbG9zZUNhbGVuZGFyTGFiZWw7XG5cbiAgICAvKiogQ2FsZW5kYXIgZGF5IHZpZXcgYXJpYSByb2xlIGRlc2NyaXB0aW9uLiAqL1xuICAgIGNhbGVuZGFyRGF5Vmlld0Rlc2NyaXB0aW9uID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuY2FsZW5kYXJEYXlWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgbW9udGggdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJNb250aFZpZXdEZXNjcmlwdGlvbiA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmNhbGVuZGFyTW9udGhWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgeWVhcnMgdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJZZWFyc1ZpZXdEZXNjcmlwdGlvbiA9IEZEX0xBTkdVQUdFX0VOR0xJU0guY29yZUNhbGVuZGFyLmNhbGVuZGFyWWVhcnNWaWV3RGVzY3JpcHRpb247XG5cbiAgICAvKiogQ2FsZW5kYXIgeWVhcnMgcmFuZ2UgdmlldyBhcmlhIHJvbGUgZGVzY3JpcHRpb24uICovXG4gICAgY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uID0gRkRfTEFOR1VBR0VfRU5HTElTSC5jb3JlQ2FsZW5kYXIuY2FsZW5kYXJZZWFyc1JhbmdlVmlld0Rlc2NyaXB0aW9uO1xufVxuIl19","import { inject } from '@angular/core';\nimport { FD_LANGUAGE } from '@fundamental-ngx/i18n';\nimport { map, startWith, switchMap } from 'rxjs';\nimport { CalendarI18nLabels } from './i18n/calendar-i18n-labels';\n/**\n * Use deprecated `CalendarI18nLabels` to patch `FD_LANGUAGE` observable\n */\nexport function patchDeprecatedI18nLabels() {\n const deprecatedSymbol = inject(CalendarI18nLabels, { optional: true });\n if (deprecatedSymbol) {\n return inject(FD_LANGUAGE, { skipSelf: true }).pipe(switchMap((existingLang) => deprecatedSymbol.labelsChange.pipe(startWith(null), map(() => existingLang))), map((existingLang) => ({\n ...existingLang,\n coreCalendar: {\n ...existingLang.coreCalendar,\n ...deprecatedSymbol\n }\n })));\n }\n return inject(FD_LANGUAGE, { skipSelf: true });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0Y2gtZGVwcmVjYXRlZC1pMThuLWxhYmVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9wYXRjaC1kZXByZWNhdGVkLWkxOG4tbGFiZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBYyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRTs7R0FFRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMvQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUN2QixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUNKLEVBQ0QsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLEdBQUcsWUFBWTtZQUNmLFlBQVksRUFBRTtnQkFDVixHQUFHLFlBQVksQ0FBQyxZQUFZO2dCQUM1QixHQUFHLGdCQUFnQjthQUN0QjtTQUNKLENBQUMsQ0FBQyxDQUNOLENBQUM7SUFDTixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkRfTEFOR1VBR0UsIEZkTGFuZ3VhZ2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJJMThuTGFiZWxzIH0gZnJvbSAnLi9pMThuL2NhbGVuZGFyLWkxOG4tbGFiZWxzJztcblxuLyoqXG4gKiBVc2UgZGVwcmVjYXRlZCBgQ2FsZW5kYXJJMThuTGFiZWxzYCB0byBwYXRjaCBgRkRfTEFOR1VBR0VgIG9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoRGVwcmVjYXRlZEkxOG5MYWJlbHMoKTogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPiB7XG4gICAgY29uc3QgZGVwcmVjYXRlZFN5bWJvbCA9IGluamVjdChDYWxlbmRhckkxOG5MYWJlbHMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgaWYgKGRlcHJlY2F0ZWRTeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIGluamVjdChGRF9MQU5HVUFHRSwgeyBza2lwU2VsZjogdHJ1ZSB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChleGlzdGluZ0xhbmcpID0+XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZFN5bWJvbC5sYWJlbHNDaGFuZ2UucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gZXhpc3RpbmdMYW5nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKGV4aXN0aW5nTGFuZykgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZ0xhbmcsXG4gICAgICAgICAgICAgICAgY29yZUNhbGVuZGFyOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nTGFuZy5jb3JlQ2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgICAgIC4uLmRlcHJlY2F0ZWRTeW1ib2xcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluamVjdChGRF9MQU5HVUFHRSwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbn1cbiJdfQ==","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_LANGUAGE } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './calendar-errors';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarLegendFocusingService } from './calendar-legend/calendar-legend-focusing.service';\nimport { CalendarLegendComponent } from './calendar-legend/calendar-legend.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarService } from './calendar.service';\nimport { DateRange } from './models/date-range';\nimport { patchDeprecatedI18nLabels } from './patch-deprecated-i18n-labels';\nimport { CalendarTypeEnum, FdCalendarViewEnum } from './types';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/content-density\";\nimport * as i2 from \"@fundamental-ngx/core/datetime\";\nlet calendarUniqueId = 0;\n/**\n * Months: 1 = January, 12 = december.\n * Days: 1 = Sunday, 7 = Saturday\n *\n * Calendar component used for selecting dates, typically used by the DatePicker and DateTimePicker components.\n * Supports the Angular forms module, enabling form validity, ngModel, etc.\n * ```html\n * <fd-calendar></fd-calendar>\n * ```\n *\n */\nexport class CalendarComponent {\n /** @hidden */\n constructor(_elementRef, _changeDetectorRef, _contentDensityObserver, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats) {\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n /** The currently selected date model with multiple ranges. */\n this.selectedMultipleDateRanges = [];\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = false;\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** Actually shown active view one of 'day' | 'month' | 'year' */\n this.activeView = FdCalendarViewEnum.Day;\n /**\n * The type of calendar\n * 'single' for single date selection\n * 'range' for a range of dates.\n */\n this.calType = CalendarTypeEnum.Single;\n /** Id of the calendar. If none is provided, one will be generated. */\n this.id = 'fd-calendar-' + calendarUniqueId++;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with D object as a parameter. ex:\n * `rule: (fdDate: D) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n this.rangeHoverEffect = false;\n /** Whether to pick the date range in month or year or days format\n * Day format will have a month and year including day\n * Month format will have year including month\n * Year format will have just year\n * Values can be 'month' for Month format, 'year' for Year format or nothing for day format\n */\n this.dateRangeFormat = '';\n /** Event thrown every time active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /** Event thrown every time when value is overwritten from outside and throw back isValid */\n this.isValidDateChange = new EventEmitter();\n /** Event thrown every time when calendar should be closed */\n this.closeCalendar = new EventEmitter();\n /** Event thrown, when close button is clicked */\n this.closeClicked = new EventEmitter();\n /**\n * Whether to show the calendar legend below the calendar.\n * The legend displays special day markers and their meanings.\n */\n this.showCalendarLegend = false;\n /**\n * Whether to display the legend in column layout (true) or row layout (false).\n * Column layout is useful when legend is displayed alongside the calendar.\n */\n this.legendCol = false;\n /** @hidden */\n this._subscriptions = new Subscription();\n /** That allows to define function that should happen, when focus should normally escape of component */\n this.escapeFocusFunction = (event) => {\n event?.preventDefault();\n this._calendarHeaderComponent?.focus();\n };\n /**\n * Function used to disable certain dates in the calendar.\n */\n this.disableFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n this.disableRangeStartFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n this.disableRangeEndFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n _contentDensityObserver.subscribe();\n // set default value\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1);\n this.selectedDate = this._dateTimeAdapter.today();\n this._changeDetectorRef.markForCheck();\n this._listenToLocaleChanges();\n }\n /** @hidden */\n focusOut(event) {\n if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n this.onTouched();\n }\n }\n /** @hidden */\n ngOnInit() {\n this._prepareDisplayedView();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ('nextButtonDisableFunction' in changes ||\n 'previousButtonDisableFunction' in changes ||\n '_currentlyDisplayed' in changes) {\n this._setNavigationButtonsStates();\n }\n }\n /** @hidden */\n getWeekStartDay() {\n return this.startingDayOfWeek === undefined ? this._adapterStartingDayOfWeek : this.startingDayOfWeek;\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms.\n */\n writeValue(selected) {\n let valid = true;\n const isValidDate = (date) => date != null && this._dateTimeAdapter.isValid(date);\n const isValidRange = (range) => range != null && isValidDate(range.start) && isValidDate(range.end);\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n const dates = Array.isArray(selected) ? selected : [selected];\n valid = dates.every(isValidDate);\n this.selectedMultipleDates = dates;\n }\n else if (this.calType === CalendarTypeEnum.Range) {\n const ranges = Array.isArray(selected) ? selected : [];\n valid = ranges.every(isValidRange);\n this.selectedMultipleDateRanges = ranges.map((range) => ({\n start: range?.start || null,\n end: range?.end || null\n }));\n }\n }\n else {\n if (this.calType === CalendarTypeEnum.Single) {\n valid = isValidDate(selected);\n this.selectedDate = selected;\n }\n else if (this.calType === CalendarTypeEnum.Range) {\n const range = selected;\n valid = range && isValidRange(range);\n this.selectedRangeDate = range\n ? { start: range.start || null, end: range.end || null }\n : {\n start: null,\n end: null\n };\n }\n }\n if (valid) {\n this._prepareDisplayedView();\n }\n this._changeDetectorRef.detectChanges();\n this.isValidDateChange.emit(valid);\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Method that handle active view change and throws event.\n *\n * Fired by calendar header component.\n */\n handleActiveViewChange(activeView) {\n if (activeView === this.activeView) {\n return;\n }\n this.activeView = activeView;\n this.activeViewChange.emit(activeView);\n if (activeView === FdCalendarViewEnum.Month) {\n this.onMonthViewSelected();\n }\n if (activeView === FdCalendarViewEnum.Year) {\n this.onYearViewSelected();\n }\n if (activeView === FdCalendarViewEnum.AggregatedYear) {\n this.onYearsRangeViewSelected();\n }\n this._setNavigationButtonsStates();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected single date changed\n */\n selectedDateChanged(date) {\n this.selectedDate = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedDateChange.emit(date);\n this.closeCalendar.emit();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected multi date changed\n */\n selectedMultipleDatesChanged(date) {\n this.selectedMultipleDates = date;\n this._setNavigationButtonsStates();\n this.onChange(date);\n this.selectedMultipleDatesChange.emit(date);\n this.closeCalendar.emit();\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedRangeDateChanged(dates) {\n if (dates) {\n this.selectedRangeDate = { start: dates.start, end: dates.end };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this.closeCalendar.emit();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from day view component, when there is selected range date changed\n */\n selectedMultipleDateRangesChanged(dates) {\n if (dates) {\n this.selectedMultipleDateRanges = dates;\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n this.onChange(this.selectedMultipleDateRanges);\n this.closeCalendar.emit();\n }\n }\n /** Function that handles next arrow icon click, depending on current view it changes month, year or list of years */\n handleNextArrowClick() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayNextMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayNextYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayNextYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayNextYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n /** Function that handles previous arrow icon click, depending on current view it changes month, year or list of years */\n handlePreviousArrowClick() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n this.displayPreviousMonth();\n break;\n case FdCalendarViewEnum.Month:\n this.displayPreviousYear();\n break;\n case FdCalendarViewEnum.Year:\n this.displayPreviousYearList();\n break;\n case FdCalendarViewEnum.AggregatedYear:\n this.displayPreviousYearsList();\n break;\n }\n this._setNavigationButtonsStates();\n }\n /** Function that allows to switch actual view to next month */\n displayNextMonth() {\n if (this._currentlyDisplayed.month === 12) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year + 1, month: 1 };\n }\n else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month + 1\n };\n }\n }\n /** Function that allows to switch actual view to previous month */\n displayPreviousMonth() {\n if (this._currentlyDisplayed.month <= 1) {\n this._currentlyDisplayed = { year: this._currentlyDisplayed.year - 1, month: 12 };\n }\n else {\n this._currentlyDisplayed = {\n year: this._currentlyDisplayed.year,\n month: this._currentlyDisplayed.month - 1\n };\n }\n }\n /** Function that allows to switch actual view to next year */\n displayNextYear() {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year + 1 };\n }\n /** Function that allows to switch actual view to previous year */\n displayPreviousYear() {\n this._currentlyDisplayed = { month: this._currentlyDisplayed.month, year: this._currentlyDisplayed.year - 1 };\n }\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearList() {\n this._yearViewComponent.loadNextYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearList() {\n this._yearViewComponent.loadPreviousYearList();\n this._currentlyDisplayed = {\n month: this._currentlyDisplayed.month,\n year: this._yearViewComponent._firstYearInList\n };\n }\n /** Function that allows to switch actually displayed list of year to next year list*/\n displayNextYearsList() {\n this._aggregatedYearViewComponent.loadNextYearsList();\n }\n /** Function that allows to switch actually displayed list of year to previous year list*/\n displayPreviousYearsList() {\n this._aggregatedYearViewComponent.loadPreviousYearsList();\n }\n /**\n * Function that allows to change currently displayed month/year configuration,\n * which are connected to days displayed\n */\n setCurrentlyDisplayed(date) {\n if (this._dateTimeAdapter.isValid(date)) {\n this._currentlyDisplayed = {\n month: this._dateTimeAdapter.getMonth(date),\n year: this._dateTimeAdapter.getYear(date)\n };\n }\n }\n /**\n * Set initial focus on one of the calendar's element\n */\n initialFocus() {\n this._getActiveFocusableView()?.setFocusOnCell();\n }\n /**\n * @hidden\n * Function that handles changes from month view child component, changes actual view and changes currently displayed month\n */\n handleMonthViewChange(month) {\n this._currentlyDisplayed = { month, year: this._currentlyDisplayed.year };\n // if mm/yyyy format date is not enabled then only show days view\n if (!this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n this.activeViewChange.emit(this.activeView);\n }\n /** Select year */\n selectedYear(yearSelected) {\n this._currentlyDisplayed.year = yearSelected;\n // if month format date range is enabled then on selecting year show month view else show days view\n // if year format date range is enabled then view remains same on selecting year\n if (this.isDateRangeMonthFormat()) {\n this.activeView = FdCalendarViewEnum.Month;\n this.onMonthViewSelected();\n }\n else if (this.isDateRangeYearFormat()) {\n this.activeView = FdCalendarViewEnum.Year;\n this.onYearViewSelected();\n }\n else {\n this.activeView = FdCalendarViewEnum.Day;\n this.onDaysViewSelected();\n }\n }\n /** Select year range */\n selectedYears(yearsSelected) {\n this.activeView = FdCalendarViewEnum.Year;\n this._currentlyDisplayed = {\n ...this._currentlyDisplayed,\n year: yearsSelected.startYear\n };\n this.onYearViewSelected();\n }\n /** @hidden */\n onDaysViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._dayViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onMonthViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._monthViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onYearViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._yearViewComponent?.setFocusOnCell();\n }\n /** @hidden */\n onYearsRangeViewSelected() {\n this._changeDetectorRef.detectChanges();\n this._aggregatedYearViewComponent?.setFocusOnCell();\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid() {\n if (this.allowMultipleSelection) {\n if (this.calType === CalendarTypeEnum.Single) {\n return (this.selectedMultipleDates &&\n this.selectedMultipleDates.every((d) => this._dateTimeAdapter.isValid(d)));\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (this.selectedMultipleDateRanges &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.start)) &&\n this.selectedMultipleDateRanges.every((dr) => this._dateTimeAdapter.isValid(dr.end)));\n }\n }\n else {\n if (this.calType === CalendarTypeEnum.Single) {\n return this._dateTimeAdapter.isValid(this.selectedDate);\n }\n if (this.calType === CalendarTypeEnum.Range) {\n return (this.selectedRangeDate &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.start) &&\n this._dateTimeAdapter.isValid(this.selectedRangeDate.end));\n }\n }\n return false;\n }\n /** Whether the date range format is month */\n isDateRangeMonthFormat() {\n return this.dateRangeFormat === 'month';\n }\n /** Whether the date range format is year */\n isDateRangeYearFormat() {\n return this.dateRangeFormat === 'year';\n }\n /** @hidden */\n _listenToLocaleChanges() {\n this._subscriptions.add(this._dateTimeAdapter.localeChanges.subscribe(() => {\n this._adapterStartingDayOfWeek = (this._dateTimeAdapter.getFirstDayOfWeek() + 1);\n this._changeDetectorRef.markForCheck();\n }));\n }\n /**\n * @hidden\n * Method that sets up the currently displayed variables, like shown month and year.\n * Day grid is based on currently displayed month and year\n */\n _prepareDisplayedView() {\n const { selectedDate, selectedRangeDate, selectedMultipleDates, selectedMultipleDateRanges } = this;\n if (this.calType === CalendarTypeEnum.Single &&\n this._dateTimeAdapter.isValid(selectedDate) &&\n !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedDate);\n }\n else if (selectedMultipleDates?.length > 0 && this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDates[0]);\n }\n else if (selectedRangeDate?.start && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.start);\n }\n else if (selectedRangeDate?.end && !this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedRangeDate.end);\n }\n else if (selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].start &&\n this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].start);\n }\n else if (selectedMultipleDateRanges?.length > 0 &&\n selectedMultipleDateRanges[0].end &&\n this.allowMultipleSelection) {\n this._setCurrentlyDisplayed(selectedMultipleDateRanges[0].end);\n }\n else {\n const today = this._dateTimeAdapter.today();\n this._setCurrentlyDisplayed(today);\n }\n }\n /** @hidden */\n _setCurrentlyDisplayed(date) {\n this._currentlyDisplayed = {\n year: this._dateTimeAdapter.getYear(date),\n month: this._dateTimeAdapter.getMonth(date)\n };\n }\n /** @hidden */\n _getActiveFocusableView() {\n switch (this.activeView) {\n case FdCalendarViewEnum.Day:\n return this._dayViewComponent;\n case FdCalendarViewEnum.Month:\n return this._monthViewComponent;\n case FdCalendarViewEnum.Year:\n return this._yearViewComponent;\n case FdCalendarViewEnum.AggregatedYear:\n return this._aggregatedYearViewComponent;\n default:\n return null;\n }\n }\n /** @hidden */\n _setNavigationButtonsStates() {\n this.previousButtonDisabled = this._isNavigationButtonDisabled(this.previousButtonDisableFunction);\n this.nextButtonDisabled = this._isNavigationButtonDisabled(this.nextButtonDisableFunction);\n this._changeDetectorRef.markForCheck();\n }\n /** @hidden */\n _isNavigationButtonDisabled(disableFunction) {\n return (typeof disableFunction === 'function' &&\n disableFunction(this.selectedDate, this._currentlyDisplayed, this.activeView));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: CalendarComponent, isStandalone: true, selector: \"fd-calendar\", inputs: { selectedDate: \"selectedDate\", selectedMultipleDates: \"selectedMultipleDates\", selectedRangeDate: \"selectedRangeDate\", selectedMultipleDateRanges: \"selectedMultipleDateRanges\", markWeekends: \"markWeekends\", showWeekNumbers: \"showWeekNumbers\", allowMultipleSelection: \"allowMultipleSelection\", mobileLandscape: \"mobileLandscape\", mobilePortrait: \"mobilePortrait\", activeView: \"activeView\", startingDayOfWeek: \"startingDayOfWeek\", calType: \"calType\", id: \"id\", specialDaysRules: \"specialDaysRules\", yearGrid: \"yearGrid\", aggregatedYearGrid: \"aggregatedYearGrid\", rangeHoverEffect: \"rangeHoverEffect\", dateRangeFormat: \"dateRangeFormat\", previousButtonDisableFunction: \"previousButtonDisableFunction\", nextButtonDisableFunction: \"nextButtonDisableFunction\", showCalendarLegend: \"showCalendarLegend\", legendCol: \"legendCol\", escapeFocusFunction: \"escapeFocusFunction\", disableFunction: \"disableFunction\", disableRangeStartFunction: \"disableRangeStartFunction\", disableRangeEndFunction: \"disableRangeEndFunction\" }, outputs: { activeViewChange: \"activeViewChange\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", isValidDateChange: \"isValidDateChange\", closeCalendar: \"closeCalendar\", closeClicked: \"closeClicked\" }, host: { listeners: { \"focusout\": \"focusOut($event)\" }, properties: { \"attr.id\": \"id\", \"class.fd-calendar--mobile-landscape\": \"this.mobileLandscape\", \"class.fd-calendar--mobile-portrait\": \"this.mobilePortrait\" }, classAttribute: \"fd-calendar fd-has-display-block\" }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n CalendarLegendFocusingService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE,\n useFactory: patchDeprecatedI18nLabels\n }\n ], viewQueries: [{ propertyName: \"_dayViewComponent\", first: true, predicate: CalendarDayViewComponent, descendants: true }, { propertyName: \"_monthViewComponent\", first: true, predicate: CalendarMonthViewComponent, descendants: true }, { propertyName: \"_yearViewComponent\", first: true, predicate: CalendarYearViewComponent, descendants: true }, { propertyName: \"_aggregatedYearViewComponent\", first: true, predicate: CalendarAggregatedYearViewComponent, descendants: true }, { propertyName: \"_calendarHeaderComponent\", first: true, predicate: CalendarHeaderComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<fd-calendar-header\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [activeView]=\\\"activeView\\\"\\n [id]=\\\"id\\\"\\n [calendarYearGrid]=\\\"yearGrid\\\"\\n (closeClicked)=\\\"closeClicked.emit()\\\"\\n (nextClicked)=\\\"handleNextArrowClick()\\\"\\n (previousClicked)=\\\"handlePreviousArrowClick()\\\"\\n [previousButtonDisabled]=\\\"previousButtonDisabled\\\"\\n [nextButtonDisabled]=\\\"nextButtonDisabled\\\"\\n (activeViewChange)=\\\"handleActiveViewChange($event)\\\"\\n></fd-calendar-header>\\n@if (_currentlyDisplayed) {\\n @if (activeView === 'day') {\\n <fd-calendar-day-view\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n (selectedDateChange)=\\\"selectedDateChanged($event)\\\"\\n (selectedMultipleDatesChange)=\\\"selectedMultipleDatesChanged($event)\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"selectedMultipleDateRangesChanged($event)\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [startingDayOfWeek]=\\\"getWeekStartDay()\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [calType]=\\\"calType\\\"\\n [id]=\\\"id\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n (nextMonthSelect)=\\\"displayNextMonth()\\\"\\n (previousMonthSelect)=\\\"displayPreviousMonth()\\\"\\n ></fd-calendar-day-view>\\n } @else if (activeView === 'month') {\\n <fd-calendar-month-view\\n [monthSelected]=\\\"_currentlyDisplayed.month\\\"\\n [year]=\\\"_currentlyDisplayed.year\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeMonthYearFormat]=\\\"isDateRangeMonthFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (monthClicked)=\\\"handleMonthViewChange($event)\\\"\\n ></fd-calendar-month-view>\\n } @else if (activeView === 'year') {\\n <fd-calendar-year-view\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeYearFormat]=\\\"isDateRangeYearFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (yearClicked)=\\\"selectedYear($event)\\\"\\n >\\n </fd-calendar-year-view>\\n } @else if (activeView === 'aggregatedYear') {\\n <fd-calendar-aggregated-year-view\\n (yearsClicked)=\\\"selectedYears($event)\\\"\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [aggregatedYearsViewGrid]=\\\"aggregatedYearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n >\\n </fd-calendar-aggregated-year-view>\\n }\\n}\\n@if (showCalendarLegend && specialDaysRules.length > 0) {\\n <fd-calendar-legend [specialDaysRules]=\\\"specialDaysRules\\\" [col]=\\\"legendCol\\\"> </fd-calendar-legend>\\n}\\n\", styles: [\".fd-calendar .fd-calendar__my-item,.fd-calendar__item{background-color:var(--fdCalendar_Item_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-block:var(--fdCalendar_Item_Spacing);margin-inline:0;margin-inline:var(--fdCalendar_Item_Spacing);min-width:var(--fdCalendar_Item_Width);overflow:hidden;padding-block:0;padding-inline:0;position:relative;-webkit-box-flex:1;border:var(--fdCalendar_Item_Border);cursor:pointer;display:inline-block;-ms-flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2);flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2)}.fd-calendar .fd-calendar__my-item:after,.fd-calendar .fd-calendar__my-item:before,.fd-calendar__item:after,.fd-calendar__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{border-bottom:none;border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:0;content:\\\"\\\";height:.3125rem;left:0;position:absolute;right:0;width:100%}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus{z-index:5}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus .fd-calendar__text-wrapper:after,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus .fd-calendar__text-wrapper:after{z-index:var(--fdCalendar_Text_Wrapper_After_Z)}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus{z-index:5}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text-wrapper:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text-wrapper:after{border-bottom:none}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text:after{bottom:0;content:\\\"\\\";height:.1875rem;left:0;position:absolute;right:0;width:100%}.fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:.5rem;left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today[class*=fd-calendar__item--legend-][dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-1:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-1:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-1:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor1);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-1[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-2:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-2:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-2:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor2);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-2[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-3:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-3:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-3:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor3);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-3[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-4:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-4:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-4:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor4);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-4[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-5:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-5:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-5:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor5);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-5[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-6:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-6:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-6:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor6);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-6[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-7:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-7:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-7:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor7);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-7[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-8:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-8:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-8:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor8);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-8[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-9:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-9:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-9:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor9);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-9[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-10:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-10:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-10:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor10);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-10[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-11:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-11:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-11:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor11);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-11[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-12:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-12:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-12:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor12);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-12[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-13:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-13:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-13:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor13);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-13[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-14:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-14:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-14:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor14);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-14[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-15:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-15:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-15:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor15);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-15[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-16:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-16:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-16:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor16);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-16[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-17:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-17:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-17:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor17);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-17[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-18:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-18:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-18:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor18);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-18[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-19:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-19:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-19:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor19);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-19[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-20:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-20:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-20:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor20);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-20[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar{--fdCalendar_Item_Width:2rem;--fdCalendar_Item_Height:2.75rem;--fdCalendar_Padding:.5rem;--fdCalendar_Background:var(--sapList_Background);--fdCalendar_Width:calc(var(--fdCalendar_Item_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Action_Padding:.25rem;--fdCalendar_Action_Width:auto;--fdCalendar_Button_Horizontal_Space:.25rem;--fdCalendar_Item_Spacing:.0625rem;--fdCalendar_Item_Background:var(--sapLegend_WorkingBackground);--fdCalendar_Item_Helper_Height:1.875rem;--fdCalendar_Item_Font_Size:var(--sapFontSize);--fdCalendar_Item_Border:0;--fdCalendar_Item_Current_Border_Width:.125rem;--fdCalendar_Item_Text_Color:var(--sapTextColor);--fdCalendar_Item_Text_Height:2.125rem;background-color:var(--fdCalendar_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Padding);padding-inline:0;padding-inline:var(--fdCalendar_Padding);width:var(--fdCalendar_Width)}.fd-calendar:after,.fd-calendar:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__navigation{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Button_Horizontal_Space);padding-inline:0;position:relative;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-calendar__navigation:after,.fd-calendar__navigation:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.fd-calendar__action:after,.fd-calendar__action:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action:not(:last-child,:first-child){margin-inline:var(--fdCalendar_Action_Padding)}.fd-calendar__action:first-child{-webkit-margin-end:var(--fdCalendar_Action_Padding);margin-inline-end:var(--fdCalendar_Action_Padding)}.fd-calendar__action:last-child{-webkit-margin-start:var(--fdCalendar_Action_Padding);margin-inline-start:var(--fdCalendar_Action_Padding)}.fd-calendar__action>[type=button]{width:100%}.fd-calendar__action--arrow-left,.fd-calendar__action--arrow-right{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:var(--fdCalendar_Action_Width)}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{-webkit-margin-start:auto;margin-inline-start:auto}.fd-calendar__action [class*=sap-icon][dir=rtl],[dir=rtl] .fd-calendar__action [class*=sap-icon]{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fd-calendar__text-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.fd-calendar__text-wrapper:after,.fd-calendar__text-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__item{height:var(--fdCalendar_Item_Height)}.fd-calendar__item.is-hover,.fd-calendar__item:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item.is-disabled,.fd-calendar__item:disabled,.fd-calendar__item[aria-disabled=true]{opacity:.4;pointer-events:none}.fd-calendar__item--weekend{--fdCalendar_Item_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar__item--weekend.is-hover,.fd-calendar__item--weekend:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background);-webkit-filter:brightness(1.05);filter:brightness(1.05)}.fd-calendar__item--other{--fdCalendar_Item_Background:var(--fdCalendar_Background)}.fd-calendar__item--other.is-hover,.fd-calendar__item--other:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item--other .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor)}.fd-calendar__item--selected{--fdCalendar_Item_Background:var(--sapContent_Selected_Background);--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border)}.fd-calendar__item--selected.is-hover,.fd-calendar__item--selected:hover{--fdCalendar_Item_Background:var(--fdCalendar_Item_Active_Background_Hover)}.fd-calendar__item--selected .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_Selected_TextColor);font-family:var(--fdCalendar_Active_Item_Font_Weight)}.fd-calendar__item--range{--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border);--fdCalendar_Item_Background:var(--sapList_SelectionBackgroundColor)}.fd-calendar__item--range.is-hover,.fd-calendar__item--range:hover{--fdCalendar_Item_Background:var(--sapList_Hover_SelectionBackground)}.fd-calendar__item--today.fd-calendar__item--range:after,.fd-calendar__item--today.fd-calendar__item--selected:after{border:.0625rem solid var(--sapList_SelectionBorderColor);border-radius:var(--fdCalendar_Item_Today_Selected_Bottom_Radius);bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item--today{--fdCalendar_Item_Border:solid .125rem var(--sapLegend_CurrentDateTime);-webkit-box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;position:relative}.fd-calendar__item--today:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item.fd-calendar__item--selected.is-focus,.fd-calendar__item.fd-calendar__item--selected:focus{z-index:5}.fd-calendar__item.fd-calendar__item--selected.is-focus .fd-calendar__text-wrapper,.fd-calendar__item.fd-calendar__item--selected:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Item_Text_Active_Focus)}.fd-calendar__item:focus-visible{outline:none}.fd-calendar__item.is-focus,.fd-calendar__item:focus{z-index:5}.fd-calendar__item.is-focus .fd-calendar__text-wrapper,.fd-calendar__item:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Text_Wrapper_Border);-webkit-box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);height:var(--fdCalendar_Text_Wrapper_Height);margin-block:var(--fdCalendar_Text_Wrapper_Margin);margin-inline:var(--fdCalendar_Text_Wrapper_Margin)}.fd-calendar__item.is-focus .fd-calendar__text,.fd-calendar__item:focus .fd-calendar__text{border:var(--fdCalendar_Text_Border_Focus)}.fd-calendar__item--side-helper{-ms-flex-item-align:center;align-self:center;pointer-events:none;--fdCalendar_Item_Height:var(--fdCalendar_Item_Side_Helper,var(--fdCalendar_Item_Helper_Height));--fdCalendar_Item_Background:var(--sapList_Background)}.fd-calendar__item--side-helper .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor);--fdCalendar_Item_Font_Size:var(--sapFontSmallSize)}.fd-calendar .fd-calendar__my-item{max-height:var(--fdCalendar_Item_Height)}.fd-calendar .fd-calendar__my-item-button{min-width:100%;padding-block:0;padding-inline:0}.fd-calendar .fd-calendar__my-item .fd-calendar__text{color:inherit}.fd-calendar__content{border:0;border-spacing:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;width:100%}.fd-calendar__content:after,.fd-calendar__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__content--months,.fd-calendar__content--years{-webkit-padding-before:var(--fdCalendar_Item_Helper_Height);padding-block-start:var(--fdCalendar_Item_Helper_Height);--fdCalendar_Item_Background:transparent}.fd-calendar__content--screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin-block:-1px;margin-inline:-1px;overflow:hidden;padding-block:0;padding-inline:0;white-space:nowrap;width:1px}.fd-calendar__group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table-row-group;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__group:after,.fd-calendar__group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__row:after,.fd-calendar__row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:.1875rem;color:var(--fdCalendar_Item_Text_Color);font-size:var(--fdCalendar_Item_Font_Size);height:var(--fdCalendar_Item_Text_Height);min-width:1.375rem;text-shadow:var(--fdCalendar_Text_Shadow);-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:calc(100% - .7rem);position:relative}.fd-calendar__text:after,.fd-calendar__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text.is-focus,.fd-calendar__text:focus{border:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth);z-index:5}.fd-calendar[class*=-compact],.fd-calendar[class*=-condensed],[class*=-compact] .fd-calendar:not([class*=-cozy]),[class*=-condensed] .fd-calendar:not([class*=-cozy]){--fdCalendar_Width:calc(var(--fdCalendar_Action_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Padding:.5rem;--fdCalendar_Item_Text_Height:1.375rem;--fdCalendar_Item_Height:2rem;--fdCalendar_Button_Horizontal_Space:.1875rem;--fdCalendar_Action_Width:2rem;--fdCalendar_Item_Width:var(--fdCalendar_Action_Width)}.fd-calendar--mobile-landscape,.fd-calendar--mobile-portrait{height:100%;width:100%}.fd-calendar--mobile-landscape{--fdCalendar_Padding:0;--fdCalendar_Item_Side_Helper:1.625rem}.fd-calendar--mobile-landscape .fd-calendar__navigation--main{max-width:20rem}.fd-calendar--mobile-portrait{--fdCalendar_Padding:0;-webkit-padding-before:1rem;padding-block-start:1rem}.fd-calendar-legend{background:var(--sapList_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);-webkit-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);-moz-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:.5rem;padding-inline:0;padding-inline:.5rem}.fd-calendar-legend:after,.fd-calendar-legend:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend--auto-column{--fdCalendar_Legend_Column_Width:auto}.fd-calendar-legend__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;border-radius:.25rem;-ms-flex-direction:row;flex-direction:row;gap:.5rem;min-width:7.5rem;padding-block:var(--fdCalendar_Legend_Item_Padding,.25rem);padding-inline:var(--fdCalendar_Legend_Item_Padding,.25rem)}.fd-calendar-legend__item:after,.fd-calendar-legend__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:focus{z-index:5}.fd-calendar-legend__item.is-active,.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:active,.fd-calendar-legend__item:focus{-webkit-box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset;box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset}.fd-calendar-legend__item--appointment{--fdCalendar_Legend_Marker_Border_Radius:1rem}.fd-calendar-legend__item--today{--fdCalendar_Legend_Marker_Border_Width:.125rem;--fdCalendar_Legend_Marker_Background:var(--sapList_Background);--fdCalendar_Legend_Marker_Border_Color:var(--sapLegend_CurrentDateTime)}.fd-calendar-legend__item--selected{--fdCalendar_Legend_Marker_Background:var(--sapSelectedColor)}.fd-calendar-legend__item--work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_WorkingBackground)}.fd-calendar-legend__item--non-work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar-legend__item--placeholder-1{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor1)}.fd-calendar-legend__item--placeholder-2{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor2)}.fd-calendar-legend__item--placeholder-3{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor3)}.fd-calendar-legend__item--placeholder-4{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor4)}.fd-calendar-legend__item--placeholder-5{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor5)}.fd-calendar-legend__item--placeholder-6{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor6)}.fd-calendar-legend__item--placeholder-7{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor7)}.fd-calendar-legend__item--placeholder-8{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor8)}.fd-calendar-legend__item--placeholder-9{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor9)}.fd-calendar-legend__item--placeholder-10{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor10)}.fd-calendar-legend__item--placeholder-11{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor11)}.fd-calendar-legend__item--placeholder-12{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor12)}.fd-calendar-legend__item--placeholder-13{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor13)}.fd-calendar-legend__item--placeholder-14{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor14)}.fd-calendar-legend__item--placeholder-15{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor15)}.fd-calendar-legend__item--placeholder-16{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor16)}.fd-calendar-legend__item--placeholder-17{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor17)}.fd-calendar-legend__item--placeholder-18{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor18)}.fd-calendar-legend__item--placeholder-19{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor19)}.fd-calendar-legend__item--placeholder-20{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor20)}.fd-calendar-legend__marker{background:var(--fdCalendar_Legend_Marker_Background,var(--sapList_Background));border:0;border-color:var(--fdCalendar_Legend_Marker_Border_Color,var(--sapContent_ForegroundBorderColor));border-radius:var(--fdCalendar_Legend_Marker_Border_Radius,0);border-style:solid;border-width:var(--fdCalendar_Legend_Marker_Border_Width,.0625rem);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;max-height:1rem;max-width:1rem;min-height:1rem;min-width:1rem;padding-block:0;padding-inline:0;width:1rem}.fd-calendar-legend__marker:after,.fd-calendar-legend__marker:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_LabelColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1rem;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;vertical-align:middle;white-space:pre-line}.fd-calendar-legend__text:after,.fd-calendar-legend__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend[class*=-compact],.fd-calendar-legend[class*=-condensed],[class*=-compact] .fd-calendar-legend:not([class*=-cozy]),[class*=-condensed] .fd-calendar-legend:not([class*=-cozy]){--fdCalendar_Legend_Item_Padding:.125rem}.fd-has-display-block{display:block}.fd-calendar__text{max-width:calc(100% - .375rem)}fd-calendar-legend{display:block}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/calendar.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: \"ngmodule\", type: ContentDensityModule }, { kind: \"component\", type: CalendarHeaderComponent, selector: \"fd-calendar-header\", inputs: [\"activeView\", \"currentlyDisplayed\", \"previousButtonDisabled\", \"nextButtonDisabled\", \"calendarYearGrid\", \"id\", \"mobileLandscape\"], outputs: [\"activeViewChange\", \"previousClicked\", \"nextClicked\"] }, { kind: \"component\", type: CalendarDayViewComponent, selector: \"fd-calendar-day-view\", inputs: [\"currentlyDisplayed\", \"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\", \"startingDayOfWeek\", \"calType\", \"id\", \"rangeHoverEffect\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"focusEscapeFunction\", \"specialDaysRules\"], outputs: [\"nextMonthSelect\", \"previousMonthSelect\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"disableFunctionChange\", \"disableRangeStartFunctionChange\", \"disableRangeEndFunctionChange\", \"startingDayOfWeekChange\", \"calTypeChange\", \"rangeHoverEffectChange\", \"allowMultipleSelectionChange\"] }, { kind: \"component\", type: CalendarMonthViewComponent, selector: \"fd-calendar-month-view\", inputs: [\"id\", \"monthSelected\", \"focusEscapeFunction\", \"year\", \"isDateRangeMonthYearFormat\", \"rangeHoverEffect\", \"selectedRangeDate\"], outputs: [\"monthClicked\", \"selectedRangeDateChange\"] }, { kind: \"component\", type: CalendarYearViewComponent, selector: \"fd-calendar-year-view\", inputs: [\"id\", \"focusEscapeFunction\", \"yearSelected\", \"yearViewGrid\", \"isDateRangeYearFormat\", \"rangeHoverEffect\", \"selectedRangeDate\"], outputs: [\"yearClicked\", \"selectedRangeDateChange\"] }, { kind: \"component\", type: CalendarAggregatedYearViewComponent, selector: \"fd-calendar-aggregated-year-view\", inputs: [\"id\", \"focusEscapeFunction\", \"yearSelected\", \"aggregatedYearsViewGrid\", \"yearViewGrid\"], outputs: [\"yearsClicked\"] }, { kind: \"component\", type: CalendarLegendComponent, selector: \"fd-calendar-legend\", inputs: [\"col\", \"displayTodayLegendItem\", \"displaySelectedLegendItem\", \"displayWorkDayLegendItem\", \"displayNonWorkDayLegendItem\", \"specialDaysRules\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-calendar', encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n },\n CalendarService,\n CalendarLegendFocusingService,\n contentDensityObserverProviders(),\n {\n provide: FD_LANGUAGE,\n useFactory: patchDeprecatedI18nLabels\n }\n ], host: {\n '[attr.id]': 'id',\n class: 'fd-calendar fd-has-display-block'\n }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n ContentDensityModule,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarLegendComponent\n ], template: \"<fd-calendar-header\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [activeView]=\\\"activeView\\\"\\n [id]=\\\"id\\\"\\n [calendarYearGrid]=\\\"yearGrid\\\"\\n (closeClicked)=\\\"closeClicked.emit()\\\"\\n (nextClicked)=\\\"handleNextArrowClick()\\\"\\n (previousClicked)=\\\"handlePreviousArrowClick()\\\"\\n [previousButtonDisabled]=\\\"previousButtonDisabled\\\"\\n [nextButtonDisabled]=\\\"nextButtonDisabled\\\"\\n (activeViewChange)=\\\"handleActiveViewChange($event)\\\"\\n></fd-calendar-header>\\n@if (_currentlyDisplayed) {\\n @if (activeView === 'day') {\\n <fd-calendar-day-view\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n (selectedDateChange)=\\\"selectedDateChanged($event)\\\"\\n (selectedMultipleDatesChange)=\\\"selectedMultipleDatesChanged($event)\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"selectedMultipleDateRangesChanged($event)\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [currentlyDisplayed]=\\\"_currentlyDisplayed\\\"\\n [startingDayOfWeek]=\\\"getWeekStartDay()\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [calType]=\\\"calType\\\"\\n [id]=\\\"id\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n (nextMonthSelect)=\\\"displayNextMonth()\\\"\\n (previousMonthSelect)=\\\"displayPreviousMonth()\\\"\\n ></fd-calendar-day-view>\\n } @else if (activeView === 'month') {\\n <fd-calendar-month-view\\n [monthSelected]=\\\"_currentlyDisplayed.month\\\"\\n [year]=\\\"_currentlyDisplayed.year\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeMonthYearFormat]=\\\"isDateRangeMonthFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (monthClicked)=\\\"handleMonthViewChange($event)\\\"\\n ></fd-calendar-month-view>\\n } @else if (activeView === 'year') {\\n <fd-calendar-year-view\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n [isDateRangeYearFormat]=\\\"isDateRangeYearFormat()\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n (selectedRangeDateChange)=\\\"selectedRangeDateChanged($event)\\\"\\n (yearClicked)=\\\"selectedYear($event)\\\"\\n >\\n </fd-calendar-year-view>\\n } @else if (activeView === 'aggregatedYear') {\\n <fd-calendar-aggregated-year-view\\n (yearsClicked)=\\\"selectedYears($event)\\\"\\n [yearSelected]=\\\"_currentlyDisplayed.year\\\"\\n [yearViewGrid]=\\\"yearGrid\\\"\\n [aggregatedYearsViewGrid]=\\\"aggregatedYearGrid\\\"\\n [id]=\\\"id\\\"\\n [focusEscapeFunction]=\\\"escapeFocusFunction\\\"\\n >\\n </fd-calendar-aggregated-year-view>\\n }\\n}\\n@if (showCalendarLegend && specialDaysRules.length > 0) {\\n <fd-calendar-legend [specialDaysRules]=\\\"specialDaysRules\\\" [col]=\\\"legendCol\\\"> </fd-calendar-legend>\\n}\\n\", styles: [\".fd-calendar .fd-calendar__my-item,.fd-calendar__item{background-color:var(--fdCalendar_Item_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-block:var(--fdCalendar_Item_Spacing);margin-inline:0;margin-inline:var(--fdCalendar_Item_Spacing);min-width:var(--fdCalendar_Item_Width);overflow:hidden;padding-block:0;padding-inline:0;position:relative;-webkit-box-flex:1;border:var(--fdCalendar_Item_Border);cursor:pointer;display:inline-block;-ms-flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2);flex:1 1 calc(var(--fdCalendar_Item_Current_Border_Width)*2 + var(--fdCalendar_Item_Spacing)*2)}.fd-calendar .fd-calendar__my-item:after,.fd-calendar .fd-calendar__my-item:before,.fd-calendar__item:after,.fd-calendar__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{border-bottom:none;border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:0;content:\\\"\\\";height:.3125rem;left:0;position:absolute;right:0;width:100%}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus{z-index:5}[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today).is-focus .fd-calendar__text-wrapper:after,[class*=fd-calendar__item--legend-]:not(.fd-calendar__item--today):focus .fd-calendar__text-wrapper:after{z-index:var(--fdCalendar_Text_Wrapper_After_Z)}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus{z-index:5}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text-wrapper:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text-wrapper:after{border-bottom:none}.fd-calendar__item--today[class*=fd-calendar__item--legend-].is-focus .fd-calendar__text:after,.fd-calendar__item--today[class*=fd-calendar__item--legend-]:focus .fd-calendar__text:after{bottom:0;content:\\\"\\\";height:.1875rem;left:0;position:absolute;right:0;width:100%}.fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:.5rem;left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today[class*=fd-calendar__item--legend-][dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today[class*=fd-calendar__item--legend-] .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-1:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-1:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-1:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-1.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-1:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor1)}.fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor1);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-1[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-1 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-2:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-2:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-2:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-2.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-2:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor2)}.fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor2);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-2[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-2 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-3:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-3:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-3:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-3.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-3:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor3)}.fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor3);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-3[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-3 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-4:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-4:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-4:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-4.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-4:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor4)}.fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor4);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-4[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-4 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-5:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-5:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-5:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-5.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-5:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor5)}.fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor5);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-5[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-5 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-6:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-6:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-6:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-6.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-6:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor6)}.fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor6);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-6[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-6 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-7:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-7:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-7:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-7.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-7:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor7)}.fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor7);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-7[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-7 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-8:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-8:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-8:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-8.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-8:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor8)}.fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor8);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-8[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-8 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-9:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-9:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-9:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-9.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-9:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor9)}.fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor9);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-9[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-9 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-10:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-10:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-10:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-10.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-10:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor10)}.fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor10);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-10[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-10 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-11:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-11:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-11:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-11.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-11:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor11)}.fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor11);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-11[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-11 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-12:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-12:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-12:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-12.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-12:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor12)}.fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor12);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-12[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-12 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-13:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-13:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-13:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-13.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-13:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor13)}.fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor13);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-13[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-13 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-14:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-14:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-14:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-14.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-14:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor14)}.fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor14);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-14[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-14 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-15:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-15:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-15:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-15.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-15:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor15)}.fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor15);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-15[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-15 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-16:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-16:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-16:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-16.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-16:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor16)}.fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor16);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-16[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-16 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-17:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-17:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-17:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-17.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-17:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor17)}.fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor17);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-17[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-17 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-18:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-18:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-18:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-18.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-18:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor18)}.fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor18);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-18[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-18 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-19:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-19:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-19:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-19.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-19:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor19)}.fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor19);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-19[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-19 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar__item--legend-20:not(.fd-calendar__item--today) .fd-calendar__text-wrapper:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--range .fd-calendar__text-wrapper:after,.fd-calendar__item--legend-20:not(.fd-calendar__item--today).fd-calendar__item--selected .fd-calendar__text-wrapper:after{height:var(--fdCalendar_Item_Selected_Legend_Height)}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus,.fd-calendar__item--today.fd-calendar__item--legend-20:focus{z-index:5}.fd-calendar__item--today.fd-calendar__item--legend-20.is-focus .fd-calendar__text:after,.fd-calendar__item--today.fd-calendar__item--legend-20:focus .fd-calendar__text:after{-webkit-box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20);box-shadow:inset 0 calc(var(--fdCalendar_Special_Day_Marker_Height)*-1) 0 var(--sapLegendColor20)}.fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{border-bottom:.25rem solid var(--sapLegendColor20);border-radius:0 0 var(--fdCalendar_Item_Legend_Bottom_Border_Radius) var(--fdCalendar_Item_Legend_Bottom_Border_Radius);border-top:var(--fdCalendar_Item_Legend_Top_Border);bottom:.0625rem;content:\\\"\\\";height:var(--fdCalendar_Item_Text_Wrapper_Height);left:.0625rem;position:absolute;right:0;width:calc(100% - .125rem)}.fd-calendar__item--today.fd-calendar__item--legend-20[dir=rtl] .fd-calendar__text-wrapper:after,[dir=rtl] .fd-calendar__item--today.fd-calendar__item--legend-20 .fd-calendar__text-wrapper:after{left:0;right:.0625rem}.fd-calendar{--fdCalendar_Item_Width:2rem;--fdCalendar_Item_Height:2.75rem;--fdCalendar_Padding:.5rem;--fdCalendar_Background:var(--sapList_Background);--fdCalendar_Width:calc(var(--fdCalendar_Item_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Action_Padding:.25rem;--fdCalendar_Action_Width:auto;--fdCalendar_Button_Horizontal_Space:.25rem;--fdCalendar_Item_Spacing:.0625rem;--fdCalendar_Item_Background:var(--sapLegend_WorkingBackground);--fdCalendar_Item_Helper_Height:1.875rem;--fdCalendar_Item_Font_Size:var(--sapFontSize);--fdCalendar_Item_Border:0;--fdCalendar_Item_Current_Border_Width:.125rem;--fdCalendar_Item_Text_Color:var(--sapTextColor);--fdCalendar_Item_Text_Height:2.125rem;background-color:var(--fdCalendar_Background);border:0;border-radius:var(--fdCalendar_Border_Radius);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Padding);padding-inline:0;padding-inline:var(--fdCalendar_Padding);width:var(--fdCalendar_Width)}.fd-calendar:after,.fd-calendar:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__navigation{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:var(--fdCalendar_Button_Horizontal_Space);padding-inline:0;position:relative;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.fd-calendar__navigation:after,.fd-calendar__navigation:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.fd-calendar__action:after,.fd-calendar__action:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__action:not(:last-child,:first-child){margin-inline:var(--fdCalendar_Action_Padding)}.fd-calendar__action:first-child{-webkit-margin-end:var(--fdCalendar_Action_Padding);margin-inline-end:var(--fdCalendar_Action_Padding)}.fd-calendar__action:last-child{-webkit-margin-start:var(--fdCalendar_Action_Padding);margin-inline-start:var(--fdCalendar_Action_Padding)}.fd-calendar__action>[type=button]{width:100%}.fd-calendar__action--arrow-left,.fd-calendar__action--arrow-right{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:var(--fdCalendar_Action_Width)}.fd-calendar__action--arrow-left+.fd-calendar__action--arrow-right{-webkit-margin-start:auto;margin-inline-start:auto}.fd-calendar__action [class*=sap-icon][dir=rtl],[dir=rtl] .fd-calendar__action [class*=sap-icon]{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fd-calendar__text-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.fd-calendar__text-wrapper:after,.fd-calendar__text-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__item{height:var(--fdCalendar_Item_Height)}.fd-calendar__item.is-hover,.fd-calendar__item:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item.is-disabled,.fd-calendar__item:disabled,.fd-calendar__item[aria-disabled=true]{opacity:.4;pointer-events:none}.fd-calendar__item--weekend{--fdCalendar_Item_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar__item--weekend.is-hover,.fd-calendar__item--weekend:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background);-webkit-filter:brightness(1.05);filter:brightness(1.05)}.fd-calendar__item--other{--fdCalendar_Item_Background:var(--fdCalendar_Background)}.fd-calendar__item--other.is-hover,.fd-calendar__item--other:hover{--fdCalendar_Item_Background:var(--sapList_Hover_Background)}.fd-calendar__item--other .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor)}.fd-calendar__item--selected{--fdCalendar_Item_Background:var(--sapContent_Selected_Background);--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border)}.fd-calendar__item--selected.is-hover,.fd-calendar__item--selected:hover{--fdCalendar_Item_Background:var(--fdCalendar_Item_Active_Background_Hover)}.fd-calendar__item--selected .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_Selected_TextColor);font-family:var(--fdCalendar_Active_Item_Font_Weight)}.fd-calendar__item--range{--fdCalendar_Item_Border:var(--fdCalendar_Active_Item_Border);--fdCalendar_Item_Background:var(--sapList_SelectionBackgroundColor)}.fd-calendar__item--range.is-hover,.fd-calendar__item--range:hover{--fdCalendar_Item_Background:var(--sapList_Hover_SelectionBackground)}.fd-calendar__item--today.fd-calendar__item--range:after,.fd-calendar__item--today.fd-calendar__item--selected:after{border:.0625rem solid var(--sapList_SelectionBorderColor);border-radius:var(--fdCalendar_Item_Today_Selected_Bottom_Radius);bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item--today{--fdCalendar_Item_Border:solid .125rem var(--sapLegend_CurrentDateTime);-webkit-box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;box-shadow:0 0 0 .0625rem var(--sapList_Background) inset;position:relative}.fd-calendar__item--today:after{border-radius:.3125rem;bottom:.0625rem;content:\\\"\\\";height:calc(100% - .125rem);left:.0625rem;position:absolute;top:.0625rem;width:calc(100% - .125rem)}.fd-calendar__item.fd-calendar__item--selected.is-focus,.fd-calendar__item.fd-calendar__item--selected:focus{z-index:5}.fd-calendar__item.fd-calendar__item--selected.is-focus .fd-calendar__text-wrapper,.fd-calendar__item.fd-calendar__item--selected:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Item_Text_Active_Focus)}.fd-calendar__item:focus-visible{outline:none}.fd-calendar__item.is-focus,.fd-calendar__item:focus{z-index:5}.fd-calendar__item.is-focus .fd-calendar__text-wrapper,.fd-calendar__item:focus .fd-calendar__text-wrapper{border:var(--fdCalendar_Text_Wrapper_Border);-webkit-box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);box-sizing:var(--fdCalendar_Text_Wrapper_Box_Sizing);height:var(--fdCalendar_Text_Wrapper_Height);margin-block:var(--fdCalendar_Text_Wrapper_Margin);margin-inline:var(--fdCalendar_Text_Wrapper_Margin)}.fd-calendar__item.is-focus .fd-calendar__text,.fd-calendar__item:focus .fd-calendar__text{border:var(--fdCalendar_Text_Border_Focus)}.fd-calendar__item--side-helper{-ms-flex-item-align:center;align-self:center;pointer-events:none;--fdCalendar_Item_Height:var(--fdCalendar_Item_Side_Helper,var(--fdCalendar_Item_Helper_Height));--fdCalendar_Item_Background:var(--sapList_Background)}.fd-calendar__item--side-helper .fd-calendar__text{--fdCalendar_Item_Text_Color:var(--sapContent_LabelColor);--fdCalendar_Item_Font_Size:var(--sapFontSmallSize)}.fd-calendar .fd-calendar__my-item{max-height:var(--fdCalendar_Item_Height)}.fd-calendar .fd-calendar__my-item-button{min-width:100%;padding-block:0;padding-inline:0}.fd-calendar .fd-calendar__my-item .fd-calendar__text{color:inherit}.fd-calendar__content{border:0;border-spacing:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;width:100%}.fd-calendar__content:after,.fd-calendar__content:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__content--months,.fd-calendar__content--years{-webkit-padding-before:var(--fdCalendar_Item_Helper_Height);padding-block-start:var(--fdCalendar_Item_Helper_Height);--fdCalendar_Item_Background:transparent}.fd-calendar__content--screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin-block:-1px;margin-inline:-1px;overflow:hidden;padding-block:0;padding-inline:0;white-space:nowrap;width:1px}.fd-calendar__group{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:table-row-group;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__group:after,.fd-calendar__group:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__row{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-calendar__row:after,.fd-calendar__row:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:.1875rem;color:var(--fdCalendar_Item_Text_Color);font-size:var(--fdCalendar_Item_Font_Size);height:var(--fdCalendar_Item_Text_Height);min-width:1.375rem;text-shadow:var(--fdCalendar_Text_Shadow);-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:calc(100% - .7rem);position:relative}.fd-calendar__text:after,.fd-calendar__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar__text.is-focus,.fd-calendar__text:focus{border:var(--sapContent_FocusColor) var(--sapContent_FocusStyle) var(--sapContent_FocusWidth);z-index:5}.fd-calendar[class*=-compact],.fd-calendar[class*=-condensed],[class*=-compact] .fd-calendar:not([class*=-cozy]),[class*=-condensed] .fd-calendar:not([class*=-cozy]){--fdCalendar_Width:calc(var(--fdCalendar_Action_Width)*8 + var(--fdCalendar_Padding)*2 + var(--fdCalendar_Item_Spacing)*16);--fdCalendar_Padding:.5rem;--fdCalendar_Item_Text_Height:1.375rem;--fdCalendar_Item_Height:2rem;--fdCalendar_Button_Horizontal_Space:.1875rem;--fdCalendar_Action_Width:2rem;--fdCalendar_Item_Width:var(--fdCalendar_Action_Width)}.fd-calendar--mobile-landscape,.fd-calendar--mobile-portrait{height:100%;width:100%}.fd-calendar--mobile-landscape{--fdCalendar_Padding:0;--fdCalendar_Item_Side_Helper:1.625rem}.fd-calendar--mobile-landscape .fd-calendar__navigation--main{max-width:20rem}.fd-calendar--mobile-portrait{--fdCalendar_Padding:0;-webkit-padding-before:1rem;padding-block-start:1rem}.fd-calendar-legend{background:var(--sapList_Background);border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);-webkit-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);-moz-column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);column-width:var(--fdCalendar_Legend_Column_Width,7.5rem);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-block:.5rem;padding-inline:0;padding-inline:.5rem}.fd-calendar-legend:after,.fd-calendar-legend:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend--auto-column{--fdCalendar_Legend_Column_Width:auto}.fd-calendar-legend__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;border-radius:.25rem;-ms-flex-direction:row;flex-direction:row;gap:.5rem;min-width:7.5rem;padding-block:var(--fdCalendar_Legend_Item_Padding,.25rem);padding-inline:var(--fdCalendar_Legend_Item_Padding,.25rem)}.fd-calendar-legend__item:after,.fd-calendar-legend__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:focus{z-index:5}.fd-calendar-legend__item.is-active,.fd-calendar-legend__item.is-focus,.fd-calendar-legend__item:active,.fd-calendar-legend__item:focus{-webkit-box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset;box-shadow:0 0 0 var(--sapContent_FocusWidth) var(--sapContent_FocusColor) inset}.fd-calendar-legend__item--appointment{--fdCalendar_Legend_Marker_Border_Radius:1rem}.fd-calendar-legend__item--today{--fdCalendar_Legend_Marker_Border_Width:.125rem;--fdCalendar_Legend_Marker_Background:var(--sapList_Background);--fdCalendar_Legend_Marker_Border_Color:var(--sapLegend_CurrentDateTime)}.fd-calendar-legend__item--selected{--fdCalendar_Legend_Marker_Background:var(--sapSelectedColor)}.fd-calendar-legend__item--work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_WorkingBackground)}.fd-calendar-legend__item--non-work{--fdCalendar_Legend_Marker_Background:var(--sapLegend_NonWorkingBackground)}.fd-calendar-legend__item--placeholder-1{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor1)}.fd-calendar-legend__item--placeholder-2{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor2)}.fd-calendar-legend__item--placeholder-3{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor3)}.fd-calendar-legend__item--placeholder-4{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor4)}.fd-calendar-legend__item--placeholder-5{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor5)}.fd-calendar-legend__item--placeholder-6{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor6)}.fd-calendar-legend__item--placeholder-7{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor7)}.fd-calendar-legend__item--placeholder-8{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor8)}.fd-calendar-legend__item--placeholder-9{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor9)}.fd-calendar-legend__item--placeholder-10{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor10)}.fd-calendar-legend__item--placeholder-11{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor11)}.fd-calendar-legend__item--placeholder-12{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor12)}.fd-calendar-legend__item--placeholder-13{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor13)}.fd-calendar-legend__item--placeholder-14{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor14)}.fd-calendar-legend__item--placeholder-15{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor15)}.fd-calendar-legend__item--placeholder-16{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor16)}.fd-calendar-legend__item--placeholder-17{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor17)}.fd-calendar-legend__item--placeholder-18{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor18)}.fd-calendar-legend__item--placeholder-19{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor19)}.fd-calendar-legend__item--placeholder-20{--fdCalendar_Legend_Marker_Background:var(--sapLegendColor20)}.fd-calendar-legend__marker{background:var(--fdCalendar_Legend_Marker_Background,var(--sapList_Background));border:0;border-color:var(--fdCalendar_Legend_Marker_Border_Color,var(--sapContent_ForegroundBorderColor));border-radius:var(--fdCalendar_Legend_Marker_Border_Radius,0);border-style:solid;border-width:var(--fdCalendar_Legend_Marker_Border_Width,.0625rem);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;max-height:1rem;max-width:1rem;min-height:1rem;min-width:1rem;padding-block:0;padding-inline:0;width:1rem}.fd-calendar-legend__marker:after,.fd-calendar-legend__marker:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend__text{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapContent_LabelColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-size:var(--sapFontSmallSize);font-weight:400;forced-color-adjust:none;line-height:normal;line-height:1rem;margin-block:0;margin-inline:0;overflow:hidden;padding-block:0;padding-inline:0;text-overflow:ellipsis;vertical-align:middle;white-space:pre-line}.fd-calendar-legend__text:after,.fd-calendar-legend__text:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-calendar-legend[class*=-compact],.fd-calendar-legend[class*=-condensed],[class*=-compact] .fd-calendar-legend:not([class*=-cozy]),[class*=-condensed] .fd-calendar-legend:not([class*=-cozy]){--fdCalendar_Legend_Item_Padding:.125rem}.fd-has-display-block{display:block}.fd-calendar__text{max-width:calc(100% - .375rem)}fd-calendar-legend{display:block}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/calendar.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.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }], propDecorators: { selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], allowMultipleSelection: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.fd-calendar--mobile-landscape']\n }], mobilePortrait: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.fd-calendar--mobile-portrait']\n }], activeView: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], calType: [{\n type: Input\n }], id: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], dateRangeFormat: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }], isValidDateChange: [{\n type: Output\n }], closeCalendar: [{\n type: Output\n }], closeClicked: [{\n type: Output\n }], _dayViewComponent: [{\n type: ViewChild,\n args: [CalendarDayViewComponent]\n }], _monthViewComponent: [{\n type: ViewChild,\n args: [CalendarMonthViewComponent]\n }], _yearViewComponent: [{\n type: ViewChild,\n args: [CalendarYearViewComponent]\n }], _aggregatedYearViewComponent: [{\n type: ViewChild,\n args: [CalendarAggregatedYearViewComponent]\n }], _calendarHeaderComponent: [{\n type: ViewChild,\n args: [CalendarHeaderComponent]\n }], previousButtonDisableFunction: [{\n type: Input\n }], nextButtonDisableFunction: [{\n type: Input\n }], showCalendarLegend: [{\n type: Input\n }], legendCol: [{\n type: Input\n }], escapeFocusFunction: [{\n type: Input\n }], disableFunction: [{\n type: Input\n }], disableRangeStartFunction: [{\n type: Input\n }], disableRangeEndFunction: [{\n type: Input\n }], focusOut: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlyRyxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0ZBQXdGLENBQUM7QUFDN0ksT0FBTyxFQUFF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QkFRTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQThDTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBVU4sZUFBZTtzQkFEZCxLQUFLO2dCQU9OLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFPTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEQVRFX1RJTUVfRk9STUFUUywgRGF0ZXRpbWVBZGFwdGVyLCBEYXRlVGltZUZvcm1hdHMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGF0ZXRpbWUnO1xuaW1wb3J0IHsgU3BlY2lhbERheVJ1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZEX0xBTkdVQUdFIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvciB9IGZyb20gJy4vY2FsZW5kYXItZXJyb3JzJztcbmltcG9ydCB7IENhbGVuZGFySGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXItbGVnZW5kL2NhbGVuZGFyLWxlZ2VuZC1mb2N1c2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1sZWdlbmQvY2FsZW5kYXItbGVnZW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItZGF5LXZpZXcvY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBZ2dyZWdhdGVkWWVhciB9IGZyb20gJy4vbW9kZWxzL2FnZ3JlZ2F0ZWQteWVhcic7XG5pbXBvcnQgeyBDYWxlbmRhckN1cnJlbnQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci1jdXJyZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhckdyaWQgfSBmcm9tICcuL21vZGVscy9jYWxlbmRhci15ZWFyLWdyaWQnO1xuaW1wb3J0IHsgRGlzYWJsZURhdGVGdW5jdGlvbiwgRXNjYXBlRm9jdXNGdW5jdGlvbiwgRm9jdXNhYmxlQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi9tb2RlbHMvY29tbW9uJztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4vbW9kZWxzL2RhdGUtcmFuZ2UnO1xuaW1wb3J0IHsgcGF0Y2hEZXByZWNhdGVkSTE4bkxhYmVscyB9IGZyb20gJy4vcGF0Y2gtZGVwcmVjYXRlZC1pMThuLWxhYmVscyc7XG5pbXBvcnQge1xuICAgIENhbGVuZGFyVHlwZSxcbiAgICBDYWxlbmRhclR5cGVFbnVtLFxuICAgIERheXNPZldlZWssXG4gICAgRmRDYWxlbmRhclZpZXcsXG4gICAgRmRDYWxlbmRhclZpZXdFbnVtLFxuICAgIE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb25cbn0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCBjYWxlbmRhclVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBNb250aHM6IDEgPSBKYW51YXJ5LCAxMiA9IGRlY2VtYmVyLlxuICogRGF5czogMSA9IFN1bmRheSwgNyA9IFNhdHVyZGF5XG4gKlxuICogQ2FsZW5kYXIgY29tcG9uZW50IHVzZWQgZm9yIHNlbGVjdGluZyBkYXRlcywgdHlwaWNhbGx5IHVzZWQgYnkgdGhlIERhdGVQaWNrZXIgYW5kIERhdGVUaW1lUGlja2VyIGNvbXBvbmVudHMuXG4gKiBTdXBwb3J0cyB0aGUgQW5ndWxhciBmb3JtcyBtb2R1bGUsIGVuYWJsaW5nIGZvcm0gdmFsaWRpdHksIG5nTW9kZWwsIGV0Yy5cbiAqIGBgYGh0bWxcbiAqIDxmZC1jYWxlbmRhcj48L2ZkLWNhbGVuZGFyPlxuICogYGBgXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNhbGVuZGFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ2FsZW5kYXJTZXJ2aWNlLFxuICAgICAgICBDYWxlbmRhckxlZ2VuZEZvY3VzaW5nU2VydmljZSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9MQU5HVUFHRSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IHBhdGNoRGVwcmVjYXRlZEkxOG5MYWJlbHNcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgY2xhc3M6ICdmZC1jYWxlbmRhciBmZC1oYXMtZGlzcGxheS1ibG9jaydcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgICAgIENhbGVuZGFySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckRheVZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJMZWdlbmRDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50PEQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCBpbiBzaW5nbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIG11bHRpcGxlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZE11bHRpcGxlRGF0ZXM6IEFycmF5PEQ+O1xuXG4gICAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBtb2RlbCB3aXRoIHN0YXJ0IGFuZCBlbmQgaW4gcmFuZ2UgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkUmFuZ2VEYXRlOiBEYXRlUmFuZ2U8RD47XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIHdpdGggbXVsdGlwbGUgcmFuZ2VzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHVzZXIgd2FudHMgdG8gc2VsZWN0IG11bHRpcGxlIGRheXMgb3IgbXVsdGlwbGUgcmFuZ2UgZGF0ZXMuXG4gICAgICogSWYgYGRpc3BsYXlXZWVrTnVtYmVyc2AgaXMgdHJ1ZSwgdGhlIHVzZXIgY2FuIGNsaWNrIG9uIHRoZSB3ZWVrIG51bWJlciB0byBtYXJrIHRoZSByZWxhdGVkIHJvdy5cbiAgICAgKiBUaGUgdXNlciBjYW4gY2xpY2sgb24gd2VlayBkYXlzIHRvIG1hcmsgdGhlIHJlbGF0ZWQgY29sdW1uLlxuICAgICAqIE5vdGU6IENsaWNrYWJsZSBzZWxlY3Rpb24gZm9yIHdlZWsgcm93IG9yIGNvbHVtbiBkb2VzIG5vdCB3b3JrIGZvciByYW5nZSBzZWxlY3Rpb25zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIGxhbmRzY2FwZSBtb2RlLCBpdCBhbHNvIGFkZHMgY2xvc2UgYnV0dG9uIG9uIHJpZ2h0IHNpZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtY2FsZW5kYXItLW1vYmlsZS1sYW5kc2NhcGUnKVxuICAgIG1vYmlsZUxhbmRzY2FwZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgY2FsZW5kYXIgaXMgdXNlZCBpbnNpZGUgbW9iaWxlIGluIHBvcnRyYWl0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtY2FsZW5kYXItLW1vYmlsZS1wb3J0cmFpdCcpXG4gICAgbW9iaWxlUG9ydHJhaXQgPSBmYWxzZTtcblxuICAgIC8qKiBBY3R1YWxseSBzaG93biBhY3RpdmUgdmlldyBvbmUgb2YgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmVWaWV3OiBGZENhbGVuZGFyVmlldyA9IEZkQ2FsZW5kYXJWaWV3RW51bS5EYXk7XG5cbiAgICAvKiogVGhlIGRheSBvZiB0aGUgd2VlayB0aGUgY2FsZW5kYXIgc2hvdWxkIHN0YXJ0IG9uLiAxIHJlcHJlc2VudHMgU3VuZGF5LCAyIGlzIE1vbmRheSwgMyBpcyBUdWVzZGF5LCBhbmQgc28gb24uICovXG4gICAgQElucHV0KClcbiAgICBzdGFydGluZ0RheU9mV2VlazogRGF5c09mV2VlaztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIGNhbGVuZGFyXG4gICAgICogJ3NpbmdsZScgZm9yIHNpbmdsZSBkYXRlIHNlbGVjdGlvblxuICAgICAqICdyYW5nZScgZm9yIGEgcmFuZ2Ugb2YgZGF0ZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjYWxUeXBlOiBDYWxlbmRhclR5cGUgPSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZTtcblxuICAgIC8qKiBJZCBvZiB0aGUgY2FsZW5kYXIuIElmIG5vbmUgaXMgcHJvdmlkZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkID0gJ2ZkLWNhbGVuZGFyLScgKyBjYWxlbmRhclVuaXF1ZUlkKys7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEQgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLiBleDpcbiAgICAgKiBgcnVsZTogKGZkRGF0ZTogRCkgPT4gZmREYXRlLmdldERheSgpID09PSAxYCwgd2hpY2ggd2lsbCBtYXJrIGFsbCBzdW5kYXlzIGFzIHNwZWNpYWwgZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3BlY2lhbERheXNSdWxlczogU3BlY2lhbERheVJ1bGU8RD5bXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgeWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGN1c3RvbWl6ZSBhZ2dyZWdhdGVkIHllYXIgZ3JpZCxcbiAgICAgKiBSb3csIENvbHVtbnMgYW5kIG1ldGhvZCB0byBkaXNwbGF5IHllYXIgY2FuIGJlIG1vZGlmaWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhZ2dyZWdhdGVkWWVhckdyaWQ6IENhbGVuZGFyWWVhckdyaWQgPSB7XG4gICAgICAgIHJvd3M6IDQsXG4gICAgICAgIGNvbHM6IDNcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgZGF5IGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIG9uIERheSBWaWV3LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gcGljayB0aGUgZGF0ZSByYW5nZSBpbiBtb250aCBvciB5ZWFyIG9yIGRheXMgZm9ybWF0XG4gICAgICogRGF5IGZvcm1hdCB3aWxsIGhhdmUgYSBtb250aCBhbmQgeWVhciBpbmNsdWRpbmcgZGF5XG4gICAgICogTW9udGggZm9ybWF0IHdpbGwgaGF2ZSB5ZWFyIGluY2x1ZGluZyBtb250aFxuICAgICAqIFllYXIgZm9ybWF0IHdpbGwgaGF2ZSBqdXN0IHllYXJcbiAgICAgKiBWYWx1ZXMgY2FuIGJlICdtb250aCcgZm9yIE1vbnRoIGZvcm1hdCwgJ3llYXInIGZvciBZZWFyIGZvcm1hdCBvciBub3RoaW5nIGZvciBkYXkgZm9ybWF0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkYXRlUmFuZ2VGb3JtYXQgPSAnJztcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEZkQ2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RD4gPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGVkIGRhdGVzIGluIG11bHRpcGxlIG1vZGUgYXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBzZWxlY3RlZCBmaXJzdCBvciBsYXN0IGRhdGUgaW4gcmFuZ2UgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U8RD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgdGhlIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiBtdWx0aXBsZSByYW5nZSBtb2RlIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEYXRlUmFuZ2U8RD4+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIEFycmF5PERhdGVSYW5nZTxEPj5cbiAgICA+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgd2hlbiB2YWx1ZSBpcyBvdmVyd3JpdHRlbiBmcm9tIG91dHNpZGUgYW5kIHRocm93IGJhY2sgaXNWYWxpZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGlzVmFsaWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgd2hlbiBjYWxlbmRhciBzaG91bGQgYmUgY2xvc2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2xvc2VDYWxlbmRhcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBjbG9zZSBidXR0b24gaXMgY2xpY2tlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNsb3NlQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyRGF5Vmlld0NvbXBvbmVudClcbiAgICBfZGF5Vmlld0NvbXBvbmVudDogQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50PEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50KVxuICAgIF9tb250aFZpZXdDb21wb25lbnQ6IENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50PEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQpXG4gICAgX3llYXJWaWV3Q29tcG9uZW50OiBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50PEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50KVxuICAgIF9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQ6IENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50PEQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFySGVhZGVyQ29tcG9uZW50KVxuICAgIF9jYWxlbmRhckhlYWRlckNvbXBvbmVudDogQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQ8RD47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgcHJldmlvdXMgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICogQHBhcmFtIGRhdGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAqIEBwYXJhbSBjdXJyZW50bHlEaXNwbGF5ZWREYXRlIGN1cnJlbnRseSBkaXNwbGF5ZWQgZGF0ZVxuICAgICAqIEBwYXJhbSBhY3RpdmVWaWV3IGN1cnJlbnQgdmlldyBvZiBjYWxlbmRhclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb246IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD47XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgbmV4dCBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlci5cbiAgICAgKiBAcGFyYW0gZGF0ZSBzZWxlY3RlZCBkYXRlXG4gICAgICogQHBhcmFtIGN1cnJlbnRseURpc3BsYXllZERhdGUgY3VycmVudGx5IGRpc3BsYXllZCBkYXRlXG4gICAgICogQHBhcmFtIGFjdGl2ZVZpZXcgY3VycmVudCB2aWV3IG9mIGNhbGVuZGFyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uOiBOYXZpZ2F0aW9uQnV0dG9uRGlzYWJsZUZ1bmN0aW9uPEQ+O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBzaG93IHRoZSBjYWxlbmRhciBsZWdlbmQgYmVsb3cgdGhlIGNhbGVuZGFyLlxuICAgICAqIFRoZSBsZWdlbmQgZGlzcGxheXMgc3BlY2lhbCBkYXkgbWFya2VycyBhbmQgdGhlaXIgbWVhbmluZ3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93Q2FsZW5kYXJMZWdlbmQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgbGVnZW5kIGluIGNvbHVtbiBsYXlvdXQgKHRydWUpIG9yIHJvdyBsYXlvdXQgKGZhbHNlKS5cbiAgICAgKiBDb2x1bW4gbGF5b3V0IGlzIHVzZWZ1bCB3aGVuIGxlZ2VuZCBpcyBkaXNwbGF5ZWQgYWxvbmdzaWRlIHRoZSBjYWxlbmRhci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxlZ2VuZENvbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEN1cnJlbnRseSBkaXNwbGF5ZWQgZGF5cyBkZXBlbmRpbmcgb24gbW9udGggYW5kIHllYXJcbiAgICAgKi9cbiAgICBfY3VycmVudGx5RGlzcGxheWVkOiBDYWxlbmRhckN1cnJlbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5leHRCdXR0b25EaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgLy8gVXNlIEBPcHRpb25hbCB0byBhdm9pZCBhbmd1bGFyIGluamVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCB0aHJvdyBvdXIgb3duIHdoaWNoIGlzIG1vcmUgcHJlY2lzZSBvbmVcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGF0ZVRpbWVBZGFwdGVyOiBEYXRldGltZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURV9USU1FX0ZPUk1BVFMpIHByaXZhdGUgX2RhdGVUaW1lRm9ybWF0czogRGF0ZVRpbWVGb3JtYXRzXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlXG4gICAgICAgIHRoaXMuX2FkYXB0ZXJTdGFydGluZ0RheU9mV2VlayA9ICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSArIDEpIGFzIERheXNPZldlZWs7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLnRvZGF5KCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvY2FsZUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogVGhhdCBhbGxvd3MgdG8gZGVmaW5lIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGhhcHBlbiwgd2hlbiBmb2N1cyBzaG91bGQgbm9ybWFsbHkgZXNjYXBlIG9mIGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXNjYXBlRm9jdXNGdW5jdGlvbjogRXNjYXBlRm9jdXNGdW5jdGlvbiA9IChldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFySGVhZGVyQ29tcG9uZW50Py5mb2N1cygpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246IERpc2FibGVEYXRlRnVuY3Rpb248RD4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIHN0YXJ0IHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb246IERpc2FibGVEYXRlRnVuY3Rpb248RD4gPSAoKSA9PiBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBjZXJ0YWluIGRhdGVzIGluIHRoZSBjYWxlbmRhciBmb3IgdGhlIHJhbmdlIGVuZCBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbjogRGlzYWJsZURhdGVGdW5jdGlvbjxEPiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFsnJGV2ZW50J10pXG4gICAgZm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAoXzogRCB8IEFycmF5PEQ+IHwgRGF0ZVJhbmdlPEQ+IHwgQXJyYXk8RGF0ZVJhbmdlPEQ+PikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICduZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAncHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb24nIGluIGNoYW5nZXMgfHxcbiAgICAgICAgICAgICdfY3VycmVudGx5RGlzcGxheWVkJyBpbiBjaGFuZ2VzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0V2Vla1N0YXJ0RGF5KCk6IERheXNPZldlZWsge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydGluZ0RheU9mV2VlayA9PT0gdW5kZWZpbmVkID8gdGhpcy5fYWRhcHRlclN0YXJ0aW5nRGF5T2ZXZWVrIDogdGhpcy5zdGFydGluZ0RheU9mV2VlaztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgdGhhdCBhbGxvd3MgdG8gdXNlIFsobmdNb2RlbCldIG9yIGZvcm1zLlxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IEQgfCBBcnJheTxEPiB8IERhdGVSYW5nZTxEPiB8IEFycmF5PERhdGVSYW5nZTxEPj4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IChkYXRlOiBEIHwgbnVsbCk6IGJvb2xlYW4gPT4gZGF0ZSAhPSBudWxsICYmIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgICAgICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSAocmFuZ2U6IERhdGVSYW5nZTxEPik6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgIHJhbmdlICE9IG51bGwgJiYgaXNWYWxpZERhdGUocmFuZ2Uuc3RhcnQpICYmIGlzVmFsaWREYXRlKHJhbmdlLmVuZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlcyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gKHNlbGVjdGVkIGFzIEFycmF5PEQ+KSA6IFtzZWxlY3RlZCBhcyBEXTtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGRhdGVzLmV2ZXJ5KGlzVmFsaWREYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZXMgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/IChzZWxlY3RlZCBhcyBBcnJheTxEYXRlUmFuZ2U8RD4+KSA6IFtdO1xuICAgICAgICAgICAgICAgIHZhbGlkID0gcmFuZ2VzLmV2ZXJ5KGlzVmFsaWRSYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyA9IHJhbmdlcy5tYXAoKHJhbmdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogcmFuZ2U/LnN0YXJ0IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogcmFuZ2U/LmVuZCB8fCBudWxsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGlzVmFsaWREYXRlKHNlbGVjdGVkIGFzIEQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQgYXMgRDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxUeXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG4gICAgICAgICAgICAgICAgdmFsaWQgPSByYW5nZSAmJiBpc1ZhbGlkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSByYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IHsgc3RhcnQ6IHJhbmdlLnN0YXJ0IHx8IG51bGwsIGVuZDogcmFuZ2UuZW5kIHx8IG51bGwgfVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEaXNwbGF5ZWRWaWV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaXNWYWxpZERhdGVDaGFuZ2UuZW1pdCh2YWxpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBWYWxpZGF0b3IgSW50ZXJmYWNlLCBhZGRzIHZhbGlkYXRpb24gc3VwcG9ydCBmb3IgZm9ybXNcbiAgICAgKi9cbiAgICB2YWxpZGF0ZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTW9kZWxWYWxpZCgpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZGF0ZVZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgaGFuZGxlIGFjdGl2ZSB2aWV3IGNoYW5nZSBhbmQgdGhyb3dzIGV2ZW50LlxuICAgICAqXG4gICAgICogRmlyZWQgYnkgY2FsZW5kYXIgaGVhZGVyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVBY3RpdmVWaWV3Q2hhbmdlKGFjdGl2ZVZpZXc6IEZkQ2FsZW5kYXJWaWV3KTogdm9pZCB7XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSB0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IGFjdGl2ZVZpZXc7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5vbk1vbnRoVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IEZkQ2FsZW5kYXJWaWV3RW51bS5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm9uWWVhclZpZXdTZWxlY3RlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXIpIHtcbiAgICAgICAgICAgIHRoaXMub25ZZWFyc1JhbmdlVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBzZWxlY3RlZERhdGVDaGFuZ2VkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIG11bHRpIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZWQoZGF0ZTogQXJyYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBkYXRlO1xuICAgICAgICB0aGlzLl9zZXROYXZpZ2F0aW9uQnV0dG9uc1N0YXRlcygpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KGRhdGUpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gZGF5IHZpZXcgY29tcG9uZW50LCB3aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHJhbmdlIGRhdGUgY2hhbmdlZFxuICAgICAqL1xuICAgIHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlZChkYXRlczogRGF0ZVJhbmdlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChkYXRlcykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGRhdGVzLnN0YXJ0LCBlbmQ6IGRhdGVzLmVuZCB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDYWxlbmRhci5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGRheSB2aWV3IGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZWQoZGF0ZXM6IEFycmF5PERhdGVSYW5nZTxEPj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZXM7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgbmV4dCBhcnJvdyBpY29uIGNsaWNrLCBkZXBlbmRpbmcgb24gY3VycmVudCB2aWV3IGl0IGNoYW5nZXMgbW9udGgsIHllYXIgb3IgbGlzdCBvZiB5ZWFycyAqL1xuICAgIGhhbmRsZU5leHRBcnJvd0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU5leHRNb250aCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLlllYXI6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TmV4dFllYXJMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZkQ2FsZW5kYXJWaWV3RW51bS5BZ2dyZWdhdGVkWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlOZXh0WWVhcnNMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkJ1dHRvbnNTdGF0ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIHByZXZpb3VzIGFycm93IGljb24gY2xpY2ssIGRlcGVuZGluZyBvbiBjdXJyZW50IHZpZXcgaXQgY2hhbmdlcyBtb250aCwgeWVhciBvciBsaXN0IG9mIHllYXJzICovXG4gICAgaGFuZGxlUHJldmlvdXNBcnJvd0NsaWNrKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzTW9udGgoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLk1vbnRoOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVByZXZpb3VzWWVhcigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZkQ2FsZW5kYXJWaWV3RW51bS5BZ2dyZWdhdGVkWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlQcmV2aW91c1llYXJzTGlzdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBuZXh0IG1vbnRoICovXG4gICAgZGlzcGxheU5leHRNb250aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgKyAxLCBtb250aDogMSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgICAgIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGggKyAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWwgdmlldyB0byBwcmV2aW91cyBtb250aCAqL1xuICAgIGRpc3BsYXlQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIDw9IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxLCBtb250aDogMTIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhcixcbiAgICAgICAgICAgICAgICBtb250aDogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLm1vbnRoIC0gMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gbmV4dCB5ZWFyICovXG4gICAgZGlzcGxheU5leHRZZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7IG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsIHllYXI6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC55ZWFyICsgMSB9O1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGFsbG93cyB0byBzd2l0Y2ggYWN0dWFsIHZpZXcgdG8gcHJldmlvdXMgeWVhciAqL1xuICAgIGRpc3BsYXlQcmV2aW91c1llYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHsgbW9udGg6IHRoaXMuX2N1cnJlbnRseURpc3BsYXllZC5tb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgLSAxIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5sb2FkTmV4dFllYXJMaXN0KCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5fZmlyc3RZZWFySW5MaXN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhckxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50LmxvYWRQcmV2aW91c1llYXJMaXN0KCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQubW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLl95ZWFyVmlld0NvbXBvbmVudC5fZmlyc3RZZWFySW5MaXN0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIG5leHQgeWVhciBsaXN0Ki9cbiAgICBkaXNwbGF5TmV4dFllYXJzTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50LmxvYWROZXh0WWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIHN3aXRjaCBhY3R1YWxseSBkaXNwbGF5ZWQgbGlzdCBvZiB5ZWFyIHRvIHByZXZpb3VzIHllYXIgbGlzdCovXG4gICAgZGlzcGxheVByZXZpb3VzWWVhcnNMaXN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZ2dyZWdhdGVkWWVhclZpZXdDb21wb25lbnQubG9hZFByZXZpb3VzWWVhcnNMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhbGxvd3MgdG8gY2hhbmdlIGN1cnJlbnRseSBkaXNwbGF5ZWQgbW9udGgveWVhciBjb25maWd1cmF0aW9uLFxuICAgICAqIHdoaWNoIGFyZSBjb25uZWN0ZWQgdG8gZGF5cyBkaXNwbGF5ZWRcbiAgICAgKi9cbiAgICBzZXRDdXJyZW50bHlEaXNwbGF5ZWQoZGF0ZTogTnVsbGFibGU8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQgPSB7XG4gICAgICAgICAgICAgICAgbW9udGg6IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlISksXG4gICAgICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGluaXRpYWwgZm9jdXMgb24gb25lIG9mIHRoZSBjYWxlbmRhcidzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBpbml0aWFsRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldEFjdGl2ZUZvY3VzYWJsZVZpZXcoKT8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBoYW5kbGVzIGNoYW5nZXMgZnJvbSBtb250aCB2aWV3IGNoaWxkIGNvbXBvbmVudCwgY2hhbmdlcyBhY3R1YWwgdmlldyBhbmQgY2hhbmdlcyBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoXG4gICAgICovXG4gICAgaGFuZGxlTW9udGhWaWV3Q2hhbmdlKG1vbnRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0geyBtb250aCwgeWVhcjogdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLnllYXIgfTtcbiAgICAgICAgLy8gaWYgbW0veXl5eSBmb3JtYXQgZGF0ZSBpcyBub3QgZW5hYmxlZCB0aGVuIG9ubHkgc2hvdyBkYXlzIHZpZXdcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0ZVJhbmdlTW9udGhGb3JtYXQoKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLkRheTtcbiAgICAgICAgICAgIHRoaXMub25EYXlzVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgeWVhciAqL1xuICAgIHNlbGVjdGVkWWVhcih5ZWFyU2VsZWN0ZWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlEaXNwbGF5ZWQueWVhciA9IHllYXJTZWxlY3RlZDtcblxuICAgICAgICAvLyBpZiBtb250aCBmb3JtYXQgZGF0ZSByYW5nZSBpcyBlbmFibGVkIHRoZW4gb24gc2VsZWN0aW5nIHllYXIgc2hvdyBtb250aCB2aWV3IGVsc2Ugc2hvdyBkYXlzIHZpZXdcbiAgICAgICAgLy8gaWYgeWVhciBmb3JtYXQgZGF0ZSByYW5nZSBpcyBlbmFibGVkIHRoZW4gdmlldyByZW1haW5zIHNhbWUgb24gc2VsZWN0aW5nIHllYXJcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VNb250aEZvcm1hdCgpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg7XG4gICAgICAgICAgICB0aGlzLm9uTW9udGhWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRGF0ZVJhbmdlWWVhckZvcm1hdCgpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICAgICAgICAgIHRoaXMub25ZZWFyVmlld1NlbGVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uRGF5O1xuICAgICAgICAgICAgdGhpcy5vbkRheXNWaWV3U2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgeWVhciByYW5nZSAqL1xuICAgIHNlbGVjdGVkWWVhcnMoeWVhcnNTZWxlY3RlZDogQWdncmVnYXRlZFllYXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gRmRDYWxlbmRhclZpZXdFbnVtLlllYXI7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseURpc3BsYXllZCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2N1cnJlbnRseURpc3BsYXllZCxcbiAgICAgICAgICAgIHllYXI6IHllYXJzU2VsZWN0ZWQuc3RhcnRZZWFyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25ZZWFyVmlld1NlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkRheXNWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fZGF5Vmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTW9udGhWaWV3U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fbW9udGhWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25ZZWFyVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50Py5zZXRGb2N1c09uQ2VsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25ZZWFyc1JhbmdlVmlld1NlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudD8uc2V0Rm9jdXNPbkNlbGwoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgbW9kZWwgc2VsZWN0ZWQgZGF0ZS9kYXRlcyBoYXZlIHByb3Blcmx5IHR5cGVzIGFuZCBhcmUgdmFsaWQgKi9cbiAgICBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMuZXZlcnkoKGQpID0+IHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGQpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxUeXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmV2ZXJ5KChkcikgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZHIuc3RhcnQpKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzLmV2ZXJ5KChkcikgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoZHIuZW5kKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsVHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5SYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcmFuZ2UgZm9ybWF0IGlzIG1vbnRoICovXG4gICAgaXNEYXRlUmFuZ2VNb250aEZvcm1hdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVJhbmdlRm9ybWF0ID09PSAnbW9udGgnO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHJhbmdlIGZvcm1hdCBpcyB5ZWFyICovXG4gICAgaXNEYXRlUmFuZ2VZZWFyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUmFuZ2VGb3JtYXQgPT09ICd5ZWFyJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTG9jYWxlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIubG9jYWxlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkYXB0ZXJTdGFydGluZ0RheU9mV2VlayA9ICh0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKSArIDEpIGFzIERheXNPZldlZWs7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBzZXRzIHVwIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHZhcmlhYmxlcywgbGlrZSBzaG93biBtb250aCBhbmQgeWVhci5cbiAgICAgKiBEYXkgZ3JpZCBpcyBiYXNlZCBvbiBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoIGFuZCB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJlcGFyZURpc3BsYXllZFZpZXcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWREYXRlLCBzZWxlY3RlZFJhbmdlRGF0ZSwgc2VsZWN0ZWRNdWx0aXBsZURhdGVzLCBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyB9ID0gdGhpcztcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhbFR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlICYmXG4gICAgICAgICAgICB0aGlzLl9kYXRlVGltZUFkYXB0ZXIuaXNWYWxpZChzZWxlY3RlZERhdGUpICYmXG4gICAgICAgICAgICAhdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkRGF0ZSBhcyBEKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZE11bHRpcGxlRGF0ZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50bHlEaXNwbGF5ZWQoc2VsZWN0ZWRNdWx0aXBsZURhdGVzWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFJhbmdlRGF0ZT8uc3RhcnQgJiYgIXRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFJhbmdlRGF0ZT8uZW5kICYmICF0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEN1cnJlbnRseURpc3BsYXllZChzZWxlY3RlZFJhbmdlRGF0ZS5lbmQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLnN0YXJ0ICYmXG4gICAgICAgICAgICB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50bHlEaXNwbGF5ZWQoc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLmVuZCAmJlxuICAgICAgICAgICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzWzBdLmVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudGx5RGlzcGxheWVkKHRvZGF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0Q3VycmVudGx5RGlzcGxheWVkKGRhdGU6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldFllYXIoZGF0ZSksXG4gICAgICAgICAgICBtb250aDogdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmdldE1vbnRoKGRhdGUpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVGb2N1c2FibGVWaWV3KCk6IEZvY3VzYWJsZUNhbGVuZGFyVmlldyB8IG51bGwge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uRGF5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXlWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uTW9udGg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNhc2UgRmRDYWxlbmRhclZpZXdFbnVtLlllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3llYXJWaWV3Q29tcG9uZW50O1xuICAgICAgICAgICAgY2FzZSBGZENhbGVuZGFyVmlld0VudW0uQWdncmVnYXRlZFllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldE5hdmlnYXRpb25CdXR0b25zU3RhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZWQgPSB0aGlzLl9pc05hdmlnYXRpb25CdXR0b25EaXNhYmxlZCh0aGlzLnByZXZpb3VzQnV0dG9uRGlzYWJsZUZ1bmN0aW9uKTtcbiAgICAgICAgdGhpcy5uZXh0QnV0dG9uRGlzYWJsZWQgPSB0aGlzLl9pc05hdmlnYXRpb25CdXR0b25EaXNhYmxlZCh0aGlzLm5leHRCdXR0b25EaXNhYmxlRnVuY3Rpb24pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVkKGRpc2FibGVGdW5jdGlvbj86IE5hdmlnYXRpb25CdXR0b25EaXNhYmxlRnVuY3Rpb248RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBkaXNhYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGRpc2FibGVGdW5jdGlvbih0aGlzLnNlbGVjdGVkRGF0ZSwgdGhpcy5fY3VycmVudGx5RGlzcGxheWVkLCB0aGlzLmFjdGl2ZVZpZXcpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGZkLWNhbGVuZGFyLWhlYWRlclxuICAgIFtjdXJyZW50bHlEaXNwbGF5ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZFwiXG4gICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbY2FsZW5kYXJZZWFyR3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgKGNsb3NlQ2xpY2tlZCk9XCJjbG9zZUNsaWNrZWQuZW1pdCgpXCJcbiAgICAobmV4dENsaWNrZWQpPVwiaGFuZGxlTmV4dEFycm93Q2xpY2soKVwiXG4gICAgKHByZXZpb3VzQ2xpY2tlZCk9XCJoYW5kbGVQcmV2aW91c0Fycm93Q2xpY2soKVwiXG4gICAgW3ByZXZpb3VzQnV0dG9uRGlzYWJsZWRdPVwicHJldmlvdXNCdXR0b25EaXNhYmxlZFwiXG4gICAgW25leHRCdXR0b25EaXNhYmxlZF09XCJuZXh0QnV0dG9uRGlzYWJsZWRcIlxuICAgIChhY3RpdmVWaWV3Q2hhbmdlKT1cImhhbmRsZUFjdGl2ZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4+PC9mZC1jYWxlbmRhci1oZWFkZXI+XG5AaWYgKF9jdXJyZW50bHlEaXNwbGF5ZWQpIHtcbiAgICBAaWYgKGFjdGl2ZVZpZXcgPT09ICdkYXknKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci1kYXktdmlld1xuICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkTXVsdGlwbGVEYXRlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZXNcIlxuICAgICAgICAgICAgW3NlbGVjdGVkUmFuZ2VEYXRlXT1cInNlbGVjdGVkUmFuZ2VEYXRlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cInNlbGVjdGVkRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlKT1cInNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKT1cInNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwic2hvd1dlZWtOdW1iZXJzXCJcbiAgICAgICAgICAgIFthbGxvd011bHRpcGxlU2VsZWN0aW9uXT1cImFsbG93TXVsdGlwbGVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICAgICAgW2N1cnJlbnRseURpc3BsYXllZF09XCJfY3VycmVudGx5RGlzcGxheWVkXCJcbiAgICAgICAgICAgIFtzdGFydGluZ0RheU9mV2Vla109XCJnZXRXZWVrU3RhcnREYXkoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZUZ1bmN0aW9uXT1cImRpc2FibGVGdW5jdGlvblwiXG4gICAgICAgICAgICBbZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2Rpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvblwiXG4gICAgICAgICAgICBbY2FsVHlwZV09XCJjYWxUeXBlXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbcmFuZ2VIb3ZlckVmZmVjdF09XCJyYW5nZUhvdmVyRWZmZWN0XCJcbiAgICAgICAgICAgIFtzcGVjaWFsRGF5c1J1bGVzXT1cInNwZWNpYWxEYXlzUnVsZXNcIlxuICAgICAgICAgICAgW2ZvY3VzRXNjYXBlRnVuY3Rpb25dPVwiZXNjYXBlRm9jdXNGdW5jdGlvblwiXG4gICAgICAgICAgICAobmV4dE1vbnRoU2VsZWN0KT1cImRpc3BsYXlOZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAocHJldmlvdXNNb250aFNlbGVjdCk9XCJkaXNwbGF5UHJldmlvdXNNb250aCgpXCJcbiAgICAgICAgPjwvZmQtY2FsZW5kYXItZGF5LXZpZXc+XG4gICAgfSBAZWxzZSBpZiAoYWN0aXZlVmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICA8ZmQtY2FsZW5kYXItbW9udGgtdmlld1xuICAgICAgICAgICAgW21vbnRoU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC5tb250aFwiXG4gICAgICAgICAgICBbeWVhcl09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2lzRGF0ZVJhbmdlTW9udGhZZWFyRm9ybWF0XT1cImlzRGF0ZVJhbmdlTW9udGhGb3JtYXQoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKG1vbnRoQ2xpY2tlZCk9XCJoYW5kbGVNb250aFZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkLWNhbGVuZGFyLW1vbnRoLXZpZXc+XG4gICAgfSBAZWxzZSBpZiAoYWN0aXZlVmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci15ZWFyLXZpZXdcbiAgICAgICAgICAgIFt5ZWFyU2VsZWN0ZWRdPVwiX2N1cnJlbnRseURpc3BsYXllZC55ZWFyXCJcbiAgICAgICAgICAgIFt5ZWFyVmlld0dyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgIFtmb2N1c0VzY2FwZUZ1bmN0aW9uXT1cImVzY2FwZUZvY3VzRnVuY3Rpb25cIlxuICAgICAgICAgICAgW2lzRGF0ZVJhbmdlWWVhckZvcm1hdF09XCJpc0RhdGVSYW5nZVllYXJGb3JtYXQoKVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UpPVwic2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgKHllYXJDbGlja2VkKT1cInNlbGVjdGVkWWVhcigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNhbGVuZGFyLXllYXItdmlldz5cbiAgICB9IEBlbHNlIGlmIChhY3RpdmVWaWV3ID09PSAnYWdncmVnYXRlZFllYXInKSB7XG4gICAgICAgIDxmZC1jYWxlbmRhci1hZ2dyZWdhdGVkLXllYXItdmlld1xuICAgICAgICAgICAgKHllYXJzQ2xpY2tlZCk9XCJzZWxlY3RlZFllYXJzKCRldmVudClcIlxuICAgICAgICAgICAgW3llYXJTZWxlY3RlZF09XCJfY3VycmVudGx5RGlzcGxheWVkLnllYXJcIlxuICAgICAgICAgICAgW3llYXJWaWV3R3JpZF09XCJ5ZWFyR3JpZFwiXG4gICAgICAgICAgICBbYWdncmVnYXRlZFllYXJzVmlld0dyaWRdPVwiYWdncmVnYXRlZFllYXJHcmlkXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgICAgICBbZm9jdXNFc2NhcGVGdW5jdGlvbl09XCJlc2NhcGVGb2N1c0Z1bmN0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICA8L2ZkLWNhbGVuZGFyLWFnZ3JlZ2F0ZWQteWVhci12aWV3PlxuICAgIH1cbn1cbkBpZiAoc2hvd0NhbGVuZGFyTGVnZW5kICYmIHNwZWNpYWxEYXlzUnVsZXMubGVuZ3RoID4gMCkge1xuICAgIDxmZC1jYWxlbmRhci1sZWdlbmQgW3NwZWNpYWxEYXlzUnVsZXNdPVwic3BlY2lhbERheXNSdWxlc1wiIFtjb2xdPVwibGVnZW5kQ29sXCI+IDwvZmQtY2FsZW5kYXItbGVnZW5kPlxufVxuIl19","import { NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { CalendarCloseButtonDirective } from './calendar-directives';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport { CalendarAggregatedYearViewComponent } from './calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component';\nimport { CalendarDayViewComponent } from './calendar-views/calendar-day-view/calendar-day-view.component';\nimport { CalendarMonthViewComponent } from './calendar-views/calendar-month-view/calendar-month-view.component';\nimport { CalendarYearViewComponent } from './calendar-views/calendar-year-view/calendar-year-view.component';\nimport { CalendarComponent } from './calendar.component';\nimport * as i0 from \"@angular/core\";\nexport class CalendarModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, imports: [CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective], exports: [CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, imports: [CalendarComponent,\n CalendarHeaderComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent, ContentDensityModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: CalendarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CalendarComponent,\n CalendarHeaderComponent,\n CalendarDayViewComponent,\n CalendarMonthViewComponent,\n CalendarYearViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective\n ],\n exports: [\n CalendarComponent,\n CalendarDayViewComponent,\n CalendarHeaderComponent,\n CalendarYearViewComponent,\n CalendarMonthViewComponent,\n CalendarAggregatedYearViewComponent,\n CalendarCloseButtonDirective,\n ContentDensityModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NhbGVuZGFyL2NhbGVuZGFyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzdJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQXVCekQsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBbkJuQixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLG1DQUFtQztZQUNuQyw0QkFBNEIsYUFHNUIsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4Qix1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQixtQ0FBbUM7WUFDbkMsNEJBQTRCO1lBQzVCLG9CQUFvQjsrR0FHZixjQUFjLFlBbkJuQixpQkFBaUI7WUFDakIsdUJBQXVCO1lBRXZCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFDekIsbUNBQW1DLEVBV25DLG9CQUFvQjs7MkZBR2YsY0FBYztrQkFyQjFCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUN6QixtQ0FBbUM7d0JBQ25DLDRCQUE0QjtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7d0JBQ3ZCLHlCQUF5Qjt3QkFDekIsMEJBQTBCO3dCQUMxQixtQ0FBbUM7d0JBQ25DLDRCQUE0Qjt3QkFDNUIsb0JBQW9CO3FCQUN2QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbnRlbnREZW5zaXR5TW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBDYWxlbmRhckNsb3NlQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi9jYWxlbmRhci1kaXJlY3RpdmVzJztcbmltcG9ydCB7IENhbGVuZGFySGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1oZWFkZXIvY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcvY2FsZW5kYXItYWdncmVnYXRlZC15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItdmlld3MvY2FsZW5kYXItZGF5LXZpZXcvY2FsZW5kYXItZGF5LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci12aWV3cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXZpZXdzL2NhbGVuZGFyLXllYXItdmlldy9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckRheVZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhclllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckFnZ3JlZ2F0ZWRZZWFyVmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJDbG9zZUJ1dHRvbkRpcmVjdGl2ZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJEYXlWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJZZWFyVmlld0NvbXBvbmVudCxcbiAgICAgICAgQ2FsZW5kYXJNb250aFZpZXdDb21wb25lbnQsXG4gICAgICAgIENhbGVuZGFyQWdncmVnYXRlZFllYXJWaWV3Q29tcG9uZW50LFxuICAgICAgICBDYWxlbmRhckNsb3NlQnV0dG9uRGlyZWN0aXZlLFxuICAgICAgICBDb250ZW50RGVuc2l0eU1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY2FsZW5kYXIvZnVuZGFtZW50YWwtbmd4LWNvcmUtY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["i1.CalendarService","CalendarActiveDayCellStrategy","i1"],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAM,4BAA4B,CAAC;AAC1C;AACA,IAAI,WAAW,CAAC,kBAAkB,EAAE,cAAc,EAAE;AACpD,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AACpD,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc;AAC5C;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,wBAAwB,CAAC,iCAAiC,CAAC;AAC9F,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3Q,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,6CAA6C,EAAE,YAAY,EAAE,yCAAyC,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9Y;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC;AACtI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB;AACA,oBAAoB,QAAQ,EAAE,4BAA4B;AAC1D,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,KAAK,EAAE,2BAA2B;AAC1D,wBAAwB,mBAAmB,EAAE,6CAA6C;AAC1F,wBAAwB,cAAc,EAAE;AACxC,qBAAqB;AACrB,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE,SAAS;AACnC,oBAAoB,IAAI,EAAE,CAAC,YAAY;AACvC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACtD,oBAAoB,IAAI,EAAE,SAAS;AACnC,oBAAoB,IAAI,EAAE,CAAC,OAAO;AAClC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;;AC3BjB,MAAM,eAAe,CAAC;AAC7B;AACA,IAAI,WAAW,CAAC,WAAW,EAAE;AAC7B,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;AAC1B;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC;AAC1B;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,EAAE;AACxC;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,EAAE;AAC9C;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,OAAO,EAAE;AAChD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;AACpB,QAAQ,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG;AACzC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;AACnC,QAAQ,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE;AACnD,QAAQ,QAAQ,KAAK,CAAC,GAAG;AACzB,YAAY,KAAK,UAAU;AAC3B,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,GAAG,EAAE;AACtB,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACvD,gBAAgB;AAChB,YAAY;AACZ,YAAY,KAAK,MAAM;AACvB,YAAY,KAAK,WAAW,EAAE;AAC9B,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,CAAC,GAAG,EAAE;AAC1B,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChD,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjD,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,YAAY,EAAE;AAC/B,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,CAAC,GAAG,EAAE;AAC1B,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjD,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChD,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,KAAK,IAAI;AACrB,YAAY,KAAK,SAAS,EAAE;AAC5B,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;AACjD,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAC5F,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AACrE,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,KAAK,MAAM;AACvB,YAAY,KAAK,WAAW,EAAE;AAC9B,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,gBAAgB,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE;AAChE,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1F,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AACrE,gBAAgB;AAChB,gBAAgB;AAChB,YAAY;AACZ,YAAY,KAAK,KAAK,EAAE;AACxB,gBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrC,oBAAoB,IAAI,OAAO,IAAI,CAAC,mBAAmB,KAAK,UAAU,EAAE;AACxE,wBAAwB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACvD,oBAAoB;AACpB,yBAAyB;AACzB,wBAAwB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACjF,wBAAwB,IAAI,OAAO,EAAE;AACrC,4BAA4B,OAAO,CAAC,KAAK,EAAE;AAC3C,wBAAwB;AACxB,oBAAoB;AACpB,oBAAoB,KAAK,CAAC,cAAc,EAAE;AAC1C,oBAAoB;AACpB,gBAAgB;AAChB,YAAY;AACZ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;AACzD,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE;AACzB,YAAY,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5E,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1N,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AACrI;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACzH,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;AACvE,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;;ACzIxB;AACU,IAAC;AACX,CAAC,UAAU,gBAAgB,EAAE;AAC7B,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;AACzC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;AACvC,CAAC,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,EAAE,CAAC,CAAC;AAC/C;AACU,IAAC;AACX,CAAC,UAAU,kBAAkB,EAAE;AAC/B,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK;AACrC,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,OAAO;AACzC,IAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG,MAAM;AACvC,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB;AAC3D,CAAC,EAAE,kBAAkB,KAAK,kBAAkB,GAAG,EAAE,CAAC,CAAC;;ACHnD;AACA;AACA;AACA;AACO,MAAM,uBAAuB,CAAC;AACrC;AACA;AACA;AACA,IAAI,IAAI,gBAAgB,CAAC,QAAQ,EAAE;AACnC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;AACxE,QAAQ,IAAI,CAAC,mCAAmC,EAAE;AAClD,IAAI;AACJ;AACA,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,WAAW,GAAG,iCAAiC,GAAG,gCAAgC;AACtG,IAAI;AACJ;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,WAAW,GAAG,6BAA6B,GAAG,4BAA4B;AAC9F,IAAI;AACJ;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,aAAa,GAAG,iCAAiC,GAAG,kCAAkC;AAC1G,IAAI;AACJ;AACA,IAAI,IAAI,6BAA6B,GAAG;AACxC,QAAQ,OAAO,IAAI,CAAC;AACpB,cAAc;AACd,cAAc,uCAAuC;AACrD,IAAI;AACJ;AACA,IAAI,IAAI,uBAAuB,GAAG;AAClC,QAAQ,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,cAAc;AACpE,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,IAAI;AAC1D,IAAI;AACJ;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,KAAK;AAC3D,IAAI;AACJ;AACA,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,GAAG;AACzD,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,EAAE,GAAG,SAAS;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,aAAa;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,mBAAmB,GAAG;AAC9B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,6BAA6B,GAAG;AACxC,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,0BAA0B;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,aAAa;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,4BAA4B,GAAG;AACvC,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,yBAAyB;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,wBAAwB,GAAG;AACnC,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,oBAAoB;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,kCAAkC,GAAG;AAC7C,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,gCAAgC;AAC7D,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AACnE,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,EAAE;AAClD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;AAC7B;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,CAAC;AACxC,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW;AAClF,aAAa,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACrE,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;AAC9D,QAAQ,IAAI,CAAC,oBAAoB,EAAE;AACnC,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,KAAK,EAAE;AACxD,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;AACpC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG,GAAG,IAAI;AAClF,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAC7C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,0BAA0B,EAAE;AACzC,QAAQ,IAAI,CAAC,yBAAyB,EAAE;AACxC,QAAQ,IAAI,CAAC,mCAAmC,EAAE;AAClD,IAAI;AACJ;AACA,IAAI,0BAA0B,GAAG;AACjC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AACrF,IAAI;AACJ;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC;AAChF,IAAI;AACJ;AACA,IAAI,mCAAmC,GAAG;AAC1C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACnL,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC;AACtE,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxF,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI;AACpD,kBAAkB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;AAC3E,kBAAkB,IAAI,CAAC,kBAAkB,CAAC,IAAI;AAC9C,YAAY,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK;AACtD,kBAAkB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;AAC5E,kBAAkB,IAAI,CAAC,kBAAkB,CAAC;AAC1C,SAAS;AACT,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEA,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACtR,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,k5GAAk5G,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACl/I;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AAClG,wBAAwB,WAAW,EAAE;AACrC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,k5GAAk5G,EAAE;AACnhH,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC/J,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;AACzC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AACzD,aAAa,CAAC,EAAE,EAAE,CAAC;;AChPZ,MAAM,6BAA6B,CAAC;AAC3C,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrH,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9C,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,gBAAgB,EAAE;AAC5C,QAAQ,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAC1D,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAChM,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;AACnJ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,UAAU,EAAE,CAAC;AACvI,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;;AClBN,MAAM,2BAA2B,CAAC;AACzC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM;AAChD,YAAY,MAAM,OAAO,GAAG,CAAC,0BAA0B,CAAC;AACxD,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtC,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AAC/B,gBAAgB,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC;AACrE,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAC9B,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzE,YAAY;AACZ,YAAY,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7L,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACvxB;AACA;AACA;AACA;AACA,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACvH;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC;AACrI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,yBAAyB;AACvD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACzD,oBAAoB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AACnE,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,QAAQ,EAAE,GAAG;AACrC,wBAAwB,SAAS,EAAE;AACnC;AACA,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AChDN,MAAM,uBAAuB,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClH;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxH;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtH;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,6BAA6B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5H;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACzF,IAAI;AACJ;AACA,IAAI,0BAA0B,CAAC,gBAAgB,EAAE;AACjD,QAAQ,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;AACtE,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACzL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,yBAAyB,EAAE,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,UAAU,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,wBAAwB,EAAE,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,2BAA2B,EAAE,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,UAAU,EAAE,6BAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,uCAAuC,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AAC1xC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,EAAE,2BAA2B,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,8BAA8B,EAAE,6BAA6B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AACvwB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,oBAAoB;AAClD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AACnE,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;AACL,oBAAoB,IAAI,EAAE;AAC1B,wBAAwB,KAAK,EAAE,oBAAoB;AACnD,wBAAwB,yCAAyC,EAAE;AACnE,qBAAqB;AACrB,oBAAoB,OAAO,EAAE,CAAC,2BAA2B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,eAAe;AAC1H,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACzJb;AACA;AACA;AACO,MAAM,kCAAkC,CAAC;AAChD;AACO,MAAM,iCAAiC,SAAS,kCAAkC,CAAC;AAC1F;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC5D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;AAC1D,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AAC/B,IAAI;AACJ;;ACVO,MAAM,mCAAmC,CAAC;AACjD;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,EAAE,GAAG,mBAAmB;AAC5C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,sBAAsB;AACnD,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AACjG,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AAC9C;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9E,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI;AAC9B,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC5E,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAClD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,UAAU;AAC3B,aAAa,cAAc,IAAI,OAAO;AACtC,gBAAgB,yBAAyB,IAAI,OAAO;AACpD,gBAAgB,cAAc,IAAI,OAAO;AACzC,gBAAgB,IAAI,IAAI,OAAO,CAAC,EAAE;AAClC,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE;AACpC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,KAAK;AAChD,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACnD,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACjF,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,IAAI;AACJ;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACjF,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,WAAW,GAAG,IAAI,iCAAiC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACvG,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE;AAC9B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,eAAe,EAAE;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;AACtF,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE;AACnC,YAAY,cAAc,CAAC,KAAK,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,oBAAoB,GAAG,KAAK;AACzD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,cAAc,EAAE,WAAW,EAAE;AAC5C,QAAQ,OAAO,cAAc,CAAC,OAAO,IAAI,WAAW,IAAI,cAAc,CAAC,SAAS,IAAI,WAAW;AAC/F,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI;AAC1G,QAAQ,MAAM,gBAAgB,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,EAAE;AACvC,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,EAAE,EAAE,KAAK,EAAE;AACnE;AACA;AACA;AACA;AACA,YAAY,MAAM,KAAK,GAAG;AAC1B,gBAAgB,SAAS,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK;AACnF,gBAAgB,OAAO,EAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG;AAC1F,aAAa;AACb,YAAY,gBAAgB,CAAC,IAAI,CAAC;AAClC,gBAAgB,KAAK;AACrB,gBAAgB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAChD,gBAAgB,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACxD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AACnE,gBAAgB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;AAClE,gBAAgB;AAChB,aAAa,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,OAAO,gBAAgB,CAAC,MAAM,EAAE;AACxC,YAAY,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC1G,QAAQ;AACR,QAAQ,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACjH,QAAQ,IAAI,CAAC,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,GAAG,IAAI;AAChF,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AAChD,QAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;AAC9D,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK;AAC5C,gBAAgB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACzE,gBAAgB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;AACxE,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7H,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzH,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACtI,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;AACrK,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;AACjK,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACtI,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;AACrC,QAAQ,IAAI,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,KAAK,UAAU,EAAE;AAC5E,YAAY,OAAO,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC;AACjE,QAAQ;AACR,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AAClE,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,EAAE;AACrB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI;AACpF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACpH,QAAQ,IAAI,gBAAgB,EAAE;AAC9B,YAAY,OAAO,gBAAgB,CAAC,KAAK;AACzC,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACnH,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,OAAO,eAAe,CAAC,KAAK;AACxC,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AACrD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI;AAC3E,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI;AAC3E,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AAC5E,QAAQ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAC9G,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC;AAC9B,aAAa,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACtD,aAAa,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAClH,YAAY,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAChH,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEA,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1V,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kCAAkC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,klFAAklF,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACh7G;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,UAAU,EAAE,CAAC;AAC7I,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,kCAAkC,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE;AACjK,wBAAwB,WAAW,EAAE;AACrC,qBAAqB,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,klFAAklF,EAAE;AAClqF,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACxL,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACvSnB;AACA;AACA;AACO,MAAM,6BAA6B,SAAS,kCAAkC,CAAC;AACtF;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC5D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;AAC1D,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,QAAQ,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;AACnF,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,OAAO,cAAc;AACjC,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;AAC/B,IAAI;AACJ;;ACvBA;AACO,MAAM,SAAS,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW;AACf;AACA,IAAI,KAAK;AACT;AACA,IAAI,GAAG,EAAE;AACT,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG;AACtB,IAAI;AACJ;;ACDA;AACO,MAAM,wBAAwB,CAAC;AACtC;AACA,IAAI,IAAI,kBAAkB,CAAC,kBAAkB,EAAE;AAC/C,QAAQ,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE;AAClE,YAAY,IAAI,CAAC,mBAAmB,GAAG,kBAAkB;AACzD,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,mBAAmB;AACvC,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpG,YAAY,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC7E,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,aAAa;AACjC,IAAI;AACJ;AACA,IAAI,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACrC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAC3C,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;AACxC,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAChI,YAAY,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACnF,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,qBAAqB,GAAG;AAChC,QAAQ,OAAO,IAAI,CAAC,sBAAsB;AAC1C,IAAI;AACJ;AACA,IAAI,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACrC,QAAQ,IAAI,SAAS;AACrB,YAAY,IAAI,CAAC,iBAAiB;AAClC,YAAY,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC1E,YAAY,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACxE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,GAAG,SAAS;AAC3C,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;AAC3E,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,kBAAkB;AACtC,IAAI;AACJ;AACA,IAAI,IAAI,0BAA0B,CAAC,UAAU,EAAE;AAC/C,QAAQ,IAAI,UAAU;AACtB,YAAY,IAAI,CAAC,0BAA0B;AAC3C,YAAY,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,0BAA0B,CAAC,MAAM;AACxE,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACzH,gBAAgB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACzF,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,2BAA2B,GAAG,UAAU,IAAI,EAAE;AAC3D,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACpF,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,0BAA0B,GAAG;AACrC,QAAQ,OAAO,IAAI,CAAC,2BAA2B;AAC/C,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AACzF,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY;AACxC,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe;AAC9C,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE;AACrD;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,EAAE;AACpD;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,YAAY,EAAE;AAC7D;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE;AACzD;AACA,QAAQ,IAAI,CAAC,gCAAgC,GAAG,IAAI,YAAY,EAAE;AAClE;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7H;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzH;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7G;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG;AACA,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/E;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnH;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE;AACpC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,IAAI,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvL;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,EAAE;AACxC;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC;AAC9B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK;AACjC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7F;AACA,QAAQ,MAAM,CAAC,MAAM;AACrB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE;AACjE,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AACxD,gBAAgB,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;AAC3D,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,IAAI,CAAC,yBAAyB,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAY,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAC5C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AACpC,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;AAC7C,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACzC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE;AAC1C,YAAY,IAAI,CAAC,qBAAqB,EAAE;AACxC,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC,EAAE;AACzC,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE;AAC3B,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,QAAQ;AACR,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,EAAE;AACzC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC3C,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC5D,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1C,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAChE,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACnD,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC5D,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC3C,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAChE,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1C,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC3C,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,YAAY,EAAE;AAC5C,QAAQ,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,YAAY,EAAE;AAC7C,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC;AAC9E,QAAQ,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;AAC9C,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,WAAW,GAAG,IAAIC,6BAA6B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACpG,QAAQ,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE;AAC7D,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC;AAClD,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,GAAG,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC3C,YAAY,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAC5C,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;AAC7C,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,cAAc,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACrG,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACxC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACvE,gBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5F,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACvE,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACvE,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,sBAAsB,GAAG;AACjC,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAChF,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,gBAAgB,KAAK,EAAE;AACvB,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B,gBAAgB,KAAK,EAAE;AACvB,YAAY;AACZ,YAAY,OAAO,KAAK;AACxB,QAAQ,CAAC,EAAE,CAAC,CAAC;AACb;AACA,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtC,gBAAgB,OAAO,EAAE;AACzB,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;AACpC,gBAAgB,OAAO,EAAE;AACzB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,cAAc;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,aAAa;AACjC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,gBAAgB,GAAG;AAC3B,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,WAAW,KAAK;AAC5E,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,gBAAgB,WAAW,GAAG,EAAE;AAChC,YAAY;AACZ,YAAY,OAAO,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC;AACxD,QAAQ,CAAC,EAAE,EAAE,CAAC;AACd,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,EAAE,EAAE,GAAG,WAAW;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,0BAA0B,GAAG;AACrC,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,qBAAqB;AAClD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,sBAAsB;AACnD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,sBAAsB,GAAG;AACjC,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,yBAAyB;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,uBAAuB;AACpD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,oBAAoB;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7C,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACpD,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC5C,gBAAgB,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC;AACjD,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;AAC/D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,eAAe,EAAE;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;AACrF,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE;AACnC,YAAY,cAAc,CAAC,KAAK,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC3D,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AACvC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE;AACvD,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AACnC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,uBAAuB,EAAE;AACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7E,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACtD,YAAY,IAAI,uBAAuB,IAAI,IAAI,EAAE;AACjD;AACA,gBAAgB,GAAG,CAAC,0BAA0B,GAAG,KAAK;AACtD,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,GAAG,CAAC,0BAA0B,GAAG,GAAG,CAAC,gBAAgB,KAAK,uBAAuB;AACjG,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,QAAQ,GAAG,EAAE;AACzB,QAAQ,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACvD,QAAQ,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/D,QAAQ,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AACnD,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;AAC1C,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACnD,YAAY,IAAI,CAAC,KAAK,GAAG,KAAK;AAC9B,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC3C,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC3F,gBAAgB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACpI,gBAAgB,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC;AACjE,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,2BAA2B,EAAE;AAC/F,gBAAgB,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC;AACjG,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;AAClF,gBAAgB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClG,gBAAgB,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC7D,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACtF,gBAAgB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAChF,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AAC/D,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAgB,IAAI,CAAC,mBAAmB,GAAG;AAC3C,oBAAoB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC5E,oBAAoB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY;AACzE,iBAAiB;AACjB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC3D,gBAAgB,IAAI,CAAC,mBAAmB,GAAG;AAC3C,oBAAoB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChE,oBAAoB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK;AAC7D,iBAAiB;AACjB,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACrD,QAAQ,MAAM,WAAW,GAAG,EAAE;AAC9B,QAAQ,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,YAAY,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACxE,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,WAAW,CAAC,MAAM;AAC3D,QAAQ,IAAI,CAAC,YAAY,GAAG,WAAW;AACvC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC;AAChH,IAAI;AACJ;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1F,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AACnD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI;AACjD,QAAQ,MAAM,YAAY,GAAG,EAAE;AAC/B,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACpI,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;AAC/C,QAAQ,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,IAAI,0BAA0B,EAAE,SAAS,EAAE,EAAE;AACtF,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;AACjF,YAAY,YAAY,CAAC,IAAI,CAAC;AAC9B,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,gBAAgB,WAAW,EAAE,SAAS;AACtC,gBAAgB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI;AAClD,aAAa,CAAC;AACd,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;AACtD,QAAQ,IAAI,KAAK,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1C,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,YAAY,EAAE;AACjC,QAAQ,OAAO,IAAIA,6BAA6B,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC;AAC9E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,YAAY,EAAE;AACxC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE;AAChG,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC;AACxH,QAAQ,MAAM,0BAA0B,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACpI,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,0BAA0B,CAAC;AAC3G,QAAQ,MAAM,gBAAgB,GAAG,0BAA0B;AAC3D,QAAQ,IAAI,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACnH;AACA;AACA;AACA,QAAQ,IAAI,oBAAoB,GAAG,CAAC,EAAE;AACtC,YAAY,oBAAoB,GAAG,oBAAoB,GAAG,CAAC;AAC3D,QAAQ;AACR,QAAQ,IAAI,oBAAoB,GAAG,CAAC,EAAE;AACtC,YAAY,OAAO,oBAAoB,IAAI,CAAC,EAAE;AAC9C,gBAAgB,MAAM,YAAY,GAAG,gBAAgB,GAAG,oBAAoB;AAC5E,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC;AACxF,gBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrF,gBAAgB,oBAAoB,EAAE;AACtC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,YAAY,EAAE;AACpC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;AAChG,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC;AACzH;AACA,QAAQ,MAAM,sBAAsB,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC;AACrE,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,sBAAsB,EAAE,KAAK,EAAE,EAAE;AACtE,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;AAC7E,YAAY,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAC7E,QAAQ;AACR,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,SAAS,EAAE;AAC7B,QAAQ,OAAO,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC;AAChE,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9D,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAC9D,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AACjG,QAAQ,MAAM,GAAG,GAAG;AACpB,YAAY,IAAI;AAChB,YAAY,KAAK,EAAE,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;AAC5C,YAAY,OAAO;AACnB,YAAY,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,YAAY,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;AACtG,YAAY,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS;AACpE,YAAY,IAAI,EAAE,MAAM;AACxB,YAAY,0BAA0B,EAAE;AACxC,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACpC,YAAY,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC;AACvD,QAAQ;AACR,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACpF,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC9E,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,aAAa,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC/C,aAAa,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,aAAa,GAAG;AAC7B,aAAa,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAC/C,aAAa,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtG,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAY,OAAO,UAAU,CAAC,gBAAgB;AAC9C,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB;AACrD,QAAQ,MAAM,WAAW,GAAG,EAAE;AAC9B,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE;AAC/E,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5F,QAAQ;AACR,QAAQ,OAAO,WAAW;AAC1B,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,EAAE;AAChD,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,EAAE;AACrG,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;AACzE,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,EAAE,EAAE;AACjD,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,EAAE;AACrG,QAAQ;AACR,aAAa;AACb,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACxE,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;AAC3D,QAAQ,IAAI,CAAC,eAAe,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC7E,QAAQ,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAC7G,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjE,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AACpH,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;AAChE,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AACjH,YAAY,IAAI,CAAC,oBAAoB,EAAE;AACvC;AACA;AACA;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACvD,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnJ,YAAY,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1K;AACA,YAAY,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC7C,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,IAAI,qBAAqB,GAAG,sBAAsB,CAAC,CAAC;AACjG,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAC/G,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC;AACA,YAAY,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC7C,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC5C,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AAC3D,QAAQ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AAClD,YAAY,GAAG,CAAC,QAAQ,GAAG,IAAI;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,KAAK,EAAE,QAAQ,EAAE;AACjD,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACzD,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACpC,gBAAgB,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChG,gBAAgB,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAClF,oBAAoB,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC/C,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC9C;AACA,QAAQ,MAAM,YAAY,GAAG,QAAQ;AACrC;AACA,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,aAAa;AAC1D,YAAY,IAAI,CAAC,YAAY;AAC7B,gBAAgB,IAAI,CAAC,QAAQ;AAC7B,oBAAoB,IAAI,CAAC,YAAY;AACrC,wBAAwB,IAAI,CAAC,QAAQ;AACrC,4BAA4B,IAAI,CAAC,UAAU;AAC3C,gCAAgC,IAAI,CAAC,aAAa;AAClD,oCAAoC,KAAK,CAAC,CAAC;AAC3C,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,QAAQ;AACxB,YAAY,IAAI,MAAM;AACtB,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B;AACA,gBAAgB,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/F,gBAAgB,IAAI,QAAQ;AAC5B,oBAAoB,CAAC,QAAQ,CAAC,OAAO;AACrC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ;AACtC,qBAAqB,OAAO,IAAI,CAAC,yBAAyB,EAAE,KAAK,UAAU;AAC3E,wBAAwB,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AAC7E,oBAAoB,QAAQ,CAAC,QAAQ,GAAG,IAAI;AAC5C,oBAAoB,QAAQ,CAAC,aAAa,GAAG,IAAI;AACjD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B;AACA,gBAAgB,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3F,gBAAgB,IAAI,MAAM;AAC1B,oBAAoB,CAAC,MAAM,CAAC,OAAO;AACnC,oBAAoB,CAAC,MAAM,CAAC,QAAQ;AACpC,qBAAqB,OAAO,IAAI,CAAC,uBAAuB,EAAE,KAAK,UAAU;AACzE,wBAAwB,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACzE,oBAAoB,MAAM,CAAC,QAAQ,GAAG,IAAI;AAC1C,oBAAoB,MAAM,CAAC,YAAY,GAAG,IAAI;AAC9C,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC1C;AACA,gBAAgB;AAChB,qBAAqB,MAAM,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/H,qBAAqB,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AACnE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AAC1C;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACpC,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/F,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,KAAK,IAAI,CAAC,yBAAyB,EAAE,EAAE;AAC1G,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1H,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAC9E,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxH,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gCAAgC,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC3D;AACA,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACnC,YAAY,IAAI,CAAC,aAAa,GAAG,KAAK;AACtC,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK;AACrC,YAAY,IAAI,CAAC,aAAa,GAAG,KAAK;AACtC,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK;AACjC,YAAY,IAAI,CAAC,YAAY,GAAG,KAAK;AACrC,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK;AACjC,YAAY,IAAI,CAAC,UAAU,GAAG,KAAK;AACnC,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK;AACjC,QAAQ,CAAC,CAAC;AACV,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACtC,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,IAAI,QAAQ;AAC5B,gBAAgB,IAAI,MAAM;AAC1B,gBAAgB,IAAI,KAAK,CAAC,KAAK,EAAE;AACjC;AACA,oBAAoB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/F,oBAAoB,IAAI,QAAQ,EAAE;AAClC,wBAAwB,QAAQ,CAAC,aAAa,GAAG,IAAI;AACrD,wBAAwB,QAAQ,CAAC,QAAQ,GAAG,IAAI;AAChD,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,IAAI,KAAK,CAAC,GAAG,EAAE;AAC/B;AACA,oBAAoB,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3F,oBAAoB,IAAI,MAAM,EAAE;AAChC,wBAAwB,MAAM,CAAC,YAAY,GAAG,IAAI;AAClD,wBAAwB,MAAM,CAAC,QAAQ,GAAG,IAAI;AAC9C,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC9C,oBAAoB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC/C,wBAAwB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACnE,4BAA4B,IAAI,CAAC,aAAa,GAAG,IAAI;AACrD,4BAA4B,IAAI,CAAC,QAAQ,GAAG,IAAI;AAChD,wBAAwB;AACxB,oBAAoB,CAAC,CAAC;AACtB,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AACtC;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACpC,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,CAAC;AACvF,YAAY,IAAI,CAAC,yBAAyB,EAAE,EAAE;AAC9C,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtH,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAC1F,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpH,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,CAAC,QAAQ,EAAE;AAC9B,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;AAC/D,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC;AACnG,QAAQ,IAAI,KAAK,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1C,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,GAAG,EAAE;AAC3B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACxE,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI;AACrC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,GAAG,EAAE;AAC1B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACpG,QAAQ,IAAI,gBAAgB;AAC5B,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;AAC5B,YAAY,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AACpG,YAAY,GAAG,CAAC,QAAQ,GAAG,KAAK;AAChC,QAAQ;AACR,aAAa;AACb,YAAY,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC;AACzE,YAAY,GAAG,CAAC,QAAQ,GAAG,IAAI;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,sBAAsB,GAAG,gBAAgB;AACtD,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC1E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,GAAG,EAAE;AAC1B,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AACpE,YAAY,IAAI,CAAC,kBAAkB,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACpE,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AACnG,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACrF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,GAAG,EAAE;AACnC,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5G;AACA,QAAQ,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC;AAC/D,QAAQ,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,CAAC,EAAE;AACnD;AACA,YAAY,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AAC3D,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,IAAI,CAAC,SAAS;AAC9B,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK;AACpC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACvF,gBAAgB,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC/E,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI;AAC7C,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAgB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/C,YAAY;AACZ,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,QAAQ;AACR,QAAQ,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;AAC7D,QAAQ,IAAI,CAAC,2BAA2B,GAAG,UAAU;AACrD;AACA,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC;AAC7G,QAAQ,IAAI,iBAAiB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACxF,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACtG,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,MAAM,EAAE;AACpC,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AAChC,YAAY,OAAO,MAAM;AACzB,QAAQ;AACR,QAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAClF,QAAQ,MAAM,YAAY,GAAG,EAAE;AAC/B,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC;AACvC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC3F,gBAAgB,YAAY,GAAG;AAC/B,oBAAoB,KAAK,EAAE,YAAY,CAAC,KAAK;AAC7C,oBAAoB,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI;AAC/F,0BAA0B,YAAY,CAAC;AACvC,0BAA0B,SAAS,CAAC;AACpC,iBAAiB;AACjB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/C,gBAAgB,YAAY,GAAG,SAAS;AACxC,YAAY;AACZ,QAAQ;AACR,QAAQ,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE;AAC1C,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAY,MAAM,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5G,YAAY,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC;AAChE,YAAY,IAAI,kBAAkB,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE;AAChE,gBAAgB,UAAU,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACxD,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;AAC5E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG;AACjE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;AACxC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC3C,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK;AACzD,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,gBAAgB,IAAI,CAAC,sBAAsB,KAAK,CAAC;AACjD,gBAAgB,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1D,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3C,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK;AACzD,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,gBAAgB,IAAI,CAAC,cAAc,KAAK,CAAC;AACzC,gBAAgB,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AAC1D,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3C,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,YAAY,EAAE;AACtC,QAAQ,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1E,QAAQ,MAAM,qBAAqB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC;AACjF,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC1C,gBAAgB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACnC,oBAAoB,GAAG,CAAC,QAAQ,GAAG,IAAI;AACvC,oBAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AACtH,wBAAwB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAClE,oBAAoB;AACpB,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,aAAa;AACb,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC1C,gBAAgB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACnC,oBAAoB,GAAG,CAAC,QAAQ,GAAG,KAAK;AACxC,oBAAoB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAChJ,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC1E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,GAAG;AAChC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,eAAe;AACpK,cAAc;AACd,cAAc,EAAE,CAAC;AACjB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,GAAG,EAAE;AACjC;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK;AACnD,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AAC1C,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AACxE,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACxD,oBAAoB,IAAI,CAAC,UAAU;AACnC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAClF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACnF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACxD,oBAAoB,IAAI,CAAC,UAAU;AACnC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAClF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACnF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,GAAG,EAAE;AAChC;AACA,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK;AAC7C,QAAQ,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD;AACA,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC;AACvG,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,gBAAgB,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,gBAAgB,SAAS,GAAG,eAAe,CAAC,KAAK;AACjD,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,SAAS,IAAI,SAAS,EAAE;AACpC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;AAC5E;AACA,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACxD,oBAAoB,IAAI,CAAC,UAAU;AACnC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAClF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;AACvF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACxD,oBAAoB,IAAI,CAAC,UAAU;AACnC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAClF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;AACvF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACpD,gBAAgB,IAAI,CAAC,UAAU,GAAG,KAAK;AACvC,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAED,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/U,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,0BAA0B,EAAE,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,UAAU,EAAE,4BAA4B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,yBAAyB,EAAE,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,UAAU,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,uBAAuB,EAAE,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,UAAU,EAAE,yBAAyB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,eAAe,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,sqNAAsqN,EAAE,MAAM,EAAE,CAAC,qEAAqE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5hV;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC;AAClI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AACpG,wBAAwB,WAAW,EAAE,QAAQ;AAC7C,wBAAwB,KAAK,EAAE;AAC/B,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,sqNAAsqN,EAAE,MAAM,EAAE,CAAC,qEAAqE,CAAC,EAAE;AACh3N,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC1J,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,kBAAkB,EAAE,CAAC;AAC5F,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;AACxC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,0BAA0B,EAAE,CAAC;AAC7C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,2BAA2B,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gCAAgC,EAAE,CAAC;AACnD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACvvCnB;AACO,MAAM,0BAA0B,CAAC;AACxC;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AACjG,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AAC9C;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE;AACzD;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK;AACrC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;AAC7B;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,CAAC;AACnC;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,CAAC;AAC9B;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI;AAC9B,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAClD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,EAAE;AACrG,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC5E,IAAI;AACJ;AACA,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY;AAChC,IAAI;AACJ;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,EAAE,GAAG,aAAa;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,sBAAsB;AACnD,IAAI;AACJ;AACA,IAAI,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACrC,QAAQ,IAAI,SAAS;AACrB,YAAY,IAAI,CAAC,iBAAiB;AAClC,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC3E,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACzE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,GAAG,SAAS;AAC3C,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAC5E,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,kBAAkB;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,cAAc,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACrG,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACxC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACvE,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7F,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACvE,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACvE,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE;AACzC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,eAAe,EAAE;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;AACtF,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE;AACnC,YAAY,cAAc,CAAC,KAAK,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,KAAK;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,EAAE,EAAE;AACnB,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;AAC3D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,EAAE,EAAE;AACpB,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,aAAa;AAC5D,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE;AAClC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,KAAK;AAC5C,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAClD;AACA,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE;AAC7C,YAAY,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC5C,YAAY,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC/C,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,WAAW,GAAG,IAAI,iCAAiC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACvG,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE;AAC9B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK;AACnD,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AAC1C,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AAC1E,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACzD,oBAAoB,MAAM,CAAC,UAAU;AACrC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACtF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACrF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACzD,oBAAoB,MAAM,CAAC,UAAU;AACrC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACtF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACrF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,KAAK,EAAE;AAC5G,YAAY,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AACtD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK;AACvC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AACpE,YAAY,IAAI,CAAC,kBAAkB,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACtE,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;AACrG,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,QAAQ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AACtF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG;AACjE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;AACxC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,KAAK,EAAE,QAAQ,EAAE;AAChD;AACA,QAAQ,MAAM,YAAY,GAAG,QAAQ;AACrC;AACA,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,aAAa;AAC9D,YAAY,MAAM,CAAC,YAAY;AAC/B,gBAAgB,MAAM,CAAC,QAAQ;AAC/B,oBAAoB,MAAM,CAAC,QAAQ;AACnC,wBAAwB,MAAM,CAAC,UAAU;AACzC,4BAA4B,MAAM,CAAC,aAAa;AAChD,gCAAgC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,UAAU;AAC1B,YAAY,IAAI,QAAQ;AACxB,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B;AACA,gBAAgB,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACtG,gBAAgB,IAAI,UAAU,EAAE;AAChC,oBAAoB,UAAU,CAAC,QAAQ,GAAG,IAAI;AAC9C,oBAAoB,UAAU,CAAC,aAAa,GAAG,IAAI;AACnD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B;AACA,gBAAgB,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAClG,gBAAgB,IAAI,QAAQ,EAAE;AAC9B,oBAAoB,QAAQ,CAAC,QAAQ,GAAG,IAAI;AAC5C,oBAAoB,QAAQ,CAAC,YAAY,GAAG,IAAI;AAChD,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC1C;AACA,gBAAgB;AAChB,qBAAqB,MAAM,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACrI,qBAAqB,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AACvE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC;AAChC,cAAc,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM;AACxD,cAAc,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC;AAC1D,QAAQ,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,KAAK;AAC/D,YAAY,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW;AAClD,YAAY,OAAO;AACnB,gBAAgB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AACxE,gBAAgB,KAAK;AACrB,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5J,gBAAgB,KAAK;AACrB,gBAAgB,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,aAAa;AACtD,gBAAgB,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,YAAY;AACpD,gBAAgB,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC;AAC9D,aAAa;AACb,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE;AAC7C,YAAY,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC;AAC/E,QAAQ;AACR,QAAQ,IAAI,CAAC,sBAAsB,GAAG,EAAE;AACxC;AACA,QAAQ,OAAO,SAAS,CAAC,MAAM,EAAE;AACjC,YAAY,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC1F,QAAQ;AACR,QAAQ,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;AAC/D,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,KAAK;AACjD,gBAAgB,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9E,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;AAC5D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB;AACjE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AAC5E,QAAQ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAC9G,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;AAC/D,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC;AAC9B,aAAa,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACtD,aAAa,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAClG,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACxD,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEA,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACjV,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,iqGAAiqG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACtmI;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AACtG,wBAAwB,WAAW,EAAE;AACrC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,iqGAAiqG,EAAE;AAClyG,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC1J,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;AAC5E,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;AACvB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,0BAA0B,EAAE,CAAC;AAC7C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;AC9YnB;AACO,MAAM,yBAAyB,CAAC;AACvC;AACA,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,EAAE,GAAG,YAAY;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,cAAc;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,oBAAoB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,sBAAsB;AACnD,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AACjG,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK;AACrC;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE;AACzD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9E,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY;AACjD,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI;AAC9B,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY;AACjD,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,YAAY,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAClD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,IAAI,OAAO,IAAI,cAAc,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,EAAE;AAC5G,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,IAAI,iBAAiB,CAAC,SAAS,EAAE;AACrC,QAAQ,IAAI,SAAS;AACrB,YAAY,IAAI,CAAC,iBAAiB;AAClC,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC3E,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACzE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,GAAG,SAAS;AAC3C,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAY,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1E,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,iBAAiB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,kBAAkB;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,cAAc,GAAG;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACrG,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACxC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACvE,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7F,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACvE,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AACvE,YAAY,OAAO,CAAC;AACpB,QAAQ;AACR,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACpE,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACpE,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE;AACpC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,KAAK,CAAC,eAAe,EAAE;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI;AAC7C,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAY,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC/C,YAAY,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC/C,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,WAAW,GAAG,IAAI,iCAAiC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACtG,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE;AAC9B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,eAAe,EAAE;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC;AACtF,QAAQ,IAAI,cAAc,EAAE,KAAK,EAAE;AACnC,YAAY,cAAc,CAAC,KAAK,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,KAAK;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,IAAI,EAAE;AAC5B;AACA,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK;AACnD,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;AAC1C,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;AACzE,gBAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACvD,oBAAoB,KAAK,CAAC,UAAU;AACpC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACpF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACvD,oBAAoB,KAAK,CAAC,UAAU;AACpC,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpF,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACpF,gBAAgB,CAAC,CAAC;AAClB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;AACnG,QAAQ,IAAI,gBAAgB,EAAE;AAC9B,YAAY,OAAO,gBAAgB,CAAC,IAAI;AACxC,QAAQ;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC;AAClG,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,OAAO,eAAe,CAAC,IAAI;AACvC,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;AACpD,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AACpF,QAAQ,MAAM,gBAAgB,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,EAAE;AACvC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,EAAE,CAAC,EAAE;AACvD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAClD,YAAY,gBAAgB,CAAC,IAAI,CAAC;AAClC,gBAAgB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;AAC5D,gBAAgB,IAAI;AACpB,gBAAgB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC9C,gBAAgB,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtD,gBAAgB,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC,YAAY;AACpD,gBAAgB,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,YAAY;AACnD,gBAAgB,KAAK,EAAE;AACvB,aAAa,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACxC,YAAY,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;AACrF,QAAQ;AACR;AACA,QAAQ,OAAO,gBAAgB,CAAC,MAAM,EAAE;AACxC,YAAY,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/F,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AAChD,QAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK;AAC9D,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK;AAC5C,gBAAgB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACzE,gBAAgB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;AACvE,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC9C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,KAAK,EAAE;AACvG,YAAY,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;AACtD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,cAAc,GAAG,KAAK;AACvC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/C;AACA,QAAQ,MAAM,YAAY,GAAG,QAAQ;AACrC;AACA,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,aAAa;AAC5D,YAAY,KAAK,CAAC,YAAY;AAC9B,gBAAgB,KAAK,CAAC,QAAQ;AAC9B,oBAAoB,KAAK,CAAC,QAAQ;AAClC,wBAAwB,KAAK,CAAC,UAAU;AACxC,4BAA4B,KAAK,CAAC,aAAa;AAC/C,gCAAgC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,SAAS;AACzB,YAAY,IAAI,OAAO;AACvB,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B;AACA,gBAAgB,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACnG,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,SAAS,CAAC,QAAQ,GAAG,IAAI;AAC7C,oBAAoB,SAAS,CAAC,aAAa,GAAG,IAAI;AAClD,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B;AACA,gBAAgB,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/F,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,OAAO,CAAC,QAAQ,GAAG,IAAI;AAC3C,oBAAoB,OAAO,CAAC,YAAY,GAAG,IAAI;AAC/C,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC1C;AACA,gBAAgB;AAChB,qBAAqB,MAAM,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAClI,qBAAqB,OAAO,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AACrE,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AACpE,YAAY,IAAI,CAAC,kBAAkB,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACrE,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;AAC5C,YAAY,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACpG,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,QAAQ;AACR,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACpF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG;AACjE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;AACxC,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzG,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AACnD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;AACjJ,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AACnD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE;AACrC,QAAQ,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,UAAU,EAAE;AACjE,YAAY,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;AACtD,QAAQ;AACR,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,4BAA4B,GAAG;AACnC,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AAC9D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AAChE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AAChE,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AAC5E,QAAQ,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAC9G,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9D,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AACrH,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;AAC9D,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAClH,YAAY,IAAI,CAAC,oBAAoB,EAAE;AACvC,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK;AAChH,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnD,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEA,eAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAChV,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,ioGAAioG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACtkI;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACnI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE;AACrG,wBAAwB,WAAW,EAAE;AACrC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,ioGAAioG,EAAE;AAClwG,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,eAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACxL,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;AACxC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACncnB;AACO,SAAS,oCAAoC,CAAC,QAAQ,EAAE;AAC/D,IAAI,OAAO,KAAK,CAAC,CAAC,gCAAgC,EAAE,QAAQ,CAAC,uCAAuC,CAAC;AACrG,QAAQ,CAAC,iEAAiE,CAAC;AAC3E,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACjC;;ACHA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,kBAAkB;AACrF;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,mBAAmB,CAAC,YAAY,CAAC,wBAAwB;AACjG;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,YAAY,CAAC,mBAAmB;AACvF;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,kBAAkB;AACrF;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,YAAY,CAAC,iBAAiB;AACnF;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,YAAY,CAAC,aAAa;AAC3E;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,kBAAkB;AACrF;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,YAAY,CAAC,cAAc;AAC7E;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAC,eAAe;AAC/E;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,YAAY,CAAC,iBAAiB;AACnF;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACrE;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAC,eAAe;AAC/E;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,YAAY,CAAC,aAAa;AAC3E;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAC,YAAY,CAAC,cAAc;AAC7E;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,kBAAkB;AACrF;AACA,QAAQ,IAAI,CAAC,0BAA0B,GAAG,mBAAmB,CAAC,YAAY,CAAC,0BAA0B;AACrG;AACA,QAAQ,IAAI,CAAC,4BAA4B,GAAG,mBAAmB,CAAC,YAAY,CAAC,4BAA4B;AACzG;AACA,QAAQ,IAAI,CAAC,4BAA4B,GAAG,mBAAmB,CAAC,YAAY,CAAC,4BAA4B;AACzG;AACA,QAAQ,IAAI,CAAC,iCAAiC,GAAG,mBAAmB,CAAC,YAAY,CAAC,iCAAiC;AACnH,IAAI;AACJ;;AC7CA;AACA;AACA;AACO,SAAS,yBAAyB,GAAG;AAC5C,IAAI,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3E,IAAI,IAAI,gBAAgB,EAAE;AAC1B,QAAQ,OAAO,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,KAAK,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,YAAY,MAAM;AAC9L,YAAY,GAAG,YAAY;AAC3B,YAAY,YAAY,EAAE;AAC1B,gBAAgB,GAAG,YAAY,CAAC,YAAY;AAC5C,gBAAgB,GAAG;AACnB;AACA,SAAS,CAAC,CAAC,CAAC;AACZ,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD;;ACEA,IAAI,gBAAgB,GAAG,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B;AACA,IAAI,WAAW,CAAC,WAAW,EAAE,kBAAkB,EAAE,uBAAuB;AACxE;AACA,IAAI,gBAAgB,EAAE,gBAAgB,EAAE;AACxC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AAChD;AACA,QAAQ,IAAI,CAAC,0BAA0B,GAAG,EAAE;AAC5C;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAC3C;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG;AAChD;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,MAAM;AAC9C;AACA,QAAQ,IAAI,CAAC,EAAE,GAAG,cAAc,GAAG,gBAAgB,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAClC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;AACxB,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,EAAE;AAClB,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG;AAClC,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI,EAAE;AAClB,SAAS;AACT;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,EAAE;AACjC;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,EAAE;AAClD;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,EAAE;AACpD;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,YAAY,EAAE;AAC7D;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE;AACzD;AACA,QAAQ,IAAI,CAAC,gCAAgC,GAAG,IAAI,YAAY,EAAE;AAClE;AACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,IAAI,YAAY,EAAE;AACnD;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAE;AAC/C;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;AAC9C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACvC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAE;AAChD;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAK,KAAK;AAC9C,YAAY,KAAK,EAAE,cAAc,EAAE;AACnC,YAAY,IAAI,CAAC,wBAAwB,EAAE,KAAK,EAAE;AAClD,QAAQ,CAAC;AACT;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,KAAK;AAC1C;AACA;AACA;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,KAAK;AACpD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,uBAAuB,GAAG,MAAM,KAAK;AAClD;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAY,MAAM,oCAAoC,CAAC,iBAAiB,CAAC;AACzE,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAY,MAAM,oCAAoC,CAAC,mBAAmB,CAAC;AAC3E,QAAQ;AACR,QAAQ,uBAAuB,CAAC,SAAS,EAAE;AAC3C;AACA,QAAQ,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACzD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC9C,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;AAC3E,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,2BAA2B,IAAI,OAAO;AAClD,YAAY,+BAA+B,IAAI,OAAO;AACtD,YAAY,qBAAqB,IAAI,OAAO,EAAE;AAC9C,YAAY,IAAI,CAAC,2BAA2B,EAAE;AAC9C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,KAAK,SAAS,GAAG,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,iBAAiB;AAC7G,IAAI;AACJ;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACzC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB,QAAQ,IAAI,KAAK,GAAG,IAAI;AACxB,QAAQ,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;AACzF,QAAQ,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3G,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC1D,gBAAgB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAC7E,gBAAgB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AAChD,gBAAgB,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClD,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAC9D,gBAAgB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE;AACtE,gBAAgB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;AAClD,gBAAgB,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AACzE,oBAAoB,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI;AAC/C,oBAAoB,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI;AACvC,iBAAiB,CAAC,CAAC;AACnB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC1D,gBAAgB,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC;AAC7C,gBAAgB,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5C,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,KAAK,EAAE;AAC9D,gBAAgB,MAAM,KAAK,GAAG,QAAQ;AACtC,gBAAgB,KAAK,GAAG,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC;AACpD,gBAAgB,IAAI,CAAC,iBAAiB,GAAG;AACzC,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;AAC1E,sBAAsB;AACtB,wBAAwB,KAAK,EAAE,IAAI;AACnC,wBAAwB,GAAG,EAAE;AAC7B,qBAAqB;AACrB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,CAAC,qBAAqB,EAAE;AACxC,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,YAAY;AAChC,cAAc;AACd,cAAc;AACd,gBAAgB,cAAc,EAAE;AAChC,oBAAoB,KAAK,EAAE;AAC3B;AACA,aAAa;AACb,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B,IAAI;AACJ;AACA,IAAI,iBAAiB,CAAC,EAAE,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE;AACvC,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;AAC5C,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,QAAQ,IAAI,UAAU,KAAK,kBAAkB,CAAC,KAAK,EAAE;AACrD,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,QAAQ;AACR,QAAQ,IAAI,UAAU,KAAK,kBAAkB,CAAC,IAAI,EAAE;AACpD,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,QAAQ,IAAI,UAAU,KAAK,kBAAkB,CAAC,cAAc,EAAE;AAC9D,YAAY,IAAI,CAAC,wBAAwB,EAAE;AAC3C,QAAQ;AACR,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE;AAC9B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACjC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,4BAA4B,CAAC,IAAI,EAAE;AACvC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACzC,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACjC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,KAAK,EAAE;AACpC,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;AAC3E,YAAY,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACrE,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACjD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACrC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,iCAAiC,CAAC,KAAK,EAAE;AAC7C,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACnD,YAAY,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC;AACvF,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAC1D,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACrC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,QAAQ,IAAI,CAAC,UAAU;AAC/B,YAAY,KAAK,kBAAkB,CAAC,GAAG;AACvC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,KAAK;AACzC,gBAAgB,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,IAAI;AACxC,gBAAgB,IAAI,CAAC,mBAAmB,EAAE;AAC1C,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,cAAc;AAClD,gBAAgB,IAAI,CAAC,oBAAoB,EAAE;AAC3C,gBAAgB;AAChB;AACA,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,QAAQ,IAAI,CAAC,UAAU;AAC/B,YAAY,KAAK,kBAAkB,CAAC,GAAG;AACvC,gBAAgB,IAAI,CAAC,oBAAoB,EAAE;AAC3C,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,KAAK;AACzC,gBAAgB,IAAI,CAAC,mBAAmB,EAAE;AAC1C,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,IAAI;AACxC,gBAAgB,IAAI,CAAC,uBAAuB,EAAE;AAC9C,gBAAgB;AAChB,YAAY,KAAK,kBAAkB,CAAC,cAAc;AAClD,gBAAgB,IAAI,CAAC,wBAAwB,EAAE;AAC/C,gBAAgB;AAChB;AACA,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,KAAK,EAAE,EAAE;AACnD,YAAY,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC5F,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,GAAG;AACvC,gBAAgB,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;AACnD,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG;AACxD,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,mBAAmB,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7F,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,GAAG;AACvC,gBAAgB,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;AACnD,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG;AACxD,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,mBAAmB,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACrH,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE;AACrH,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE;AAClD,QAAQ,IAAI,CAAC,mBAAmB,GAAG;AACnC,YAAY,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AACjD,YAAY,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC1C,SAAS;AACT,IAAI;AACJ;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE;AACtD,QAAQ,IAAI,CAAC,mBAAmB,GAAG;AACnC,YAAY,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AACjD,YAAY,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC1C,SAAS;AACT,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,4BAA4B,CAAC,iBAAiB,EAAE;AAC7D,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,CAAC,4BAA4B,CAAC,qBAAqB,EAAE;AACjE,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,IAAI,EAAE;AAChC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,mBAAmB,GAAG;AACvC,gBAAgB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3D,gBAAgB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI;AACxD,aAAa;AACb,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,uBAAuB,EAAE,EAAE,cAAc,EAAE;AACxD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;AACjF;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC5C,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG;AACpD,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,YAAY,EAAE;AAC/B,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,YAAY;AACpD;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAC3C,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK;AACtD,YAAY,IAAI,CAAC,mBAAmB,EAAE;AACtC,QAAQ;AACR,aAAa,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAC/C,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI;AACrD,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,GAAG;AACpD,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACrC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,aAAa,EAAE;AACjC,QAAQ,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI;AACjD,QAAQ,IAAI,CAAC,mBAAmB,GAAG;AACnC,YAAY,GAAG,IAAI,CAAC,mBAAmB;AACvC,YAAY,IAAI,EAAE,aAAa,CAAC;AAChC,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE;AAChD,IAAI;AACJ;AACA,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,CAAC,mBAAmB,EAAE,cAAc,EAAE;AAClD,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE;AACjD,IAAI;AACJ;AACA,IAAI,wBAAwB,GAAG;AAC/B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC/C,QAAQ,IAAI,CAAC,4BAA4B,EAAE,cAAc,EAAE;AAC3D,IAAI;AACJ;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC1D,gBAAgB,QAAQ,IAAI,CAAC,qBAAqB;AAClD,oBAAoB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7F,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,KAAK,EAAE;AACzD,gBAAgB,QAAQ,IAAI,CAAC,0BAA0B;AACvD,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1G,oBAAoB,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxG,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC1D,gBAAgB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;AACvE,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,KAAK,EAAE;AACzD,gBAAgB,QAAQ,IAAI,CAAC,iBAAiB;AAC9C,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/E,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC7E,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,OAAO,IAAI,CAAC,eAAe,KAAK,OAAO;AAC/C,IAAI;AACJ;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,OAAO,IAAI,CAAC,eAAe,KAAK,MAAM;AAC9C,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM;AACpF,YAAY,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC5F,YAAY,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAClD,QAAQ,CAAC,CAAC,CAAC;AACX,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,GAAG,IAAI;AAC3G,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB,CAAC,MAAM;AACpD,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC;AACvD,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC1C,YAAY,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;AACrD,QAAQ;AACR,aAAa,IAAI,qBAAqB,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACnF,YAAY,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AACjE,QAAQ;AACR,aAAa,IAAI,iBAAiB,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC3E,YAAY,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAChE,QAAQ;AACR,aAAa,IAAI,iBAAiB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AACzE,YAAY,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC;AAC9D,QAAQ;AACR,aAAa,IAAI,0BAA0B,EAAE,MAAM,GAAG,CAAC;AACvD,YAAY,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK;AAC/C,YAAY,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,QAAQ;AACR,aAAa,IAAI,0BAA0B,EAAE,MAAM,GAAG,CAAC;AACvD,YAAY,0BAA0B,CAAC,CAAC,CAAC,CAAC,GAAG;AAC7C,YAAY,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1E,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACvD,YAAY,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC9C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,sBAAsB,CAAC,IAAI,EAAE;AACjC,QAAQ,IAAI,CAAC,mBAAmB,GAAG;AACnC,YAAY,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;AACrD,YAAY,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI;AACtD,SAAS;AACT,IAAI;AACJ;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,QAAQ,IAAI,CAAC,UAAU;AAC/B,YAAY,KAAK,kBAAkB,CAAC,GAAG;AACvC,gBAAgB,OAAO,IAAI,CAAC,iBAAiB;AAC7C,YAAY,KAAK,kBAAkB,CAAC,KAAK;AACzC,gBAAgB,OAAO,IAAI,CAAC,mBAAmB;AAC/C,YAAY,KAAK,kBAAkB,CAAC,IAAI;AACxC,gBAAgB,OAAO,IAAI,CAAC,kBAAkB;AAC9C,YAAY,KAAK,kBAAkB,CAAC,cAAc;AAClD,gBAAgB,OAAO,IAAI,CAAC,4BAA4B;AACxD,YAAY;AACZ,gBAAgB,OAAO,IAAI;AAC3B;AACA,IAAI;AACJ;AACA,IAAI,2BAA2B,GAAG;AAClC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,6BAA6B,CAAC;AAC1G,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAClG,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAC9C,IAAI;AACJ;AACA,IAAI,2BAA2B,CAAC,eAAe,EAAE;AACjD,QAAQ,QAAQ,OAAO,eAAe,KAAK,UAAU;AACrD,YAAY,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC;AACzF,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAEE,IAAE,CAAC,sBAAsB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/W,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,OAAO,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,kCAAkC,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,qCAAqC,EAAE,sBAAsB,EAAE,oCAAoC,EAAE,qBAAqB,EAAE,EAAE,cAAc,EAAE,kCAAkC,EAAE,EAAE,SAAS,EAAE;AAC5yD,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChE,gBAAgB,KAAK,EAAE;AACvB,aAAa;AACb,YAAY;AACZ,gBAAgB,OAAO,EAAE,aAAa;AACtC,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChE,gBAAgB,KAAK,EAAE;AACvB,aAAa;AACb,YAAY,eAAe;AAC3B,YAAY,6BAA6B;AACzC,YAAY,+BAA+B,EAAE;AAC7C,YAAY;AACZ,gBAAgB,OAAO,EAAE,WAAW;AACpC,gBAAgB,UAAU,EAAE;AAC5B;AACA,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,wBAAwB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,8BAA8B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,mCAAmC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,0BAA0B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,uBAAuB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,yvHAAyvH,EAAE,MAAM,EAAE,CAAC,k0uDAAk0uD,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,kCAAkC,EAAE,uBAAuB,EAAE,iCAAiC,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,eAAe,EAAE,wBAAwB,EAAE,8BAA8B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,yBAAyB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,yBAAyB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,kCAAkC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,cAAc,EAAE,yBAAyB,EAAE,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC787D;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;AAChG,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAC5E,4BAA4B,KAAK,EAAE;AACnC,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,aAAa;AAClD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAC5E,4BAA4B,KAAK,EAAE;AACnC,yBAAyB;AACzB,wBAAwB,eAAe;AACvC,wBAAwB,6BAA6B;AACrD,wBAAwB,+BAA+B,EAAE;AACzD,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,WAAW;AAChD,4BAA4B,UAAU,EAAE;AACxC;AACA,qBAAqB,EAAE,IAAI,EAAE;AAC7B,wBAAwB,WAAW,EAAE,IAAI;AACzC,wBAAwB,KAAK,EAAE;AAC/B,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AACjF,wBAAwB,oBAAoB;AAC5C,wBAAwB,uBAAuB;AAC/C,wBAAwB,wBAAwB;AAChD,wBAAwB,0BAA0B;AAClD,wBAAwB,yBAAyB;AACjD,wBAAwB,mCAAmC;AAC3D,wBAAwB;AACxB,qBAAqB,EAAE,QAAQ,EAAE,yvHAAyvH,EAAE,MAAM,EAAE,CAAC,k0uDAAk0uD,CAAC,EAAE;AAC1m2D,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAEA,IAAE,CAAC,sBAAsB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AAC1K,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACtD,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,EAAE;AACnB,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,iBAAiB;AAC5C,iBAAiB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,CAAC;AACxD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;AACxC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,0BAA0B,EAAE,CAAC;AAC7C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,sBAAsB,EAAE,CAAC;AACzC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,qCAAqC;AAC5D,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,EAAE;AACf,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,oCAAoC;AAC3D,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,2BAA2B,EAAE,CAAC;AAC9C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,gCAAgC,EAAE,CAAC;AACnD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACpC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,wBAAwB;AAC/C,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,0BAA0B;AACjD,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,4BAA4B,EAAE,CAAC;AAC/C,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,mCAAmC;AAC1D,aAAa,CAAC,EAAE,wBAAwB,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,uBAAuB;AAC9C,aAAa,CAAC,EAAE,6BAA6B,EAAE,CAAC;AAChD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;AAC5C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;AAC5C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;AAC1C,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;AAC7C,aAAa,CAAC,EAAE,EAAE,CAAC;;AChvBZ,MAAM,cAAc,CAAC;AAC5B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/K,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,iBAAiB;AAC1J,YAAY,uBAAuB;AACnC,YAAY,wBAAwB;AACpC,YAAY,0BAA0B;AACtC,YAAY,yBAAyB;AACrC,YAAY,mCAAmC;AAC/C,YAAY,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB;AACtE,YAAY,wBAAwB;AACpC,YAAY,uBAAuB;AACnC,YAAY,yBAAyB;AACrC,YAAY,0BAA0B;AACtC,YAAY,mCAAmC;AAC/C,YAAY,4BAA4B;AACxC,YAAY,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACrC,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,iBAAiB;AAC1J,YAAY,uBAAuB;AACnC,YAAY,0BAA0B;AACtC,YAAY,yBAAyB;AACrC,YAAY,mCAAmC,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAC1E;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,iBAAiB;AACzC,wBAAwB,uBAAuB;AAC/C,wBAAwB,wBAAwB;AAChD,wBAAwB,0BAA0B;AAClD,wBAAwB,yBAAyB;AACjD,wBAAwB,mCAAmC;AAC3D,wBAAwB;AACxB,qBAAqB;AACrB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,iBAAiB;AACzC,wBAAwB,wBAAwB;AAChD,wBAAwB,uBAAuB;AAC/C,wBAAwB,yBAAyB;AACjD,wBAAwB,0BAA0B;AAClD,wBAAwB,mCAAmC;AAC3D,wBAAwB,4BAA4B;AACpD,wBAAwB;AACxB;AACA,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACvDb;AACA;AACA;;;;"}