{"version":3,"file":"fundamental-ngx-core-time.mjs","sources":["../../../../libs/core/time/time-column/time-column.component.ts","../../../../libs/core/time/time-column/time-column.component.html","../../../../libs/core/time/errors.ts","../../../../libs/core/time/time.component.ts","../../../../libs/core/time/time.component.html","../../../../libs/core/time/time.module.ts","../../../../libs/core/time/fundamental-ngx-core-time.ts"],"sourcesContent":["import { DOWN_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation\n} from '@angular/core';\nimport { BehaviorSubject, Subject, Subscription, combineLatest } from 'rxjs';\nimport { buffer, debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport { KeyUtil, resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { CarouselConfig, CarouselDirective, CarouselItemDirective, PanEndOutput } from '@fundamental-ngx/core/carousel';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SelectableViewItem } from '../models';\nimport { TimeColumnConfig } from './time-column-config';\n\nlet timeColumnUniqueId = 0;\n\nexport interface TimeColumnItemOutput<T> {\n    value: T;\n    after?: boolean;\n}\n\n@Component({\n    selector: 'fd-time-column',\n    templateUrl: './time-column.component.html',\n    styleUrl: './time-column.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fd-time__col'\n    },\n    imports: [ButtonComponent, CarouselDirective, CarouselItemDirective, FdTranslatePipe]\n})\nexport class TimeColumnComponent<K extends number, T extends SelectableViewItem<K> = SelectableViewItem<K>>\n    implements AfterViewInit, OnInit, OnDestroy, OnChanges\n{\n    /** items in row */\n    @Input()\n    rows: T[] = [];\n\n    /**\n     * @Input When set to false, hides the buttons that increment\n     * and decrement the corresponding columns.\n     */\n    @Input()\n    spinners = true;\n\n    /** Currently chosen, centered time column item */\n    @Input()\n    set activeValue(activeItem: Nullable<T>) {\n        if (!activeItem) {\n            // omitting \"null\" and \"undefined\"\n            return;\n        }\n        if (this._viewInit$.value && this._activeValue !== activeItem) {\n            this._pickTime(this._getItem(activeItem), false);\n        }\n        this._activeValue = activeItem;\n    }\n\n    get activeValue(): Nullable<T> {\n        return this._activeValue;\n    }\n\n    /** Defines if column is active, it has impact on behavior and visual  */\n    @Input()\n    set active(value: boolean) {\n        this._active = value;\n        if (value && this._viewInit$.value) {\n            this._changeDetRef.detectChanges();\n            this._pickTime(this._getItem(this.activeValue), false);\n            this._focusIndicator();\n        }\n    }\n\n    get active(): boolean {\n        return this._active;\n    }\n\n    /** Whether time column is meridian */\n    @Input()\n    @HostBinding('class.fd-time__col--period')\n    meridian = false;\n\n    /** Id of column, initiated with some default value */\n    @Input()\n    id: string = 'fd-time-column-' + timeColumnUniqueId++;\n\n    /** I18n and labels */\n    @Input()\n    timeConfig: Nullable<TimeColumnConfig>;\n\n    /** I18n and labels */\n    @Input()\n    columnTranslationsPreset: 'seconds' | 'minutes' | 'hours' | 'period';\n\n    /**\n     * Offset for carousel directive, active item is always the first one.\n     * In case of having more items in carousel than 1, middle element should be active\n     */\n    @Input()\n    set offset(value: number) {\n        this._offset$.next(value);\n    }\n    get offset(): number {\n        return this._offset$.value;\n    }\n\n    /**\n     * Quantity of the elements to be shown at the same time in column\n     */\n    @Input()\n    set elementsAtOnce(value: number) {\n        this._elementsAtOnce$.next(value);\n    }\n\n    /** Event emitted, when active item is changed, by carousel */\n    @Output()\n    activeValueChange: EventEmitter<TimeColumnItemOutput<T>> = new EventEmitter<TimeColumnItemOutput<T>>();\n\n    /** Event emitted, when certain column is activated */\n    @Output()\n    activeStateChange: EventEmitter<void> = new EventEmitter<void>();\n\n    /** @hidden */\n    @ViewChild(CarouselDirective)\n    carousel: CarouselDirective;\n\n    /** @hidden */\n    @ViewChildren(CarouselItemDirective)\n    items: QueryList<CarouselItemDirective<T>>;\n\n    /** @hidden */\n    @ViewChild('indicator', { read: ElementRef })\n    indicator: ElementRef;\n\n    /** @hidden */\n    wrapperHeight: number;\n\n    /**\n     * Time to wait in milliseconds after the last keydown before\n     * focusing or selecting option based on numeric/alpha keys.\n     * @hidden\n     */\n    typeaheadDebounceInterval = 750;\n\n    /** @hidden */\n    config: CarouselConfig;\n\n    /** @hidden */\n    internalTranslationConfig: TimeColumnConfig | null = null;\n\n    /** @hidden */\n    get currentIndicatorId(): string {\n        return this.id + '-current-indicator';\n    }\n\n    /** @hidden */\n    get currentIndicatorValueId(): string {\n        return this.currentIndicatorId + '-value';\n    }\n\n    /** @hidden */\n    private _elementsAtOnce$ = new BehaviorSubject(7);\n\n    /** @hidden */\n    private _offset$ = new BehaviorSubject(3);\n\n    /** @hidden */\n    private _active = false;\n\n    /** @hidden */\n    private _queryKeyDownEvent: Subject<string> = new Subject<string>();\n\n    /** @hidden */\n    private _activeValue: Nullable<T>;\n\n    /** @hidden */\n    private _activeCarouselItem: CarouselItemDirective<T>;\n\n    /** @hidden */\n    private _isDragging = false;\n\n    /** @hidden */\n    private _viewInit$ = new BehaviorSubject<boolean>(false);\n\n    /** @hidden */\n    private _resize$ = new BehaviorSubject<boolean>(false);\n\n    /** @hidden */\n    private _subscriptions: Subscription = new Subscription();\n\n    /** @hidden\n     * logs numeric key inputs to set time using keyboard input.\n     */\n    private _keyLog: string[] = [];\n\n    /** @hidden\n     * Timeout variable used to set timeout for subsequent numeric key input to set time.\n     */\n    private _numericInputTimeout: ReturnType<typeof setTimeout>;\n\n    /** @hidden */\n    constructor(\n        private _changeDetRef: ChangeDetectorRef,\n        private _elmRef: ElementRef\n    ) {\n        this._subscriptions.add(\n            combineLatest([this._viewInit$, this._elementsAtOnce$, this._offset$, this._resize$])\n                .pipe(\n                    filter(([viewInit]) => viewInit),\n                    tap(([, elementsAtOnce, offset]) => {\n                        const averageHeight =\n                            this.items.toArray().reduce((acc, next) => acc + next.getHeight(), 0) / this.items.length;\n                        this.wrapperHeight = averageHeight * elementsAtOnce;\n                        const visibleButNotSelectedElements = Math.floor(elementsAtOnce / 2);\n                        if (offset === 0) {\n                            this.items.first.element.style.marginTop = `${\n                                visibleButNotSelectedElements * averageHeight\n                            }px`;\n                            this.items.last.element.style.marginBottom = `${\n                                visibleButNotSelectedElements * averageHeight\n                            }px`;\n                        }\n\n                        if (this.activeValue) {\n                            this._pickTime(this._getItem(this.activeValue), false);\n                        }\n\n                        this._changeDetRef.detectChanges();\n                    })\n                )\n                .subscribe()\n        );\n    }\n\n    /** @hidden */\n    @HostListener('click')\n    onItemClick(): void {\n        this.activeStateChange.emit();\n    }\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    keyDownHandler(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            this.scrollDown();\n            event.preventDefault();\n        } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            this.scrollUp();\n            event.preventDefault();\n        } else if (KeyUtil.isKeyType(event, 'numeric')) {\n            this._numericKeyInputHandler(event);\n        } else if (KeyUtil.isKeyType(event, 'alphabetical')) {\n            this._alphaKeyInputHandler(event);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('wheel', ['$event'])\n    mouseScrollHandler(event: WheelEvent): void {\n        event.preventDefault();\n        if (this._active) {\n            event.deltaY > 0 ? this.scrollDown() : this.scrollUp();\n        }\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._subscriptions.add(this._elementsAtOnce$.pipe(tap(() => this._setUpCarouselConfiguration())).subscribe());\n        this._setUpQuerySubscription();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._subscriptions.add(\n            resizeObservable(this._elmRef.nativeElement).subscribe(() => {\n                this._resize$.next(true);\n            })\n        );\n        this._viewInit$.next(true);\n    }\n\n    /** @hidde */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.columnTranslationsPreset) {\n            this._updateInternalTranslationConfig();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    spinnerButtonKeyupHandle(event: KeyboardEvent, upButton?: boolean): void {\n        if (KeyUtil.isKeyCode(event, SPACE)) {\n            if (upButton) {\n                this.scrollUp();\n            } else {\n                this.scrollDown();\n            }\n\n            event.stopPropagation();\n            event.preventDefault();\n        }\n    }\n\n    /** @hidden */\n    setValueOfActive(): void {\n        if (this._active) {\n            this._setUpInitialValue();\n        }\n    }\n\n    /** It prevents from accidentally change the item by click event */\n    handleDrag(isDragging: boolean): void {\n        this._isDragging = isDragging;\n    }\n\n    /** Method that handles active item change */\n    activeChangedHandle(output: PanEndOutput): void {\n        const array = this.items.toArray();\n        let index: number = array.findIndex((__item) => __item === output.item) + this.offset;\n\n        if (index >= array.length) {\n            index = index - array.length;\n        }\n\n        const _item = array[index];\n\n        this._activeValue = _item.value;\n\n        this.activeValueChange.emit({\n            value: this._activeValue!,\n            after: output.after\n        });\n\n        this._activeCarouselItem = _item;\n    }\n\n    /** Method that changes active item and triggers carousel scroll */\n    pick(item: CarouselItemDirective<T>, index: number): void {\n        const currentIndex: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n        /** To prevent from switching time, when it's being dragged */\n        if (!this._isDragging) {\n            this._pickTime(item, true, true, currentIndex < index);\n        }\n    }\n\n    /** Method triggered by keyboard, or increment button */\n    scrollUp(event?: MouseEvent): void {\n        /** Keyboard events in reactive forms, shouldn't trigger this method */\n        if (event && !event.clientX) {\n            return;\n        }\n        let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n        if (index > 0) {\n            index--;\n        } else {\n            index = this.rows.length - 1;\n        }\n\n        this._pickTime(this.items.toArray()[index], true, true, false);\n    }\n\n    /** Method triggered by keyboard, or decrement button */\n    scrollDown(): void {\n        let index: number = this.items.toArray().findIndex((_item) => _item === this._activeCarouselItem);\n        if (index < this.rows.length - 1) {\n            index++;\n        } else {\n            index = 0;\n        }\n\n        this._pickTime(this.items.toArray()[index], true, true, true);\n    }\n\n    /** Focus on column */\n    focus(): void {\n        this.indicator?.nativeElement.focus();\n    }\n\n    /**\n     * Create id for column item\n     * @param index column item index\n     * @returns column item id\n     * @hidden\n     */\n    _createColumnItemIdByIndex(index: number): string {\n        return this.id + index;\n    }\n\n    /**\n     * On focus callback\n     * @hidden\n     */\n    _onFocusIndicator(): void {\n        this.activeStateChange.emit();\n    }\n\n    /** @hidden\n     * handles alphabetical key inputs to set period.\n     */\n    private _alphaKeyInputHandler(event: KeyboardEvent): void {\n        if (event.key.toLowerCase() === 'a') {\n            this._pickTimeOnValue('AM');\n        } else if (event.key.toLowerCase() === 'p') {\n            this._pickTimeOnValue('PM');\n        }\n    }\n\n    /** @hidden\n     * handles numeric key inputs to set time.\n     */\n    private _numericKeyInputHandler(event: KeyboardEvent): void {\n        const lastItemValue = this.items.last.value.value; // value of last item in column\n\n        this._numericInputTimeout && clearTimeout(this._numericInputTimeout);\n        this._keyLog.push(event.key);\n        const inputValue = parseInt(this._keyLog.join(''), 10); // converts keyLog elements to a number\n\n        if (inputValue * 10 > lastItemValue || this._keyLog.length === lastItemValue.toString().length) {\n            this._pickTimeOnValue(inputValue);\n        } else {\n            this._numericInputTimeout = setTimeout(() => {\n                this._pickTimeOnValue(inputValue);\n            }, 500);\n        }\n    }\n\n    /** @hidden\n     * set the time for given item value. used by _numericKeyInputHandler.\n     */\n    private _pickTimeOnValue(value: string | number): void {\n        this._pickTime(\n            this.items.find((item) => item.value.value === value),\n            false,\n            true,\n            false\n        );\n        this._keyLog = []; // clear key log\n    }\n\n    /**\n     * Method triggered by keyboard, or decrement button\n     * Args:\n     * item => picked carousel item, that should be centered\n     * smooth => defines if transition time should be included in transform\n     * emitEvent => defines if EventEmitter should be triggered by this change, set to false, when changed from outside\n     * after => Defines if value was incremented/decremented, needed for hours to trigger AM/PM change\n     * @hidden\n     */\n    private _pickTime(item?: CarouselItemDirective<T>, smooth?: boolean, emitEvent?: boolean, after?: boolean): void {\n        if (!item) {\n            return;\n        }\n\n        if (this.active) {\n            this._triggerCarousel(item, smooth);\n        }\n\n        this._activeCarouselItem = item;\n        this._activeValue = item.value;\n\n        if (emitEvent) {\n            this.activeValueChange.emit({\n                value: item.value,\n                after\n            });\n        }\n    }\n\n    /**\n     * Returns item with passed value\n     * @hidden\n     */\n    private _getItem(_item: Nullable<T>): CarouselItemDirective<T> | undefined {\n        return this.items.find((item) => item.value?.value === _item?.value);\n    }\n\n    /** @hidden */\n    private _triggerCarousel(item: CarouselItemDirective<T>, smooth?: boolean): void {\n        const array = this.items.toArray();\n        let index: number = array.findIndex((_item) => _item === item) - this.offset;\n\n        if (index < 0) {\n            index = array.length + index;\n        }\n\n        this.carousel.goToItem(array[index], smooth);\n    }\n\n    /**\n     * Focus current indicator, which allows to handle keydown events inside column\n     * @hidden\n     */\n    private _focusIndicator(): void {\n        document.getElementById(this.currentIndicatorId)?.focus();\n    }\n\n    /** @hidden */\n    private _getValue(value: string): any {\n        if (!isNaN(Number(value))) {\n            return Number(value);\n        } else {\n            return value;\n        }\n    }\n\n    /** @hidden */\n    private _setUpQuerySubscription(): void {\n        const trigger = this._queryKeyDownEvent.pipe(debounceTime(this.typeaheadDebounceInterval));\n\n        this._subscriptions.add(\n            this._queryKeyDownEvent\n                .pipe(\n                    buffer(trigger),\n                    map((keys) => keys.join('')),\n                    map((value) => this._getValue(value)),\n                    map((value) => this._getItem(value))\n                )\n                .subscribe((item) => this._pickTime(item, false, true))\n        );\n    }\n\n    /** @hidden */\n    private _setUpCarouselConfiguration(): void {\n        const config: CarouselConfig = {\n            gestureSupport: true,\n            vertical: true,\n            elementsAtOnce: this._elementsAtOnce$.value,\n            transition: '150ms'\n        };\n        // Enable infinite scrolling only if not meridian column and have enough items\n        // Need more items than elementsAtOnce for infinite scrolling to work\n        if (!this.meridian && this.rows.length > this._elementsAtOnce$.value) {\n            config.infinite = true;\n        }\n        this.config = config;\n    }\n\n    /** @hidden */\n    private _setUpInitialValue(): void {\n        if (!this._activeValue) {\n            this._activeValue = this.items.first.value;\n        }\n        this._pickTime(this._getItem(this._activeValue), false);\n    }\n\n    /** @hidden */\n    private _updateInternalTranslationConfig(): void {\n        switch (this.columnTranslationsPreset) {\n            case 'hours':\n                this.internalTranslationConfig = {\n                    increaseLabel: 'coreTime.increaseHoursLabel',\n                    label: 'coreTime.hrsLabel',\n                    fullLabel: 'coreTime.hoursLabel',\n                    decreaseLabel: 'coreTime.decreaseHoursLabel',\n                    navigationInstruction: 'coreTime.navigationInstruction'\n                };\n                break;\n            case 'minutes':\n                this.internalTranslationConfig = {\n                    increaseLabel: 'coreTime.increaseMinutesLabel',\n                    label: 'coreTime.minLabel',\n                    fullLabel: 'coreTime.minutesLabel',\n                    decreaseLabel: 'coreTime.decreaseMinutesLabel',\n                    navigationInstruction: 'coreTime.navigationInstruction'\n                };\n                break;\n            case 'seconds':\n                this.internalTranslationConfig = {\n                    increaseLabel: 'coreTime.increaseSecondsLabel',\n                    label: 'coreTime.secLabel',\n                    fullLabel: 'coreTime.secondsLabel',\n                    decreaseLabel: 'coreTime.decreaseSecondsLabel',\n                    navigationInstruction: 'coreTime.navigationInstruction'\n                };\n                break;\n            case 'period':\n                this.internalTranslationConfig = {\n                    increaseLabel: 'coreTime.increasePeriodLabel',\n                    label: 'coreTime.periodLabel',\n                    fullLabel: 'coreTime.periodLabel',\n                    decreaseLabel: 'coreTime.decreasePeriodLabel',\n                    navigationInstruction: 'coreTime.navigationInstruction'\n                };\n                break;\n\n            default:\n                this.internalTranslationConfig = null;\n                break;\n        }\n        this._changeDetRef.markForCheck();\n    }\n}\n","<label class=\"fd-time__slider-label\">{{\n    timeConfig?.label || (internalTranslationConfig && (internalTranslationConfig.label | fdTranslate)())\n}}</label>\n@if (active && spinners) {\n    <button\n        fd-button\n        fdType=\"transparent\"\n        glyph=\"navigation-up-arrow\"\n        tabindex=\"-1\"\n        [title]=\"\n            timeConfig?.decreaseLabel ||\n            (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate)())\n        \"\n        [ariaLabel]=\"\n            timeConfig?.decreaseLabel ||\n            (internalTranslationConfig && (internalTranslationConfig.decreaseLabel | fdTranslate)())\n        \"\n        (keyup)=\"spinnerButtonKeyupHandle($event, true)\"\n        (click)=\"scrollUp($event)\"\n    ></button>\n}\n<div\n    class=\"fd-time__wrapper\"\n    [class.fd-time__wrapper--active]=\"active\"\n    [class.fd-time__wrapper--meridian]=\"meridian\"\n    [style.height.px]=\"active ? wrapperHeight : ''\"\n>\n    <ul\n        class=\"fd-time__list\"\n        [class.fd-time-column-custom-hidden]=\"!active\"\n        [config]=\"config\"\n        (click)=\"indicator.focus()\"\n        (activeChange)=\"activeChangedHandle($event)\"\n        (dragStateChange)=\"handleDrag($event)\"\n        fdCarousel\n    >\n        @for (row of rows; track row; let index = $index) {\n            <li\n                class=\"fd-time__item\"\n                fdCarouselItem\n                #item=\"fdCarouselItem\"\n                [id]=\"_createColumnItemIdByIndex(index)\"\n                [attr.data-displayed-value]=\"row.value\"\n                [value]=\"row\"\n            >\n                <span class=\"fd-time__unit\" role=\"button\" [attr.aria-label]=\"row.label\" (click)=\"pick(item, index)\">\n                    {{ row.label }}\n                </span>\n            </li>\n        }\n    </ul>\n    <div\n        class=\"fd-time__current-indicator\"\n        #indicator\n        tabindex=\"0\"\n        role=\"listbox\"\n        [attr.id]=\"currentIndicatorId\"\n        [class.fd-time-column-custom-hidden]=\"!active\"\n        [attr.aria-labelledby]=\"currentIndicatorValueId\"\n        [attr.aria-description]=\"\n            timeConfig?.navigationInstruction ||\n            (internalTranslationConfig && (internalTranslationConfig.navigationInstruction | fdTranslate)())\n        \"\n        (focus)=\"_onFocusIndicator()\"\n    >\n        <span\n            class=\"fd-time-column-custom-hidden\"\n            aria-atomic=\"true\"\n            [attr.aria-hidden]=\"!active\"\n            [attr.id]=\"currentIndicatorValueId\"\n            [class.fd-time-column-custom-hidden]=\"active\"\n        >\n            {{ activeValue?.label }}\n            {{\n                timeConfig?.label ||\n                    (internalTranslationConfig && (internalTranslationConfig.fullLabel | fdTranslate)())\n            }}\n        </span>\n    </div>\n    @if (!active) {\n        <span class=\"fd-time__item fd-time__item--collapsed\">\n            {{ activeValue?.label }}\n        </span>\n    }\n</div>\n@if (active && spinners) {\n    <button\n        fd-button\n        fdType=\"transparent\"\n        glyph=\"navigation-down-arrow\"\n        tabindex=\"-1\"\n        [title]=\"\n            timeConfig?.increaseLabel ||\n            (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate)())\n        \"\n        [ariaLabel]=\"\n            timeConfig?.increaseLabel ||\n            (internalTranslationConfig && (internalTranslationConfig.increaseLabel | fdTranslate)())\n        \"\n        (keyup)=\"spinnerButtonKeyupHandle($event)\"\n        (click)=\"scrollDown()\"\n    ></button>\n}\n","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n    return Error(\n        `FdTime: 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}\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    QueryList,\n    SimpleChanges,\n    ViewChildren,\n    ViewEncapsulation,\n    computed,\n    forwardRef,\n    inject,\n    input\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DatetimeAdapter } from '@fundamental-ngx/core/datetime';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { createMissingDateImplementationError } from './errors';\nimport { Meridian, SelectableViewItem } from './models';\nimport { TimeColumnComponent } from './time-column/time-column.component';\n\nexport type FdTimeActiveView = 'hour' | 'minute' | 'second' | 'meridian';\n\ntype HourViewItem = SelectableViewItem<number>;\ntype MinuteViewItem = SelectableViewItem<number>;\ntype SecondViewItem = SelectableViewItem<number>;\ntype MeridianViewItem = SelectableViewItem<Meridian>;\n\n@Component({\n    selector: 'fd-time',\n    templateUrl: './time.component.html',\n    styleUrl: './time.component.scss',\n    host: {\n        '(focusout)': '_focusOut($event)',\n        '(blur)': 'onTouched()'\n    },\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => TimeComponent),\n            multi: true\n        },\n        contentDensityObserverProviders()\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [TimeColumnComponent, FdTranslatePipe]\n})\nexport class TimeComponent<D> implements OnInit, OnChanges, OnDestroy, AfterViewInit, ControlValueAccessor {\n    /**\n     * @Input When set to false, uses the 24 hour clock (hours ranging from 0 to 23)\n     * and does not display a period control.\n     */\n    @Input()\n    meridian = false;\n\n    /**\n     *  @Input When set to false, does not set the input field to invalid state on invalid entry.\n     */\n    @Input()\n    validate = true;\n\n    /**\n     * @Input when set to true, time inputs won't allow to have 1 digit\n     * for example 9 will become 09\n     * but 12 will be kept as 12.\n     */\n    @Input()\n    keepTwoDigits = false;\n\n    /**\n     * @Input Disables the component.\n     */\n    @Input()\n    disabled: boolean;\n\n    /**\n     * @Input When set to false, hides the input for seconds.\n     */\n    @Input()\n    displaySeconds = true;\n\n    /** @Input When set to false, hides the input for minutes. */\n    @Input()\n    displayMinutes = true;\n\n    /**\n     * When set to false, hides the input for hours\n     */\n    @Input()\n    displayHours = true;\n\n    /** @Input Defines if time component should be used in tablet mode */\n    @Input()\n    tablet = false;\n\n    /** @Input Defines quantity of the elements, that are visible at the same time. Should be odd number */\n    @Input()\n    elementsAtOnce = 7;\n\n    /**\n     * @Input An object that contains datetime representation\n     */\n    @Input()\n    time: D;\n\n    /** @Input Whether to show spinner buttons */\n    @Input()\n    spinnerButtons = true;\n\n    /** @hidden */\n    @ViewChildren(TimeColumnComponent)\n    columns: QueryList<TimeColumnComponent<number, SelectableViewItem<number>>>;\n\n    /**\n     * The interval between selectable minutes (e.g., 1 for every minute, 5 for 5-minute intervals, 15 for 15-minute intervals).\n     * Defaults to 1 (every minute).\n     */\n    readonly minuteStep = input<number>(1);\n\n    /** Active column view to iterate with */\n    activeView: FdTimeActiveView = 'hour';\n\n    /**\n     * @hidden\n     * container for [0 - 23] hours\n     */\n    protected hourViewItems: HourViewItem[] = [];\n    /**\n     * @hidden\n     * reference to currently selected hourViewItems element\n     */\n    protected activeHourViewItem?: HourViewItem;\n\n    /**\n     * @hidden\n     * container for [0 - 59] minutes\n     */\n    protected minuteViewItems: MinuteViewItem[] = [];\n    /**\n     * @hidden\n     * reference to currently selected minuteViewItems element\n     */\n    protected activeMinuteViewItem?: MinuteViewItem;\n\n    /**\n     * @hidden\n     * container for [0 - 59] seconds\n     */\n    protected secondViewItems: SecondViewItem[] = [];\n    /**\n     * @hidden\n     * reference to currently selected secondViewItems element\n     */\n    protected activeSecondViewItem?: SecondViewItem;\n\n    /**\n     * @hidden\n     * container for [am, pm] meridian values\n     */\n    protected meridianViewItems: MeridianViewItem[] = [];\n    /**\n     * @hidden\n     * reference to currently selected meridianViewItems element\n     */\n    protected activeMeridianViewItem?: MeridianViewItem;\n\n    /** Offset computed signal */\n    protected readonly offset = computed(() => Math.floor(this.elementsAtOnce / 2));\n\n    /** Offset for minutes column, adjusted for minuteStep */\n    protected readonly minuteOffset = computed(() => {\n        const step = this.minuteStep();\n        const stepCount = Math.ceil(60 / step);\n        const effectiveElementsAtOnce = Math.min(this.elementsAtOnce, stepCount);\n        // Ensure effective count is odd for proper centering (need equal items above and below focused item)\n        const adjustedElementsAtOnce =\n            effectiveElementsAtOnce % 2 === 0 ? effectiveElementsAtOnce - 1 : effectiveElementsAtOnce;\n        return Math.floor(adjustedElementsAtOnce / 2);\n    });\n\n    /** @hidden */\n    private readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    constructor(\n        private _changeDetectorRef: ChangeDetectorRef,\n        private _elementRef: ElementRef,\n        // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n        @Optional() private _dateTimeAdapter: DatetimeAdapter<D>,\n        readonly _contentDensityObserver: ContentDensityObserver\n    ) {\n        if (!_dateTimeAdapter) {\n            throw createMissingDateImplementationError('DateTimeAdapter');\n        }\n\n        this.time = this._getDefaultValue();\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._setUpViewGrid();\n            this._changeDetectorRef.detectChanges();\n        });\n\n        this._setUpViewGrid();\n    }\n\n    /** @hidden\n     * Reacts only when there is meridian, time, or minuteStep input change\n     */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.meridian || changes.time || changes.minuteStep) {\n            this._setUpViewGrid();\n        }\n        if (changes.elementsAtOnce && changes.elementsAtOnce.currentValue % 2 === 0) {\n            throw new Error('[elementsAtOnce] should be odd number');\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this.refreshColumns();\n    }\n\n    /** @hidden */\n    onChange: (value: D) => void = () => {};\n\n    /** @hidden */\n    onTouched = (): void => {};\n\n    /** @hidden */\n    registerOnChange(fn: (time: D) => void): void {\n        this.onChange = fn;\n    }\n\n    /** @hidden */\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    /** @hidden */\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** @hidden */\n    refreshColumns(): void {\n        this.columns.forEach((column) => column.setValueOfActive());\n    }\n\n    /**\n     * @hidden\n     * Handles meridian change.\n     * This implicitly changes hours by +/- 12\n     */\n    handleMeridianChange(meridian: Meridian): void {\n        let hourOffset: number = meridian === Meridian.AM ? -12 : 12;\n        let currentHour = this._getModelHour();\n\n        if (currentHour > 12 && meridian === Meridian.PM) {\n            currentHour -= 12;\n        } else if (currentHour === 12) {\n            currentHour = 0;\n        } else if (currentHour < 12 && meridian === Meridian.AM) {\n            hourOffset = 0;\n        }\n\n        const newHour = Math.max(0, Math.min(23, currentHour + hourOffset));\n\n        this.handleHourChange(newHour);\n    }\n\n    /** @hidden */\n    handleSecondChange(second: number): void {\n        this.time = this._dateTimeAdapter.setSeconds(this.time, second);\n        this._calculateActiveSecondViewItem();\n        this.onChange(this.time);\n    }\n\n    /** @hidden */\n    handleMinuteChange(minute: number): void {\n        this.time = this._dateTimeAdapter.setMinutes(this.time, minute);\n        this._calculateActiveMinuteViewItem();\n        this.onChange(this.time);\n    }\n\n    /**\n     * @hidden\n     * Handles changes of displayed hour value from template.\n     */\n    handleHourChange(hour: number): void {\n        this.time = this._dateTimeAdapter.setHours(this.time, hour);\n        this._calculateActiveHourViewItem();\n\n        if (this.meridian) {\n            this._calculateActiveMeridianViewItem();\n        }\n\n        this.onChange(this.time);\n    }\n\n    /** @hidden */\n    handleNextColumnFocus(column: FdTimeActiveView): void {\n        const columns = this._getVisibleColumnsWithRtl();\n        let nextIndex = columns.indexOf(column) + 1;\n        if (nextIndex >= columns.length) {\n            nextIndex = 0;\n        }\n        this.changeActive(columns[nextIndex]);\n    }\n\n    /** @hidden */\n    handlePreviousColumnFocus(column: FdTimeActiveView): void {\n        const columns = this._getVisibleColumnsWithRtl();\n        let nextIndex = columns.indexOf(column) - 1;\n        if (nextIndex < 0) {\n            nextIndex = columns.length - 1;\n        }\n        this.changeActive(columns[nextIndex]);\n    }\n\n    /** @hidden */\n    handleKeyDownEvent(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n            this.handlePreviousColumnFocus(this.activeView);\n            event.preventDefault();\n            this.focusActiveColumn();\n        } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n            this.handleNextColumnFocus(this.activeView);\n            event.preventDefault();\n            this.focusActiveColumn();\n        }\n    }\n\n    /** @hidden */\n    writeValue(time: D): void {\n        if (!time || !this._dateTimeAdapter.isValid(time)) {\n            time = this._getDefaultValue();\n        }\n        this.time = time;\n\n        this._setUpActiveViewItems();\n\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** @hidden */\n    changeActive(view: FdTimeActiveView): void {\n        this.activeView = view;\n        this._changeDetectorRef.detectChanges();\n    }\n\n    /** @hidden */\n    isActive(view: FdTimeActiveView): boolean {\n        return this.activeView === view;\n    }\n\n    /** @hidden */\n    focusActiveColumn(): void {\n        const column = this.columns.find(({ active }) => active);\n        column?.focus();\n    }\n\n    /** @hidden */\n    protected _focusOut(event: FocusEvent): void {\n        if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n            this.onTouched();\n        }\n    }\n\n    /**\n     * Get visible time columns\n     * @returns visible columns list @see {FdTimeActiveView[]}\n     */\n    private _getVisibleColumns(): FdTimeActiveView[] {\n        const allOptions: Array<[boolean, FdTimeActiveView]> = [\n            [this.displayHours, 'hour'],\n            [this.displayMinutes, 'minute'],\n            [this.displaySeconds, 'second'],\n            [this.meridian, 'meridian']\n        ];\n        return allOptions.filter(([enabled]) => enabled).map(([, view]) => view);\n    }\n\n    /**\n     * Get visible columns taking into account RTL\n     * @returns visible columns list @see {FdTimeActiveView[]}\n     */\n    private _getVisibleColumnsWithRtl(): FdTimeActiveView[] {\n        const columns = this._getVisibleColumns();\n        return this._rtlService?.rtl() ? columns.reverse() : columns;\n    }\n\n    /** @hidden */\n    private _setUpViewGrid(): void {\n        this._constructHourViewItems();\n        this._constructMinuteViewItems();\n        this._constructSecondViewItems();\n        this._constructMeridianViewItems();\n        // update reference to active view items\n        this._setUpActiveViewItems();\n    }\n\n    /** @hidden */\n    private _setUpActiveViewItems(): void {\n        this._calculateActiveHourViewItem();\n        this._calculateActiveMinuteViewItem();\n        this._calculateActiveSecondViewItem();\n        this._calculateActiveMeridianViewItem();\n    }\n\n    /** @hidden */\n    private _constructHourViewItems(): void {\n        this.hourViewItems = this._dateTimeAdapter\n            .getHourNames({ meridian: this.meridian, twoDigit: this.keepTwoDigits })\n            .map((name, hour) => ({\n                value: hour,\n                label: name\n            }));\n    }\n\n    /** @hidden */\n    private _constructMinuteViewItems(): void {\n        const step = this.minuteStep();\n        this.minuteViewItems = this._dateTimeAdapter\n            .getMinuteNames({ twoDigit: this.keepTwoDigits, minuteStep: step })\n            .map((name, index) => ({\n                value: index * step,\n                label: name\n            }));\n    }\n\n    /** @hidden */\n    private _constructSecondViewItems(): void {\n        this.secondViewItems = this._dateTimeAdapter\n            .getSecondNames({ twoDigit: this.keepTwoDigits })\n            .map((name, second) => ({\n                value: second,\n                label: name\n            }));\n    }\n\n    /** @hidden */\n    private _constructMeridianViewItems(): void {\n        const [amLabel, pmLabel] = this._dateTimeAdapter.getDayPeriodNames();\n        this.meridianViewItems = [\n            { value: Meridian.AM, label: amLabel },\n            { value: Meridian.PM, label: pmLabel }\n        ];\n    }\n\n    /** @hidden */\n    private _calculateActiveHourViewItem(): void {\n        const hour = this._getModelHour();\n        this.activeHourViewItem = this.hourViewItems.find(({ value }) => value === hour);\n    }\n\n    /** @hidden */\n    private _calculateActiveMinuteViewItem(): void {\n        const minute = this._getModelMinute();\n        const step = this.minuteStep();\n\n        // Round to the nearest valid step and clamp to valid range\n        const roundedMinute = Math.min(Math.round(minute / step) * step, 59);\n\n        this.activeMinuteViewItem = this.minuteViewItems.find(({ value }) => value === roundedMinute);\n    }\n\n    /** @hidden */\n    private _calculateActiveSecondViewItem(): void {\n        const second = this._getModelSecond();\n        this.activeSecondViewItem = this.secondViewItems.find(({ value }) => value === second);\n    }\n\n    /** @hidden */\n    private _calculateActiveMeridianViewItem(): void {\n        const meridian = this._getDayPeriodByHour();\n        this.activeMeridianViewItem = this.meridianViewItems.find(({ value }) => value === meridian);\n    }\n\n    /**\n     * @hidden\n     * Model hours (0 - 23)\n     */\n    private _getModelHour(): number {\n        return this._dateTimeAdapter.getHours(this.time);\n    }\n\n    /**\n     * @hidden\n     * Model minutes (0 - 59)\n     */\n    private _getModelMinute(): number {\n        return this._dateTimeAdapter.getMinutes(this.time);\n    }\n\n    /**\n     * @hidden\n     * Model seconds (0 - 59)\n     */\n    private _getModelSecond(): number {\n        return this._dateTimeAdapter.getSeconds(this.time);\n    }\n\n    /**\n     * @hidden\n     * Get meridian period based on a given hours\n     */\n    private _getDayPeriodByHour(hour = this._getModelHour()): Meridian {\n        return this._isPm(hour) ? Meridian.PM : Meridian.AM;\n    }\n\n    /** @hidden */\n    private _isPm(hours: number = this._getModelHour()): boolean {\n        return hours >= 12;\n    }\n\n    /**\n     * @hidden\n     * @returns default time 00:00:00\n     */\n    private _getDefaultValue(): D {\n        return this._dateTimeAdapter.today();\n    }\n}\n","<div\n    class=\"fd-time\"\n    [class.is-compact]=\"_contentDensityObserver.isCompactSignal()\"\n    (keydown)=\"handleKeyDownEvent($event)\"\n    [class.fd-time--tablet]=\"tablet\"\n    [attr.aria-label]=\"('coreTime.componentAriaName' | fdTranslate)()\"\n>\n    <fd-time-column\n        [active]=\"isActive('hour')\"\n        [rows]=\"hourViewItems\"\n        [offset]=\"offset()\"\n        [elementsAtOnce]=\"elementsAtOnce\"\n        [activeValue]=\"activeHourViewItem\"\n        columnTranslationsPreset=\"hours\"\n        [spinners]=\"spinnerButtons\"\n        (activeValueChange)=\"handleHourChange($event.value.value)\"\n        (activeStateChange)=\"changeActive('hour')\"\n    ></fd-time-column>\n    @if (displayMinutes) {\n        <fd-time-column\n            [active]=\"isActive('minute')\"\n            [rows]=\"minuteViewItems\"\n            [offset]=\"minuteOffset()\"\n            [elementsAtOnce]=\"elementsAtOnce\"\n            [activeValue]=\"activeMinuteViewItem\"\n            columnTranslationsPreset=\"minutes\"\n            [spinners]=\"spinnerButtons\"\n            (activeValueChange)=\"handleMinuteChange($event.value.value)\"\n            (activeStateChange)=\"changeActive('minute')\"\n        ></fd-time-column>\n    }\n    @if (displaySeconds) {\n        <fd-time-column\n            [active]=\"isActive('second')\"\n            [rows]=\"secondViewItems\"\n            [offset]=\"offset()\"\n            [elementsAtOnce]=\"elementsAtOnce\"\n            [activeValue]=\"activeSecondViewItem\"\n            columnTranslationsPreset=\"seconds\"\n            [spinners]=\"spinnerButtons\"\n            (activeValueChange)=\"handleSecondChange($event.value.value)\"\n            (activeStateChange)=\"changeActive('second')\"\n        ></fd-time-column>\n    }\n    @if (meridian) {\n        <fd-time-column\n            [active]=\"isActive('meridian')\"\n            [rows]=\"meridianViewItems\"\n            [activeValue]=\"activeMeridianViewItem\"\n            [offset]=\"0\"\n            [elementsAtOnce]=\"elementsAtOnce\"\n            columnTranslationsPreset=\"period\"\n            [meridian]=\"true\"\n            [spinners]=\"spinnerButtons\"\n            (activeValueChange)=\"handleMeridianChange($event.value.value)\"\n            (activeStateChange)=\"changeActive('meridian')\"\n        ></fd-time-column>\n    }\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { TimeColumnComponent } from './time-column/time-column.component';\nimport { TimeComponent } from './time.component';\n\n/**\n * @deprecated\n * Use direct imports of `TimeComponent`, `TimeColumnComponent`\n */\n@NgModule({\n    imports: [TimeComponent, TimeColumnComponent],\n    exports: [TimeComponent, TimeColumnComponent]\n})\nexport class TimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiCA,IAAI,kBAAkB,GAAG,CAAC;MAkBb,mBAAmB,CAAA;;IAe5B,IACI,WAAW,CAAC,UAAuB,EAAA;QACnC,IAAI,CAAC,UAAU,EAAE;;YAEb;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QACpD;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;IAClC;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;;IAGA,IACI,MAAM,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;YACtD,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;AAEA,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;IACvB;AAmBA;;;AAGG;IACH,IACI,MAAM,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AACA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK;IAC9B;AAEA;;AAEG;IACH,IACI,cAAc,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACrC;;AAuCA,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,oBAAoB;IACzC;;AAGA,IAAA,IAAI,uBAAuB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,kBAAkB,GAAG,QAAQ;IAC7C;;IA2CA,WAAA,CACY,aAAgC,EAChC,OAAmB,EAAA;QADnB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,OAAO,GAAP,OAAO;;QAvKnB,IAAA,CAAA,IAAI,GAAQ,EAAE;AAEd;;;AAGG;QAEH,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAqCf,IAAA,CAAA,QAAQ,GAAG,KAAK;;AAIhB,QAAA,IAAA,CAAA,EAAE,GAAW,iBAAiB,GAAG,kBAAkB,EAAE;;AAgCrD,QAAA,IAAA,CAAA,iBAAiB,GAA0C,IAAI,YAAY,EAA2B;;AAItG,QAAA,IAAA,CAAA,iBAAiB,GAAuB,IAAI,YAAY,EAAQ;AAiBhE;;;;AAIG;QACH,IAAA,CAAA,yBAAyB,GAAG,GAAG;;QAM/B,IAAA,CAAA,yBAAyB,GAA4B,IAAI;;AAajD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;;AAGzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;;QAGjC,IAAA,CAAA,OAAO,GAAG,KAAK;;AAGf,QAAA,IAAA,CAAA,kBAAkB,GAAoB,IAAI,OAAO,EAAU;;QAS3D,IAAA,CAAA,WAAW,GAAG,KAAK;;AAGnB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAGhD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;;AAG9C,QAAA,IAAA,CAAA,cAAc,GAAiB,IAAI,YAAY,EAAE;AAEzD;;AAEG;QACK,IAAA,CAAA,OAAO,GAAa,EAAE;QAY1B,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;aAC/E,IAAI,CACD,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAChC,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,MAAM,CAAC,KAAI;AAC/B,YAAA,MAAM,aAAa,GACf,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC7F,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa,GAAG,cAAc;YACnD,MAAM,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;AACpE,YAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EACvC,6BAA6B,GAAG,aACpC,IAAI;AACJ,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAA,EACzC,6BAA6B,GAAG,aACpC,IAAI;YACR;AAEA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;YAC1D;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AACtC,QAAA,CAAC,CAAC;aAEL,SAAS,EAAE,CACnB;IACL;;IAIA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;IACjC;;AAIA,IAAA,cAAc,CAAC,KAAoB,EAAA;QAC/B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,UAAU,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE;QAC1B;aAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAC3C,IAAI,CAAC,QAAQ,EAAE;YACf,KAAK,CAAC,cAAc,EAAE;QAC1B;aAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QACvC;aAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QACrC;IACJ;;AAIA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1D;IACJ;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9G,IAAI,CAAC,uBAAuB,EAAE;IAClC;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,MAAK;AACxD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,CACL;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,wBAAwB,EAAE;YAClC,IAAI,CAAC,gCAAgC,EAAE;QAC3C;IACJ;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;IAGA,wBAAwB,CAAC,KAAoB,EAAE,QAAkB,EAAA;QAC7D,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACjC,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,QAAQ,EAAE;YACnB;iBAAO;gBACH,IAAI,CAAC,UAAU,EAAE;YACrB;YAEA,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;QAC1B;IACJ;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,kBAAkB,EAAE;QAC7B;IACJ;;AAGA,IAAA,UAAU,CAAC,UAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;IACjC;;AAGA,IAAA,mBAAmB,CAAC,MAAoB,EAAA;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QAClC,IAAI,KAAK,GAAW,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;AAErF,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AACvB,YAAA,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM;QAChC;AAEA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AAE1B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK;AAE/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,YAAa;YACzB,KAAK,EAAE,MAAM,CAAC;AACjB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IACpC;;IAGA,IAAI,CAAC,IAA8B,EAAE,KAAa,EAAA;QAC9C,MAAM,YAAY,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC;;AAE1G,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,KAAK,CAAC;QAC1D;IACJ;;AAGA,IAAA,QAAQ,CAAC,KAAkB,EAAA;;AAEvB,QAAA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACzB;QACJ;QACA,IAAI,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC;AACjG,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,KAAK,EAAE;QACX;aAAO;YACH,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAChC;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IAClE;;IAGA,UAAU,GAAA;QACN,IAAI,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,mBAAmB,CAAC;QACjG,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,KAAK,EAAE;QACX;aAAO;YACH,KAAK,GAAG,CAAC;QACb;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACjE;;IAGA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE;IACzC;AAEA;;;;;AAKG;AACH,IAAA,0BAA0B,CAAC,KAAa,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK;IAC1B;AAEA;;;AAGG;IACH,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;IACjC;AAEA;;AAEG;AACK,IAAA,qBAAqB,CAAC,KAAoB,EAAA;QAC9C,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B;aAAO,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/B;IACJ;AAEA;;AAEG;AACK,IAAA,uBAAuB,CAAC,KAAoB,EAAA;AAChD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAElD,IAAI,CAAC,oBAAoB,IAAI,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAEvD,QAAA,IAAI,UAAU,GAAG,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;AAC5F,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,MAAK;AACxC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YACrC,CAAC,EAAE,GAAG,CAAC;QACX;IACJ;AAEA;;AAEG;AACK,IAAA,gBAAgB,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,CAAC,SAAS,CACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EACrD,KAAK,EACL,IAAI,EACJ,KAAK,CACR;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB;AAEA;;;;;;;;AAQG;AACK,IAAA,SAAS,CAAC,IAA+B,EAAE,MAAgB,EAAE,SAAmB,EAAE,KAAe,EAAA;QACrG,IAAI,CAAC,IAAI,EAAE;YACP;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;QACvC;AAEA,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;QAE9B,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB;AACH,aAAA,CAAC;QACN;IACJ;AAEA;;;AAGG;AACK,IAAA,QAAQ,CAAC,KAAkB,EAAA;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,CAAC;IACxE;;IAGQ,gBAAgB,CAAC,IAA8B,EAAE,MAAgB,EAAA;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAClC,QAAA,IAAI,KAAK,GAAW,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;AAE5E,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK;QAChC;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAChD;AAEA;;;AAGG;IACK,eAAe,GAAA;QACnB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE;IAC7D;;AAGQ,IAAA,SAAS,CAAC,KAAa,EAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACvB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;QACxB;aAAO;AACH,YAAA,OAAO,KAAK;QAChB;IACJ;;IAGQ,uBAAuB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAE1F,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC;aACA,IAAI,CACD,MAAM,CAAC,OAAO,CAAC,EACf,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAC5B,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACrC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEvC,aAAA,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAC9D;IACL;;IAGQ,2BAA2B,GAAA;AAC/B,QAAA,MAAM,MAAM,GAAmB;AAC3B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK;AAC3C,YAAA,UAAU,EAAE;SACf;;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAClE,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;QAC1B;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;;IAGQ,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;QAC9C;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;IAC3D;;IAGQ,gCAAgC,GAAA;AACpC,QAAA,QAAQ,IAAI,CAAC,wBAAwB;AACjC,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,yBAAyB,GAAG;AAC7B,oBAAA,aAAa,EAAE,6BAA6B;AAC5C,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,SAAS,EAAE,qBAAqB;AAChC,oBAAA,aAAa,EAAE,6BAA6B;AAC5C,oBAAA,qBAAqB,EAAE;iBAC1B;gBACD;AACJ,YAAA,KAAK,SAAS;gBACV,IAAI,CAAC,yBAAyB,GAAG;AAC7B,oBAAA,aAAa,EAAE,+BAA+B;AAC9C,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,SAAS,EAAE,uBAAuB;AAClC,oBAAA,aAAa,EAAE,+BAA+B;AAC9C,oBAAA,qBAAqB,EAAE;iBAC1B;gBACD;AACJ,YAAA,KAAK,SAAS;gBACV,IAAI,CAAC,yBAAyB,GAAG;AAC7B,oBAAA,aAAa,EAAE,+BAA+B;AAC9C,oBAAA,KAAK,EAAE,mBAAmB;AAC1B,oBAAA,SAAS,EAAE,uBAAuB;AAClC,oBAAA,aAAa,EAAE,+BAA+B;AAC9C,oBAAA,qBAAqB,EAAE;iBAC1B;gBACD;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,yBAAyB,GAAG;AAC7B,oBAAA,aAAa,EAAE,8BAA8B;AAC7C,oBAAA,KAAK,EAAE,sBAAsB;AAC7B,oBAAA,SAAS,EAAE,sBAAsB;AACjC,oBAAA,aAAa,EAAE,8BAA8B;AAC7C,oBAAA,qBAAqB,EAAE;iBAC1B;gBACD;AAEJ,YAAA;AACI,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;gBACrC;;AAER,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IACrC;8GAnjBS,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,4BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA4FjB,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAQI,UAAU,wCAJ5B,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnJvC,+nHAuGA,EAAA,MAAA,EAAA,CAAA,yiBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtDc,eAAe,EAAA,QAAA,EAAA,kDAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,oKAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE3E,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAX/B,SAAS;+BACI,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE;qBACV,EAAA,OAAA,EACQ,CAAC,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,+nHAAA,EAAA,MAAA,EAAA,CAAA,yiBAAA,CAAA,EAAA;;sBAMpF;;sBAOA;;sBAIA;;sBAiBA;;sBAeA;;sBACA,WAAW;uBAAC,4BAA4B;;sBAIxC;;sBAIA;;sBAIA;;sBAOA;;sBAWA;;sBAMA;;sBAIA;;sBAIA,SAAS;uBAAC,iBAAiB;;sBAI3B,YAAY;uBAAC,qBAAqB;;sBAIlC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;sBAwG3C,YAAY;uBAAC,OAAO;;sBAMpB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAgBlC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AErRrC;AACM,SAAU,oCAAoC,CAAC,QAAgB,EAAA;AACjE,IAAA,OAAO,KAAK,CACR,CAAA,8BAAA,EAAiC,QAAQ,CAAA,uCAAA,CAAyC;QAC9E,CAAA,iEAAA,CAAmE;AACnE,QAAA,CAAA,sBAAA,CAAwB,CAC/B;AACL;;MCuDa,aAAa,CAAA;;IA+ItB,WAAA,CACY,kBAAqC,EACrC,WAAuB;;AAEX,IAAA,gBAAoC,EAC/C,uBAA+C,EAAA;QAJhD,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,WAAW,GAAX,WAAW;QAEC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAC3B,IAAA,CAAA,uBAAuB,GAAvB,uBAAuB;AAnJpC;;;AAGG;QAEH,IAAA,CAAA,QAAQ,GAAG,KAAK;AAEhB;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAG,IAAI;AAEf;;;;AAIG;QAEH,IAAA,CAAA,aAAa,GAAG,KAAK;AAQrB;;AAEG;QAEH,IAAA,CAAA,cAAc,GAAG,IAAI;;QAIrB,IAAA,CAAA,cAAc,GAAG,IAAI;AAErB;;AAEG;QAEH,IAAA,CAAA,YAAY,GAAG,IAAI;;QAInB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAId,IAAA,CAAA,cAAc,GAAG,CAAC;;QAUlB,IAAA,CAAA,cAAc,GAAG,IAAI;AAMrB;;;AAGG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC,sDAAC;;QAGtC,IAAA,CAAA,UAAU,GAAqB,MAAM;AAErC;;;AAGG;QACO,IAAA,CAAA,aAAa,GAAmB,EAAE;AAO5C;;;AAGG;QACO,IAAA,CAAA,eAAe,GAAqB,EAAE;AAOhD;;;AAGG;QACO,IAAA,CAAA,eAAe,GAAqB,EAAE;AAOhD;;;AAGG;QACO,IAAA,CAAA,iBAAiB,GAAuB,EAAE;;AAQjC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,kDAAC;;AAG5D,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AACtC,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;;AAExE,YAAA,MAAM,sBAAsB,GACxB,uBAAuB,GAAG,CAAC,KAAK,CAAC,GAAG,uBAAuB,GAAG,CAAC,GAAG,uBAAuB;YAC7F,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC;AACjD,QAAA,CAAC,wDAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGzC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE;;QAG1B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAkDrE,QAAA,IAAA,CAAA,QAAQ,GAAuB,MAAK,EAAE,CAAC;;AAGvC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAW,EAAE,CAAC;QA3CtB,IAAI,CAAC,gBAAgB,EAAE;AACnB,YAAA,MAAM,oCAAoC,CAAC,iBAAiB,CAAC;QACjE;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;IACvC;;IAGA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC1F,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAC3C,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE;YACxD,IAAI,CAAC,cAAc,EAAE;QACzB;AACA,QAAA,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,EAAE;AACzE,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;QAC5D;IACJ;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;IACrC;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,cAAc,EAAE;IACzB;;AASA,IAAA,gBAAgB,CAAC,EAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;;AAGA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;IAGA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;IAC/D;AAEA;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,QAAkB,EAAA;AACnC,QAAA,IAAI,UAAU,GAAW,QAAQ,KAAA,IAAA,qBAAmB,CAAC,EAAE,GAAG,EAAE;AAC5D,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AAEtC,QAAA,IAAI,WAAW,GAAG,EAAE,IAAI,QAAQ,KAAA,IAAA,oBAAkB;YAC9C,WAAW,IAAI,EAAE;QACrB;AAAO,aAAA,IAAI,WAAW,KAAK,EAAE,EAAE;YAC3B,WAAW,GAAG,CAAC;QACnB;AAAO,aAAA,IAAI,WAAW,GAAG,EAAE,IAAI,QAAQ,KAAA,IAAA,oBAAkB;YACrD,UAAU,GAAG,CAAC;QAClB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAClC;;AAGA,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/D,IAAI,CAAC,8BAA8B,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/D,IAAI,CAAC,8BAA8B,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAC3D,IAAI,CAAC,4BAA4B,EAAE;AAEnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,gCAAgC,EAAE;QAC3C;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,qBAAqB,CAAC,MAAwB,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;QAChD,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE;YAC7B,SAAS,GAAG,CAAC;QACjB;QACA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC;;AAGA,IAAA,yBAAyB,CAAC,MAAwB,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;QAChD,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QAClC;QACA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC;;AAGA,IAAA,kBAAkB,CAAC,KAAoB,EAAA;QACnC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;aAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;;AAGA,IAAA,UAAU,CAAC,IAAO,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAClC;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;AAGA,IAAA,YAAY,CAAC,IAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;IAC3C;;AAGA,IAAA,QAAQ,CAAC,IAAsB,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI;IACnC;;IAGA,iBAAiB,GAAA;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;QACxD,MAAM,EAAE,KAAK,EAAE;IACnB;;AAGU,IAAA,SAAS,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;YAC/D,IAAI,CAAC,SAAS,EAAE;QACpB;IACJ;AAEA;;;AAGG;IACK,kBAAkB,GAAA;AACtB,QAAA,MAAM,UAAU,GAAuC;AACnD,YAAA,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;AAC3B,YAAA,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;AAC/B,YAAA,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;AAC/B,YAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU;SAC7B;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5E;AAEA;;;AAGG;IACK,yBAAyB,GAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACzC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO;IAChE;;IAGQ,cAAc,GAAA;QAClB,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,yBAAyB,EAAE;QAChC,IAAI,CAAC,2BAA2B,EAAE;;QAElC,IAAI,CAAC,qBAAqB,EAAE;IAChC;;IAGQ,qBAAqB,GAAA;QACzB,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,8BAA8B,EAAE;QACrC,IAAI,CAAC,gCAAgC,EAAE;IAC3C;;IAGQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AACrB,aAAA,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE;aACtE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM;AAClB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE;AACV,SAAA,CAAC,CAAC;IACX;;IAGQ,yBAAyB,GAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACvB,aAAA,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE;aACjE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YACnB,KAAK,EAAE,KAAK,GAAG,IAAI;AACnB,YAAA,KAAK,EAAE;AACV,SAAA,CAAC,CAAC;IACX;;IAGQ,yBAAyB,GAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aACvB,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE;aAC/C,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,MAAM;AACpB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,EAAE;AACV,SAAA,CAAC,CAAC;IACX;;IAGQ,2BAA2B,GAAA;AAC/B,QAAA,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;QACpE,IAAI,CAAC,iBAAiB,GAAG;AACrB,YAAA,EAAE,KAAK,EAAA,IAAA,oBAAe,KAAK,EAAE,OAAO,EAAE;AACtC,YAAA,EAAE,KAAK,EAAA,IAAA,oBAAe,KAAK,EAAE,OAAO;SACvC;IACL;;IAGQ,4BAA4B,GAAA;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC;IACpF;;IAGQ,8BAA8B,GAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;;AAG9B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;QAEpE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,aAAa,CAAC;IACjG;;IAGQ,8BAA8B,GAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,MAAM,CAAC;IAC1F;;IAGQ,gCAAgC,GAAA;AACpC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAC3C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC;IAChG;AAEA;;;AAGG;IACK,aAAa,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD;AAEA;;;AAGG;IACK,eAAe,GAAA;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD;AAEA;;;AAGG;IACK,eAAe,GAAA;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD;AAEA;;;AAGG;AACK,IAAA,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAA;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAE,IAAA,qBAAc,IAAA;IAC3C;;AAGQ,IAAA,KAAK,CAAC,KAAA,GAAgB,IAAI,CAAC,aAAa,EAAE,EAAA;QAC9C,OAAO,KAAK,IAAI,EAAE;IACtB;AAEA;;;AAGG;IACK,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IACxC;8GAzeS,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,EAAA,EAAA,SAAA,EAZX;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,aAAa,CAAC;AAC5C,gBAAA,KAAK,EAAE;AACV,aAAA;AACD,YAAA,+BAA+B;AAClC,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAoEa,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7HrC,g0EA2DA,EAAA,MAAA,EAAA,CAAA,u7uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCc,mBAAmB,0PAAE,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAErC,aAAa,EAAA,UAAA,EAAA,CAAA;kBApBzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,IAAA,EAGb;AACF,wBAAA,YAAY,EAAE,mBAAmB;AACjC,wBAAA,QAAQ,EAAE;qBACb,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mBAAmB,CAAC;AAC5C,4BAAA,KAAK,EAAE;AACV,yBAAA;AACD,wBAAA,+BAA+B;AAClC,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,g0EAAA,EAAA,MAAA,EAAA,CAAA,u7uBAAA,CAAA,EAAA;;0BAqJ1C;;sBA9IJ;;sBAMA;;sBAQA;;sBAMA;;sBAMA;;sBAIA;;sBAMA;;sBAIA;;sBAIA;;sBAMA;;sBAIA;;sBAIA,YAAY;uBAAC,mBAAmB;;;AExHrC;;;AAGG;MAKU,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAHT,aAAa,EAAE,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAClC,aAAa,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;+GAEnC,UAAU,EAAA,OAAA,EAAA,CAHT,aAAa,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FAGnC,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;AAC7C,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,mBAAmB;AAC/C,iBAAA;;;ACZD;;AAEG;;;;"}