{"version":3,"file":"angular-responsive-carousel-ng16.mjs","sources":["../../../projects/angular-responsive-carousel-ng16/src/lib/touches.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/carousel.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/container.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/cells.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/slide.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/utils.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/carousel.component.ts","../../../projects/angular-responsive-carousel-ng16/src/lib/carousel.component.html","../../../projects/angular-responsive-carousel-ng16/src/lib/carousel.module.ts","../../../projects/angular-responsive-carousel-ng16/src/public-api.ts","../../../projects/angular-responsive-carousel-ng16/src/angular-responsive-carousel-ng16.ts"],"sourcesContent":["export interface Properties {\n    element: HTMLElement;\n    listeners?: 'auto' | 'mouse and touch';\n    touchListeners?: any;\n    mouseListeners?: any;\n    otherListeners?: any;\n    resize?: boolean;\n}\n\nexport type EventType = undefined | 'touchend' | 'pan' | 'pinch' | 'horizontal-swipe' | 'vertical-swipe' | 'tap' | 'longtap';\nexport type TouchHandler = 'handleTouchstart' | 'handleTouchmove' | 'handleTouchend';\nexport type MouseHandler = 'handleMousedown' | 'handleMousemove' | 'handleMouseup';\n\nexport class Touches {\n    properties: Properties;\n    element: HTMLElement;\n    elementPosition: ClientRect;\n    eventType: EventType = undefined;\n    handlers: any = {};\n    startX = 0;\n    startY = 0;\n    lastTap = 0;\n    doubleTapTimeout: any;\n    doubleTapMinTimeout = 300;\n    tapMinTimeout = 200;\n    touchstartTime = 0;\n    i: number = 0;\n    isMousedown = false;\n\n    _touchListeners: any = {\n        \"touchstart\": \"handleTouchstart\",\n        \"touchmove\": \"handleTouchmove\",\n        \"touchend\": \"handleTouchend\"\n    }\n    _mouseListeners: any = {\n        \"mousedown\": \"handleMousedown\",\n        \"mousemove\": \"handleMousemove\",\n        \"mouseup\": \"handleMouseup\",\n        \"wheel\": \"handleWheel\"\n    }\n    _otherListeners: any = {\n        \"resize\": \"handleResize\"\n    }\n\n    get touchListeners() {\n        return this.properties.touchListeners ? this.properties.touchListeners : this._touchListeners;\n    }\n\n    get mouseListeners() {\n        return this.properties.mouseListeners ? this.properties.mouseListeners : this._mouseListeners;\n    }\n\n    get otherListeners() {\n        return this.properties.otherListeners ? this.properties.otherListeners : this._otherListeners;\n    }\n\n    constructor(properties: Properties) {\n        this.properties = properties;\n        this.element = this.properties.element;\n        this.elementPosition = this.getElementPosition();\n\n        this.toggleEventListeners('addEventListener');\n    }\n\n    destroy() {\n        this.toggleEventListeners('removeEventListener');\n    }\n\n    toggleEventListeners(action: 'addEventListener' | 'removeEventListener') {\n        let listeners;\n\n        if (this.properties.listeners === 'mouse and touch') {\n            listeners = Object.assign(this.touchListeners, this.mouseListeners);\n        } else {\n            listeners = this.detectTouchScreen() ? this.touchListeners : this.mouseListeners;\n        }\n\n        if (this.properties.resize) {\n            listeners = Object.assign(listeners, this.otherListeners);\n        }\n\n        for (var listener in listeners) {\n            const handler: MouseHandler = listeners[listener];\n\n            // Window\n            if (listener === \"resize\") {\n                if (action === 'addEventListener') {\n                    window.addEventListener(listener, this[handler], false);\n                }\n                if (action === 'removeEventListener') {\n                    window.removeEventListener(listener, this[handler], false);\n                }\n            // Document\n            } else if (listener === 'mouseup' || listener === \"mousemove\") {\n                if (action === 'addEventListener') {\n                    document.addEventListener(listener, this[handler], {passive: false});\n                }\n                if (action === 'removeEventListener') {\n                    document.removeEventListener(listener, this[handler], false);\n                }\n            // Element\n            } else {\n                if (action === 'addEventListener') {\n                    this.element.addEventListener(listener, this[handler], false);\n                }\n                if (action === 'removeEventListener') {\n                    this.element.removeEventListener(listener, this[handler], false);\n                }\n            }\n        }\n    }\n\n    addEventListeners(listener: string) {\n        const handler: MouseHandler = this._mouseListeners[listener];\n        window.addEventListener(listener, this[handler], false);\n    }\n\n    removeEventListeners(listener: string) {\n        const handler: MouseHandler = this._mouseListeners[listener];\n        window.removeEventListener(listener, this[handler], false);\n    }\n\n    /*\n     * Listeners\n     */\n\n    /* Touchstart */\n\n    handleTouchstart = (event: any) => {\n        this.elementPosition = this.getElementPosition();\n        this.touchstartTime = new Date().getTime();\n\n        if (this.eventType === undefined) {\n            this.getTouchstartPosition(event);\n        }\n\n        this.runHandler(\"touchstart\", event);\n    }\n\n\n    /* Touchmove */\n\n    handleTouchmove = (event: any) => {\n        const touches = event.touches;\n\n        // Pan\n        if (this.detectPan(touches)) {\n            this.runHandler(\"pan\", event);\n        }\n\n        // Pinch\n        if (this.detectPinch(event)) {\n            this.runHandler(\"pinch\", event);\n        }\n\n        // Linear swipe\n        switch (this.detectLinearSwipe(event)) {\n            case \"horizontal-swipe\":\n                event.swipeType = \"horizontal-swipe\";\n                this.runHandler(\"horizontal-swipe\", event);\n                break;\n            case \"vertical-swipe\":\n                event.swipeType = \"vertical-swipe\";\n                this.runHandler(\"vertical-swipe\", event);\n                break;\n        }\n\n        // Linear swipe\n        if (this.detectLinearSwipe(event) ||\n            this.eventType === 'horizontal-swipe' ||\n            this.eventType === 'vertical-swipe') {\n\n            this.handleLinearSwipe(event);\n        }\n    }\n\n    handleLinearSwipe(event: any) {\n        //event.preventDefault();\n\n        this.i++;\n\n        if (this.i > 3) {\n            this.eventType = this.getLinearSwipeType(event);\n        }\n\n        if (this.eventType === 'horizontal-swipe') {\n            this.runHandler('horizontal-swipe', event);\n        }\n\n        if (this.eventType === 'vertical-swipe') {\n            this.runHandler('vertical-swipe', event);\n        }\n    }\n\n\n    /* Touchend */\n\n    handleTouchend = (event: any) => {\n        const touches = event.touches;\n\n        // Double Tap\n        if (this.detectDoubleTap()) {\n            this.runHandler(\"double-tap\", event);\n        }\n\n        // Tap\n        this.detectTap();\n\n        this.runHandler(\"touchend\", event);\n        this.eventType = 'touchend';\n\n        if (touches && touches.length === 0) {\n            this.eventType = undefined;\n            this.i = 0;\n        }\n    }\n\n\n    /* Mousedown */\n\n    handleMousedown = (event: any) => {\n        this.isMousedown = true;\n        this.elementPosition = this.getElementPosition();\n        this.touchstartTime = new Date().getTime();\n\n        if (this.eventType === undefined) {\n            this.getMousedownPosition(event);\n        }\n\n        this.runHandler(\"mousedown\", event);\n    }\n\n\n    /* Mousemove */\n\n    handleMousemove = (event: any) => {\n        //event.preventDefault();\n        \n        if (!this.isMousedown) {\n            return;\n        }\n\n        // Pan\n        this.runHandler(\"pan\", event);\n\n        // Linear swipe\n        switch (this.detectLinearSwipe(event)) {\n            case \"horizontal-swipe\":\n                event.swipeType = \"horizontal-swipe\";\n                this.runHandler(\"horizontal-swipe\", event);\n                break;\n            case \"vertical-swipe\":\n                event.swipeType = \"vertical-swipe\";\n                this.runHandler(\"vertical-swipe\", event);\n                break;\n        }\n\n        // Linear swipe\n        if (this.detectLinearSwipe(event) ||\n            this.eventType === 'horizontal-swipe' ||\n            this.eventType === 'vertical-swipe') {\n\n            this.handleLinearSwipe(event);\n        }\n    }\n\n\n    /* Mouseup */\n\n    handleMouseup = (event: any) => {\n\n        // Tap\n        this.detectTap();\n\n        this.isMousedown = false;\n        this.runHandler(\"mouseup\", event);\n        this.eventType = undefined;\n        this.i = 0;\n    }\n\n\n    /* Wheel */\n\n    handleWheel = (event: any) => {\n        this.runHandler(\"wheel\", event);\n    }\n\n    /* Resize */\n\n    handleResize = (event: any) => {\n        this.runHandler(\"resize\", event);\n    }\n\n    runHandler(eventName: any, response: any) {\n        if (this.handlers[eventName]) {\n            this.handlers[eventName](response);\n        }\n    }\n\n\n    /*\n     * Detection\n     */\n\n    detectPan(touches: any) {\n        return touches.length === 1 && !this.eventType || this.eventType === 'pan';\n    }\n\n    detectDoubleTap() {\n        if (this.eventType != undefined) {\n            return;\n        }\n\n        const currentTime = new Date().getTime();\n        const tapLength = currentTime - this.lastTap;\n\n        clearTimeout(this.doubleTapTimeout);\n\n        if (tapLength < this.doubleTapMinTimeout && tapLength > 0) {\n            return true;\n        } else {\n            this.doubleTapTimeout = setTimeout(() => {\n                clearTimeout(this.doubleTapTimeout);\n            }, this.doubleTapMinTimeout);\n        }\n        this.lastTap = currentTime;\n\n        return undefined;\n    }\n\n    detectTap(): void {\n        if (this.eventType != undefined) {\n            return;\n        }\n\n        const currentTime = new Date().getTime();\n        const tapLength = currentTime - this.touchstartTime;\n\n        if (tapLength > 0) {\n            if (tapLength < this.tapMinTimeout) {\n                this.runHandler(\"tap\", event);\n            } else {\n                this.runHandler(\"longtap\", event);\n            }\n        }\n    }\n\n    detectPinch(event: any) {\n        const touches = event.touches;\n        return (touches.length === 2 && this.eventType === undefined) || this.eventType === 'pinch';\n    }\n\n    detectLinearSwipe(event: any) {\n        const touches = event.touches;\n\n        if (touches) {\n            if (touches.length === 1 && !this.eventType || this.eventType === 'horizontal-swipe' || this.eventType === 'vertical-swipe') {\n                return this.getLinearSwipeType(event);\n            }\n        } else {\n            if (!this.eventType || this.eventType === 'horizontal-swipe' || this.eventType === 'vertical-swipe') {\n                return this.getLinearSwipeType(event);\n            }\n        }\n\n        return undefined;\n    }\n\n    getLinearSwipeType(event: any) {\n        if (this.eventType !== 'horizontal-swipe' && this.eventType !== 'vertical-swipe') {\n            const movementX = Math.abs(this.moveLeft(0, event) - this.startX);\n            const movementY = Math.abs(this.moveTop(0, event) - this.startY);\n\n            if ((movementY * 3) > movementX) {\n                return 'vertical-swipe';\n            } else {\n                return 'horizontal-swipe';\n            }\n        } else {\n            return this.eventType;\n        }\n    }\n\n    getElementPosition() {\n        return this.element.getBoundingClientRect();\n    }\n\n    getTouchstartPosition(event: any) {\n        this.startX = event.touches[0].clientX - this.elementPosition.left;\n        this.startY = event.touches[0].clientY - this.elementPosition.top;\n    }\n\n    getMousedownPosition(event: any) {\n        this.startX = event.clientX - this.elementPosition.left;\n        this.startY = event.clientY - this.elementPosition.top;\n    }\n\n    moveLeft(index: any, event: any) {\n        const touches = event.touches;\n\n        if (touches) {\n            return touches[index].clientX - this.elementPosition.left;\n        } else {\n            return event.clientX - this.elementPosition.left;\n        }\n    }\n\n    moveTop(index: any, event: any) {\n        const touches = event.touches;\n\n        if (touches) {\n            return touches[index].clientY - this.elementPosition.top;\n        } else {\n            return event.clientY - this.elementPosition.top;\n        }\n    }\n\n    detectTouchScreen() {\n        var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\n        var mq = function(query: any) {\n            return window.matchMedia(query).matches;\n        }\n\n        if (('ontouchstart' in window)) {\n            return true;\n        }\n\n        // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n        // https://git.io/vznFH\n        var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\n        return mq(query);\n    }\n\n\n    /* Public properties and methods */\n    on(event: EventType, handler: Function) {\n        if (event) {\n            this.handlers[event] = handler;\n        }\n    }\n}","import {Properties} from './interfaces';\n\nexport class Carousel {\n    cellsElement: HTMLElement | undefined;\n\n    /* The slide length has been limited by the limitSlideLength() method */\n    isSlideLengthLimited: boolean = false;\n\n    isContentImages: boolean = true;\n    visibleWidth!: number;\n    isLazyLoad: boolean = true;\n    isContainerLocked: boolean = true;\n    alignCells: \"left\" | \"center\" = \"left\";\n    initialContainerPosition: number = 0;\n    autoplayId: any;\n    containerPullLimit = 100;\n\n    get cellLength() {\n        return this.cells.cellLength;\n    }\n\n    get cellLengthInLightDOMMode() {\n        if (this.images) {\n            let cellLength = this.numberOfVisibleCells + this.overflowCellsLimit * 2;\n            if (cellLength > this.images.length) {\n                cellLength = this.images.length;\n            }\n            return cellLength;\n        } else {\n            return this.cellLength;\n        }\n    }\n\n    get lastCellIndex() {\n        return this.images.length ? (this.images.length - 1) : (this.cells.cellLength - 1);\n    }\n\n    get overflowCellsLimit() {\n        return this.utils.overflowCellsLimit;\n    }\n\n    get cellLimit() {\n        if (this.isLightDOM) {\n            let cellLimit = this.numberOfVisibleCells + this.overflowCellsLimit * 2;\n\n            if (cellLimit < this.numberOfVisibleCells) {\n                cellLimit = this.numberOfVisibleCells;\n            }\n\n            return cellLimit;\n        } else {\n            return this.properties.images.length;\n        }\n    }\n\n    get isLightDOM() {\n        return this.properties.lightDOM || this.properties.loop;\n    }\n\n    get images() {\n        return this.properties.images;\n    }\n\n    get margin() {\n        return this.properties.margin;\n    }\n\n    get minSwipeDistance() {\n        return this.properties.minSwipeDistance;\n    }\n\n    get transitionDuration() {\n        return this.properties.transitionDuration;\n    }\n\n    get transitionTimingFunction() {\n        return this.properties.transitionTimingFunction;\n    }\n\n    get fullCellWidth() {\n        return this.properties.cellWidth + this.margin;\n    }\n\n    get numberOfVisibleCells() {\n        return this.utils.numberOfVisibleCells;\n    }\n\n    get lapCounter() {\n        return Math.floor(this.slide.counter / this.cellLengthInLightDOMMode);\n    }\n\n    get slideCounter() {\n        return this.slide.counter;\n    }\n\n    constructor(\n        private properties: Properties,\n        private utils: any,\n        private cells: any,\n        private container: any,\n        private slide: any) {\n\n        this.init();\n    }\n\n    updateProperties(properties: Properties) {\n        this.properties = properties;\n    }\n\n    init() {\n        this.cellsElement = this.properties.cellsElement;\n        this.visibleWidth = this.properties.visibleWidth || this.cellsElement!.parentElement!.clientWidth;\n    }\n\n    destroy() {\n        clearInterval(this.autoplayId);\n    }\n\n    lineUpCells() {\n        this.cells.lineUp();\n    }\n\n    handleTouchstart = (event: any) => {\n        this.container.handleTouchstart();\n        this.slide.handleTouchstart(event);\n    }\n\n    handleHorizontalSwipe = (event: any) => {\n        this.container.handleHorizontalSwipe();\n    }\n\n    handleTouchend = (event: any) => {\n        if (this.properties.freeScroll) {\n            this.container.handleTouchend();\n        } else {\n            this.container.handleTouchend(true);\n            this.slide.handleTouchend(event);\n        }\n    }\n\n    handleTransitionend() {\n        this.slide.handleTransitionend();\n    }\n\n    getImage(index:number) {\n        return this.cells.getImage(index);\n    }\n\n    next(length: number = 1) {\n        if (!this.isNextArrowDisabled()) {\n            this.slide.next(length);\n        }\n    }\n\n    prev(length: number = 1) {\n        this.slide.prev(length);\n    }\n\n    isNextArrowDisabled = () => {\n        return this.slide.isNextArrowDisabled();\n    }\n\n    isPrevArrowDisabled = () => {\n        return this.slide.isPrevArrowDisabled();\n    }\n\n    autoplay() {\n        this.autoplayId = setInterval(() => {\n            this.next();\n        }, this.properties.autoplayInterval);\n    }\n\n    stopAutoplay() {\n        if (this.autoplayId) {\n            clearInterval(this.autoplayId);\n        }\n    }\n}","import {Properties as CarouselProperties} from './interfaces';\n\nexport class Container {\n    /* The index of the new position relative to \n     * the active index, for example -1 or +1 \n     */\n    newPositionIndex: number = 0;\n    isPositionCorrection: boolean = false;\n    initialPositionX: number = 0;\n    initialElementPositionX: number = 0;\n    isLocked: boolean = true;\n    pullLimit: number = 100;\n    startTime: number = 0;\n    startX: number = 0;\n    moveX: number = 0;\n    isSwipeInProgress: boolean = false;\n\n    get visibleWidth() {\n        return this.utils.visibleWidth;\n    }\n\n    get overflowCellsLimit() {\n        return this.utils.overflowCellsLimit;\n    }\n\n    get images() {\n        return this.carouselProperties.images;\n    }\n\n    get element() {\n        return this.carouselProperties.cellsElement;\n    }\n\n    get freeScroll() {\n        return this.carouselProperties.freeScroll;\n    }\n\n    get fullCellWidth() {\n        return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n    }\n\n    get numberOfVisibleCells() {\n        return this.utils.numberOfVisibleCells;\n    }\n\n    get transitionDuration() {\n        return this.carouselProperties.transitionDuration;\n    }\n\n    get transitionTimingFunction() {\n        return this.carouselProperties.transitionTimingFunction;\n    }\n\n    get cellLength() {\n        if (this.images) {\n            return this.images.length;\n        } else {\n            return this.cells.cellLength;\n        }\n    }\n\n    get cellLengthInLightDOMMode() {\n        if (this.images) {\n            let cellLength = this.numberOfVisibleCells + this.overflowCellsLimit * 2;\n            if (cellLength > this.images.length) {\n                cellLength = this.images.length;\n            }\n            return cellLength;\n        } else {\n            return this.cellLength;\n        }\n    }\n\n    get tooFewCells() {\n        return this.numberOfVisibleCells > this.cellLength;\n    }\n\n    get disabled() {\n        return this.tooFewCells;\n    }\n\n    get margin() {\n        return this.carouselProperties.margin;\n    }\n\n    get isLightDOM() {\n        return this.carouselProperties.lightDOM || this.carouselProperties.loop;\n    }\n\n    constructor(private carouselProperties: CarouselProperties,\n        private utils:any,\n        private cells:any) {\n\n        this.init()\n    }\n\n    updateProperties(carouselProperties: CarouselProperties) {\n        this.carouselProperties = carouselProperties;\n    }\n\n    init() {\n        this.setWidth();\n    }\n\n    handleTouchstart() {\n        this.startX = this.utils.getStartX(event);\n        this.startTime = new Date().getTime();\n        this.initialElementPositionX = this.getInitialElementPositionX();\n    }\n\n    handleHorizontalSwipe() {\n        if (this.disabled) {\n            return;\n        }\n\n        if (!this.isSwipeInProgress) {\n            this.startX = this.utils.getStartX(event);\n            this.startTime = new Date().getTime();\n            this.initialElementPositionX = this.getInitialElementPositionX();\n        }\n\n        this.isSwipeInProgress = true;\n        this.moveX = this.utils.getMoveX(event);\n        this.move();\n    }\n\n    handleTouchend(simpleProcessing: boolean = false) {\n        if (this.disabled) {\n            return;\n        }\n\n        /* If touchend was passed to the Slide class */\n        if (simpleProcessing) {\n            this.isSwipeInProgress = false;\n            return;\n        }\n\n        this.isSwipeInProgress = false;\n        this.finishMoving();\n        this.clearInitialValues();\n    }\n\n    move() {\n        let positionX: number = this.getMovePositionX();\n        const isPulled = this.detectPulled();\n        const direction = this.getDirection();\n\n        if (isPulled) {\n            if (isPulled.edge === \"left\" && direction === \"right\" ||\n                isPulled.edge === \"right\" && direction === \"left\") {\n                positionX = this.slowdownOnPull(positionX);\n            }\n        }\n\n        this.transformPositionX(positionX, 0);\n\n        if (this.freeScroll) {\n            this.initialPositionX = positionX;\n        }\n\n        if (isPulled) {\n            if (isPulled.edge === 'left' && isPulled.overflowX > this.pullLimit) {\n                this.initialPositionX = 0;\n            }\n            if (isPulled.edge === 'right' && isPulled.overflowX > this.pullLimit) {\n                this.initialPositionX = positionX;\n            }\n        }\n    }\n\n    getMovePositionX() {\n        const distance = this.getDistance();\n        return this.initialElementPositionX - distance;\n    }\n\n    getDistance() {\n        return this.startX - this.moveX;\n    }\n\n    /* If the container is pulled out of the left or right border */\n    detectPulled() {\n        const currentPositionX = this.getCurrentPositionX();\n\n        if (currentPositionX > 0) {\n            return {\n                edge: 'left',\n                positionX: currentPositionX,\n                overflowX: Math.abs(currentPositionX)\n            }\n        }\n\n        if (currentPositionX < this.getEndPosition()) {\n            return {\n                edge: 'right',\n                positionX: currentPositionX,\n                overflowX: Math.abs(currentPositionX - this.getEndPosition())\n            }\n        }\n\n        return undefined;\n    }\n\n    slowdownOnPull(_positionX: number) {\n        let distance = Math.abs(this.getDistance());\n        const endPosition = this.getEndPosition();\n        const isPulled = this.detectPulled();\n\n        if (!isPulled) {\n            return 0;\n        }\n\n        const decelerationRatio = 3 + isPulled.overflowX / 50;\n        let positionX:number = 0;\n\n        if (isPulled.edge === 'left') {\n\n            if (this.initialElementPositionX < 0) {\n                distance = distance - Math.abs(this.initialElementPositionX);\n            }\n\n            const rubberPositionX = distance / decelerationRatio;\n            positionX = rubberPositionX;\n\n            if (this.initialElementPositionX > 0) {\n                positionX = this.initialElementPositionX + rubberPositionX;\n            }\n\n            if (positionX > this.pullLimit) {\n                positionX = this.pullLimit;\n            }\n        }\n\n        if (isPulled.edge === 'right') {\n            const rubberPositionX = endPosition + (((this.initialElementPositionX - distance) - endPosition) / decelerationRatio);\n            const containerWidth = this.getWidth();\n\n            positionX = rubberPositionX;\n\n            if (this.initialElementPositionX < -(containerWidth - this.visibleWidth)) {\n                positionX = ((containerWidth - this.visibleWidth) + this.initialElementPositionX) + rubberPositionX;\n            }\n\n            if (positionX < endPosition - this.pullLimit) {\n                positionX = endPosition - this.pullLimit;\n            }\n        }\n\n        return positionX;\n    }\n\n    finishMoving() {\n        const positionX = this.getMovePositionX();\n        let newPositionX:number = 0;\n\n        if (this.freeScroll) {\n            newPositionX = this.getInertia();\n        }\n\n        /* Align container while pulling */\n        newPositionX = this.getAlignedPositionOnPull(newPositionX);\n\n        this.transformPositionX(newPositionX);\n        this.setInitialPosition(positionX);\n    }\n\n    /* Returns the new position of the container with inertia */\n    getInertia() {\n        const distance = this.getDistance();\n        const currentTime = new Date().getTime();\n        const tapLength = currentTime - this.startTime;\n        let inertia = (distance / tapLength) * 100;\n\n        return this.initialPositionX - inertia;\n    }\n\n    getAlignedPositionOnPull(newPositionX:number) {\n        const direction = this.getDirection();\n\n        if (direction === 'left') {\n            let endPosition = this.getEndPosition();\n            if (newPositionX < endPosition) {\n                return endPosition;\n            }\n        }\n        if (direction === 'right') {\n            if (newPositionX > 0) {\n                return 0;\n            }\n        }\n\n        return newPositionX;\n    }\n\n    getCurrentPositionX() {\n        const parentPosition = this.element!.parentElement!.getBoundingClientRect();\n        const position = this.element.getBoundingClientRect();\n        return position.left - parentPosition.left;\n    }\n\n    getEndPosition() {\n        if (this.isLightDOM) {\n            let imagesInContainer = this.cells.imageUtils.getImages();\n            return -(imagesInContainer.length * this.fullCellWidth - this.visibleWidth - this.margin);\n        } else {\n            const width = this.getWidth();\n            const visibleWidth = this.element!.parentElement!.clientWidth;\n            return visibleWidth - width;\n        }\n    }\n\n    transformPositionX(value:number, duration = this.transitionDuration) {\n        if (value === undefined) {\n            return;\n        }\n\n        this.element.style.transition = 'transform ' + duration + 'ms ' + this.transitionTimingFunction;\n        this.element.style.transform = 'translateX(' + value + 'px)';\n    }\n\n    getWidth() {\n        let width = this.cellLengthInLightDOMMode * this.fullCellWidth;\n        let totalImageWidth = this.cellLength * this.fullCellWidth;\n\n        if (totalImageWidth < width) {\n            width = totalImageWidth;\n        }\n\n        return this.isLightDOM ? width : totalImageWidth;\n    }\n\n    setWidth() {\n        const width = this.getWidth();\n        this.element.style.width = width + \"px\";\n    }\n\n    setInitialPosition(position:number) {\n        this.initialPositionX = position;\n    }\n\n    getElementPosition() {\n        return this.element.getBoundingClientRect();\n    }\n\n    getInitialElementPositionX() {\n        const carouselElementPosition = this.utils.getCarouselElementPosition()['left'];\n        return this.getElementPosition()['left'] - carouselElementPosition;\n    }\n\n    clearInitialValues() {\n        this.startX = this.moveX = 0;\n    }\n\n    getDirection() {\n        const direction = Math.sign(this.startX - this.moveX);\n\n        if (direction === -1) {\n            return 'right';\n        }\n        if (direction === 1) {\n            return 'left';\n        }\n\n        return undefined;\n    }\n}","import {Properties as CarouselProperties, Image} from './interfaces';\n\nexport interface Cell {\n    index: number,\n    positionX: number,\n    img: {\n        image: Image,\n        imageIndex: number\n    }\n}\n\nexport class ImageUtils {\n    cellStack: Cell[] = [];\n    element:any;\n\n    constructor(element: HTMLElement | undefined) {\n        this.element = element;\n    }\n\n    getImages() {\n        return this.cellStack.filter(this.filter);\n    }\n\n    filter(cell: Cell) {\n        return cell.img !== undefined;\n    }\n}\n\nexport class Cells {\n    cells: HTMLCollection | undefined;\n    element!: HTMLElement;\n    visibleWidth: number | undefined;\n    counter: number = 0;\n    imageUtils;\n\n    get images() {\n        return this.carouselProperties.images;\n    }\n\n    get cellLength() {\n        return this.cells ? this.cells.length : 0;\n    }\n\n    get fullCellWidth() {\n        return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n    }\n\n    get cellLengthInLightDOMMode() {\n        if (this.images) {\n            let cellLength = this.numberOfVisibleCells + this.overflowCellsLimit * 2;\n\n            if (cellLength > this.images.length) {\n                cellLength = this.images.length;\n            }\n            return cellLength;\n        } else {\n            return this.cellLength;\n        }\n    }\n\n    get numberOfVisibleCells() {\n        return this.utils.numberOfVisibleCells;\n    }\n\n    get overflowCellsLimit() {\n        return this.utils.overflowCellsLimit;\n    }\n\n    get isLightDOM() {\n        return this.carouselProperties.lightDOM || this.carouselProperties.loop;\n    }\n\n    constructor(\n        private carouselProperties: CarouselProperties,\n        private utils: any) {\n\n        this.imageUtils = new ImageUtils(this.element);\n        this.init(carouselProperties);\n    }\n\n    updateProperties(carouselProperties: CarouselProperties) {\n        this.carouselProperties = carouselProperties;\n    }\n\n    lineUp() {\n        const cells = this.element ? this.element.children : [];\n        this.imageUtils.cellStack = [];\n\n        for (var i = 0; i < cells.length; i++) {\n            let cell = cells[i];\n            let positionX = this.getCellPositionInContainer(i);\n            (cell as HTMLElement).style.transform = 'translateX(' + positionX + 'px)';\n            (cell as HTMLElement).style.width = this.carouselProperties.cellWidth + 'px';\n\n            if (this.getImage(i)) {\n                this.imageUtils.cellStack.push({\n                    index: i,\n                    positionX,\n                    img: this.getImage(i)!['image']\n                });\n            }\n        };\n    }\n\n    ifSequenceOfCellsIsChanged() {\n        const cells:any = this.element.children;\n        return cells[0]['style'].transform !== 'translateX(0px)';\n    }\n\n    getCellPositionInContainer(cellIndexInDOMTree: number) {\n        let positionIndex = this.getCellIndexInContainer(cellIndexInDOMTree);\n        return positionIndex * this.fullCellWidth;\n    }\n\n    getCellIndexInContainer(cellIndexInDOMTree: number) {\n        let positionIndex;\n\n        if (!this.isLightDOM) {\n            return cellIndexInDOMTree;\n        }\n\n        let cellLength = this.cellLengthInLightDOMMode;\n        let counter = this.counter - this.overflowCellsLimit;\n\n        if (counter > cellLength) {\n            counter = counter % cellLength;\n        }\n\n        if (counter < 0) {\n            return cellIndexInDOMTree;\n        } else {\n            positionIndex = cellIndexInDOMTree - counter;\n            if (positionIndex < 0) {\n                positionIndex = cellLength + positionIndex;\n            }\n        }\n\n        return positionIndex;\n    }\n\n    getImage(cellIndex: number) {\n        if (!this.images) {\n            return;\n        }\n\n        let imageIndex = this.getImageIndex(cellIndex);\n        let file = this.images[imageIndex];\n\n        if (file && !file.type) {\n            file.type = 'image';\n        }\n\n        return {\n            image: this.images[imageIndex],\n            imageIndex\n        };\n    }\n\n    getImageIndex(cellIndexInDOMTree: number) {\n        const positionIndex = this.getCellIndexInContainer(cellIndexInDOMTree);\n        let imageIndex;\n\n        if (this.counter > this.overflowCellsLimit) {\n            let cellLimitOverflow = this.counter - this.overflowCellsLimit;\n            imageIndex = positionIndex + cellLimitOverflow;\n\n            if (this.images && this.carouselProperties.loop) {\n                imageIndex = imageIndex % this.images.length;\n            }\n        } else {\n            imageIndex = cellIndexInDOMTree;\n        }\n\n        return imageIndex;\n    }\n\n    setCounter(value: number) {\n        this.counter = value;\n    }\n\n    init(carouselProperties: CarouselProperties) {\n        this.element = this.carouselProperties.cellsElement;\n        this.cells = this.element.children;\n        this.visibleWidth = this.carouselProperties.visibleWidth || this.element!.parentElement!.clientWidth;\n    }\n}","import {Properties as CarouselProperties} from './interfaces';\n\nexport interface Properties {\n    carouselProperties: CarouselProperties;\n}\n\nexport class Slide {\n    slideLength: number = 0;\n    isSlideInProgress: boolean = false;\n    direction: 'left' | 'right' | undefined;\n    counter: number = 0;\n    _counter: number = 0;\n    distance: number = 0;\n    distanceAbs: number = 0;\n    visibleWidth!: number;\n    isNotClickOnArrow: boolean = false;\n    initialPositionX: number = 0;\n    currentPositionX: number = 0;\n\n    /* The slide length has been limited by the limitSlideLength() method */\n    isSlideLengthLimited: boolean = false;\n\n    get fullCellWidth() {\n        return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n    }\n\n    get margin() {\n        return this.carouselProperties.margin;\n    }\n\n    get minSwipeDistance() {\n        return this.carouselProperties.minSwipeDistance;\n    }\n\n    get numberOfVisibleCells() {\n        return this.utils.numberOfVisibleCells;\n    }\n\n    get visibleCellsOverflowContainer() {\n        return this.utils.visibleCellsOverflowContainer;\n    }\n\n    /* The position to which the container returns after each slide \n     * in the light DUM tree mode. \n     */\n    get fixedContainerPosition() {\n        return -(this.overflowCellsLimit * this.fullCellWidth);\n    }\n\n    get overflowCellsLimit() {\n        return this.utils.overflowCellsLimit;\n    }\n\n    get images() {\n        return this.carouselProperties.images;\n    }\n\n    /* Number of cell elements in the DUM tree */\n    get cellLength() {\n        if (this.isLightDOM) {\n            return this.cells.cellLengthInLightDOMMode;\n        } else {\n            if (this.images) {\n                return this.images.length;\n            } else {\n                return this.cells.cellLength;\n            }\n        }\n    }\n\n    get isLightDOM() {\n        return this.carouselProperties.lightDOM || this.carouselProperties.loop;\n    }\n\n    constructor(private carouselProperties: CarouselProperties,\n        private utils: any,\n        private cells: any,\n        private container: any) {\n\n        this.init();\n    }\n\n    updateProperties(carouselProperties: CarouselProperties) {\n        this.carouselProperties = carouselProperties;\n        this.setVisibleWidth();\n    }\n\n    init() {\n        this.visibleWidth = this.carouselProperties.visibleWidth || this.carouselProperties.hostElement.clientWidth;\n    }\n\n    handleTouchstart() {\n        /* Touchstart event is not called for arrow */\n        this.isNotClickOnArrow = true;\n        this.isSlideLengthLimited = false;\n\n        if (!this.isSlideInProgress) {\n            this.initialPositionX = this.container.getCurrentPositionX();\n        }\n    }\n\n    handleTouchend() {\n        if (!this.isNotClickOnArrow) {\n            return;\n        }\n        this.currentPositionX = this.container.getCurrentPositionX();\n        this.distanceAbs = Math.abs(this.initialPositionX - this.currentPositionX);\n        this.distance = this.initialPositionX - this.currentPositionX;\n        this.direction = this.getDirection();\n        this.isNotClickOnArrow = false;\n        this.handleSlide();\n    }\n\n    handleTransitionend() {\n        this.setCounter();\n        this.isSlideInProgress = false;\n\n        if (this.isLightDOM) {\n            this.alignContainerFast();\n        }\n    }\n\n    handleSlide(customSlideLength: number | undefined = undefined) {\n        let isUsingButton = customSlideLength;\n        let newPositionX;\n\n        if (isUsingButton && this.isSlideInProgress || !this.direction) {\n            return;\n        }\n\n        /* Custom slide length is used in arrows */\n        if (customSlideLength) {\n            this.slideLength = this.limitSlideLength(customSlideLength);\n\n            if (!this.isSlideInProgress) {\n                this.initialPositionX = this.container.getCurrentPositionX();\n            }\n        } else {\n            this.slideLength = this.getSlideLength(this.distanceAbs);\n        }\n\n        /* Store intermediate counter value */\n        this._counter = this.getPreliminaryCounter();\n\n        if (this.direction === 'left') {\n            if (!customSlideLength) {\n                this.slideLength = this.limitSlideLength(this.getSlideLength(this.distanceAbs));\n            }\n\n            this._counter = this.getPreliminaryCounter();\n            let isSlidesEnd = this.isSlidesEnd(this._counter);\n            newPositionX = this.getPositionByIndex(this._counter);\n\n            if (isSlidesEnd) {\n                this._counter = this.counter;\n\n                newPositionX = this.getPositionByIndex(this.counter);\n                this.slideLength = 0;\n            }\n        }\n\n        if (this.direction === 'right') {\n            if (!customSlideLength) {\n                this.slideLength = this.getSlideLength(this.distanceAbs);\n            }\n\n            if (this._counter < 0) {\n                this._counter = this.counter;\n                this.slideLength = this.counter;\n            }\n\n            newPositionX = this.getPositionByIndex(this.counter - this.slideLength);\n        }\n\n        if (this.container.getCurrentPositionX() !== newPositionX) {\n            this.isSlideInProgress = true;\n            this.container.transformPositionX(newPositionX);\n        }\n    }\n\n    next(length: number = 1) {\n        this.direction = 'left';\n        this.handleSlide(length);\n    }\n\n    prev(length: number = 1) {\n        this.direction = 'right';\n        this.handleSlide(length);\n    }\n\n    select(index: number) {\n        if (index > this.cellLength - 1) {\n            return;\n        }\n\n        if (index > this.counter) {\n            let length = index - this.counter;\n            this.next(length);\n        }\n\n        if (index < this.counter) {\n            let length = this.counter - index;\n            this.prev(length);\n        }\n    }\n\n    getPreliminaryCounter() {\n        if (this.direction === 'left') {\n            return this.counter + this.slideLength;\n        }\n\n        if (this.direction === 'right') {\n            return this.counter - this.slideLength;\n        }\n\n        return 0;\n    }\n\n    /*  \n     * Limits the length of the slide during calls to the next() and prev() \n     * methods if the specified position is outside the cell length \n     */\n    limitSlideLength(slideLength: number) {\n        if (slideLength > 1) {\n            for (var i = 0; i < slideLength; i++) {\n                let newCounter = this.counter + (slideLength - i);\n\n                if (!this.isSlidesEnd(newCounter)) {\n                    slideLength = slideLength - i;\n                    this.isSlideLengthLimited = i > 0;\n                    break;\n                }\n            }\n        }\n        return slideLength;\n    }\n\n    /* Offset the container to show the last cell completely */\n    getPositionCorrection(counter:number) {\n        let correction = 0;\n        let isLastSlide = this.isLastSlide(counter);\n\n        if (this.carouselProperties.loop || this.direction === \"right\") {\n            return 0;\n        }\n\n        if (this.isSlideLengthLimited || isLastSlide) {\n            let cellsWidth = this.cells.cellLengthInLightDOMMode * this.fullCellWidth;\n\n            if (this.visibleWidth < cellsWidth) {\n                correction = -(this.numberOfVisibleCells * this.fullCellWidth - this.visibleWidth - this.margin);\n            }\n\n            if (correction >= -this.margin) {\n                correction = 0;\n            }\n        }\n\n        return correction;\n    }\n\n    getSlideLength(distanceAbs: number) {\n        let isLastSlide = this.isLastSlide(this.counter);\n\n        /* If the last cell does not fit entirely, then the \n         * length of the swipe to the left, from the extreme \n         * right position, may be shorter than usual. \n         */\n        if (isLastSlide && this.direction === \"right\") {\n            distanceAbs = distanceAbs + this.visibleWidth % this.fullCellWidth;\n        }\n\n        let length = Math.floor(distanceAbs / this.fullCellWidth);\n\n        if (distanceAbs % this.fullCellWidth >= this.minSwipeDistance) {\n            length++;\n        }\n\n        return length;\n    }\n\n    getDistanceAbs() {\n        return Math.abs(this.initialPositionX - this.currentPositionX);\n    }\n\n    getDirection() {\n        const direction = Math.sign(this.initialPositionX - this.currentPositionX);\n\n        if (direction === -1) {\n            return 'right';\n        }\n        if (direction === 1) {\n            return 'left';\n        }\n\n        return undefined;\n    }\n\n    isSlidesEnd(counter: number) {\n        let margin = this.visibleCellsOverflowContainer ? 1 : 0;\n        let imageLength = this.images ? this.images.length : this.cells.cellLength;\n\n        if (this.carouselProperties.loop) {\n            return false;\n        } else {\n            return (imageLength - counter + margin) < this.numberOfVisibleCells;\n        }\n    }\n\n    isLastSlide(counter: number) {\n        return this.isSlidesEnd(counter + 1)\n    }\n\n    setCounter() {\n        if (this.direction === 'left') {\n            this.counter = this.counter + this.slideLength;\n        }\n\n        if (this.direction === 'right') {\n            this.counter = this.counter - this.slideLength;\n        }\n    }\n\n    getPositionByIndex(_counter: number) {\n        let correction = this.getPositionCorrection(this.counter + this.slideLength);\n        let position;\n\n        if (correction !== 0) {\n            correction = correction + this.fullCellWidth\n        }\n\n        if (this.direction === 'right') {\n            correction = 0;\n        }\n\n        if (this.isLightDOM && this.isLightDOMMode(_counter) ||\n            this.isLightDOM && this.ifLeftDOMModeAtEnd(_counter)) {\n\n            let initialPosition = this.getPositionWithoutCorrection(this.initialPositionX);\n            let counterDifference = _counter - this.counter;\n            position = initialPosition - ((counterDifference * this.fullCellWidth) - correction);\n        } else {\n            position = -((_counter * this.fullCellWidth) - correction);\n        }\n\n        position = this.provideSafePosition(position);\n\n        return position;\n    }\n\n    provideSafePosition(position: number) {\n        const endPosition = this.container.getEndPosition();\n\n        if (this.direction === 'left') {\n            if (position > 0) {\n                position = 0;\n            }\n        }\n\n        if (this.direction === 'right') {\n            if (position < endPosition) {\n                position = endPosition;\n            }\n        }\n\n        return position;\n    }\n\n    getPositionWithoutCorrection(value: number) {\n        let remainder = Math.round(value) % this.fullCellWidth;\n\n        if (remainder !== 0) {\n            return value - (this.fullCellWidth + remainder);\n        } else {\n            return value;\n        }\n    }\n\n    isNextArrowDisabled() {\n        return this.isLastSlide(this.counter) || \n        (!this.visibleCellsOverflowContainer && this.cellLength <= this.numberOfVisibleCells) ||\n        (this.visibleCellsOverflowContainer && this.cellLength < this.numberOfVisibleCells)\n    }\n\n    isPrevArrowDisabled() {\n        return this.counter === 0;\n    }\n\n    alignContainerFast() {\n        if (this.isLightDOMMode(this.counter)) {\n            let positionX = this.fixedContainerPosition;\n            this.container.transformPositionX(positionX, 0);\n\n            this.cells.setCounter(this.counter);\n            this.cells.lineUp();\n        } else if (this.ifLeftDOMModeToBeginning(this.counter)) {\n            /* If we have already exited the light DOM mode but \n             * the cells are still out of place \n             */\n            if (this.cells.ifSequenceOfCellsIsChanged()) {\n                let positionX = -(this.counter * this.fullCellWidth);\n                this.container.transformPositionX(positionX, 0);\n\n                this.cells.setCounter(this.counter);\n                this.cells.lineUp();\n            }\n        } else if (this.ifLeftDOMModeAtEnd(this.counter)) {\n            let containerPositionX = this.container.getCurrentPositionX();\n            let containerWidth = this.container.getWidth();\n            this.visibleWidth;\n\n            if (this.isLastSlide(this.counter) &&\n                containerWidth + containerPositionX >= this.visibleWidth) {\n                return;\n            }\n\n            let correction = this.getPositionCorrection(this.counter);\n\n            if (correction !== 0) {\n                correction = correction + this.fullCellWidth\n            }\n\n            if (this.direction === 'right') {\n                correction = 0;\n            }\n\n            let positionX = this.fixedContainerPosition + correction;\n\n            this.container.transformPositionX(positionX, 0);\n            this.cells.setCounter(this.counter);\n            this.cells.lineUp();\n        }\n    }\n\n    isLightDOMMode(counter: number) {\n        let flag;\n        let remainderOfCells = this.images.length - this.overflowCellsLimit - this.numberOfVisibleCells;\n\n        if (!this.isLightDOM) {\n            return false;\n        }\n\n        if (counter > this.overflowCellsLimit && this.direction === \"left\" &&\n            counter <= remainderOfCells) {\n            flag = true;\n        }\n\n        if (counter >= this.overflowCellsLimit && this.direction === \"right\" &&\n            counter < remainderOfCells) {\n            flag = true;\n        }\n\n        if (this.counter > this.overflowCellsLimit && this.direction === \"left\" &&\n            this.counter <= remainderOfCells) {\n            flag = true;\n        }\n\n        if (this.counter >= this.overflowCellsLimit && this.direction === \"right\" &&\n            this.counter < remainderOfCells) {\n            flag = true;\n        }\n\n        return flag;\n    }\n\n    ifLeftDOMModeAtEnd(counter: number) {\n        let flag;\n        let remainderOfCells = this.images.length - this.overflowCellsLimit - this.numberOfVisibleCells;\n\n        if (counter >= remainderOfCells) {\n            flag = true;\n        }\n\n        if (this.counter >= remainderOfCells) {\n            flag = true;\n        }\n\n        return flag;\n    }\n\n    ifLeftDOMModeToBeginning(counter: number) {\n        let flag;\n\n        if (counter <= this.overflowCellsLimit) {\n            flag = true;\n        }\n\n        if (this.counter <= this.overflowCellsLimit) {\n            flag = true;\n        }\n\n        return flag;\n    }\n\n    setVisibleWidth() {\n        this.visibleWidth = this.carouselProperties.visibleWidth || this.carouselProperties.hostElement.clientWidth;\n    }\n}","import {Properties as CarouselProperties} from './interfaces';\n\nexport class Utils {\n\n    get images() {\n        return this.carouselProperties.images;\n    }\n\n    get margin() {\n        return this.carouselProperties.margin;\n    }\n\n    get overflowCellsLimit() {\n        if (this.images && this.isImagesLessCellLimit) {\n            let overflowCellsLimit = Math.floor((this.images.length - this.numberOfVisibleCells) / 2);\n\n            if (overflowCellsLimit < 0) {\n                overflowCellsLimit = 0;\n            }\n            \n            return overflowCellsLimit;\n        } else {\n            return this.carouselProperties.overflowCellsLimit;\n        }\n    }\n\n    get isImagesLessCellLimit() {\n        return this.carouselProperties.overflowCellsLimit * 2 + this.numberOfVisibleCells > this.images.length;\n    }\n\n    get numberOfVisibleCells() {\n        return Math.ceil(this.visibleWidth / this.fullCellWidth);\n    }\n\n    get visibleCellsOverflowContainer() {\n        return (this.numberOfVisibleCells * this.fullCellWidth - this.margin) > this.visibleWidth;\n    }\n\n    get fullCellWidth() {\n        return this.carouselProperties.cellWidth + this.carouselProperties.margin;\n    }\n\n    get visibleWidth() {\n        return this.carouselProperties.visibleWidth || this.carouselProperties!.cellsElement!.parentElement!.clientWidth;\n    }\n\n    constructor(private carouselProperties: CarouselProperties) {\n\n    }\n\n    updateProperties(carouselProperties: CarouselProperties) {\n        this.carouselProperties = carouselProperties;\n    }\n\n    getStartX(event: any) {\n        const touches = event.touches;\n        const carouselElementPosition = this.getCarouselElementPosition()['left'];\n        let startX;\n\n        if (touches) {\n            startX = touches[0].clientX - carouselElementPosition;\n        } else {\n            startX = event.clientX - carouselElementPosition;\n        }\n\n        return startX;\n    }\n\n    getMoveX(event: any) {\n        const touches = event.touches;\n        const carouselElementPositionX = this.getCarouselElementPosition()['left'];\n\n        if (touches) {\n            return touches[0].clientX - carouselElementPositionX;\n        } else {\n            return event.clientX - carouselElementPositionX;\n        }\n    }\n\n    getCarouselElementPosition() {\n        return this.carouselProperties.hostElement.getBoundingClientRect();\n    }\n}","import {ChangeDetectorRef, Component, ElementRef, ViewChild, EventEmitter, HostBinding, HostListener, Input, Output, OnDestroy, SimpleChanges} from '@angular/core';\n\nimport {Images} from './interfaces';\nimport {Touches} from './touches';\nimport {Carousel} from './carousel';\nimport {Container} from './container';\nimport {Cells} from './cells';\nimport {Slide} from './slide';\nimport {Utils} from './utils';\nimport {Properties as CarouselProperties} from './interfaces';\n\n\n@Component({\n    selector: 'carousel, [carousel]',\n    templateUrl: './carousel.component.html',\n    styleUrls: ['./carousel.component.sass']\n})\n\nexport class CarouselComponent implements OnDestroy {\n    carousel:any;\n    container:any;\n    utils:any;\n    cells:any;\n    slide:any;\n    _id!: string;\n    _images!: Images;\n    touches: any;\n    landscapeMode: any;\n    minTimeout = 30;\n    isVideoPlaying: boolean = false;\n    _isCounter: boolean = false;\n    _width!: number;\n    _cellWidth: number | '100%' = 200;\n    _loop: boolean = false;\n    _lightDOM: boolean = false;\n    isMoving: boolean = false;\n    isNgContent: boolean = false;\n    cellLength!: number;\n    dotsArr: any;\n    carouselProperties!: CarouselProperties;\n    savedCarouselWidth!: number;\n\n    get isContainerLocked() {\n        if (this.carousel) {\n            return this.carousel.isContainerLocked;\n        }\n    }\n\n    get slideCounter() {\n        if (this.carousel) {\n            return this.carousel.slideCounter;\n        }\n    }\n\n    get lapCounter() {\n        if (this.carousel) {\n            return this.carousel.lapCounter;\n        }\n    }\n\n    get isLandscape() {\n        return window.innerWidth > window.innerHeight;\n    }\n\n    get isSafari(): any {\n        const ua = navigator.userAgent.toLowerCase();\n        if (ua.indexOf('safari') !== -1) {\n            return !(ua.indexOf('chrome') > -1);\n        }\n    }\n\n    get counter() {\n        let counter;\n\n        if (this.loop) {\n            counter = this.slideCounter % this.cellLength;\n        } else {\n            counter = this.slideCounter;\n        }\n\n        return counter + 1 + this.counterSeparator + this.cellLength;\n    }\n\n    get cellsElement() {\n        return this.elementRef.nativeElement.querySelector('.carousel-cells');\n    }\n\n    get isArrows() {\n        return this.arrows && !this.freeScroll;\n    }\n\n    get isCounter() {\n        return this._isCounter && this.cellLength > 1;\n    }\n\n    get activeDotIndex() {\n        return this.slideCounter % this.cellLength;\n    }\n\n    get cellLimit() {\n        if (this.carousel) {\n            return this.carousel.cellLimit;\n        }\n    }\n\n    get carouselWidth() {\n        return this.elementRef.nativeElement.clientWidth;\n    }\n\n    @Output() events: EventEmitter < any > = new EventEmitter < any > ();\n\n    @Input() id!: number;\n    @Input() height: number = 200;\n    @Input() width!: number;\n    @Input() autoplay: boolean = false;\n    @Input() autoplayInterval: number = 5000;\n    @Input() pauseOnHover: boolean = true;\n    @Input() dots: boolean = false;\n    @Input() borderRadius!: number;\n    @Input() margin: number = 10;\n    @Input() objectFit: 'contain' | 'cover' | 'none' = 'cover';\n    @Input() minSwipeDistance: number = 10;\n    @Input() transitionDuration: number = 200;\n    @Input() transitionTimingFunction: 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'linear' = 'ease-out';\n    @Input() videoProperties: any;\n    @Input() counterSeparator: string = \" / \";\n    @Input() overflowCellsLimit: number = 3;\n    @Input() listeners: 'auto' | 'mouse and touch' = 'mouse and touch';\n    @Input() cellsToShow!: number;\n    @Input() cellsToScroll: number = 1;\n    @Input() freeScroll: boolean = false;\n    @Input() arrows: boolean = true;\n    @Input() arrowsOutside: boolean = false;\n    @Input() arrowsTheme: 'light' | 'dark' = 'light';\n\n    @Input()\n    set images(images: Images & any) {\n        this._images = images;\n    }\n    get images() {\n        return this._images;\n    }\n\n    @Input('cellWidth') set cellWidth(value: number | '100%') {\n        if (value) {\n            this._cellWidth = value;\n        }\n    }\n\n    @Input('counter') set isCounter(value: boolean) {\n        if (value) {\n            this._isCounter = value;\n        }\n    }\n\n    @Input('loop') set loop(value: boolean) {\n        if (value) {\n            this._loop = value;\n        }\n    }\n\n    get loop() {\n        if (this.images) {\n            return this._loop;\n        } else {\n            return false;\n        }\n    }\n\n    @Input('lightDOM') set lightDOM(value: boolean) {\n        if (value) {\n            this._lightDOM = value;\n        }\n    }\n\n    get lightDOM() {\n        if (this.images) {\n            return this._lightDOM;\n        } else {\n            return false;\n        }\n    }\n\n    @HostBinding('class.carousel') hostClassCarousel: boolean = true;\n    @HostBinding('style.height') hostStyleHeight!: string;\n    @HostBinding('style.width') hostStyleWidth!: string;\n\n    @HostListener('window:resize', ['$event'])\n    onWindowResize(event: any) {\n        if (this.utils.visibleWidth !== this.savedCarouselWidth) {\n            this.resize();\n        }\n    }\n\n    @HostListener('mousemove', ['$event'])\n    onMousemove(event: MouseEvent) {\n        if (this.autoplay && this.pauseOnHover) {\n            this.carousel.stopAutoplay();\n        }\n    }\n\n    @HostListener('mouseleave', ['$event'])\n    onMouseleave(event: MouseEvent) {\n        if (this.autoplay && this.pauseOnHover) {\n            this.carousel.autoplay();\n        }\n    }\n\n    constructor(\n        private elementRef: ElementRef,\n        private ref: ChangeDetectorRef) {\n\n    }\n\n    ngOnInit() {\n        this.isNgContent = this.cellsElement.children.length > 0;\n\n        this.touches = new Touches({\n            element: this.cellsElement,\n            listeners: this.listeners,\n            mouseListeners: {\n                \"mousedown\": \"handleMousedown\",\n                \"mouseup\": \"handleMouseup\"\n            }\n        });\n\n        this.touches.on('touchstart', this.handleTouchstart);\n        this.touches.on('horizontal-swipe', this.handleHorizontalSwipe);\n        this.touches.on('touchend', this.handleTouchend);\n        this.touches.on('mousedown', this.handleTouchstart);\n        this.touches.on('mouseup', this.handleTouchend);\n        this.touches.on('tap', this.handleTap);\n\n        this.setDimensions();\n    }\n\n    ngAfterViewInit() {\n        this.initCarousel();\n        this.cellLength = this.getCellLength();\n        this.dotsArr = Array(this.cellLength).fill(1);\n        this.ref.detectChanges();\n        this.carousel.lineUpCells();\n        this.savedCarouselWidth = this.carouselWidth;\n\n        /* Start detecting changes in the DOM tree */\n        this.detectDomChanges();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.width || changes.height || changes.images) {\n            this.setDimensions();\n            this.initCarousel();\n            this.carousel.lineUpCells();\n            this.ref.detectChanges();\n        }\n    }\n\n    ngOnDestroy() {\n        this.touches.destroy();\n        //this.carousel.destroy();\n    }\n\n    initCarousel() {\n        this.carouselProperties = {\n            id: this.id,\n            cellsElement: this.elementRef.nativeElement.querySelector('.carousel-cells'),\n            hostElement: this.elementRef.nativeElement,\n            images: this.images,\n            cellWidth: this.getCellWidth(),\n            loop: this.loop,\n            autoplayInterval: this.autoplayInterval,\n            overflowCellsLimit: this.overflowCellsLimit,\n            visibleWidth: this.width,\n            margin: this.margin,\n            minSwipeDistance: this.minSwipeDistance,\n            transitionDuration: this.transitionDuration,\n            transitionTimingFunction: this.transitionTimingFunction,\n            videoProperties: this.videoProperties,\n            eventHandler: this.events,\n            freeScroll: this.freeScroll,\n            lightDOM: this.lightDOM\n        };\n\n        this.utils = new Utils(this.carouselProperties);\n        this.cells = new Cells(this.carouselProperties, this.utils);\n        this.container = new Container(this.carouselProperties, this.utils, this.cells);\n        this.slide = new Slide(this.carouselProperties, this.utils, this.cells, this.container);\n        this.carousel = new Carousel(this.carouselProperties, this.utils, this.cells, this.container, this.slide);\n    \n        if (this.autoplay) {\n            this.carousel.autoplay();\n        }\n    }\n\n    resize() {\n        this.landscapeMode = this.isLandscape;\n        this.savedCarouselWidth = this.carouselWidth;\n\n        this.carouselProperties.cellWidth = this.getCellWidth();\n        this.cells.updateProperties(this.carouselProperties);\n        this.carousel.updateProperties(this.carouselProperties);\n        this.container.updateProperties(this.carouselProperties);\n        this.slide.updateProperties(this.carouselProperties);\n        this.utils.updateProperties(this.carouselProperties);\n        this.carousel.lineUpCells();\n        this.slide.select(0);\n        this.ref.detectChanges();\n    }\n\n    detectDomChanges() {\n        const observer = new MutationObserver((mutations) => {\n            this.onDomChanges();\n        });\n\n        var config = {\n            attributes: true,\n            childList: true,\n            characterData: true\n        };\n        observer.observe(this.cellsElement, config);\n    }\n\n    onDomChanges() {\n        this.cellLength = this.getCellLength();\n        this.carousel.lineUpCells();\n        this.ref.detectChanges();\n    }\n\n    setDimensions() {\n        this.hostStyleHeight = this.height + 'px';\n        this.hostStyleWidth = this.width + 'px';\n    }\n\n    getImage(index:number) {\n        return this.carousel.getImage(index);\n    }\n\n    handleTouchstart = (event: any) => {\n        this.touches.addEventListeners(\"mousemove\", \"handleMousemove\");\n        this.carousel.handleTouchstart(event);\n        this.isMoving = true;\n    }\n\n    handleHorizontalSwipe = (event: any) => {\n        event.preventDefault();\n        this.carousel.handleHorizontalSwipe(event);\n    }\n\n    handleTouchend = (event: any) => {\n        const touches = event.touches;\n        this.carousel.handleTouchend(event);\n        this.touches.removeEventListeners(\"mousemove\", \"handleMousemove\");\n        this.isMoving = false;\n    }\n\n    handleTap = (event: any) => {\n        let outboundEvent: any = {\n            name: 'click'\n        }\n        let nodes = Array.prototype.slice.call(this.cellsElement.children);\n        let cellElement = event.srcElement.closest(\".carousel-cell\");\n        const i = nodes.indexOf(cellElement);\n        const cellIndex = nodes.indexOf(cellElement);\n\n        if (this.images) {\n            //outboundEvent.fileIndex = this.carousel.getFileIndex(i);\n            //outboundEvent.file = this.carousel.getFile(cellIndex);\n        } else {\n            outboundEvent.cellIndex = cellIndex;\n        }\n    }\n\n    handleTransitionendCellContainer(event:any) {\n        if (event.target['className'] === 'carousel-cells') {\n            this.carousel.handleTransitionend();\n        }\n    }\n\n    getCellWidth() {\n        let elementWidth = this.carouselWidth;\n\n        if (this.cellsToShow) {\n            let margin = this.cellsToShow > 1 ? this.margin : 0;\n            let totalMargin = margin * (this.cellsToShow - 1);\n            return (elementWidth - totalMargin) / this.cellsToShow;\n        }\n\n        if (this._cellWidth === '100%') {\n            return elementWidth;\n        } else {\n            return this._cellWidth;\n        }\n    }\n\n    next() {\n        this.carousel.next(this.cellsToScroll);\n        this.carousel.stopAutoplay();\n    }\n\n    prev() {\n        this.carousel.prev(this.cellsToScroll);\n        this.carousel.stopAutoplay();\n    }\n\n    isNextArrowDisabled() {\n        if (this.carousel) {\n            return this.carousel.isNextArrowDisabled();\n        }\n    }\n\n    isPrevArrowDisabled() {\n        if (this.carousel) {\n            return this.carousel.isPrevArrowDisabled();\n        }\n    }\n\n    getCellLength() {\n        if (this.images) {\n            return this.images.length;\n        } else {\n            return this.cellsElement.children.length;\n        }\n    }\n}","<div class=\"carousel-counter\" *ngIf=\"isCounter\">{{counter}}</div>\n\n<div class=\"carousel-container\" [class.carousel-moving]=\"isMoving\">\n\t<div class=\"carousel-cells\" #cells (transitionend)=\"handleTransitionendCellContainer($event)\">\n\t\t<ng-content></ng-content>\n\n\t\t<ng-template ngFor let-image [ngForOf]=\"images\" let-i=\"index\">\n\t\t\t<div class=\"carousel-cell\" \n\t\t\t\t[style.width]=\"getCellWidth()+'px'\"\n\t\t\t\t[style.border-radius]=\"borderRadius+'px'\"\n\t\t\t\t*ngIf=\"i < cellLimit\">\n\t\t\t\t<!-- Image -->\n\t\t\t\t<img \n\t\t\t\t\t*ngIf=\"getImage(i) && getImage(i)['image']\" \n\t\t\t\t\t[src]=\"getImage(i)['image']['path']\"\n\t\t\t\t\t[style.object-fit]=\"objectFit\"\n\t\t\t\t\tdraggable=\"false\" />\n\n\t\t\t</div>\n\t\t</ng-template>\n\t</div>\n\n\t<div class=\"carousel-dots\" *ngIf=\"dots\">\n\t\t<div class=\"carousel-dot\" [class.carousel-dot-active]=\"i === activeDotIndex\" *ngFor=\"let dot of dotsArr; index as i\"></div>\n\t</div>\n</div>\n\n<div class=\"carousel-arrows\" \n\t[class.carousel-arrows-outside]=\"arrowsOutside\" \n\t[class.carousel-dark-arrows]=\"arrowsTheme === 'dark'\"\n\t*ngIf=\"isArrows\">\n\t\n\t<div class=\"carousel-arrow carousel-arrow-prev\" [class.carousel-arrow-disabled]=\"isPrevArrowDisabled()\" (click)=\"prev()\"></div>\n\t<div class=\"carousel-arrow carousel-arrow-next\" [class.carousel-arrow-disabled]=\"isNextArrowDisabled()\" (click)=\"next()\"></div>\n</div>","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CarouselComponent} from './carousel.component';\n\n@NgModule({\n    declarations: [\n        CarouselComponent\n    ],\n    imports: [\n        CommonModule\n    ],\n    exports: [\n        CarouselComponent\n    ],\n    providers: [],\n    bootstrap: []\n})\nexport class IvyCarouselModule { }\n","/*\n * Public API Surface of angular-responsive-carousel-ng16\n */\n\nexport * from './lib/carousel.module';\nexport * from './lib/carousel.component';\nexport * from './lib/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAaa,OAAO,CAAA;AA+BhB,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;KACjG;AAED,IAAA,WAAA,CAAY,UAAsB,EAAA;QAvClC,IAAS,CAAA,SAAA,GAAc,SAAS,CAAC;QACjC,IAAQ,CAAA,QAAA,GAAQ,EAAE,CAAC;QACnB,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QACX,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;QACX,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC;QAEZ,IAAmB,CAAA,mBAAA,GAAG,GAAG,CAAC;QAC1B,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;QACpB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;QACnB,IAAC,CAAA,CAAA,GAAW,CAAC,CAAC;QACd,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEpB,QAAA,IAAA,CAAA,eAAe,GAAQ;AACnB,YAAA,YAAY,EAAE,kBAAkB;AAChC,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,UAAU,EAAE,gBAAgB;SAC/B,CAAA;AACD,QAAA,IAAA,CAAA,eAAe,GAAQ;AACnB,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA,OAAO,EAAE,aAAa;SACzB,CAAA;AACD,QAAA,IAAA,CAAA,eAAe,GAAQ;AACnB,YAAA,QAAQ,EAAE,cAAc;SAC3B,CAAA;AAgFD;;AAEG;;AAIH,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAE3C,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACrC,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACzC,SAAC,CAAA;;AAKD,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAU,KAAI;AAC7B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAG9B,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjC,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,aAAA;;AAGD,YAAA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjC,gBAAA,KAAK,kBAAkB;AACnB,oBAAA,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;AACrC,oBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;oBAC3C,MAAM;AACV,gBAAA,KAAK,gBAAgB;AACjB,oBAAA,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC;AACnC,oBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;oBACzC,MAAM;AACb,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,SAAS,KAAK,kBAAkB;AACrC,gBAAA,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAErC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACL,SAAC,CAAA;;AAuBD,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,KAAU,KAAI;AAC5B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAG9B,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACxC,aAAA;;YAGD,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;AAE5B,YAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,gBAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,aAAA;AACL,SAAC,CAAA;;AAKD,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAU,KAAI;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAE3C,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACpC,aAAA;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACxC,SAAC,CAAA;;AAKD,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAU,KAAI;;AAG7B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,OAAO;AACV,aAAA;;AAGD,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;AAG9B,YAAA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjC,gBAAA,KAAK,kBAAkB;AACnB,oBAAA,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;AACrC,oBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;oBAC3C,MAAM;AACV,gBAAA,KAAK,gBAAgB;AACjB,oBAAA,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC;AACnC,oBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;oBACzC,MAAM;AACb,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,SAAS,KAAK,kBAAkB;AACrC,gBAAA,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAErC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACL,SAAC,CAAA;;AAKD,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,KAAU,KAAI;;YAG3B,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,SAAC,CAAA;;AAKD,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,KAAU,KAAI;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACpC,SAAC,CAAA;;AAID,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAAU,KAAI;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,SAAC,CAAA;AA1OG,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAEjD,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;KACjD;IAED,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;KACpD;AAED,IAAA,oBAAoB,CAAC,MAAkD,EAAA;AACnE,QAAA,IAAI,SAAS,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,iBAAiB,EAAE;AACjD,YAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACvE,SAAA;AAAM,aAAA;AACH,YAAA,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACpF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACxB,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC7D,SAAA;AAED,QAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAiB,SAAS,CAAC,QAAQ,CAAC,CAAC;;YAGlD,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBACvB,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3D,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9D,iBAAA;;AAEJ,aAAA;AAAM,iBAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,WAAW,EAAE;gBAC3D,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;AACxE,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAChE,iBAAA;;AAEJ,aAAA;AAAM,iBAAA;gBACH,IAAI,MAAM,KAAK,kBAAkB,EAAE;AAC/B,oBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACjE,iBAAA;gBACD,IAAI,MAAM,KAAK,qBAAqB,EAAE;AAClC,oBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACpE,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,iBAAiB,CAAC,QAAgB,EAAA;QAC9B,MAAM,OAAO,GAAiB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;KAC3D;AAED,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACjC,MAAM,OAAO,GAAiB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;KAC9D;AAwDD,IAAA,iBAAiB,CAAC,KAAU,EAAA;;QAGxB,IAAI,CAAC,CAAC,EAAE,CAAC;AAET,QAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;YACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACrC,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC5C,SAAA;KACJ;IAqGD,UAAU,CAAC,SAAc,EAAE,QAAa,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtC,SAAA;KACJ;AAGD;;AAEG;AAEH,IAAA,SAAS,CAAC,OAAY,EAAA;AAClB,QAAA,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;KAC9E;IAED,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,OAAO;AACV,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AAE7C,QAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEpC,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,IAAI,SAAS,GAAG,CAAC,EAAE;AACvD,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAK;AACpC,gBAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,aAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;AAE3B,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,SAAS,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7B,OAAO;AACV,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QAEpD,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjC,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACrC,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;KAC/F;AAED,IAAA,iBAAiB,CAAC,KAAU,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;YACT,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACzH,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AACjG,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,kBAAkB,CAAC,KAAU,EAAA;QACzB,IAAI,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE;AAC9E,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,EAAE;AAC7B,gBAAA,OAAO,gBAAgB,CAAC;AAC3B,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,kBAAkB,CAAC;AAC7B,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,SAAS,CAAC;AACzB,SAAA;KACJ;IAED,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;KAC/C;AAED,IAAA,qBAAqB,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KACrE;AAED,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;KAC1D;IAED,QAAQ,CAAC,KAAU,EAAE,KAAU,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC7D,SAAA;AAAM,aAAA;YACH,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACpD,SAAA;KACJ;IAED,OAAO,CAAC,KAAU,EAAE,KAAU,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC5D,SAAA;AAAM,aAAA;YACH,OAAO,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACnD,SAAA;KACJ;IAED,iBAAiB,GAAA;QACb,IAAI,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,EAAE,GAAG,UAAS,KAAU,EAAA;YACxB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AAC5C,SAAC,CAAA;AAED,QAAA,KAAK,cAAc,IAAI,MAAM,GAAG;AAC5B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;;;QAID,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7E,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;KACpB;;IAID,EAAE,CAAC,KAAgB,EAAE,OAAiB,EAAA;AAClC,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AAClC,SAAA;KACJ;AACJ;;MCtbY,QAAQ,CAAA;AAejB,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;KAChC;AAED,IAAA,IAAI,wBAAwB,GAAA;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACzE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjC,gBAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,UAAU,CAAC;AAC1B,SAAA;KACJ;AAED,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;KACtF;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACxC;AAED,IAAA,IAAI,SAAS,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,SAAS,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAExE,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACvC,gBAAA,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACzC,aAAA;AAED,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AACxC,SAAA;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;KAC3D;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;KACjC;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;KACjC;AAED,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;KAC3C;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;KAC7C;AAED,IAAA,IAAI,wBAAwB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;KACnD;AAED,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;KAClD;AAED,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;KAC1C;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACzE;AAED,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;KAC7B;IAED,WACY,CAAA,UAAsB,EACtB,KAAU,EACV,KAAU,EACV,SAAc,EACd,KAAU,EAAA;QAJV,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;QACV,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;QACV,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QACd,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;;QA9FtB,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QAEtC,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;QAEhC,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAC3B,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;QAClC,IAAU,CAAA,UAAA,GAAsB,MAAM,CAAC;QACvC,IAAwB,CAAA,wBAAA,GAAW,CAAC,CAAC;QAErC,IAAkB,CAAA,kBAAA,GAAG,GAAG,CAAC;AA2GzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAU,KAAI;AACnC,YAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;AAC3C,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,KAAU,KAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;AACnC,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACpC,aAAA;AACL,SAAC,CAAA;QAoBD,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;AAC5C,SAAC,CAAA;QAED,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;AAC5C,SAAC,CAAA;QA9DG,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;AAED,IAAA,gBAAgB,CAAC,UAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAChC;IAED,IAAI,GAAA;QACA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,YAAa,CAAC,aAAc,CAAC,WAAW,CAAC;KACrG;IAED,OAAO,GAAA;AACH,QAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IAoBD,mBAAmB,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;KACpC;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACrC;IAED,IAAI,CAAC,SAAiB,CAAC,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;KACJ;IAED,IAAI,CAAC,SAAiB,CAAC,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;IAUD,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;AAChB,SAAC,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;KACxC;IAED,YAAY,GAAA;QACR,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,SAAA;KACJ;AACJ;;MC/KY,SAAS,CAAA;AAelB,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;KAClC;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACxC;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;KAC/C;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;KAC7C;AAED,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAC7E;AAED,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;KAC1C;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;KACrD;AAED,IAAA,IAAI,wBAAwB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;KAC3D;AAED,IAAA,IAAI,UAAU,GAAA;QACV,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAChC,SAAA;KACJ;AAED,IAAA,IAAI,wBAAwB,GAAA;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACzE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjC,gBAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,UAAU,CAAC;AAC1B,SAAA;KACJ;AAED,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC;KACtD;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;KAC3E;AAED,IAAA,WAAA,CAAoB,kBAAsC,EAC9C,KAAS,EACT,KAAS,EAAA;QAFD,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QAC9C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAI;QACT,IAAK,CAAA,KAAA,GAAL,KAAK,CAAI;AAxFrB;;AAEG;QACH,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAC7B,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QACtC,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAC7B,IAAuB,CAAA,uBAAA,GAAW,CAAC,CAAC;QACpC,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;QACzB,IAAS,CAAA,SAAA,GAAW,GAAG,CAAC;QACxB,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;QACtB,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;QACnB,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAClB,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QA8E/B,IAAI,CAAC,IAAI,EAAE,CAAA;KACd;AAED,IAAA,gBAAgB,CAAC,kBAAsC,EAAA;AACnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;KAChD;IAED,IAAI,GAAA;QACA,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnB;IAED,gBAAgB,GAAA;QACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACpE;IAED,qBAAqB,GAAA;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACpE,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;IAED,cAAc,CAAC,mBAA4B,KAAK,EAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;AACV,SAAA;;AAGD,QAAA,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;IAED,IAAI,GAAA;AACA,QAAA,IAAI,SAAS,GAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAEtC,QAAA,IAAI,QAAQ,EAAE;YACV,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO;gBACjD,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,KAAK,MAAM,EAAE;AACnD,gBAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC9C,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACrC,SAAA;AAED,QAAA,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AACjE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC7B,aAAA;AACD,YAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACrC,aAAA;AACJ,SAAA;KACJ;IAED,gBAAgB,GAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC;KAClD;IAED,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;KACnC;;IAGD,YAAY,GAAA;AACR,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEpD,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACtB,OAAO;AACH,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,SAAS,EAAE,gBAAgB;AAC3B,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;aACxC,CAAA;AACJ,SAAA;AAED,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE;YAC1C,OAAO;AACH,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,gBAAgB;gBAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;aAChE,CAAA;AACJ,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,UAAkB,EAAA;QAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAErC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;QAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;QACtD,IAAI,SAAS,GAAU,CAAC,CAAC;AAEzB,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE;gBAClC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAChE,aAAA;AAED,YAAA,MAAM,eAAe,GAAG,QAAQ,GAAG,iBAAiB,CAAC;YACrD,SAAS,GAAG,eAAe,CAAC;AAE5B,YAAA,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,EAAE;AAClC,gBAAA,SAAS,GAAG,IAAI,CAAC,uBAAuB,GAAG,eAAe,CAAC;AAC9D,aAAA;AAED,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE;AAC3B,YAAA,MAAM,eAAe,GAAG,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,IAAI,WAAW,IAAI,iBAAiB,CAAC,CAAC;AACtH,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEvC,SAAS,GAAG,eAAe,CAAC;AAE5B,YAAA,IAAI,IAAI,CAAC,uBAAuB,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE;AACtE,gBAAA,SAAS,GAAG,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,uBAAuB,IAAI,eAAe,CAAC;AACvG,aAAA;AAED,YAAA,IAAI,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1C,gBAAA,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5C,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,YAAY,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,IAAI,YAAY,GAAU,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,SAAA;;AAGD,QAAA,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;KACtC;;IAGD,UAAU,GAAA;AACN,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/C,IAAI,OAAO,GAAG,CAAC,QAAQ,GAAG,SAAS,IAAI,GAAG,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;KAC1C;AAED,IAAA,wBAAwB,CAAC,YAAmB,EAAA;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAI,SAAS,KAAK,MAAM,EAAE;AACtB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,YAAY,GAAG,WAAW,EAAE;AAC5B,gBAAA,OAAO,WAAW,CAAC;AACtB,aAAA;AACJ,SAAA;QACD,IAAI,SAAS,KAAK,OAAO,EAAE;YACvB,IAAI,YAAY,GAAG,CAAC,EAAE;AAClB,gBAAA,OAAO,CAAC,CAAC;AACZ,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,YAAY,CAAC;KACvB;IAED,mBAAmB,GAAA;QACf,MAAM,cAAc,GAAG,IAAI,CAAC,OAAQ,CAAC,aAAc,CAAC,qBAAqB,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;AACtD,QAAA,OAAO,QAAQ,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;KAC9C;IAED,cAAc,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;AAC1D,YAAA,OAAO,EAAE,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7F,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAQ,CAAC,aAAc,CAAC,WAAW,CAAC;YAC9D,OAAO,YAAY,GAAG,KAAK,CAAC;AAC/B,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,KAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAA;QAC/D,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAChG,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;KAChE;IAED,QAAQ,GAAA;QACJ,IAAI,KAAK,GAAG,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/D,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QAE3D,IAAI,eAAe,GAAG,KAAK,EAAE;YACzB,KAAK,GAAG,eAAe,CAAC;AAC3B,SAAA;QAED,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,eAAe,CAAC;KACpD;IAED,QAAQ,GAAA;AACJ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;KAC3C;AAED,IAAA,kBAAkB,CAAC,QAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;KACpC;IAED,kBAAkB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;KAC/C;IAED,0BAA0B,GAAA;QACtB,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,GAAG,uBAAuB,CAAC;KACtE;IAED,kBAAkB,GAAA;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChC;IAED,YAAY,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAEtD,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAClB,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;QACD,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AACJ;;MCjWY,UAAU,CAAA;AAInB,IAAA,WAAA,CAAY,OAAgC,EAAA;QAH5C,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AAInB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC1B;IAED,SAAS,GAAA;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;AAED,IAAA,MAAM,CAAC,IAAU,EAAA;AACb,QAAA,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;KACjC;AACJ,CAAA;MAEY,KAAK,CAAA;AAOd,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KAC7C;AAED,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAC7E;AAED,IAAA,IAAI,wBAAwB,GAAA;QACxB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAEzE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACjC,gBAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,aAAA;AACD,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,UAAU,CAAC;AAC1B,SAAA;KACJ;AAED,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;KAC1C;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACxC;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;KAC3E;IAED,WACY,CAAA,kBAAsC,EACtC,KAAU,EAAA;QADV,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QACtC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;QA1CtB,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;QA4ChB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACjC;AAED,IAAA,gBAAgB,CAAC,kBAAsC,EAAA;AACnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;KAChD;IAED,MAAM,GAAA;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;AAE/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAClD,IAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;AACzE,YAAA,IAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC;AAE7E,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,oBAAA,KAAK,EAAE,CAAC;oBACR,SAAS;oBACT,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;AAClC,iBAAA,CAAC,CAAC;AACN,aAAA;AACJ,SAAA;QAAA,CAAC;KACL;IAED,0BAA0B,GAAA;AACtB,QAAA,MAAM,KAAK,GAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,iBAAiB,CAAC;KAC5D;AAED,IAAA,0BAA0B,CAAC,kBAA0B,EAAA;QACjD,IAAI,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;AACrE,QAAA,OAAO,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;KAC7C;AAED,IAAA,uBAAuB,CAAC,kBAA0B,EAAA;AAC9C,QAAA,IAAI,aAAa,CAAC;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,OAAO,kBAAkB,CAAC;AAC7B,SAAA;AAED,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAErD,IAAI,OAAO,GAAG,UAAU,EAAE;AACtB,YAAA,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAClC,SAAA;QAED,IAAI,OAAO,GAAG,CAAC,EAAE;AACb,YAAA,OAAO,kBAAkB,CAAC;AAC7B,SAAA;AAAM,aAAA;AACH,YAAA,aAAa,GAAG,kBAAkB,GAAG,OAAO,CAAC;YAC7C,IAAI,aAAa,GAAG,CAAC,EAAE;AACnB,gBAAA,aAAa,GAAG,UAAU,GAAG,aAAa,CAAC;AAC9C,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACxB;AAED,IAAA,QAAQ,CAAC,SAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,OAAO;AACV,SAAA;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAEnC,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACvB,SAAA;QAED,OAAO;AACH,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9B,UAAU;SACb,CAAC;KACL;AAED,IAAA,aAAa,CAAC,kBAA0B,EAAA;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;AACvE,QAAA,IAAI,UAAU,CAAC;AAEf,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACxC,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC/D,YAAA,UAAU,GAAG,aAAa,GAAG,iBAAiB,CAAC;YAE/C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBAC7C,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAChD,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,UAAU,GAAG,kBAAkB,CAAC;AACnC,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,IAAI,CAAC,kBAAsC,EAAA;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,OAAQ,CAAC,aAAc,CAAC,WAAW,CAAC;KACxG;AACJ;;MCnLY,KAAK,CAAA;AAgBd,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAC7E;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;KACnD;AAED,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;KAC1C;AAED,IAAA,IAAI,6BAA6B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;KACnD;AAED;;AAEG;AACH,IAAA,IAAI,sBAAsB,GAAA;QACtB,OAAO,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;KAC1D;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACxC;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;;AAGD,IAAA,IAAI,UAAU,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC;AAC9C,SAAA;AAAM,aAAA;YACH,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAChC,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;KAC3E;AAED,IAAA,WAAA,CAAoB,kBAAsC,EAC9C,KAAU,EACV,KAAU,EACV,SAAc,EAAA;QAHN,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QAC9C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;QACV,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;QACV,IAAS,CAAA,SAAA,GAAT,SAAS,CAAK;QAtE1B,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QACxB,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QAEnC,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;QACpB,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QACrB,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QACrB,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QAExB,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAC7B,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;;QAG7B,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;QA2DlC,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;AAED,IAAA,gBAAgB,CAAC,kBAAsC,EAAA;AACnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC;KAC/G;IAED,gBAAgB,GAAA;;AAEZ,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AAChE,SAAA;KACJ;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,OAAO;AACV,SAAA;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,mBAAmB,GAAA;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7B,SAAA;KACJ;IAED,WAAW,CAAC,oBAAwC,SAAS,EAAA;QACzD,IAAI,aAAa,GAAG,iBAAiB,CAAC;AACtC,QAAA,IAAI,YAAY,CAAC;QAEjB,IAAI,aAAa,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC5D,OAAO;AACV,SAAA;;AAGD,QAAA,IAAI,iBAAiB,EAAE;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AAChE,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,SAAA;;AAGD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YAC3B,IAAI,CAAC,iBAAiB,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACnF,aAAA;AAED,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7C,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEtD,YAAA,IAAI,WAAW,EAAE;AACb,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;gBAE7B,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,iBAAiB,EAAE;gBACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5D,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AACnC,aAAA;AAED,YAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3E,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,KAAK,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACnD,SAAA;KACJ;IAED,IAAI,CAAC,SAAiB,CAAC,EAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;IAED,IAAI,CAAC,SAAiB,CAAC,EAAA;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;AAED,IAAA,MAAM,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;YAC7B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB,SAAA;AAED,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;AACtB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB,SAAA;KACJ;IAED,qBAAqB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C,SAAA;AAED,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,WAAmB,EAAA;QAChC,IAAI,WAAW,GAAG,CAAC,EAAE;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;AAElD,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;AAC/B,oBAAA,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM;AACT,iBAAA;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,WAAW,CAAC;KACtB;;AAGD,IAAA,qBAAqB,CAAC,OAAc,EAAA;QAChC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;AAC5D,YAAA,OAAO,CAAC,CAAC;AACZ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,WAAW,EAAE;YAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC;AAE1E,YAAA,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE;AAChC,gBAAA,UAAU,GAAG,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACpG,aAAA;AAED,YAAA,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC5B,UAAU,GAAG,CAAC,CAAC;AAClB,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACrB;AAED,IAAA,cAAc,CAAC,WAAmB,EAAA;QAC9B,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEjD;;;AAGG;AACH,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC3C,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;AACtE,SAAA;AAED,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAE1D,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3D,YAAA,MAAM,EAAE,CAAC;AACZ,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,cAAc,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAClE;IAED,YAAY,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAE3E,QAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAClB,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;QACD,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,MAAM,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,6BAA6B,GAAG,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAE3E,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC9B,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAAM,aAAA;YACH,OAAO,CAAC,WAAW,GAAG,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC;AACvE,SAAA;KACJ;AAED,IAAA,WAAW,CAAC,OAAe,EAAA;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;KACvC;IAED,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AAClD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AAClD,SAAA;KACJ;AAED,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AAC/B,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7E,QAAA,IAAI,QAAQ,CAAC;QAEb,IAAI,UAAU,KAAK,CAAC,EAAE;AAClB,YAAA,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,CAAA;AAC/C,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC5B,UAAU,GAAG,CAAC,CAAC;AAClB,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAChD,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;YAEtD,IAAI,eAAe,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC/E,YAAA,IAAI,iBAAiB,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAChD,YAAA,QAAQ,GAAG,eAAe,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC;AACxF,SAAA;AAAM,aAAA;AACH,YAAA,QAAQ,GAAG,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAE9C,QAAA,OAAO,QAAQ,CAAC;KACnB;AAED,IAAA,mBAAmB,CAAC,QAAgB,EAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YAC3B,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACd,QAAQ,GAAG,CAAC,CAAC;AAChB,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC5B,IAAI,QAAQ,GAAG,WAAW,EAAE;gBACxB,QAAQ,GAAG,WAAW,CAAC;AAC1B,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACnB;AAED,IAAA,4BAA4B,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAEvD,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB,OAAO,KAAK,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;AACnD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;IAED,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,aAAC,CAAC,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC;AACrF,aAAC,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAA;KACtF;IAED,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;KAC7B;IAED,kBAAkB,GAAA;QACd,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACnC,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAEhD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,SAAA;aAAM,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACpD;;AAEG;AACH,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE;AACzC,gBAAA,IAAI,SAAS,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,aAAA;AACJ,SAAA;aAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC9C,IAAI,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAC9D,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC;AAElB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,gBAAA,cAAc,GAAG,kBAAkB,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC1D,OAAO;AACV,aAAA;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1D,IAAI,UAAU,KAAK,CAAC,EAAE;AAClB,gBAAA,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,CAAA;AAC/C,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;gBAC5B,UAAU,GAAG,CAAC,CAAC;AAClB,aAAA;AAED,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;YAEzD,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACvB,SAAA;KACJ;AAED,IAAA,cAAc,CAAC,OAAe,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAEhG,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;YAC9D,OAAO,IAAI,gBAAgB,EAAE;YAC7B,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;QAED,IAAI,OAAO,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;YAChE,OAAO,GAAG,gBAAgB,EAAE;YAC5B,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;AACnE,YAAA,IAAI,CAAC,OAAO,IAAI,gBAAgB,EAAE;YAClC,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;AACrE,YAAA,IAAI,CAAC,OAAO,GAAG,gBAAgB,EAAE;YACjC,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,kBAAkB,CAAC,OAAe,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEhG,IAAI,OAAO,IAAI,gBAAgB,EAAE;YAC7B,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,gBAAgB,EAAE;YAClC,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,wBAAwB,CAAC,OAAe,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC;AAET,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACpC,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzC,IAAI,GAAG,IAAI,CAAC;AACf,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC;KAC/G;AACJ;;MC/eY,KAAK,CAAA;AAEd,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KACzC;AAED,IAAA,IAAI,kBAAkB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC3C,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;YAE1F,IAAI,kBAAkB,GAAG,CAAC,EAAE;gBACxB,kBAAkB,GAAG,CAAC,CAAC;AAC1B,aAAA;AAED,YAAA,OAAO,kBAAkB,CAAC;AAC7B,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AACrD,SAAA;KACJ;AAED,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC1G;AAED,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;KAC5D;AAED,IAAA,IAAI,6BAA6B,GAAA;AAC7B,QAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC;KAC7F;AAED,IAAA,IAAI,aAAa,GAAA;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAC7E;AAED,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAmB,CAAC,YAAa,CAAC,aAAc,CAAC,WAAW,CAAC;KACpH;AAED,IAAA,WAAA,CAAoB,kBAAsC,EAAA;QAAtC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;KAEzD;AAED,IAAA,gBAAgB,CAAC,kBAAsC,EAAA;AACnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;KAChD;AAED,IAAA,SAAS,CAAC,KAAU,EAAA;AAChB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC,MAAM,CAAC,CAAC;AAC1E,QAAA,IAAI,MAAM,CAAC;AAEX,QAAA,IAAI,OAAO,EAAE;YACT,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,uBAAuB,CAAC;AACzD,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,uBAAuB,CAAC;AACpD,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;AACf,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,wBAAwB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC,MAAM,CAAC,CAAC;AAE3E,QAAA,IAAI,OAAO,EAAE;YACT,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,wBAAwB,CAAC;AACxD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC,OAAO,GAAG,wBAAwB,CAAC;AACnD,SAAA;KACJ;IAED,0BAA0B,GAAA;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;KACtE;AACJ;;MChEY,iBAAiB,CAAA;AAwB1B,IAAA,IAAI,iBAAiB,GAAA;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC1C,SAAA;KACJ;AAED,IAAA,IAAI,YAAY,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;AACrC,SAAA;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACnC,SAAA;KACJ;AAED,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;KACjD;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7B,YAAA,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,SAAA;KACJ;AAED,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,IAAI,OAAO,CAAC;QAEZ,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;AACjD,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,SAAA;QAED,OAAO,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;KAChE;AAED,IAAA,IAAI,YAAY,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;KACzE;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;KAC1C;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;KACjD;AAED,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;KAC9C;AAED,IAAA,IAAI,SAAS,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAClC,SAAA;KACJ;AAED,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;KACpD;IA4BD,IACI,MAAM,CAAC,MAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACzB;AACD,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAED,IAAwB,SAAS,CAAC,KAAsB,EAAA;AACpD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;IAED,IAAsB,SAAS,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;KACJ;IAED,IAAmB,IAAI,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,SAAA;KACJ;AAED,IAAA,IAAI,IAAI,GAAA;QACJ,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC,KAAK,CAAC;AACrB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;IAED,IAAuB,QAAQ,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC1B,SAAA;KACJ;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO,IAAI,CAAC,SAAS,CAAC;AACzB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;AAOD,IAAA,cAAc,CAAC,KAAU,EAAA;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACrD,IAAI,CAAC,MAAM,EAAE,CAAC;AACjB,SAAA;KACJ;AAGD,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAChC,SAAA;KACJ;AAGD,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC5B,SAAA;KACJ;IAED,WACY,CAAA,UAAsB,EACtB,GAAsB,EAAA;QADtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAtLlC,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAChB,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAChC,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAE5B,IAAU,CAAA,UAAA,GAAoB,GAAG,CAAC;QAClC,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;QACvB,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAyEnB,QAAA,IAAA,CAAA,MAAM,GAAyB,IAAI,YAAY,EAAW,CAAC;QAG5D,IAAM,CAAA,MAAA,GAAW,GAAG,CAAC;QAErB,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAgB,CAAA,gBAAA,GAAW,IAAI,CAAC;QAChC,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;QAC7B,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;QAEtB,IAAM,CAAA,MAAA,GAAW,EAAE,CAAC;QACpB,IAAS,CAAA,SAAA,GAAiC,OAAO,CAAC;QAClD,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;QAC9B,IAAkB,CAAA,kBAAA,GAAW,GAAG,CAAC;QACjC,IAAwB,CAAA,wBAAA,GAA+D,UAAU,CAAC;QAElG,IAAgB,CAAA,gBAAA,GAAW,KAAK,CAAC;QACjC,IAAkB,CAAA,kBAAA,GAAW,CAAC,CAAC;QAC/B,IAAS,CAAA,SAAA,GAA+B,iBAAiB,CAAC;QAE1D,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;QAC1B,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAC5B,IAAM,CAAA,MAAA,GAAY,IAAI,CAAC;QACvB,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;QAC/B,IAAW,CAAA,WAAA,GAAqB,OAAO,CAAC;QAkDlB,IAAiB,CAAA,iBAAA,GAAY,IAAI,CAAC;AA0JjE,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAU,KAAI;YAC9B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzB,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAU,KAAI;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAC/C,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,KAAU,KAAI;AAC5B,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC1B,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAU,KAAI;AACvB,YAAA,IAAI,aAAa,GAAQ;AACrB,gBAAA,IAAI,EAAE,OAAO;aAChB,CAAA;AACD,YAAA,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACnE,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,MAAM,EAAE;;;AAGhB,aAAA;AAAM,iBAAA;AACH,gBAAA,aAAa,CAAC,SAAS,GAAG,SAAS,CAAC;AACvC,aAAA;AACL,SAAC,CAAA;KA9JA;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,cAAc,EAAE;AACZ,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,SAAS,EAAE,eAAe;AAC7B,aAAA;AACJ,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAED,eAAe,GAAA;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC;;QAG7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;YACnD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC5B,SAAA;KACJ;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;;KAE1B;IAED,YAAY,GAAA;QACR,IAAI,CAAC,kBAAkB,GAAG;YACtB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;AAC5E,YAAA,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,YAAY,EAAE,IAAI,CAAC,KAAK;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;YACvD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1G,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC5B,SAAA;KACJ;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC;QAE7C,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;IAED,gBAAgB,GAAA;QACZ,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,GAAG;AACT,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,aAAa,EAAE,IAAI;SACtB,CAAC;QACF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;KAC/C;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;IAED,aAAa,GAAA;QACT,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KAC3C;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACxC;AAqCD,IAAA,gCAAgC,CAAC,KAAS,EAAA;QACtC,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,gBAAgB,EAAE;AAChD,YAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AACvC,SAAA;KACJ;IAED,YAAY,GAAA;AACR,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QAEtC,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,IAAI,WAAW,GAAG,MAAM,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,YAAY,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;AAC1D,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;AAC5B,YAAA,OAAO,YAAY,CAAC;AACvB,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,UAAU,CAAC;AAC1B,SAAA;KACJ;IAED,IAAI,GAAA;QACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KAChC;IAED,IAAI,GAAA;QACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KAChC;IAED,mBAAmB,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AAC9C,SAAA;KACJ;IAED,mBAAmB,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AAC9C,SAAA;KACJ;IAED,aAAa,GAAA;QACT,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5C,SAAA;KACJ;8GApZQ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ypCClB9B,+6CAkCM,EAAA,MAAA,EAAA,CAAA,2tFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDhBO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;+BACI,sBAAsB,EAAA,QAAA,EAAA,+6CAAA,EAAA,MAAA,EAAA,CAAA,2tFAAA,CAAA,EAAA,CAAA;iIAgGtB,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAEE,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGF,MAAM,EAAA,CAAA;sBADT,KAAK;gBAQkB,SAAS,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;gBAMI,SAAS,EAAA,CAAA;sBAA9B,KAAK;uBAAC,SAAS,CAAA;gBAMG,IAAI,EAAA,CAAA;sBAAtB,KAAK;uBAAC,MAAM,CAAA;gBAcU,QAAQ,EAAA,CAAA;sBAA9B,KAAK;uBAAC,UAAU,CAAA;gBAcc,iBAAiB,EAAA,CAAA;sBAA/C,WAAW;uBAAC,gBAAgB,CAAA;gBACA,eAAe,EAAA,CAAA;sBAA3C,WAAW;uBAAC,cAAc,CAAA;gBACC,cAAc,EAAA,CAAA;sBAAzC,WAAW;uBAAC,aAAa,CAAA;gBAG1B,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQzC,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQrC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MExL7B,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,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,iBAAiB,EAXtB,YAAA,EAAA,CAAA,iBAAiB,CAGjB,EAAA,OAAA,EAAA,CAAA,YAAY,aAGZ,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;AAKZ,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,iBAAiB,YARtB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAQP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAb7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;wBACV,iBAAiB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,YAAY;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,iBAAiB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,SAAS,EAAE,EAAE;AAChB,iBAAA,CAAA;;;AChBD;;AAEG;;ACFH;;AAEG;;;;"}