{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/calendar/src/calendar.props.ts","../../../../../projects/components/widgets/input/calendar/src/calendar.component.ts","../../../../../projects/components/widgets/input/calendar/src/calendar.component.html","../../../../../projects/components/widgets/input/calendar/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n    const props = new Map(\n            [\n                ['calendartype', {value: 'basic', ...PROP_STRING}],\n                ['class', PROP_STRING],\n                ['tabindex', {value: 0, ...PROP_NUMBER}],\n                ['controls', {value: 'navigation, today, year, month, week, day', ...PROP_STRING}],\n                ['dataset', PROP_ANY],\n                ['datavalue', PROP_STRING],\n                ['eventallday', PROP_STRING],\n                ['eventclass', PROP_STRING],\n                ['eventend', PROP_STRING],\n                ['eventstart', PROP_STRING],\n                ['eventtitle', PROP_STRING],\n                ['name', PROP_STRING],\n                ['show', {value: true, ...PROP_BOOLEAN}],\n                ['showindevice', {displayType: 'inline-block', value: 'all', ...PROP_STRING}],\n                ['view', PROP_STRING],\n                ['selectionmode', PROP_STRING]\n            ]\n        );\n    register('wm-calendar', props);\n};\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    Component,\n    ElementRef,\n    Inject,\n    Injector,\n    OnDestroy,\n    OnInit,\n    Optional,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport {AbstractI18nService, getClonedObject, getSessionStorageItem, isMobile} from '@wm/core';\n\nimport {\n    APPLY_STYLES_TYPE,\n    createArrayFrom,\n    getEvaluatedData,\n    IRedrawableComponent,\n    provideAsWidgetRef,\n    StylableComponent,\n    styler\n} from '@wm/components/base';\n\nimport {registerProps} from './calendar.props';\nimport {capitalize, clone, each, extend, get, includes, isDate, isEmpty, isObject, mapKeys} from \"lodash-es\";\n\ndeclare const $;\nimport * as momentLib  from 'moment';\nconst moment = momentLib.default || window['moment'];\nimport {Calendar} from '@fullcalendar/core';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport timeGridPlugin from '@fullcalendar/timegrid';\nimport listPlugin from '@fullcalendar/list'\nimport interactionPlugin from '@fullcalendar/interaction';\nimport allLocales from '@fullcalendar/core/locales-all';\n\nconst DEFAULT_CLS = 'app-calendar';\nconst dateFormats = ['yyyy-MM-dd', 'yyyy-M-dd', 'M-dd-yyyy', 'MM-dd-yy', 'yyyy, dd MMMM', 'yyyy, MMM dd', 'MM/dd/yyyy', 'M/d/yyyy', 'EEE, dd MMM yyyy', 'EEE MMM dd yyyy', 'EEEE, MMMM dd, yyyy', 'timestamp'];\nconst defaultHeaderOptions = {\n    start: 'prev next today',\n    center: 'title',\n    end: 'dayGridMonth dayGridWeek dayGridDay'\n};\nconst VIEW_TYPES = {\n    BASIC: 'basic',\n    AGENDA: 'agenda',\n    LIST: 'list'\n};\nconst BUTTON_TEXT = {\n    YEAR: 'Year',\n    MONTH: 'Month',\n    WEEK: 'Week',\n    DAY: 'Day',\n    TODAY: 'Today'\n};\nconst SELECTION_MODES = {\n    NONE: 'none',\n    SINGLE: 'single',\n    MULTIPLE: 'multiple'\n};\nconst NEXT_DAY_THRESHOLD = {\n    START: '00:00',\n    END: '24:00'\n};\nconst getEventMomentValue = (value, key) => {\n    let isDate = false;\n\n    dateFormats.forEach((format) => {\n        // moment supports uppercase formats\n        if (moment(value, format.toUpperCase(), true).isValid()) {\n            isDate = true;\n            return false;\n        }\n    });\n\n    // if the value is date then for end date the value should be end of the day as the calendar is approximating it to the start.\n    if (isDate && key === 'end') {\n        return moment(value).endOf('day');\n    }\n\n    return moment(value);\n};\nconst getUTCDateTime = (dateObj) => {\n    dateObj = moment(dateObj);\n    const year = dateObj.format('YYYY'),\n        // javascript starts the month count from '0' where as moment returns the human count\n        month = dateObj.format('MM') - 1,\n        day = dateObj.format('DD'),\n        hours = dateObj.format('HH'),\n        minutes = dateObj.format('mm'),\n        seconds = dateObj.format('ss');\n    return new Date(year, month, day, hours, minutes, seconds);\n};\nconst WIDGET_CONFIG = {widgetType: 'wm-calendar', hostClass: DEFAULT_CLS};\nconst dateFormat = 'YYYY/MM/DD';\n\n@Component({\n    standalone: true,\n    selector: '[wmCalendar]',\n    templateUrl: './calendar.component.html',\n    styleUrls: [],\n    providers: [\n        provideAsWidgetRef(CalendarComponent)\n    ],\n    encapsulation: ViewEncapsulation.None\n})\nexport class CalendarComponent extends StylableComponent implements AfterContentInit, AfterViewInit, OnInit, OnDestroy, IRedrawableComponent {\n    static initializeProps = registerProps();\n    // The calendar element reference\n    @ViewChild('calendar') _calendar: ElementRef;\n    @ViewChild('datepicker') _datepicker: ElementRef;\n\n    public selecteddates: any;\n    public selecteddata: any;\n    public currentview: object;\n    public dataset: any;\n    public calendartype;\n    public controls = 'navigation, today, year, month, week, day';\n    public datavalue;\n    public eventtitle;\n    public eventstart;\n    public eventend;\n    public eventallday;\n    public eventclass;\n\n    private eventSources: Array<any> = [];\n\n    private dataSetEvents = {\n        events: []\n    };\n    private oldData;\n    // map the fullcalendar Element rendered\n    private $fullCalendar;\n    // model to the mobile calendar\n    private proxyModel;\n    private eventData;\n    private events;\n    private changesStack = [];\n\n    // calendarOptions to the calendar\n    private calendarOptions: any = {\n        calendar: {\n            height: 600,\n            eventSources: this.eventSources,\n            editable: true,\n            locale: getSessionStorageItem('selectedLocale') || 'en',\n            selectable: false,\n            longPressDelay: isMobile() ? 1 : 1000,\n            headerToolbar: defaultHeaderOptions,\n            nextDayThreshold: NEXT_DAY_THRESHOLD,\n            views: {\n                month: {\n                    dayMaxEventsRow: true\n                }\n            },\n            unselectAuto: false,\n            eventDrop: this.eventDrop.bind(this),\n            eventResizeStart: this.onEventChangeStart.bind(this),\n            eventDragStart: this.onEventChangeStart.bind(this),\n            eventResize: this.eventResize.bind(this),\n            eventClick: this.eventClick.bind(this),\n            select: this.select.bind(this),\n            eventDidMount: this.eventDidMount.bind(this),\n            viewDidMount: this.viewDidMount.bind(this),\n            datesSet: this.datesSet.bind(this),\n            dateClick: this.dateClick.bind(this)\n        }\n    };\n    public view: string;\n    private dayClass: Array<any> = [];\n    private cancelLocaleChangeSubscription;\n\n    // this function selects the default date given for the calendar\n    selectDate() {\n        let start, end;\n        // checks if datavalue is an object and not a Date object\n        if (isObject(this.datavalue) && !isDate(this.datavalue)) {\n            // @ts-ignore\n            start = moment(this.datavalue.start);\n            // @ts-ignore\n            end   = moment(this.datavalue.end);\n        } else {\n            start = moment(this.datavalue);\n            end   = moment(this.datavalue).add(1, 'day').startOf('day');\n        }\n        this.$fullCalendar.gotoDate( (moment(start) as any)._d); // after selecting the date go to the date.\n\n        this.$fullCalendar.select(start.valueOf(), end.valueOf());\n    }\n\n    // changes the calendar view to the default date given for the calendar.\n    public gotoDate() {\n        this.$fullCalendar.gotoDate( (moment(this.datavalue) as any)._d);\n    }\n\n    // this function takes the calendar view to the a year ahead\n    public gotoNextYear() {\n        this.$fullCalendar.nextYear();\n    }\n\n    // this function takes the calendar view to the a year before\n    public gotoPrevYear() {\n        this.$fullCalendar.prevYear();\n    }\n\n    /**\n     * this function takes the calendar view to the specified month\n     * @param monthVal, 1-12 value of month\n     */\n    public gotoMonth(monthVal) {\n        let presentDay = this.$fullCalendar.getDate();\n        const presentMonthVal = presentDay.getMonth();\n        presentDay = moment(presentDay);\n        if (presentMonthVal < monthVal) {\n            this.$fullCalendar.gotoDate(presentDay.add(monthVal - presentMonthVal - 1, 'M').valueOf());\n        } else {\n            this.$fullCalendar.gotoDate(presentDay.subtract( presentMonthVal - monthVal + 1, 'M').valueOf());\n        }\n    }\n\n    // this function takes the calendar view to the a month ahead\n    public gotoNextMonth() {\n        const presentDay = moment(this.$fullCalendar.getDate());\n        this.$fullCalendar.gotoDate(presentDay.add(1, 'M').valueOf());\n    }\n\n    // this function takes the calendar view to the a month before\n    public gotoPrevMonth() {\n        const presentDay = moment(this.$fullCalendar.getDate());\n        this.$fullCalendar.gotoDate(presentDay.subtract(1, 'M').valueOf());\n    }\n\n\n    // this function re-renders the events assigned to the calendar.\n    public rerenderEvents() {\n        this.$fullCalendar.render();\n    }\n\n    private setSelectedData(start, end) {\n        let dataset = this.dataset;\n        if (!dataset) {\n            return;\n        }\n\n        const filteredDates = [];\n        const eventStartKey = this.eventstart || 'start';\n        const eventEndKey = this.eventend || 'end';\n        const startDate = moment(new Date(start)).format('MM/DD/YYYY');\n        const endDate = moment(new Date(end)).subtract(1, 'days').format('MM/DD/YYYY');\n\n        dataset = dataset.data || dataset;\n        dataset.forEach((value) => {\n            if (!value[eventStartKey]) {\n                return;\n            }\n            const eventStartDate   = moment(new Date(value[eventStartKey])).format('MM/DD/YYYY');\n            const eventEndDate   = moment(new Date(value[eventEndKey] || value[eventStartKey])).format('MM/DD/YYYY');\n            const eventExists = moment(eventStartDate).isSameOrAfter(startDate) && moment(eventEndDate).isSameOrBefore(endDate);\n            if (eventExists) {\n                filteredDates.push(value);\n            }\n        });\n        return filteredDates;\n    }\n\n    private eventDrop(eventDropInfo) {\n        let newDataObj = this.convertEventObjForOldAndNewData(eventDropInfo.event);\n        let oldDataObj = this.convertEventObjForOldAndNewData(eventDropInfo.oldEvent);\n        this.invokeEventCallback('eventdrop', {$event: eventDropInfo.jsEvent, $newData: newDataObj, $oldData: oldDataObj, $delta: eventDropInfo.delta, $revertFunc: eventDropInfo.revert, $ui: {}, $view: eventDropInfo.view});\n    }\n\n    // Returns the default date when the datavalue is provided\n    getDefaultDate() {\n        if (this.datavalue) {\n            return new Date(this.datavalue);\n        }\n    }\n\n    getDefaultOptions() {\n        return this.calendarOptions;\n    }\n\n    getLib() {\n        return 'fullcalendar';\n    }\n\n    private select($selectionInfo) {\n        this.selecteddates = {start: getUTCDateTime($selectionInfo.start), end: getUTCDateTime($selectionInfo.end)};\n        this.selecteddata = this.setSelectedData($selectionInfo.start, $selectionInfo.end);\n        this.invokeEventCallback('select', {$start: $selectionInfo.start.valueOf(), $end: $selectionInfo.end.valueOf(), $view: $selectionInfo.view, $data: this.selecteddata});\n    }\n\n    /**\n     *  this functions unselects all the selections in calendar\n     */\n    public unselect() {\n        this.$fullCalendar.unselect();\n    }\n\n    /**\n     * this function is to add extendedProps data to the data object.\n     * this is done for backward compatibility\n     * @param eventObj event object as per new version (v5)\n     * @returns _eventMetadata event object as per the old version (v3)\n     */\n    private convertEventObj(eventObj) {\n        if (!eventObj.extendedProps._eventMetadata) {\n            return eventObj;\n        }\n        const _eventMetadata = eventObj.extendedProps._eventMetadata;\n        Object.setPrototypeOf(_eventMetadata, eventObj);\n        return _eventMetadata;\n    }\n\n    /**\n     *  this function is to add extendedProps data to the data object exluding start end title allDay objects if the key name matches.\n     * * this is done for backward compatibility\n     * @param eventObj event object as per new version (v5)\n     * @returns data event object as per the old version (v3)\n     */\n    private convertEventObjForOldAndNewData(eventObj) {\n        const _eventMetadata = eventObj.extendedProps;\n        extend(eventObj, _eventMetadata);\n        return eventObj;\n    }\n\n    private eventResize(eventResizeInfo) {\n        let newDataObj = this.convertEventObjForOldAndNewData(eventResizeInfo.event);\n        let oldDataObj = this.convertEventObjForOldAndNewData(eventResizeInfo.oldEvent);\n        this.invokeEventCallback('eventresize', {$event: eventResizeInfo.jsEvent, $newData: newDataObj, $oldData: oldDataObj, $delta: eventResizeInfo.delta, $revertFunc: eventResizeInfo.revert, $ui: {}, $view: eventResizeInfo.view});\n    }\n\n    private onEventChangeStart(event) {\n        this.oldData = getClonedObject(event);\n    }\n\n    private eventClick(eventClickInfo) {\n        let eventObj = this.convertEventObj(eventClickInfo.event);\n        this.invokeEventCallback('eventclick', {$event: eventClickInfo.jsEvent, $data: eventObj, $view: eventClickInfo.view});\n    }\n\n    private eventDidMount(event) {\n        let eventObj = this.convertEventObj(event.event);\n        if (this.calendartype === VIEW_TYPES.LIST) {\n            this.$element.find('.fc-list-table').addClass('table');\n        }\n        this.invokeEventCallback('eventrender', {$event: event.el, $data: eventObj, $view: event.view});\n    }\n\n    private viewDidMount($view) {\n        if (this.calendartype === VIEW_TYPES.LIST) {\n            this.$element.find('.fc-list-table').addClass('table');\n        }\n        this.invokeEventCallback('viewrender', {$view: $view});\n    }\n\n    /**\n     * This function gets called when the view of the calendar changes.\n     * @param data contains the start end data of the calendar view.\n     */\n    private datesSet(data) {\n        this.currentview = {start: moment(data.start).format(\"YYYY-MM-DD\"), end: moment(data.end).format(\"YYYY-MM-DD\")};\n    }\n\n    private dateClick($info) {\n        const dateInfo = getUTCDateTime($info.date).valueOf();\n        this.invokeEventCallback('dateclick', {$dateInfo: dateInfo});\n    }\n\n    // update the calendar header options once the controls changes\n    private updateCalendarHeaderOptions() {\n        const ctrls = this.controls, viewType = this.calendartype,\n            regEx = new RegExp('\\\\bday\\\\b', 'g');\n        let left = '', right = '';\n        if (ctrls && viewType) {\n            if (includes(ctrls, 'navigation')) {\n                left += ' prev next';\n            }\n\n            if (includes(ctrls, 'today')) {\n                left += ' today';\n            }\n\n            if (includes(ctrls, 'year')) {\n                right += (viewType === VIEW_TYPES.LIST) ? 'listYear' : '';\n            }\n\n            if (includes(ctrls, 'month')) {\n                right += (viewType === VIEW_TYPES.LIST) ? ' listMonth' : ' dayGridMonth';\n            }\n\n            if (includes(ctrls, 'week')) {\n                right += (viewType === VIEW_TYPES.BASIC) ?  ' dayGridWeek' : (viewType === VIEW_TYPES.LIST) ? ' listWeek' : ' timeGridWeek';\n            }\n\n            if (regEx.test(ctrls)) {\n                right += (viewType === VIEW_TYPES.BASIC) ?  ' dayGridDay' : (viewType === VIEW_TYPES.LIST) ? ' listDay' : ' timeGridDay';\n            }\n            if (left.charAt(0) === ' ') {\n                left = left.substring(1);\n            }\n            if (right.charAt(0) === ' ') {\n                right = right.substring(1);\n            }\n            extend(this.calendarOptions.calendar.headerToolbar, {'start': left, 'end': right});\n        }\n    }\n\n    constructor(inj: Injector, i18nService: AbstractI18nService, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n\n        this.eventSources.push(this.dataSetEvents);\n        let FullCalendar = window['FullCalendar'] ? window['FullCalendar'] : Calendar;\n        if (!FullCalendar.__wm_locale_initialized) {\n            i18nService.initCalendarLocale();\n            FullCalendar.__wm_locale_initialized = true;\n        }\n\n        this.cancelLocaleChangeSubscription = this.getAppInstance().subscribe(\"locale-changed\", (libLocale) => {\n            this.setLocale();\n            this.applyCalendarOptions('option', 'locale', libLocale.fullCalendar || 'en');\n            this.redraw();\n        });\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER, ['height']);\n        this.setLocale();\n    }\n\n    onStyleChange(key, nv, ov?) {\n        super.onStyleChange(key, nv, ov);\n        if (key === 'height') {\n            this.calendarOptions.calendar.height = this.calculateHeight(nv);\n            this.updateCalendarOptions('option', 'height', this.calendarOptions.calendar.height);\n        }\n    }\n\n    onPropertyChange(key, nv, ov?) {\n        super.onPropertyChange(key, nv, ov);\n        switch (key) {\n            case 'selectionmode':\n                if (nv !== SELECTION_MODES.NONE) {\n                    this.calendarOptions.calendar.selectable = true;\n                    this.updateCalendarOptions('option', 'selectable', true);\n                    if (nv === SELECTION_MODES.SINGLE) {\n                        this.calendarOptions.calendar.selectConstraint = {\n                            startTime: '00:00',\n                            endTime: '24:00'\n                        };\n                        this.updateCalendarOptions('option', 'selectConstraint', this.calendarOptions.calendar.selectConstraint);\n                    } else {\n                        this.updateCalendarOptions('option', 'selectConstraint', {});\n                    }\n                } else {\n                    this.calendarOptions.calendar.selectable = false;\n                    this.updateCalendarOptions('option', 'selectable', false);\n                }\n                break;\n            case 'view':\n                if (nv !== 'month' || this.calendartype === VIEW_TYPES.LIST) {\n                    this.calendarOptions.calendar.defaultView = this.calendartype + capitalize(nv);\n                } else {\n                    this.calendarOptions.calendar.defaultView = nv;\n                }\n                this.updateCalendarOptions('changeView', this.calendarOptions.calendar.defaultView);\n                break;\n            case 'calendartype':\n                this.calendartype = nv || 'dayGrid';\n            case 'controls':\n                this.updateCalendarHeaderOptions();\n                break;\n            case 'dataset':\n                let dataSet;\n                const self = this;\n                this.dataset = nv;\n                dataSet = createArrayFrom(getClonedObject(nv));\n                dataSet = this.constructCalendarDataset(dataSet);\n                this.dataSetEvents.events = dataSet.filter((event) => {\n                    event.start = event.start || event.end;\n                    if (event.start) {\n                        return true;\n                    }\n                });\n\n                this.renderEventDataSet();\n                break;\n            case 'show':\n                this.$fullCalendar?.changeView(this.getViewType(this.view ? this.view : 'dayGridMonth'));\n        }\n    }\n\n    // to calculate the height for the event limit and parsing the value when it is percentage based.\n    private calculateHeight(height): number {\n        const $parent = $(this.nativeElement).parent(),\n            elHeight = height || '650px';\n\n        let parentHeight: any = $parent.css('height'),\n            computedHeight: number;\n\n        if (includes(elHeight, '%')) {\n            if (includes(parentHeight, '%')) {\n                parentHeight = $parent.height();\n            }\n            computedHeight = (parseInt(parentHeight, 10) * Number(elHeight.replace(/\\%/g, ''))) / 100;\n        } else {\n            computedHeight = parseInt(elHeight, 10);\n        }\n        this.calendarOptions.calendar.views.month.eventLimit = parseInt('' + computedHeight / 200, 10) + 1;\n        return computedHeight;\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n        const calendarEl = this._calendar.nativeElement;\n        let FullCalendar:any ;\n        if(window['FullCalendar']) FullCalendar = window['FullCalendar'].Calendar \n        else {\n            FullCalendar = Calendar;\n            this.calendarOptions.calendar = {...this.calendarOptions.calendar, plugins: [dayGridPlugin, timeGridPlugin, listPlugin,listPlugin, interactionPlugin], locales: allLocales}\n        }\n\n        const calendar = new FullCalendar(calendarEl, this.calendarOptions.calendar);\n        this.$fullCalendar =  calendar;\n        this.invokeEventCallback('beforerender', {'$event' : {}});\n        calendar.render();\n\n        // if the changes are already stacked before calendar renders then execute them when needed\n        if (this.changesStack.length) {\n            this.changesStack.forEach((changeObj) => {\n                this.applyCalendarOptions(changeObj.operationType, changeObj.argumentKey, changeObj.argumentValue);\n            });\n            this.changesStack.length = 0;\n        }\n        $(\".fc-prev-button\").attr(\"aria-label\", \"prev\");\n        $(\".fc-next-button\").attr(\"aria-label\", \"next\");\n        $(\".fc-today-button\").attr(\"aria-label\", \"today\");\n\n        //WMS-22412 : change calender's view based on the configuration set from studio\n        setTimeout(() => {\n            this.$fullCalendar.changeView(this.getViewType(this.view ? this.view : 'dayGridMonth'));\n        },50);\n    }\n\n    // constructs the calendar dataset by mapping the eventstart, eventend, eventtitle etc.,\n    private constructCalendarDataset(eventSource) {\n        const properties = {\n            title: this.eventtitle || 'title',\n            allDay: this.eventallday || 'allday',\n            start: this.eventstart || 'start',\n            end: this.eventend || 'end',\n            className: this.eventclass || 'className'\n        };\n\n        eventSource.forEach((obj) => {\n            obj._eventMetadata = clone(obj);\n            if (isEmpty(obj._eventMetadata.url)) {\n                delete obj._eventMetadata.url;\n            }\n            if (isEmpty(obj.url)) {\n                delete obj.url;\n            }\n\n            mapKeys(properties, (value, key) => {\n                let objVal;\n                if (key === 'title') {\n                    objVal = getEvaluatedData(obj, {expression: value}, this.viewParent);\n                } else if (key === 'allDay') {\n                    objVal = !!get(obj, value);\n                } else {\n                    objVal = get(obj, value);\n                }\n                if (!objVal) {\n                    return;\n                }\n                obj[key] = objVal;\n            });\n        });\n        return eventSource;\n    }\n\n    private setLocale() {\n        const year = get(this.appLocale, 'LABEL_CALENDAR_YEAR') || BUTTON_TEXT.YEAR;\n        const month = get(this.appLocale, 'LABEL_CALENDAR_MONTH') || BUTTON_TEXT.MONTH;\n        const week = get(this.appLocale, 'LABEL_CALENDAR_WEEK') || BUTTON_TEXT.WEEK;\n        const day = get(this.appLocale, 'LABEL_CALENDAR_DAY') || BUTTON_TEXT.DAY;\n        const today = get(this.appLocale, 'LABEL_CALENDAR_TODAY') || BUTTON_TEXT.TODAY;\n        this.calendarOptions.calendar.buttonText    = { year, month, week, day, today,\n            'listYear': year,\n            'listMonth': month,\n            'listWeek': week,\n            'listDay': day\n        };\n    }\n\n    /**\n     * override the default calendar options with the newSet of options\n     * @param options\n     */\n    overrideDefaults(options) {\n        if (isObject(options)) {\n            Object.entries(options).map(option => this.$fullCalendar.setOption(option[0], option[1]));\n        }\n    }\n\n    /**\n     * if the operations are performed before the calendar renders, the changes are pushed into changesStack and will be executed after the calendar gets rendered\n     * if the calendar is already rendered, then the specific operation will be performed according to the operation type\n     * @param operationType\n     * @param argumentKey\n     * @param argumentValue\n     */\n    updateCalendarOptions(operationType: string, argumentKey?: any, argumentValue?: any): void {//\n        if (!this.$fullCalendar) {\n            this.changesStack.push({\n                operationType: operationType,\n                argumentKey: argumentKey,\n                argumentValue: argumentValue\n            });\n            return;\n        }\n        this.applyCalendarOptions(operationType, argumentKey, argumentValue);\n    }\n\n    redraw() {\n        this.updateCalendarOptions('render');\n        this.$fullCalendar?.changeView(this.getViewType(this.view ? this.view : 'dayGridMonth'));\n    }\n\n    // on date change invoke the select event, and if date has event on it then invoke the event click.\n    private onValueChange(value: Date): void {\n        this.proxyModel = value;\n        const selectedDate        = this.proxyModel && moment(this.proxyModel).startOf('day').format(dateFormat),\n            selectedEventData   = this.eventData[selectedDate],\n            start               = moment(this.proxyModel),\n            end                 = moment(this.proxyModel).endOf('day');\n        this.selecteddata = selectedEventData;\n        this.selecteddates = {\n            'start': moment(selectedDate).valueOf(),\n            'end'  : moment(selectedDate).endOf('day').valueOf()\n        };\n        this.calendarOptions.calendar.select(start.valueOf(), end.valueOf(), {}, this, selectedEventData);\n        if (selectedEventData) {\n            this.calendarOptions.calendar.eventClick(selectedEventData, {}, this);\n        }\n    }\n\n    /**\n     * This function will receive an object containing source of calendar, apikey and calendarId and will integrate the respective calendar with fullcalendar.\n     * @param eventObject\n     */\n    public addEventSource(eventObject) {\n        if (isEmpty(eventObject)) {\n            console.warn('addEventSource method requires an object as a parameter.');\n            return;\n        }\n        if (eventObject.source === 'google') {\n            if (!eventObject.googleCalendarApiKey || !eventObject.googleCalendarId ) {\n                console.warn('For google calendar integration, \\'googleCalendarApiKey\\' and \\'googleCalendarId\\' should be passed in the parameter object.');\n                return;\n            }\n            this.$fullCalendar.setOption('googleCalendarApiKey', eventObject.googleCalendarApiKey);\n            this.$fullCalendar.addEventSource({\n                googleCalendarId: eventObject.googleCalendarId\n            });\n        }\n    }\n\n    /**\n     * get the viewTypeKey according to the calendarType and viewType selected\n     * @param viewKey\n     */\n    getViewType(viewKey) {\n        const calendarType = this.calendartype;\n        const view = this.view;\n        let result;\n\n        if (view === 'month') {\n            result = (calendarType === VIEW_TYPES.LIST) ? 'listMonth' : 'dayGridMonth';\n        } else if (view === 'week') {\n            result = (calendarType === VIEW_TYPES.BASIC) ?  'dayGridWeek' : (calendarType === VIEW_TYPES.LIST) ? 'listWeek' : 'timeGridWeek';\n        } else if (view === 'day') {\n            result = (calendarType === VIEW_TYPES.BASIC) ?  'dayGridDay' : (calendarType === VIEW_TYPES.LIST) ? 'listDay' : 'timeGridDay';\n        } else if (view === 'year') {\n            result = (calendarType === VIEW_TYPES.LIST) ? 'listYear' : '';\n        } else {\n            result = viewKey;\n        }\n        return result;\n    }\n\n    /**\n     * @param operationType\n     * @param argumentKey\n     * @param argumentValue\n     * Handle various operations like Rendering Calendar, changing the calendar viewType, setting the calendarOptions according to the operationType.\n     */\n    applyCalendarOptions(operationType: string, argumentKey?: any, argumentValue?: any): void {\n        switch (operationType) {\n            case 'render':\n                this.$fullCalendar.render();\n                break;\n            case 'option':\n                this.$fullCalendar.setOption(argumentKey, argumentValue);\n                break;\n            case 'changeView':\n                const view = this.getViewType(argumentKey);\n                this.$fullCalendar.changeView(view);\n                break;\n        }\n    }\n\n    /**\n     * Adds the new eventsDataSet to the calendar object with addEvent Method and re-renders the calendar\n     */\n    renderEventDataSet() {\n        const self = this;\n        this.$fullCalendar.batchRendering(function() {\n            const events = self.$fullCalendar.getEvents();\n            each(events, function (event) {\n                const eventData = self.$fullCalendar.getEventById(event.id);\n                eventData.remove();\n            });\n            each(self.dataSetEvents.events, function (event) {\n                self.$fullCalendar.addEvent(event);\n            });\n        });\n    }\n\n    ngOnDestroy() {\n        if(this.cancelLocaleChangeSubscription) {\n            this.cancelLocaleChangeSubscription();\n        }\n    }\n}\n","<div #calendar></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAEO,MAAM,aAAa,GAAG,MAAK;AAC9B,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,CACb;QACI,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,EAAC,CAAC;QAClD,CAAC,OAAO,EAAE,WAAW,CAAC;QACtB,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,CAAC,EAAE,GAAG,WAAW,EAAC,CAAC;QACxC,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,2CAA2C,EAAE,GAAG,WAAW,EAAC,CAAC;QAClF,CAAC,SAAS,EAAE,QAAQ,CAAC;QACrB,CAAC,WAAW,EAAE,WAAW,CAAC;QAC1B,CAAC,aAAa,EAAE,WAAW,CAAC;QAC5B,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,UAAU,EAAE,WAAW,CAAC;QACzB,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3B,CAAC,MAAM,EAAE,WAAW,CAAC;QACrB,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;AACxC,QAAA,CAAC,cAAc,EAAE,EAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,WAAW,EAAC,CAAC;QAC7E,CAAC,MAAM,EAAE,WAAW,CAAC;QACrB,CAAC,eAAe,EAAE,WAAW;AAChC,KAAA,CACJ;AACL,IAAA,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;AAClC,CAAC;;ACOD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;AAQpD,MAAM,WAAW,GAAG,cAAc;AAClC,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,CAAC;AAC9M,MAAM,oBAAoB,GAAG;AACzB,IAAA,KAAK,EAAE,iBAAiB;AACxB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,GAAG,EAAE;CACR;AACD,MAAM,UAAU,GAAG;AACf,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE;CACT;AACD,MAAM,WAAW,GAAG;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,KAAK,EAAE;CACV;AACD,MAAM,eAAe,GAAG;AACpB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,QAAQ,EAAE;CACb;AACD,MAAM,kBAAkB,GAAG;AACvB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,GAAG,EAAE;CACR;AACD,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,GAAG,KAAI;IACvC,IAAI,MAAM,GAAG,KAAK;AAElB,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;;AAE3B,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACrD,MAAM,GAAG,IAAI;AACb,YAAA,OAAO,KAAK;QAChB;AACJ,IAAA,CAAC,CAAC;;AAGF,IAAA,IAAI,MAAM,IAAI,GAAG,KAAK,KAAK,EAAE;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACrC;AAEA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACxB,CAAC;AACD,MAAM,cAAc,GAAG,CAAC,OAAO,KAAI;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;;IAE/B,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAChC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAC1B,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAC5B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAC9B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,IAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAC9D,CAAC;AACD,MAAM,aAAa,GAAG,EAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAC;AACzE,MAAM,UAAU,GAAG,YAAY;AAYzB,MAAO,iBAAkB,SAAQ,iBAAiB,CAAA;AAC7C,IAAA,SAAA,IAAA,CAAA,eAAe,GAAG,aAAa,EAAhB,CAAmB;;IAkEzC,UAAU,GAAA;QACN,IAAI,KAAK,EAAE,GAAG;;AAEd,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;;YAErD,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;YAEpC,GAAG,GAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACtC;aAAO;AACH,YAAA,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,YAAA,GAAG,GAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/D;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAG,MAAM,CAAC,KAAK,CAAS,CAAC,EAAE,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC7D;;IAGO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAS,CAAC,EAAE,CAAC;IACpE;;IAGO,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACjC;;IAGO,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACjC;AAEA;;;AAGG;AACI,IAAA,SAAS,CAAC,QAAQ,EAAA;QACrB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC7C,QAAA,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,EAAE;AAC7C,QAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,eAAe,GAAG,QAAQ,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9F;aAAO;YACH,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAE,eAAe,GAAG,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACpG;IACJ;;IAGO,aAAa,GAAA;QAChB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE;;IAGO,aAAa,GAAA;QAChB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtE;;IAIO,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;IAC/B;IAEQ,eAAe,CAAC,KAAK,EAAE,GAAG,EAAA;AAC9B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO;QAC1B,IAAI,CAAC,OAAO,EAAE;YACV;QACJ;QAEA,MAAM,aAAa,GAAG,EAAE;AACxB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO;AAChD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK;AAC1C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AAE9E,QAAA,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO;AACjC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;gBACvB;YACJ;AACA,YAAA,MAAM,cAAc,GAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACpF,MAAM,YAAY,GAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACxG,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;YACnH,IAAI,WAAW,EAAE;AACb,gBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,aAAa;IACxB;AAEQ,IAAA,SAAS,CAAC,aAAa,EAAA;QAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1E,IAAI,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7E,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAC,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAC,CAAC;IAC1N;;IAGA,cAAc,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACnC;IACJ;IAEA,iBAAiB,GAAA;QACb,OAAO,IAAI,CAAC,eAAe;IAC/B;IAEA,MAAM,GAAA;AACF,QAAA,OAAO,cAAc;IACzB;AAEQ,IAAA,MAAM,CAAC,cAAc,EAAA;QACzB,IAAI,CAAC,aAAa,GAAG,EAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC,EAAC;AAC3G,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;AAClF,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC;IAC1K;AAEA;;AAEG;IACI,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IACjC;AAEA;;;;;AAKG;AACK,IAAA,eAAe,CAAC,QAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE;AACxC,YAAA,OAAO,QAAQ;QACnB;AACA,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc;AAC5D,QAAA,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC;AAC/C,QAAA,OAAO,cAAc;IACzB;AAEA;;;;;AAKG;AACK,IAAA,+BAA+B,CAAC,QAAQ,EAAA;AAC5C,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa;AAC7C,QAAA,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC;AAChC,QAAA,OAAO,QAAQ;IACnB;AAEQ,IAAA,WAAW,CAAC,eAAe,EAAA;QAC/B,IAAI,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5E,IAAI,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC/E,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,EAAC,CAAC;IACpO;AAEQ,IAAA,kBAAkB,CAAC,KAAK,EAAA;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC;IACzC;AAEQ,IAAA,UAAU,CAAC,cAAc,EAAA;QAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC;QACzD,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAC,CAAC;IACzH;AAEQ,IAAA,aAAa,CAAC,KAAK,EAAA;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1D;QACA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAC,CAAC;IACnG;AAEQ,IAAA,YAAY,CAAC,KAAK,EAAA;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1D;QACA,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC;IAC1D;AAEA;;;AAGG;AACK,IAAA,QAAQ,CAAC,IAAI,EAAA;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAC;IACnH;AAEQ,IAAA,SAAS,CAAC,KAAK,EAAA;QACnB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;QACrD,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAC,CAAC;IAChE;;IAGQ,2BAA2B,GAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,YAAY,EACrD,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;AACxC,QAAA,IAAI,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE;AACzB,QAAA,IAAI,KAAK,IAAI,QAAQ,EAAE;AACnB,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;gBAC/B,IAAI,IAAI,YAAY;YACxB;AAEA,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;gBAC1B,IAAI,IAAI,QAAQ;YACpB;AAEA,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACzB,gBAAA,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,IAAI,IAAI,UAAU,GAAG,EAAE;YAC7D;AAEA,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC1B,gBAAA,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,IAAI,IAAI,YAAY,GAAG,eAAe;YAC5E;AAEA,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;AACzB,gBAAA,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,KAAK,IAAK,cAAc,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,IAAI,IAAI,WAAW,GAAG,eAAe;YAC/H;AAEA,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnB,gBAAA,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,KAAK,IAAK,aAAa,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,IAAI,IAAI,UAAU,GAAG,cAAc;YAC5H;YACA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACxB,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC5B;YACA,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACzB,gBAAA,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9B;AACA,YAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC;QACtF;IACJ;AAEA,IAAA,WAAA,CAAY,GAAa,EAAE,WAAgC,EAA0C,eAAoB,EAAA;AACrH,QAAA,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC;QApSvC,IAAA,CAAA,QAAQ,GAAG,2CAA2C;QAQrD,IAAA,CAAA,YAAY,GAAe,EAAE;AAE7B,QAAA,IAAA,CAAA,aAAa,GAAG;AACpB,YAAA,MAAM,EAAE;SACX;QAQO,IAAA,CAAA,YAAY,GAAG,EAAE;;AAGjB,QAAA,IAAA,CAAA,eAAe,GAAQ;AAC3B,YAAA,QAAQ,EAAE;AACN,gBAAA,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,IAAI;AACvD,gBAAA,UAAU,EAAE,KAAK;gBACjB,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,IAAI;AACrC,gBAAA,aAAa,EAAE,oBAAoB;AACnC,gBAAA,gBAAgB,EAAE,kBAAkB;AACpC,gBAAA,KAAK,EAAE;AACH,oBAAA,KAAK,EAAE;AACH,wBAAA,eAAe,EAAE;AACpB;AACJ,iBAAA;AACD,gBAAA,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpD,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;AACtC;SACJ;QAEO,IAAA,CAAA,QAAQ,GAAe,EAAE;QAkP7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAC1C,QAAA,IAAI,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ;AAC7E,QAAA,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE;YACvC,WAAW,CAAC,kBAAkB,EAAE;AAChC,YAAA,YAAY,CAAC,uBAAuB,GAAG,IAAI;QAC/C;AAEA,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,SAAS,KAAI;YAClG,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC;YAC7E,IAAI,CAAC,MAAM,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,iBAAiB,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA,IAAA,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAG,EAAA;QACtB,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAChC,QAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AAC/D,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxF;IACJ;AAEA,IAAA,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAG,EAAA;QACzB,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QACnC,QAAQ,GAAG;AACP,YAAA,KAAK,eAAe;AAChB,gBAAA,IAAI,EAAE,KAAK,eAAe,CAAC,IAAI,EAAE;oBAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI;oBAC/C,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC;AACxD,oBAAA,IAAI,EAAE,KAAK,eAAe,CAAC,MAAM,EAAE;AAC/B,wBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,GAAG;AAC7C,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,OAAO,EAAE;yBACZ;AACD,wBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAC5G;yBAAO;wBACH,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAAE,CAAC;oBAChE;gBACJ;qBAAO;oBACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK;oBAChD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC;gBAC7D;gBACA;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,EAAE;AACzD,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;gBAClF;qBAAO;oBACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE;gBAClD;AACA,gBAAA,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACnF;AACJ,YAAA,KAAK,cAAc;AACf,gBAAA,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,SAAS;AACvC,YAAA,KAAK,UAAU;gBACX,IAAI,CAAC,2BAA2B,EAAE;gBAClC;AACJ,YAAA,KAAK,SAAS;AACV,gBAAA,IAAI,OAAO;gBACX,MAAM,IAAI,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE;gBACjB,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAC9C,gBAAA,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;AAChD,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;oBACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG;AACtC,oBAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACb,wBAAA,OAAO,IAAI;oBACf;AACJ,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,kBAAkB,EAAE;gBACzB;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;;IAEpG;;AAGQ,IAAA,eAAe,CAAC,MAAM,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAC1C,QAAQ,GAAG,MAAM,IAAI,OAAO;QAEhC,IAAI,YAAY,GAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EACzC,cAAsB;AAE1B,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE;AAC7B,gBAAA,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE;YACnC;YACA,cAAc,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG;QAC7F;aAAO;AACH,YAAA,cAAc,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3C;QACA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,cAAc,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;AAClG,QAAA,OAAO,cAAc;IACzB;IAEA,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC/C,QAAA,IAAI,YAAgB;QACpB,IAAG,MAAM,CAAC,cAAc,CAAC;AAAE,YAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ;aACpE;YACD,YAAY,GAAG,QAAQ;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,EAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,EAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAC;QAC/K;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC5E,QAAA,IAAI,CAAC,aAAa,GAAI,QAAQ;QAC9B,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAG,EAAE,EAAC,CAAC;QACzD,QAAQ,CAAC,MAAM,EAAE;;AAGjB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AACpC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC;AACtG,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC;QACA,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;;QAGjD,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;QAC3F,CAAC,EAAC,EAAE,CAAC;IACT;;AAGQ,IAAA,wBAAwB,CAAC,WAAW,EAAA;AACxC,QAAA,MAAM,UAAU,GAAG;AACf,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,OAAO;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,OAAO;AACjC,YAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI;SACjC;AAED,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACxB,YAAA,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACjC,gBAAA,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG;YACjC;AACA,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClB,OAAO,GAAG,CAAC,GAAG;YAClB;YAEA,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,KAAI;AAC/B,gBAAA,IAAI,MAAM;AACV,gBAAA,IAAI,GAAG,KAAK,OAAO,EAAE;AACjB,oBAAA,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,EAAC,UAAU,EAAE,KAAK,EAAC,EAAE,IAAI,CAAC,UAAU,CAAC;gBACxE;AAAO,qBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;oBACzB,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBAC9B;qBAAO;AACH,oBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;gBAC5B;gBACA,IAAI,CAAC,MAAM,EAAE;oBACT;gBACJ;AACA,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM;AACrB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACtB;IAEQ,SAAS,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,WAAW,CAAC,IAAI;AAC3E,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,WAAW,CAAC,KAAK;AAC9E,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,WAAW,CAAC,IAAI;AAC3E,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,WAAW,CAAC,GAAG;AACxE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,WAAW,CAAC,KAAK;AAC9E,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK;AACzE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE;SACd;IACL;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,OAAO,EAAA;AACpB,QAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;AACnB,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,qBAAqB,CAAC,aAAqB,EAAE,WAAiB,EAAE,aAAmB,EAAA;AAC/E,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACnB,gBAAA,aAAa,EAAE,aAAa;AAC5B,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,aAAa,EAAE;AAClB,aAAA,CAAC;YACF;QACJ;QACA,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC;IACxE;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;IAC5F;;AAGQ,IAAA,aAAa,CAAC,KAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,MAAM,YAAY,GAAU,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACpG,iBAAiB,GAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAClD,KAAK,GAAiB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAC7C,GAAG,GAAmB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,GAAG,iBAAiB;QACrC,IAAI,CAAC,aAAa,GAAG;AACjB,YAAA,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;AACvC,YAAA,KAAK,EAAI,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO;SACrD;QACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC;QACjG,IAAI,iBAAiB,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC;QACzE;IACJ;AAEA;;;AAGG;AACI,IAAA,cAAc,CAAC,WAAW,EAAA;AAC7B,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC;YACxE;QACJ;AACA,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,oBAAoB,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAG;AACrE,gBAAA,OAAO,CAAC,IAAI,CAAC,8HAA8H,CAAC;gBAC5I;YACJ;YACA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,sBAAsB,EAAE,WAAW,CAAC,oBAAoB,CAAC;AACtF,YAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC9B,gBAAgB,EAAE,WAAW,CAAC;AACjC,aAAA,CAAC;QACN;IACJ;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,OAAO,EAAA;AACf,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,IAAI,MAAM;AAEV,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,YAAA,MAAM,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,IAAI,WAAW,GAAG,cAAc;QAC9E;AAAO,aAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,MAAM,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,KAAK,IAAK,aAAa,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,IAAI,UAAU,GAAG,cAAc;QACpI;AAAO,aAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,MAAM,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,KAAK,IAAK,YAAY,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,IAAI,SAAS,GAAG,aAAa;QACjI;AAAO,aAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,MAAM,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC,IAAI,IAAI,UAAU,GAAG,EAAE;QACjE;aAAO;YACH,MAAM,GAAG,OAAO;QACpB;AACA,QAAA,OAAO,MAAM;IACjB;AAEA;;;;;AAKG;AACH,IAAA,oBAAoB,CAAC,aAAqB,EAAE,WAAiB,EAAE,aAAmB,EAAA;QAC9E,QAAQ,aAAa;AACjB,YAAA,KAAK,QAAQ;AACT,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC3B;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC;gBACxD;AACJ,YAAA,KAAK,YAAY;gBACb,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AAC1C,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnC;;IAEZ;AAEA;;AAEG;IACH,kBAAkB,GAAA;QACd,MAAM,IAAI,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAA;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAC7C,YAAA,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,EAAA;AACxB,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,SAAS,CAAC,MAAM,EAAE;AACtB,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,KAAK,EAAA;AAC3C,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAG,IAAI,CAAC,8BAA8B,EAAE;YACpC,IAAI,CAAC,8BAA8B,EAAE;QACzC;IACJ;AApnBS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,6EA8S2C,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA9S9E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EALf;YACP,kBAAkB,CAAC,iBAAiB;AACvC,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1GL,yBACA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD4Ga,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;iCACM,IAAI,EAAA,QAAA,EACN,cAAc,EAAA,SAAA,EAGb;AACP,wBAAA,kBAAkB,CAAA,iBAAA;qBACrB,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,yBAAA,EAAA;;0BAgTyB,MAAM;2BAAC,kBAAkB;;0BAAG;yCA3SnE,SAAS,EAAA,CAAA;sBAA/B,SAAS;uBAAC,UAAU;gBACI,WAAW,EAAA,CAAA;sBAAnC,SAAS;uBAAC,YAAY;;;AEjH3B;;AAEG;;;;"}