{"version":3,"file":"ng-devui-dragdrop.mjs","sources":["../../devui/dragdrop/shared/utils.ts","../../devui/dragdrop/touch-support/dragdrop-touch.ts","../../devui/dragdrop/services/drag-drop.service.ts","../../devui/dragdrop/shared/preserve-next-event-emitter.ts","../../devui/dragdrop/directives/drag-preview.component.ts","../../devui/dragdrop/directives/drag-preview.component.html","../../devui/dragdrop/directives/drag-preview.directive.ts","../../devui/dragdrop/directives/draggable.directive.ts","../../devui/dragdrop/directives/batch-draggable.directive.ts","../../devui/dragdrop/directives/drag-preivew-clone-from-domRef.component.ts","../../devui/dragdrop/services/drag-drop-desc-reg.service.ts","../../devui/dragdrop/services/drag-drop-descendant-sync.service.ts","../../devui/dragdrop/services/drag-drop-sync.service.ts","../../devui/dragdrop/directives/drag-sync.directive.ts","../../devui/dragdrop/directives/dragdrop-sync-box.directive.ts","../../devui/dragdrop/directives/drop-scroll-enhance.type.ts","../../devui/dragdrop/directives/drop-scroll-enhance.directive.ts","../../devui/dragdrop/directives/drop-scroll-enhance-side.directive.ts","../../devui/dragdrop/shared/drop-event.model.ts","../../devui/dragdrop/directives/droppable.directive.ts","../../devui/dragdrop/directives/drop-sort-sync.directive.ts","../../devui/dragdrop/directives/sortable.directive.ts","../../devui/dragdrop/drag-drop.module.ts","../../devui/dragdrop/ng-devui-dragdrop.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\r\n\r\nexport class Utils {\r\n  /**\r\n   * Polyfill for element.matches.\r\n   * See: https://developer.mozilla.org/en/docs/Web/API/Element/matches#Polyfill\r\n   * element\r\n   */\r\n  public static matches(element: any, selectorName: string): boolean {\r\n    const proto: any = Element.prototype;\r\n    const func =\r\n      proto.matches ||\r\n      proto.matchesSelector ||\r\n      proto.mozMatchesSelector ||\r\n      proto.msMatchesSelector ||\r\n      proto.oMatchesSelector ||\r\n      proto.webkitMatchesSelector ||\r\n      function (s) {\r\n        const matches = (this.document || this.ownerDocument).querySelectorAll(s);\r\n        let i = matches.length;\r\n        while (--i >= 0 && matches.item(i) !== this) {\r\n          // do nothing\r\n        }\r\n        return i > -1;\r\n      };\r\n\r\n    return func.call(element, selectorName);\r\n  }\r\n\r\n  /**\r\n   * Applies the specified css class on nativeElement\r\n   * elementRef\r\n   * className\r\n   */\r\n  public static addClass(elementRef: ElementRef | any, className: string) {\r\n    if (className === undefined) {\r\n      return;\r\n    }\r\n    const e = this.getElementWithValidClassList(elementRef);\r\n\r\n    if (e) {\r\n      e.classList.add(className);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes the specified class from nativeElement\r\n   * elementRef\r\n   * className\r\n   */\r\n  public static removeClass(elementRef: ElementRef | any, className: string) {\r\n    if (className === undefined) {\r\n      return;\r\n    }\r\n    const e = this.getElementWithValidClassList(elementRef);\r\n\r\n    if (e) {\r\n      e.classList.remove(className);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets element with valid classList\r\n   *\r\n   * elementRef\r\n   * @returns ElementRef | null\r\n   */\r\n  private static getElementWithValidClassList(elementRef: ElementRef) {\r\n    const e = elementRef instanceof ElementRef ? elementRef.nativeElement : elementRef;\r\n\r\n    if (e.classList !== undefined && e.classList !== null) {\r\n      return e;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  public static slice(args, slice?, sliceEnd?) {\r\n    const ret = [];\r\n    let len = args.length;\r\n\r\n    if (len === 0) {\r\n      return ret;\r\n    }\r\n\r\n    const start = slice < 0 ? Math.max(0, slice + len) : slice || 0;\r\n\r\n    if (sliceEnd !== undefined) {\r\n      len = sliceEnd < 0 ? sliceEnd + len : sliceEnd;\r\n    }\r\n\r\n    while (len-- > start) {\r\n      ret[len - start] = args[len];\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  // 动态添加styles\r\n  public static addElStyles(el: any, styles: any) {\r\n    if (styles instanceof Object) {\r\n      for (const s in styles) {\r\n        if (Object.prototype.hasOwnProperty.call(styles, s)) {\r\n          if (Array.isArray(styles[s])) {\r\n            // 用于支持兼容渐退\r\n            styles[s].forEach((val) => {\r\n              el.style[s] = val;\r\n            });\r\n          } else {\r\n            el.style[s] = styles[s];\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  public static dispatchEventToUnderElement(event: DragEvent, target?: HTMLElement, eventType?: string) {\r\n    const up = target || <HTMLElement>event.target;\r\n    up.style.display = 'none';\r\n    const { x, y } = { x: event.clientX, y: event.clientY };\r\n    const under = document.elementFromPoint(x, y);\r\n    up.style.display = '';\r\n    if (!under) {\r\n      return event;\r\n    }\r\n    const ev = document.createEvent('DragEvent');\r\n    ev.initMouseEvent(\r\n      eventType || event.type,\r\n      true,\r\n      true,\r\n      window,\r\n      0,\r\n      event.screenX,\r\n      event.screenY,\r\n      event.clientX,\r\n      event.clientY,\r\n      event.ctrlKey,\r\n      event.altKey,\r\n      event.shiftKey,\r\n      event.metaKey,\r\n      event.button,\r\n      event.relatedTarget\r\n    );\r\n    if (ev.dataTransfer !== null) {\r\n      ev.dataTransfer.setData('text', '');\r\n      ev.dataTransfer.effectAllowed = event.dataTransfer.effectAllowed;\r\n    }\r\n    setTimeout(() => {\r\n      under.dispatchEvent(ev);\r\n    }, 0);\r\n    return event;\r\n  }\r\n}\r\n","/**\r\n * 2020.03.23-Modified from https://github.com/Bernardo-Castilho/dragdroptouch, license: MIT，reason:Converting .js file to .ts file\r\n */\r\nexport class DragDropTouch {\r\n  static readonly THRESHOLD = 5; // pixels to move before drag starts\r\n  static readonly OPACITY = 0.5; // drag image opacity\r\n  static readonly DBLCLICK = 500; // max ms between clicks in a double click\r\n  static readonly DRAG_OVER_TIME = 300; // interval ms when drag over\r\n  static readonly CTX_MENU = 900; // ms to hold before raising 'contextmenu' event\r\n  static readonly IS_PRESS_HOLD_MODE = true; // decides of press & hold mode presence\r\n  static readonly PRESS_HOLD_AWAIT = 400; // ms to wait before press & hold is detected\r\n  static readonly PRESS_HOLD_MARGIN = 25; // pixels that finger might shiver while pressing\r\n  static readonly PRESS_HOLD_THRESHOLD = 0; // pixels to move before drag starts\r\n  static readonly DRAG_HANDLE_ATTR = 'data-drag-handle-selector';\r\n  static readonly rmvAttrs = 'id,class,style,draggable'.split(',');\r\n  static readonly kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(',');\r\n  static readonly ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(',');\r\n\r\n  private static instance: DragDropTouch = null;\r\n\r\n  dataTransfer: DataTransfer;\r\n  lastClick = 0;\r\n  lastTouch: TouchEvent;\r\n  // touched element\r\n  lastTarget: HTMLElement;\r\n  // touched draggble element\r\n  dragSource: HTMLElement;\r\n  ptDown: { x: number; y: number };\r\n  isDragEnabled: boolean;\r\n  isDropZone: boolean;\r\n  pressHoldInterval;\r\n  img;\r\n  imgCustom;\r\n  imgOffset;\r\n  // for continual drag over event even touch point stop at a certain point for a while.\r\n  dragoverTimer;\r\n  // for bind touch move and touch end event to touch target incase virtual scroll cause\r\n  // document no longer get capture/ bubble of touchmove event from dom removed from document tree\r\n  touchTarget: EventTarget;\r\n  touchmoveListener: EventListener;\r\n  touchendListener: EventListener;\r\n  listenerOpt: boolean | EventListenerOptions;\r\n\r\n  constructor() {\r\n    // enforce singleton pattern\r\n    if (DragDropTouch.instance) {\r\n      throw new Error('DragDropTouch instance already created.');\r\n    }\r\n    // detect passive event support\r\n    // https://github.com/Modernizr/Modernizr/issues/1894\r\n    let supportsPassive = false;\r\n    if (typeof document !== 'undefined') {\r\n      document.addEventListener('test', () => {}, {\r\n        get passive() {\r\n          supportsPassive = true;\r\n          return true;\r\n        },\r\n      });\r\n      // listen to touch events\r\n      if (DragDropTouch.isTouchDevice()) {\r\n        // 能响应触摸事件\r\n        const d = document;\r\n        const ts = this.touchstart;\r\n        const tmod = this.touchmoveOnDocument;\r\n        const teod = this.touchendOnDocument;\r\n        const opt = supportsPassive ? { passive: false, capture: false } : false;\r\n        const optPassive = supportsPassive ? { passive: true } : false;\r\n        d.addEventListener('touchstart', ts, opt);\r\n        d.addEventListener('touchmove', tmod, optPassive);\r\n        d.addEventListener('touchend', teod);\r\n        d.addEventListener('touchcancel', teod);\r\n        this.touchmoveListener = this.touchmove;\r\n        this.touchendListener = this.touchend;\r\n        this.listenerOpt = opt;\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * Gets a reference to the @see:DragDropTouch singleton.\r\n   */\r\n  static getInstance() {\r\n    if (!DragDropTouch.instance) {\r\n      DragDropTouch.instance = new DragDropTouch();\r\n    }\r\n    return DragDropTouch.instance;\r\n  }\r\n  static isTouchDevice() {\r\n    if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n      return false;\r\n    }\r\n    const d: Document = document;\r\n    const w: Window = window;\r\n    let bool;\r\n    if (\r\n      'ontouchstart' in d || // normal mobile device\r\n      'ontouchstart' in w ||\r\n      navigator.maxTouchPoints > 0 ||\r\n      (navigator as any).msMaxTouchPoints > 0 ||\r\n      ((window as any).DocumentTouch && document instanceof (window as any).DocumentTouch)\r\n    ) {\r\n      bool = true;\r\n    } else {\r\n      const fakeBody = document.createElement('fakebody');\r\n      fakeBody.innerHTML += `\r\n      <style>\r\n        @media (touch-enabled),(-webkit-touch-enabled),(-moz-touch-enabled),(-o-touch-enabled){\r\n          #touch_test {\r\n            top: 42px;\r\n            position: absolute;\r\n          }\r\n        }\r\n      </style>`;\r\n      document.documentElement.appendChild(fakeBody);\r\n      const touchTestNode = document.createElement('div');\r\n      touchTestNode.id = 'touch_test';\r\n      fakeBody.appendChild(touchTestNode);\r\n      bool = touchTestNode.offsetTop === 42;\r\n      fakeBody.parentElement.removeChild(fakeBody);\r\n    }\r\n    return bool;\r\n  }\r\n  // ** event listener binding\r\n  bindTouchmoveTouchend(e: TouchEvent) {\r\n    this.touchTarget = e.target;\r\n    e.target.addEventListener('touchmove', this.touchmoveListener, this.listenerOpt);\r\n    e.target.addEventListener('touchend', this.touchendListener);\r\n    e.target.addEventListener('touchcancel', this.touchendListener);\r\n  }\r\n  removeTouchmoveTouchend() {\r\n    if (this.touchTarget) {\r\n      this.touchTarget.removeEventListener('touchmove', this.touchmoveListener);\r\n      this.touchTarget.removeEventListener('touchend', this.touchendListener);\r\n      this.touchTarget.removeEventListener('touchcancel', this.touchendListener);\r\n      this.touchTarget = undefined;\r\n    }\r\n  }\r\n  // ** event handlers\r\n  touchstart = (e: TouchEvent) => {\r\n    if (this.shouldHandle(e)) {\r\n      // raise double-click and prevent zooming\r\n      if (Date.now() - this.lastClick < DragDropTouch.DBLCLICK) {\r\n        if (this.dispatchEvent(e, 'dblclick', e.target)) {\r\n          e.preventDefault();\r\n          this.reset();\r\n          return;\r\n        }\r\n      }\r\n      // clear all variables\r\n      this.reset();\r\n      // get nearest draggable element\r\n      const src = this.closestDraggable(e.target);\r\n      if (src) {\r\n        this.dragSource = src;\r\n        this.ptDown = this.getPoint(e);\r\n        this.lastTouch = e;\r\n        if (DragDropTouch.IS_PRESS_HOLD_MODE) {\r\n          this.pressHoldInterval = setTimeout(() => {\r\n            this.bindTouchmoveTouchend(e);\r\n            this.isDragEnabled = true;\r\n            this.touchmove(e);\r\n          }, DragDropTouch.PRESS_HOLD_AWAIT);\r\n        } else {\r\n          e.preventDefault();\r\n          this.bindTouchmoveTouchend(e);\r\n        }\r\n      }\r\n    }\r\n  };\r\n  touchmoveOnDocument = (e) => {\r\n    if (this.shouldCancelPressHoldMove(e)) {\r\n      this.reset();\r\n      return;\r\n    }\r\n  };\r\n  touchmove = (e: TouchEvent) => {\r\n    if (this.shouldCancelPressHoldMove(e)) {\r\n      this.reset();\r\n      return;\r\n    }\r\n    if (this.shouldHandleMove(e) || this.shouldHandlePressHoldMove(e)) {\r\n      const target = this.getTarget(e);\r\n      // start dragging\r\n      if (this.dragSource && !this.img && this.shouldStartDragging(e)) {\r\n        this.dispatchEvent(e, 'dragstart', this.dragSource);\r\n        this.createImage(e);\r\n      }\r\n      // continue dragging\r\n      if (this.img) {\r\n        this.clearDragoverInterval();\r\n        this.lastTouch = e;\r\n        e.preventDefault(); // prevent scrolling\r\n        if (target !== this.lastTarget) {\r\n          // according to drag drop implementation of the browser, dragenterB is supposed to fired before dragleaveA\r\n          this.dispatchEvent(e, 'dragenter', target);\r\n          this.dispatchEvent(this.lastTouch, 'dragleave', this.lastTarget);\r\n          this.lastTarget = target;\r\n        }\r\n        this.moveImage(e);\r\n        this.isDropZone = this.dispatchEvent(e, 'dragover', target);\r\n        // should continue dispatch dragover event when touch position stay still\r\n        this.setDragoverInterval(e);\r\n      }\r\n    }\r\n  };\r\n  touchendOnDocument = (e) => {\r\n    if (this.shouldHandle(e)) {\r\n      if (!this.img) {\r\n        this.dragSource = null;\r\n        this.lastClick = Date.now();\r\n      }\r\n      // finish dragging\r\n      this.destroyImage();\r\n      if (this.dragSource) {\r\n        this.reset();\r\n      }\r\n    }\r\n  };\r\n  touchend = (e) => {\r\n    if (this.shouldHandle(e)) {\r\n      // user clicked the element but didn't drag, so clear the source and simulate a click\r\n      if (!this.img) {\r\n        this.dragSource = null;\r\n        // browser will dispatch click event after trigger touchend, since touchstart didn't preventDefault\r\n        this.lastClick = Date.now();\r\n      }\r\n      // finish dragging\r\n      this.destroyImage();\r\n      if (this.dragSource) {\r\n        if (e.type.indexOf('cancel') < 0 && this.isDropZone) {\r\n          this.dispatchEvent(this.lastTouch, 'drop', this.lastTarget);\r\n        }\r\n        this.dispatchEvent(this.lastTouch, 'dragend', this.dragSource);\r\n        this.reset();\r\n      }\r\n    }\r\n  };\r\n  // ** utilities\r\n  // ignore events that have been handled or that involve more than one touch\r\n  shouldHandle(e) {\r\n    return e && !e.defaultPrevented && e.touches && e.touches.length < 2;\r\n  }\r\n  // use regular condition outside of press & hold mode\r\n  shouldHandleMove(e) {\r\n    return !DragDropTouch.IS_PRESS_HOLD_MODE && this.shouldHandle(e);\r\n  }\r\n  // allow to handle moves that involve many touches for press & hold\r\n  shouldHandlePressHoldMove(e) {\r\n    return DragDropTouch.IS_PRESS_HOLD_MODE && this.isDragEnabled && e && e.touches && e.touches.length;\r\n  }\r\n  // reset data if user drags without pressing & holding\r\n  shouldCancelPressHoldMove(e) {\r\n    return DragDropTouch.IS_PRESS_HOLD_MODE && !this.isDragEnabled && this.getDelta(e) > DragDropTouch.PRESS_HOLD_MARGIN;\r\n  }\r\n  // start dragging when mouseover element matches drag handler selector and specified delta is detected\r\n  shouldStartDragging(e) {\r\n    const dragHandleSelector = this.getDragHandle();\r\n    // start dragging when mouseover element matches drag handler selector\r\n    if (dragHandleSelector && !this.matchSelector(e.target, dragHandleSelector)) {\r\n      return false;\r\n    }\r\n    // start dragging when specified delta is detected\r\n    const delta = this.getDelta(e);\r\n    return delta > DragDropTouch.THRESHOLD || (DragDropTouch.IS_PRESS_HOLD_MODE && delta >= DragDropTouch.PRESS_HOLD_THRESHOLD);\r\n  }\r\n  // find drag handler selector for dragstart only with partial element\r\n  getDragHandle() {\r\n    if (this.dragSource) {\r\n      return this.dragSource.getAttribute(DragDropTouch.DRAG_HANDLE_ATTR) || '';\r\n    }\r\n    return '';\r\n  }\r\n  // test if element matches selector\r\n  matchSelector(element, selector) {\r\n    if (selector) {\r\n      const proto: any = Element.prototype;\r\n      const func =\r\n        proto.matches ||\r\n        proto.matchesSelector ||\r\n        proto.mozMatchesSelector ||\r\n        proto.msMatchesSelector ||\r\n        proto.oMatchesSelector ||\r\n        proto.webkitMatchesSelector ||\r\n        function (s) {\r\n          const matches = (this.document || this.ownerDocument).querySelectorAll(s);\r\n          let i = matches.length;\r\n          while (--i >= 0 && matches.item(i) !== this) {\r\n            // do nothing\r\n          }\r\n          return i > -1;\r\n        };\r\n      return func.call(element, selector);\r\n    }\r\n    return true;\r\n  }\r\n  // clear all members\r\n  reset() {\r\n    this.removeTouchmoveTouchend();\r\n    this.destroyImage();\r\n    this.dragSource = null;\r\n    this.lastTouch = null;\r\n    this.lastTarget = null;\r\n    this.ptDown = null;\r\n    this.isDragEnabled = false;\r\n    this.isDropZone = false;\r\n    this.dataTransfer = new DragDropTouch.DataTransfer();\r\n    clearInterval(this.pressHoldInterval);\r\n    this.clearDragoverInterval();\r\n  }\r\n  // get point for a touch event\r\n  getPoint(e, page?) {\r\n    if (e && e.touches) {\r\n      e = e.touches[0];\r\n    }\r\n    return { x: page ? e.pageX : e.clientX, y: page ? e.pageY : e.clientY };\r\n  }\r\n  // get distance between the current touch event and the first one\r\n  getDelta(e) {\r\n    if (DragDropTouch.IS_PRESS_HOLD_MODE && !this.ptDown) {\r\n      return 0;\r\n    }\r\n    const p = this.getPoint(e);\r\n    return Math.abs(p.x - this.ptDown.x) + Math.abs(p.y - this.ptDown.y);\r\n  }\r\n  // get the element at a given touch event\r\n  getTarget(e: TouchEvent) {\r\n    const pt = this.getPoint(e);\r\n    let el = document.elementFromPoint(pt.x, pt.y);\r\n    while (el && getComputedStyle(el).pointerEvents === 'none') {\r\n      el = el.parentElement;\r\n    }\r\n    return <HTMLElement>el;\r\n  }\r\n  // create drag image from source element\r\n  createImage(e) {\r\n    // just in case...\r\n    if (this.img) {\r\n      this.destroyImage();\r\n    }\r\n    // create drag image from custom element or drag source\r\n    const src = this.imgCustom || this.dragSource;\r\n    this.img = src.cloneNode(true);\r\n    this.copyStyle(src, this.img);\r\n    this.img.style.top = this.img.style.left = '-9999px';\r\n    // if creating from drag source, apply offset and opacity\r\n    if (!this.imgCustom) {\r\n      const rc = src.getBoundingClientRect();\r\n      const pt = this.getPoint(e);\r\n      this.imgOffset = { x: pt.x - rc.left, y: pt.y - rc.top };\r\n      this.img.style.opacity = DragDropTouch.OPACITY.toString();\r\n    }\r\n    // add image to document\r\n    this.moveImage(e);\r\n    document.body.appendChild(this.img);\r\n  }\r\n  // dispose of drag image element\r\n  destroyImage() {\r\n    if (this.img && this.img.parentElement) {\r\n      this.img.parentElement.removeChild(this.img);\r\n    }\r\n    this.img = null;\r\n    this.imgCustom = null;\r\n  }\r\n  // move the drag image element\r\n  moveImage(e) {\r\n    requestAnimationFrame(() => {\r\n      if (this.img) {\r\n        const pt = this.getPoint(e, true);\r\n        const s = this.img.style;\r\n        s.position = 'absolute';\r\n        s.pointerEvents = 'none';\r\n        s.zIndex = '999999';\r\n        s.left = Math.round(pt.x - this.imgOffset.x) + 'px';\r\n        s.top = Math.round(pt.y - this.imgOffset.y) + 'px';\r\n      }\r\n    });\r\n  }\r\n  // copy properties from an object to another\r\n  copyProps(dst, src, props) {\r\n    for (let i = 0; i < props.length; i++) {\r\n      const p = props[i];\r\n      dst[p] = src[p];\r\n    }\r\n  }\r\n  // copy styles/attributes from drag source to drag image element\r\n  copyStyle(src, dst) {\r\n    // remove potentially troublesome attributes\r\n    DragDropTouch.rmvAttrs.forEach((att) => dst.removeAttribute(att));\r\n    // copy canvas content\r\n    if (src instanceof HTMLCanvasElement) {\r\n      const canSrc = src;\r\n      const canDst = dst;\r\n      canDst.width = canSrc.width;\r\n      canDst.height = canSrc.height;\r\n      canDst.getContext('2d').drawImage(canSrc, 0, 0);\r\n    }\r\n    // copy canvas content for nested canvas element\r\n    const srcCanvases = src.querySelectorAll('canvas');\r\n    if (srcCanvases.length > 0) {\r\n      const dstCanvases = dst.querySelectorAll('canvas');\r\n      for (let i = 0; i < dstCanvases.length; i++) {\r\n        const cSrc = srcCanvases[i];\r\n        const cDst = dstCanvases[i];\r\n        cDst.getContext('2d').drawImage(cSrc, 0, 0);\r\n      }\r\n    }\r\n    // copy style (without transitions)\r\n    const cs = getComputedStyle(src);\r\n    for (let i = 0; i < cs.length; i++) {\r\n      const key = cs[i];\r\n      if (key.indexOf('transition') < 0) {\r\n        dst.style[key] = cs[key];\r\n      }\r\n    }\r\n    dst.style.pointerEvents = 'none';\r\n    // and repeat for all children\r\n    for (let i = 0; i < src.children.length; i++) {\r\n      this.copyStyle(src.children[i], dst.children[i]);\r\n    }\r\n  }\r\n  // synthesize and dispatch an event\r\n  // returns true if the event has been handled (e.preventDefault == true)\r\n  dispatchEvent(e, type, target) {\r\n    if (e && target) {\r\n      const evt = document.createEvent('Event');\r\n      const t = e.touches ? e.touches[0] : e;\r\n      evt.initEvent(type, true, true);\r\n      const obj = {\r\n        button: 0,\r\n        which: 0,\r\n        buttons: 1,\r\n        dataTransfer: this.dataTransfer,\r\n      };\r\n      this.copyProps(evt, e, DragDropTouch.kbdProps);\r\n      this.copyProps(evt, t, DragDropTouch.ptProps);\r\n      this.copyProps(evt, { fromTouch: true }, ['fromTouch']); // mark as from touch event\r\n      this.copyProps(evt, obj, Object.keys(obj));\r\n\r\n      target.dispatchEvent(evt);\r\n      return evt.defaultPrevented;\r\n    }\r\n    return false;\r\n  }\r\n  // gets an element's closest draggable ancestor\r\n  closestDraggable(e) {\r\n    for (; e; e = e.parentElement) {\r\n      if (e.hasAttribute('draggable') && e.draggable) {\r\n        return e;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n  // repeat dispatch dragover event when touch point stay still\r\n  setDragoverInterval(e) {\r\n    this.dragoverTimer = setInterval(() => {\r\n      const target = this.getTarget(e);\r\n      if (target !== this.lastTarget) {\r\n        this.dispatchEvent(e, 'dragenter', target);\r\n        this.dispatchEvent(e, 'dragleave', this.lastTarget);\r\n        this.lastTarget = target;\r\n      }\r\n      this.isDropZone = this.dispatchEvent(e, 'dragover', target);\r\n    }, DragDropTouch.DRAG_OVER_TIME);\r\n  }\r\n  clearDragoverInterval() {\r\n    if (this.dragoverTimer) {\r\n      clearInterval(this.dragoverTimer);\r\n      this.dragoverTimer = undefined;\r\n    }\r\n  }\r\n}\r\n/* eslint-disable-next-line @typescript-eslint/no-namespace */\r\nexport namespace DragDropTouch {\r\n  /**\r\n   * Object used to hold the data that is being dragged during drag and drop operations.\r\n   *\r\n   * It may hold one or more data items of different types. For more information about\r\n   * drag and drop operations and data transfer objects, see\r\n   * <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer\">HTML Drag and Drop API</a>.\r\n   *\r\n   * This object is created automatically by the @see:DragDropTouch singleton and is\r\n   * accessible through the @see:dataTransfer property of all drag events.\r\n   */\r\n  export class DataTransfer implements DataTransfer {\r\n    files;\r\n    items;\r\n    private _data;\r\n    /**\r\n     * Gets or sets the type of drag-and-drop operation currently selected.\r\n     * The value must be 'none',  'copy',  'link', or 'move'.\r\n     */\r\n    private _dropEffect;\r\n    get dropEffect() {\r\n      return this._dropEffect;\r\n    }\r\n    set dropEffect(value) {\r\n      this._dropEffect = value;\r\n    }\r\n    /**\r\n     * Gets or sets the types of operations that are possible.\r\n     * Must be one of 'none', 'copy', 'copyLink', 'copyMove', 'link',\r\n     * 'linkMove', 'move', 'all' or 'uninitialized'.\r\n     */\r\n    private _effectAllowed;\r\n    get effectAllowed() {\r\n      return this._effectAllowed;\r\n    }\r\n    set effectAllowed(value) {\r\n      this._effectAllowed = value;\r\n    }\r\n    /**\r\n     * Gets an array of strings giving the formats that were set in the @see:dragstart event.\r\n     */\r\n    private _types;\r\n    get types() {\r\n      return Object.keys(this._data);\r\n    }\r\n\r\n    constructor() {\r\n      this._dropEffect = 'move';\r\n      this._effectAllowed = 'all';\r\n      this._data = {};\r\n    }\r\n    /**\r\n     * Removes the data associated with a given type.\r\n     *\r\n     * The type argument is optional. If the type is empty or not specified, the data\r\n     * associated with all types is removed. If data for the specified type does not exist,\r\n     * or the data transfer contains no data, this method will have no effect.\r\n     *\r\n     * @param type Type of data to remove.\r\n     */\r\n    clearData(type) {\r\n      if (type !== null) {\r\n        delete this._data[type];\r\n      } else {\r\n        this._data = null;\r\n      }\r\n    }\r\n    /**\r\n     * Retrieves the data for a given type, or an empty string if data for that type does\r\n     * not exist or the data transfer contains no data.\r\n     *\r\n     * @param type Type of data to retrieve.\r\n     */\r\n    getData(type) {\r\n      return this._data[type] || '';\r\n    }\r\n\r\n    /**\r\n     * Set the data for a given type.\r\n     *\r\n     * For a list of recommended drag types, please see\r\n     * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types.\r\n     *\r\n     * @param type Type of data to add.\r\n     * @param value Data to add.\r\n     */\r\n    setData(type, value) {\r\n      this._data[type] = value;\r\n    }\r\n    /**\r\n     * Set the image to be used for dragging if a custom one is desired.\r\n     *\r\n     * @param img An image element to use as the drag feedback image.\r\n     * @param offsetX The horizontal offset within the image.\r\n     * @param offsetY The vertical offset within the image.\r\n     */\r\n    setDragImage(img, offsetX, offsetY) {\r\n      const ddt = DragDropTouch.getInstance();\r\n      ddt.imgCustom = img;\r\n      ddt.imgOffset = { x: offsetX, y: offsetY };\r\n    }\r\n  }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable, NgZone } from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { DragPreviewDirective } from '../directives/drag-preview.directive';\r\nimport { Utils } from '../shared/utils';\r\nimport { DragDropTouch } from '../touch-support/dragdrop-touch';\r\nimport { DraggableDirective } from './../directives/draggable.directive';\r\n\r\n@Injectable()\r\nexport class DragDropService {\r\n  dragData: any;\r\n  draggedEl: any;\r\n  draggedElIdentity: any;\r\n  batchDragData: Array<{\r\n    identity?: any;\r\n    draggable: DraggableDirective;\r\n    dragData: any;\r\n  }>;\r\n  batchDragGroup: string;\r\n  batchDragStyle: Array<string>;\r\n  batchDragging: boolean;\r\n  scope: string | Array<string>;\r\n  dropTargets = [];\r\n  dropEvent: Subject<any> = new Subject();\r\n  dragEndEvent = new Subject<any>();\r\n  dragStartEvent = new Subject<any>();\r\n  dropOnItem: boolean;\r\n  dragFollow: boolean;\r\n  dragFollowOptions: {\r\n    appendToBody?: boolean;\r\n  };\r\n  dropOnOrigin: boolean;\r\n  draggedElFollowingMouse: boolean;\r\n  dragOffset: {\r\n    top: number;\r\n    left: number;\r\n    offsetLeft: number;\r\n    offsetTop: number;\r\n    width?: number;\r\n    height?: number;\r\n  };\r\n  subscription: Subscription = new Subscription();\r\n  dragEmptyImage = new Image();\r\n  dragCloneNode: any;\r\n  dragOriginPlaceholder: any;\r\n  dragItemContainer: any;\r\n  dragItemParentName = '';\r\n  dragItemChildrenName = '';\r\n  intersectionObserver: any = null;\r\n  sub;\r\n  dragOriginPlaceholderNextSibling: any;\r\n  touchInstance;\r\n\r\n  /* 协同拖拽需要 */\r\n  dragElShowHideEvent = new Subject<boolean>();\r\n  dragSyncGroupDirectives;\r\n  /* 预览功能 */\r\n  dragPreviewDirective: DragPreviewDirective;\r\n  document: Document;\r\n\r\n  constructor(private ngZone: NgZone, @Inject(DOCUMENT) private doc: any) {\r\n    this.touchInstance = DragDropTouch.getInstance();\r\n    // service not support OnInit, only support OnDestroy, so write in constructor\r\n    // safari的img必须要有src\r\n    this.dragEmptyImage.src =\r\n      'data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==';\r\n    this.document = this.doc;\r\n  }\r\n  newSubscription() {\r\n    this.subscription.unsubscribe();\r\n    // eslint-disable-next-line no-return-assign\r\n    return (this.subscription = new Subscription());\r\n  }\r\n\r\n  enableDraggedCloneNodeFollowMouse() {\r\n    if (!this.dragCloneNode) {\r\n      this.dragItemContainer = this.draggedEl.parentElement;\r\n      if (this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate) {\r\n        this.dragPreviewDirective.createPreview();\r\n        this.dragCloneNode = this.dragPreviewDirective.getPreviewElement();\r\n        this.dragItemContainer = this.document.body;\r\n      } else {\r\n        this.dragCloneNode = this.draggedEl.cloneNode(true);\r\n      }\r\n\r\n      this.dragCloneNode.style.margin = '0';\r\n      if (this.dragFollowOptions && this.dragFollowOptions.appendToBody) {\r\n        this.dragItemContainer = this.document.body;\r\n        this.copyStyle(this.draggedEl, this.dragCloneNode);\r\n      }\r\n\r\n      if (this.dragItemChildrenName !== '') {\r\n        const parentElement = this.dragItemParentName === '' ? this.dragCloneNode : this.document.querySelector(this.dragItemParentName);\r\n        const dragItemChildren = parentElement.querySelectorAll(this.dragItemChildrenName);\r\n        this.interceptChildNode(parentElement, dragItemChildren);\r\n      }\r\n      // 拷贝canvas的内容\r\n      const originCanvasArr = this.draggedEl.querySelectorAll('canvas');\r\n      const targetCanvasArr = this.dragCloneNode.querySelectorAll('canvas');\r\n      [].forEach.call(targetCanvasArr, (canvas, index) => {\r\n        canvas.getContext('2d').drawImage(originCanvasArr[index], 0, 0);\r\n      });\r\n\r\n      this.ngZone.runOutsideAngular(() => {\r\n        this.document.addEventListener('dragover', this.followMouse4CloneNode, { capture: true, passive: true });\r\n      });\r\n      this.dragCloneNode.style.width = this.dragOffset.width + 'px';\r\n      this.dragCloneNode.style.height = this.dragOffset.height + 'px';\r\n\r\n      if (\r\n        !(\r\n          this.dragPreviewDirective &&\r\n          this.dragPreviewDirective.dragPreviewTemplate &&\r\n          this.dragPreviewDirective.dragPreviewOptions &&\r\n          this.dragPreviewDirective.dragPreviewOptions.skipBatchPreview\r\n        )\r\n      ) {\r\n        // 批量拖拽样式\r\n        if (this.batchDragging && this.batchDragData && this.batchDragData.length > 1) {\r\n          // 创建一个节点容器\r\n          const node = this.document.createElement('div');\r\n          node.appendChild(this.dragCloneNode);\r\n          node.classList.add('batch-dragged-node');\r\n\r\n          /* 计数样式定位 */\r\n          if (this.batchDragStyle && this.batchDragStyle.length && this.batchDragStyle.indexOf('badge') > -1) {\r\n            const badge = this.document.createElement('div');\r\n            badge.innerText = String(this.batchDragData.length);\r\n            badge.classList.add('batch-dragged-node-count');\r\n            node.style.position = 'relative';\r\n            const style = {\r\n              position: 'absolute',\r\n              right: '5px',\r\n              top: '-12px',\r\n              height: '24px',\r\n              width: '24px',\r\n              borderRadius: '12px',\r\n              fontSize: '14px',\r\n              lineHeight: '24px',\r\n              textAlign: 'center',\r\n              color: '#fff',\r\n              background: ['#5170ff', 'var(--brand-1, #5170ff)'],\r\n            };\r\n            Utils.addElStyles(badge, style);\r\n            node.appendChild(badge);\r\n          }\r\n\r\n          /* 层叠感样式定位 */\r\n          if (this.batchDragStyle && this.batchDragStyle.length && this.batchDragStyle.indexOf('stack') > -1) {\r\n            let stack = 2;\r\n            if (this.batchDragData.length === 2) {\r\n              stack = 1;\r\n            }\r\n            for (let i = 0; i < stack; i++) {\r\n              const stackNode = this.dragCloneNode.cloneNode(false);\r\n              const stackStyle = {\r\n                position: 'absolute',\r\n                left: -5 * (i + 1) + 'px',\r\n                top: -5 * (i + 1) + 'px',\r\n                zIndex: String(-(i + 1)),\r\n                width: this.dragOffset.width + 'px',\r\n                height: this.dragOffset.height + 'px',\r\n                background: '#fff',\r\n                border: ['1px solid #5170ff', '1px solid var(--brand-1, #5170ff)'],\r\n              };\r\n              Utils.addElStyles(stackNode, stackStyle);\r\n              node.appendChild(stackNode);\r\n            }\r\n          }\r\n          this.dragCloneNode = node;\r\n        }\r\n      }\r\n\r\n      this.dragCloneNode.classList.add('drag-clone-node');\r\n      if (!(this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate)) {\r\n        this.dragCloneNode.style.width = this.dragOffset.width + 'px';\r\n        this.dragCloneNode.style.height = this.dragOffset.height + 'px';\r\n      }\r\n      this.dragCloneNode.style.position = 'fixed';\r\n      this.dragCloneNode.style.zIndex = '1090';\r\n      this.dragCloneNode.style.pointerEvents = 'none';\r\n      this.dragCloneNode.style.top = this.dragOffset.top + 'px';\r\n      this.dragCloneNode.style.left = this.dragOffset.left + 'px';\r\n      this.dragCloneNode.style.willChange = 'left, top';\r\n      this.dragItemContainer.appendChild(this.dragCloneNode);\r\n      this.ngZone.runOutsideAngular(() => {\r\n        setTimeout(() => {\r\n          if (this.draggedEl) {\r\n            this.draggedEl.style.display = 'none';\r\n            this.dragElShowHideEvent.next(false);\r\n            if (this.dragOriginPlaceholder) {\r\n              this.dragOriginPlaceholder.style.display = 'block';\r\n            }\r\n          }\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  disableDraggedCloneNodeFollowMouse() {\r\n    if (this.dragCloneNode) {\r\n      this.document.removeEventListener('dragover', this.followMouse4CloneNode, { capture: true });\r\n      this.dragItemContainer.removeChild(this.dragCloneNode);\r\n      this.draggedEl.style.display = '';\r\n      this.dragElShowHideEvent.next(true);\r\n    }\r\n    if (this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate) {\r\n      this.dragPreviewDirective.destroyPreview();\r\n    }\r\n    this.dragCloneNode = undefined;\r\n    this.dragItemContainer = undefined;\r\n\r\n    if (this.intersectionObserver) {\r\n      this.intersectionObserver.disconnect();\r\n    }\r\n  }\r\n\r\n  interceptChildNode(parentNode, childNodeList) {\r\n    const interceptOptions = {\r\n      root: parentNode,\r\n    };\r\n    this.intersectionObserver = new IntersectionObserver(this.setChildNodeHide, interceptOptions);\r\n    [].forEach.call(childNodeList, (childNode) => {\r\n      this.intersectionObserver.observe(childNode);\r\n    });\r\n  }\r\n\r\n  setChildNodeHide(entries) {\r\n    entries.forEach((element) => {\r\n      const { isIntersecting, target: childNode } = element;\r\n      if (isIntersecting) {\r\n        childNode.style.display = 'block';\r\n      } else {\r\n        childNode.style.display = 'none';\r\n      }\r\n    });\r\n  }\r\n\r\n  followMouse4CloneNode = (event) => {\r\n    const { offsetLeft, offsetTop } = this.dragOffset;\r\n    const { clientX, clientY } = event;\r\n    requestAnimationFrame(() => {\r\n      if (!this.dragCloneNode) {\r\n        return;\r\n      }\r\n      this.dragCloneNode.style.left = clientX - offsetLeft + 'px';\r\n      this.dragCloneNode.style.top = clientY - offsetTop + 'px';\r\n    });\r\n  };\r\n\r\n  getBatchDragData(identity?, order: ((a: any, b: any) => number) | 'select' | 'draggedElFirst' = 'draggedElFirst') {\r\n    const result = this.batchDragData.map((dragData) => dragData.dragData);\r\n    if (typeof order === 'function') {\r\n      result.sort(<(a: any, b: any) => number>order);\r\n    } else if (order === 'draggedElFirst') {\r\n      let dragData = this.dragData;\r\n      if (identity) {\r\n        const realDragData = this.batchDragData.filter((dd) => dd.identity === identity).pop().dragData;\r\n        dragData = realDragData;\r\n      }\r\n      result.splice(result.indexOf(dragData), 1);\r\n      result.splice(0, 0, dragData);\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /** usage:\r\n   * constructor(..., private dragDropService: DragDropService) {}\r\n   * cleanBatchDragData() { this.dragDropService.cleanBatchDragData(); }\r\n   */\r\n  public cleanBatchDragData() {\r\n    const batchDragData = this.batchDragData;\r\n    if (this.batchDragData) {\r\n      this.batchDragData\r\n        .filter((dragData) => dragData.draggable)\r\n        .map((dragData) => dragData.draggable)\r\n        .forEach((draggable) => {\r\n          draggable.batchDraggable.dragData = undefined;\r\n        });\r\n      this.batchDragData = undefined;\r\n      this.batchDragGroup = undefined;\r\n    }\r\n    return batchDragData;\r\n  }\r\n\r\n  public copyStyle(source, target) {\r\n    ['id', 'class', 'style', 'draggable'].forEach((att) => {\r\n      target.removeAttribute(att);\r\n    });\r\n\r\n    // copy style (without transitions)\r\n    const computedStyle = getComputedStyle(source);\r\n    for (let i = 0; i < computedStyle.length; i++) {\r\n      const key = computedStyle[i];\r\n      if (key.indexOf('transition') < 0) {\r\n        target.style[key] = computedStyle[key];\r\n      }\r\n    }\r\n    target.style.pointerEvents = 'none';\r\n    // and repeat for all children\r\n    for (let i = 0; i < source.children.length; i++) {\r\n      this.copyStyle(source.children[i], target.children[i]);\r\n    }\r\n  }\r\n}\r\n","import { EventEmitter } from '@angular/core';\n\nexport class PreserveNextEventEmitter<T> extends EventEmitter<T> {\n  /** 保留注册的 generatorOrNext构成的函数*/\n  private _schedulerFns: Set<any>;\n  private _isAsync: boolean;\n  get schedulerFns() { return this._schedulerFns; }\n\n  constructor(isAsync = false) {\n    super(isAsync);\n    this._isAsync = isAsync;\n  }\n\n  forceCallback(value: T, once = false) {\n    if (this.schedulerFns && this.schedulerFns.size) {\n      this.schedulerFns.forEach(fn => {\n        fn (value);\n      });\n      if (once) {\n        this.cleanCallbackFn();\n      }\n    }\n  }\n  cleanCallbackFn() {\n    this._schedulerFns = undefined;\n  }\n\n  emit(value?: T) { super.emit(value); }\n\n  subscribe(generatorOrNext?: any, error?: any, complete?: any): any {\n    let schedulerFn: (t: any) => any;\n\n    if (generatorOrNext && typeof generatorOrNext === 'object') {\n      schedulerFn = this._isAsync ? (value: any) => {\n        setTimeout(() => generatorOrNext.next(value));\n      } : (value: any) => { generatorOrNext.next(value); };\n    } else {\n      schedulerFn = this._isAsync ? (value: any) => { setTimeout(() => generatorOrNext(value)); } :\n        (value: any) => { generatorOrNext(value); };\n    }\n    if (!this._schedulerFns) {\n      this._schedulerFns = new Set<any>();\n    }\n    this._schedulerFns.add(schedulerFn);\n\n    return super.subscribe(generatorOrNext, error, complete);\n  }\n\n}\n","import {  ChangeDetectorRef, Component, ElementRef, TemplateRef } from '@angular/core';\n\n@Component({\n  selector: 'd-drag-preview',\n  templateUrl: './drag-preview.component.html',\n  preserveWhitespaces: false,\n})\n\nexport class DragPreviewComponent {\n  element;\n  data;\n  draggedEl;\n  dragData;\n  batchDragData;\n  dragSyncDOMElements;\n  templateRef: TemplateRef<any>;\n  constructor(private el: ElementRef, private cdr: ChangeDetectorRef) {\n    this.element =  el.nativeElement;\n  }\n  public updateTemplate() {\n    this.cdr.detectChanges();\n  }\n\n}\n","<ng-template\n  [ngTemplateOutlet]=\"templateRef\"\n  [ngTemplateOutletContext]=\"{\n    data: data,\n    draggedEl: draggedEl,\n    dragData: dragData,\n    batchDragData: batchDragData,\n    dragSyncDOMElements: dragSyncDOMElements\n  }\"\n>\n</ng-template>\n","import { ComponentFactoryResolver, Directive, Input, TemplateRef } from '@angular/core';\nimport { OverlayContainerRef } from 'ng-devui/overlay-container';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { DragPreviewComponent } from './drag-preview.component';\n\n@Directive({\n  selector: '[dDraggable][dDragPreview]',\n  exportAs: 'dDragPreview'\n})\n\nexport class DragPreviewDirective {\n  @Input('dDragPreview') dragPreviewTemplate: TemplateRef<any>;\n  @Input() dragPreviewData;\n  @Input() dragPreviewOptions = {\n    skipBatchPreview: false\n  };\n  public previewRef;\n  constructor(private componentFactoryResolver: ComponentFactoryResolver,\n              private overlayContainerRef: OverlayContainerRef, private dragDropService: DragDropService) {\n  }\n\n  public createPreview() {\n    const finalComponentFactoryResolver = this.componentFactoryResolver;\n\n    const previewRef = this.overlayContainerRef.createComponent(\n      finalComponentFactoryResolver.resolveComponentFactory(DragPreviewComponent)\n    );\n    this.previewRef = previewRef;\n    this.updateData();\n    return this.previewRef;\n  }\n\n  public updateData() {\n    Object.assign(this.previewRef.instance, {\n      templateRef: this.dragPreviewTemplate,\n      data: this.dragPreviewData,\n      draggedEl: this.dragDropService.draggedEl,\n      dragData: this.dragDropService.dragData,\n      batchDragData:  this.dragDropService.batchDragData && this.dragDropService.getBatchDragData(),\n      dragSyncDOMElements: this.dragDropService.dragSyncGroupDirectives && this.getDragSyncDOMElements()\n    });\n    this.previewRef.instance.updateTemplate();\n  }\n\n  public destroyPreview() {\n    if (this.previewRef) {\n      this.previewRef.hostView.destroy();\n    }\n  }\n\n  public getPreviewElement() {\n    return this.previewRef && this.previewRef.instance.element;\n  }\n  private getDragSyncDOMElements() {\n    return this.dragDropService.dragSyncGroupDirectives.map(dir => dir.el.nativeElement);\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit, Directive, ElementRef, EventEmitter,\n  HostBinding, Inject, Input, NgZone, OnDestroy, OnInit, Optional, Output, Renderer2, Self\n} from '@angular/core';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { Utils } from '../shared/utils';\nimport { PreserveNextEventEmitter } from './../shared/preserve-next-event-emitter';\nimport { DragPreviewDirective } from './drag-preview.directive';\n\n@Directive({\n  selector: '[dDraggable]'\n})\n/**\n * Makes an element draggable by adding the draggable html attribute\n */\nexport class DraggableDirective implements OnInit, AfterViewInit, OnDestroy {\n  @HostBinding('draggable') draggable = true;\n  /**\n   * The data that will be available to the droppable directive on its `dropEvent()` event.\n   */\n  @Input() dragData;\n\n  /**\n   * The selector that defines the drag Handle. If defined drag will only be allowed if dragged from the selector element.\n   */\n  @HostBinding('attr.data-drag-handle-selector') // host-binding attribute for communicate with touch support js\n  @Input() dragHandle: string;\n\n  /**\n   * Currently not used\n   */\n  @Input() dragEffect = 'move';\n\n  /**\n   * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.\n   */\n  @Input() dragScope: string | Array<string> = 'default';\n\n  @Input() dragHandleClass = 'drag-handle';\n  /**\n   * CSS class applied on the draggable that is applied when the item is being dragged.\n   */\n  @Input() dragOverClass: string;\n\n  /**\n   * Event fired when Drag is started\n   */\n  @Output() dragStartEvent: EventEmitter<any> = new EventEmitter<any>();\n\n  /**\n   * @deprecated\n   * Event fired while the element is being dragged\n   * 为了性能优化，该函数废弃，请用(drag)自行监听， 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能\n   */\n  @Output() dragEvent: PreserveNextEventEmitter<any> = new PreserveNextEventEmitter<any>();\n\n  /**\n   * Event fired when dragged ends\n   */\n  @Output() dragEndEvent: EventEmitter<any> = new EventEmitter<any>();\n\n  /**\n   * Keeps track of mouse over element that is used to determine drag handles\n   */\n  private mouseOverElement: any;\n  @Output() dropEndEvent: PreserveNextEventEmitter<any> = new PreserveNextEventEmitter<any>();\n  @Input()\n  public get disabled(): boolean {\n    return this._disabled;\n  }\n\n  public set disabled(value: boolean) {\n    this._disabled = value;\n    this.draggable = !this._disabled;\n  }\n  private _disabled: boolean;\n\n  @Input() enableDragFollow = false; // 默认false使用浏览器H5API拖拽, 否则使用原dom定位偏移\n  @Input() dragFollowOptions: {\n    appendToBody?: boolean;\n  };\n  @Input() originPlaceholder: {\n    show?: boolean;\n    tag?: string;\n    style?: {[cssProperties: string]: string};\n    text?: string;\n    removeDelay?: number; // 单位: ms\n  };\n  @Input() dragIdentity: any; // 用于虚拟滚动的恢复\n\n  @Input() dragItemParentName = ''; // 当前拖拽元素的类名或元素名称（类名需要加.）,主要用于子节点的截取操作\n  @Input() dragItemChildrenName = ''; // 当前拖拽元素的子节点类名或元素名称（类名需要加.）\n\n  dragsSub: Subscription = new Subscription();\n  destroyDragEndSub: Subscription = new Subscription();\n  isDestroyed: boolean;\n  private delayRemoveOriginPlaceholderTimer;\n  public batchDraggable;\n  private dragOriginPlaceholder;\n  private dragOriginPlaceholderNextSibling;\n  public dragElShowHideEvent = new Subject<boolean>();\n  public beforeDragStartEvent = new Subject<boolean>();\n  document: Document;\n\n  constructor(public el: ElementRef, private renderer: Renderer2, private dragDropService: DragDropService, private ngZone: NgZone,\n              @Optional() @Self() public dragPreviewDirective: DragPreviewDirective, @Inject(DOCUMENT) private doc: any\n  ) {\n    this.document = this.doc;\n  }\n\n  ngOnInit() {\n    this.ngZone.runOutsideAngular(() => {\n      this.dragsSub.add(fromEvent(this.el.nativeElement, 'mouseover').subscribe(event => this.mouseover(event)));\n      this.dragsSub.add(fromEvent(this.el.nativeElement, 'dragstart').subscribe(event => this.dragStart(event)));\n      this.dragsSub.add(fromEvent(this.el.nativeElement, 'dragend').subscribe(event => this.dragEnd(event)));\n    });\n  }\n\n  dropSubscription() {\n    const dragDropSub = this.dragDropService.newSubscription();\n    dragDropSub.add(\n      this.dragDropService.dropEvent.subscribe((event) => {\n        this.mouseOverElement = undefined;\n        this.renderer.removeClass(this.el.nativeElement, this.dragOverClass);\n        this.dropEndEvent.emit(event);\n        // 兼容虚拟滚动后被销毁\n        if (this.isDestroyed) {\n          if (this.dropEndEvent.schedulerFns && this.dropEndEvent.schedulerFns.size > 0) {\n            this.dropEndEvent.forceCallback(event, true);\n          }\n        }\n        if (this.dragDropService.dragOriginPlaceholder) {\n          if (this.originPlaceholder && this.originPlaceholder.removeDelay > 0\n            && !this.dragDropService.dropOnOrigin) { // 非drop到自己的情况\n            this.delayRemoveOriginPlaceholder();\n          } else {\n            this.removeOriginPlaceholder();\n          }\n          this.dragDropService.draggedElIdentity = undefined;\n        }\n        this.dragDropService.subscription.unsubscribe();\n      }));\n    dragDropSub.add(\n      this.dragDropService.dragElShowHideEvent.subscribe(this.dragElShowHideEvent)\n    );\n  }\n\n  ngAfterViewInit() {\n    this.applyDragHandleClass();\n    if (this.dragIdentity) {\n      if (this.dragDropService.draggedEl && this.dragIdentity === this.dragDropService.draggedElIdentity) {\n        if (this.originPlaceholder && this.originPlaceholder.show !== false) {\n          this.insertOriginPlaceholder();\n        }\n        this.dragDropService.draggedEl = this.el.nativeElement;\n        this.el.nativeElement.style.display = 'none'; // recovery don't need to emit event\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    // 兼容虚拟滚动后被销毁\n    this.isDestroyed = true;\n    if (this.dragDropService.draggedEl === this.el.nativeElement) {\n      this.destroyDragEndSub = new Subscription();\n      this.destroyDragEndSub.add(fromEvent(this.el.nativeElement, 'dragend').subscribe(event => {\n        this.dragEnd(event);\n        if (this.dropEndEvent.schedulerFns && this.dropEndEvent.schedulerFns.size > 0) {\n          this.dropEndEvent.forceCallback(event, true);\n        }\n        this.destroyDragEndSub.unsubscribe();\n        this.destroyDragEndSub = undefined;\n      }));\n      if (this.originPlaceholder && this.originPlaceholder.show !== false\n        && this.dragDropService.dragOriginPlaceholder && this.dragDropService.draggedElIdentity) {\n        // 如果有originPlaceholder 则销毁\n        this.removeOriginPlaceholder();\n      }\n    }\n    this.dragsSub.unsubscribe();\n  }\n\n  dragStart(e) {\n    if (this.allowDrag(e)) {\n      this.renderer.addClass(this.el.nativeElement, this.dragOverClass);\n      this.dragDropService.dragData = this.dragData;\n      this.dragDropService.scope = this.dragScope;\n      this.dragDropService.draggedEl = this.el.nativeElement;\n      this.dragDropService.draggedElIdentity = this.dragIdentity;\n      this.dragDropService.dragFollow = this.enableDragFollow;\n      this.dragDropService.dragFollowOptions = this.dragFollowOptions;\n      this.dragDropService.dragItemParentName = this.dragItemParentName;\n      this.dragDropService.dragItemChildrenName = this.dragItemChildrenName;\n      this.beforeDragStartEvent.next(true);\n      if (this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate) {\n        this.dragDropService.dragFollow = true;\n        this.dragDropService.dragPreviewDirective = this.dragPreviewDirective;\n      }\n      if (this.batchDraggable) {\n        if (this.batchDraggable.dragData) {\n          // 有dragData证明被加入到了group里\n          if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {\n            this.dragDropService.batchDragging = true;\n            this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle;\n          }\n        } else if (this.batchDraggable.batchDragLastOneAutoActiveEventKeys) {\n          const batchActiveAble = this.batchDraggable.batchDragLastOneAutoActiveEventKeys\n            .map(key => e[key])\n            .some(eventKey => eventKey === true);\n          if (batchActiveAble) {\n            if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 0) {\n              this.batchDraggable.active();\n              if (!this.batchDraggable.dragData) {\n                // 如果用户没做任何处理把项目加到组里则加到组里\n                this.batchDraggable.addToBatchGroup();\n              }\n              if (this.dragDropService.batchDragData.some(dragData => dragData.draggable === this)) {\n                this.dragDropService.batchDragging = true;\n                this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle;\n              }\n            }\n          }\n        }\n      }\n      const targetOffset = this.el.nativeElement.getBoundingClientRect();\n      if (this.dragDropService.dragFollow) {\n        const mousePositionXY = this.mousePosition(e);\n        // 用于出现transform的场景position:fixed相对位置变更\n        const transformOffset = this.checkAndGetViewPointChange(this.el.nativeElement);\n        this.dragDropService.dragOffset = {\n          left: targetOffset.left,\n          top: targetOffset.top,\n          offsetLeft: mousePositionXY.x - targetOffset.left + transformOffset.offsetX,\n          offsetTop: mousePositionXY.y - targetOffset.top + transformOffset.offsetY,\n          width: targetOffset.width,\n          height: targetOffset.height\n        };\n        this.dragDropService.enableDraggedCloneNodeFollowMouse();\n      } else {\n        this.dragDropService.dragOffset = {\n          left: targetOffset.left,\n          top: targetOffset.top,\n          offsetLeft: null,\n          offsetTop: null,\n          width: targetOffset.width,\n          height: targetOffset.height\n        };\n      }\n      if (this.originPlaceholder && this.originPlaceholder.show !== false) {\n        this.insertOriginPlaceholder(false);\n      }\n      if (this.dragDropService.batchDragging\n        && this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {\n        this.dragDropService.batchDragData.map(dragData => dragData.draggable)\n          .filter(draggable => draggable && draggable !== this)\n          .forEach((draggable) => {\n            if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {\n              draggable.insertOriginPlaceholder(true, false);\n              draggable.el.nativeElement.style.display = 'none';\n            } else {\n              setTimeout(() => {draggable.el.nativeElement.style.display = 'none'; });\n            }\n          });\n      }\n      // Firefox requires setData() to be called otherwise the drag does not work.\n      if (e.dataTransfer !== null) {\n        e.dataTransfer.setData('text', '');\n      }\n      e.dataTransfer.effectAllowed = this.dragEffect;\n      this.dropSubscription();\n      if (this.dragDropService.dragFollow) {\n        if (typeof DataTransfer.prototype.setDragImage === 'function') {\n          e.dataTransfer.setDragImage(this.dragDropService.dragEmptyImage, 0 , 0);\n        } else {\n          e.srcElement.style.display = 'none';\n          this.dragDropService.dragElShowHideEvent.next(false);\n        }\n      }\n      e.stopPropagation();\n      this.dragStartEvent.emit(e);\n      this.dragDropService.dragStartEvent.next(e);\n    } else {\n      e.preventDefault();\n    }\n  }\n\n  dragEnd(e) {\n    this.renderer.removeClass(this.el.nativeElement, this.dragOverClass);\n    this.dragDropService.dragEndEvent.next(e);\n    this.mouseOverElement = undefined;\n    if (this.dragDropService.draggedEl) {\n      // 当dom被清除的的时候不会触发dragend，所以清理工作部分交给了drop，但是内部排序的时候dom不会被清理，dragend防止和drop重复操作清理动作\n      if (this.dragDropService.dragFollow) {\n        this.dragDropService.disableDraggedCloneNodeFollowMouse();\n      }\n      if (this.dragDropService.dragOriginPlaceholder) {\n        this.removeOriginPlaceholder();\n      }\n      if (this.dragDropService.batchDragging && this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {\n        this.dragDropService.batchDragData.map(dragData => dragData.draggable)\n          .filter(draggable => draggable && draggable !== this)\n          .forEach((draggable) => {\n            if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {\n              draggable.el.nativeElement.style.display = '';\n              draggable.removeOriginPlaceholder();\n            } else {\n              draggable.el.nativeElement.style.display = '';\n            }\n          });\n      }\n      if (this.batchDraggable && !this.batchDraggable.batchDragActive) {\n        this.batchDraggable.removeFromBatchGroup();\n        this.dragDropService.batchDragging = false;\n        this.dragDropService.batchDragStyle = undefined;\n      }\n      if (this.dragDropService.subscription) {\n        this.dragDropService.subscription.unsubscribe();\n      }\n      this.dragDropService.dragData = undefined;\n      this.dragDropService.scope = undefined;\n      this.dragDropService.draggedEl = undefined;\n      this.dragDropService.dragFollow = undefined;\n      this.dragDropService.dragFollowOptions = undefined;\n      this.dragDropService.dragOffset = undefined;\n      this.dragDropService.draggedElIdentity = undefined;\n      this.dragDropService.dragPreviewDirective = undefined;\n    }\n    e.stopPropagation();\n    e.preventDefault();\n    this.dragEndEvent.emit(e);\n  }\n\n  mouseover(e) {\n    this.mouseOverElement = e.target;\n  }\n\n  private allowDrag(e) {\n    if (!this.draggable) {\n      return false;\n    }\n    if (this.batchDraggable && !this.batchDraggable.allowAddToBatchGroup()) {  // 批量拖拽判断group是否相同\n      return false;\n    }\n    if (this.dragHandle) {\n      if (e && e.fromTouch) {return true; } // from touchstart dispatch event\n      if (!this.mouseOverElement) { return false; }\n      return Utils.matches(this.mouseOverElement, this.dragHandle);\n    } else {\n      return true;\n    }\n  }\n\n  private applyDragHandleClass() {\n    const dragElement = this.getDragHandleElement();\n    if (!dragElement) {\n      return;\n    }\n    if (this.draggable) {\n      Utils.addClass(dragElement, this.dragHandleClass);\n    } else {\n      Utils.removeClass(this.el, this.dragHandleClass);\n    }\n  }\n\n  private getDragHandleElement() {\n    let dragElement = this.el;\n    if (this.dragHandle) {\n      dragElement = this.el.nativeElement.querySelector(this.dragHandle);\n    }\n    return dragElement;\n  }\n\n  private mousePosition(event) {\n    return {\n      x: event.clientX,\n      y: event.clientY\n    };\n  }\n  public insertOriginPlaceholder = (directShow = true, updateService = true) => {\n    if (this.delayRemoveOriginPlaceholderTimer) {\n      clearTimeout(this.delayRemoveOriginPlaceholderTimer);\n      this.delayRemoveOriginPlaceholderTimer = undefined;\n    }\n\n    const node = this.document.createElement(this.originPlaceholder.tag || 'div');\n    const rect =  this.el.nativeElement.getBoundingClientRect();\n    if (directShow) {\n      node.style.display = 'block';\n    } else {\n      node.style.display = 'none';\n    }\n\n    node.style.width = rect.width + 'px';\n    node.style.height = rect.height + 'px';\n    node.classList.add('drag-origin-placeholder');\n    if (this.originPlaceholder.text) {\n      node.innerText = this.originPlaceholder.text;\n    }\n    if (this.originPlaceholder.style) {\n      Utils.addElStyles(node, this.originPlaceholder.style);\n    }\n    if (updateService) {\n      this.dragDropService.dragOriginPlaceholder = node;\n      this.dragDropService.dragOriginPlaceholderNextSibling = this.el.nativeElement.nextSibling;\n    } else {\n      node.classList.add('side-drag-origin-placeholder');\n      const originCloneNode = this.el.nativeElement.cloneNode(true);\n      originCloneNode.style.margin = 0;\n      originCloneNode.style.pointerEvents = 'none';\n      originCloneNode.style.opacity = '0.3';\n      node.appendChild(originCloneNode);\n    }\n    this.dragOriginPlaceholder = node;\n    this.dragOriginPlaceholderNextSibling = this.el.nativeElement.nextSibling;\n    this.el.nativeElement.parentElement.insertBefore(node, this.el.nativeElement.nextSibling);\n  };\n\n  public removeOriginPlaceholder = (updateService = true) => {\n    if (this.dragOriginPlaceholder) {\n      this.dragOriginPlaceholder.parentElement.removeChild(this.dragOriginPlaceholder);\n    }\n    if (updateService) {\n      this.dragDropService.dragOriginPlaceholder = undefined;\n      this.dragDropService.dragOriginPlaceholderNextSibling = undefined;\n    }\n    this.dragOriginPlaceholder = undefined;\n    this.dragOriginPlaceholderNextSibling = undefined;\n  };\n  public delayRemoveOriginPlaceholder = (updateService = true) => {\n    const timeout = this.originPlaceholder.removeDelay;\n    const delayOriginPlaceholder = this.dragOriginPlaceholder;\n    const dragOriginPlaceholderNextSibling = this.findNextSibling(this.dragOriginPlaceholderNextSibling);\n\n    // 需要临时移动位置，保证被ngFor刷新之后位置是正确的\n    // ngFor刷新的原理是有变化的部分都刷新，夹在变化部分中间的内容将被刷到变化部分之后的位置，所以需要恢复位置\n    // setTimeout是等ngFor的View刷新, 后续需要订阅sortContainer的view的更新才需要重新恢复位置\n    if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) {\n      delayOriginPlaceholder.parentElement.insertBefore(\n        delayOriginPlaceholder,\n        dragOriginPlaceholderNextSibling\n      );\n    }\n    setTimeout(() => {\n      if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) {\n        delayOriginPlaceholder.parentElement.insertBefore(\n          delayOriginPlaceholder,\n          dragOriginPlaceholderNextSibling\n        );\n      }\n      delayOriginPlaceholder.classList.add('delay-deletion');\n      this.delayRemoveOriginPlaceholderTimer = setTimeout(() => {\n        delayOriginPlaceholder.parentElement.removeChild(delayOriginPlaceholder);\n        if (this.document.body.contains(this.el.nativeElement)) {\n          this.el.nativeElement.style.display = '';\n          this.dragDropService.dragElShowHideEvent.next(false);\n        }\n      }, timeout);\n      if (updateService) {\n        this.dragDropService.dragOriginPlaceholder = undefined;\n        this.dragDropService.dragOriginPlaceholderNextSibling = undefined;\n      }\n      this.dragOriginPlaceholder = undefined;\n      this.dragOriginPlaceholderNextSibling = undefined;\n    });\n  };\n  findNextSibling(currentNextSibling) {\n    if (!this.dragDropService.batchDragData) {\n      return currentNextSibling;\n    } else {\n      if (this.dragDropService.batchDragData\n        .map(dragData => dragData.draggable && dragData.draggable.el.nativeElement)\n        .indexOf(currentNextSibling) > -1) {\n        currentNextSibling = currentNextSibling.nextSibling;\n      }\n      return currentNextSibling;\n    }\n  }\n\n  private checkAndGetViewPointChange(element: HTMLElement) {\n    if (!element.parentNode) { return null; }\n    // 模拟一个元素测预测位置和最终位置是否符合，如果不符合则是有transform等造成的偏移\n    const elementPosition = element.getBoundingClientRect();\n    const testEl = this.document.createElement('div');\n    Utils.addElStyles(testEl, {\n      opacity: '0',\n      position: 'fixed',\n      top: elementPosition.top + 'px',\n      left: elementPosition.left + 'px',\n      width: '1px',\n      height: '1px',\n      zIndex: '-999999',\n    });\n    element.parentNode.appendChild(testEl);\n    const testElPosition = testEl.getBoundingClientRect();\n    element.parentNode.removeChild(testEl);\n    return {\n      offsetX: testElPosition.left - elementPosition.left,\n      offsetY: testElPosition.top - elementPosition.top\n    };\n  }\n}\n","import { AfterViewInit, Directive, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Self, SimpleChanges } from '@angular/core';\r\nimport { DragDropService } from '../services/drag-drop.service';\r\nimport { DraggableDirective } from './draggable.directive';\r\nexport type BatchDragStyle = 'badge' | 'stack' | string;\r\n\r\n@Directive({\r\n  selector: '[dDraggable][batchDrag]',\r\n  exportAs: 'dBatchDraggable',\r\n})\r\nexport class BatchDraggableDirective implements OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n  @Input() batchDragGroup = 'default';\r\n  @Input() batchDragActive = false;\r\n  @Input() batchDragLastOneAutoActiveEventKeys = ['ctrlKey'];\r\n  @Input() batchDragStyle: Array<BatchDragStyle> = ['badge', 'stack'];\r\n  @Output() batchDragActiveEvent = new EventEmitter<any>();\r\n  dragData;\r\n  needToRestore = false;\r\n\r\n  constructor(@Self() private draggable: DraggableDirective, private dragDropService: DragDropService) {\r\n    this.draggable.batchDraggable = this;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.initDragDataByIdentity();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.draggable.batchDraggable = undefined;\r\n    if (this.dragData) {\r\n      if (this.dragData.draggable === this.draggable) {\r\n        this.dragData.draggable = undefined;\r\n        if (!this.dragData.identity) {\r\n          this.removeFromBatchGroup();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.batchDragActive) {\r\n      if (!this.initDragDataByIdentity()) {\r\n        if (this.batchDragActive) {\r\n          if (!this.dragData && this.allowAddToBatchGroup()) {\r\n            this.addToBatchGroup();\r\n          }\r\n        } else {\r\n          this.removeFromBatchGroup();\r\n        }\r\n      }\r\n    }\r\n  }\r\n  ngAfterViewInit() {\r\n    if (this.needToRestore) {\r\n      this.restoreDragDataViewAfterViewInit();\r\n      this.needToRestore = false;\r\n    }\r\n  }\r\n  initDragDataByIdentity() {\r\n    const dragData = this.findInBatchDragDataByIdentities();\r\n    if (dragData) {\r\n      if (this.batchDragActive) {\r\n        if (!this.dragData) {\r\n          this.addToBatchGroup(dragData);\r\n          this.registerRestoreDragDataViewAfterViewInitWhiteDragging();\r\n        }\r\n      } else {\r\n        this.removeFromBatchGroup(dragData);\r\n      }\r\n    }\r\n    return dragData;\r\n  }\r\n\r\n  registerRestoreDragDataViewAfterViewInitWhiteDragging() {\r\n    if (\r\n      this.dragDropService.draggedEl &&\r\n      this.dragDropService.draggedElIdentity &&\r\n      this.dragDropService.draggedEl !== this.draggable.el.nativeElement\r\n    ) {\r\n      this.needToRestore = true;\r\n    }\r\n  }\r\n  restoreDragDataViewAfterViewInit() {\r\n    const draggable = this.draggable;\r\n    if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {\r\n      draggable.insertOriginPlaceholder(true, false);\r\n    }\r\n    draggable.el.nativeElement.style.display = 'none';\r\n  }\r\n\r\n  allowAddToBatchGroup() {\r\n    if (!this.dragDropService.batchDragGroup) {\r\n      return true;\r\n    } else {\r\n      return this.batchDragGroup === this.dragDropService.batchDragGroup;\r\n    }\r\n  }\r\n  addToBatchGroup(dragData?) {\r\n    this.dragDropService.batchDragGroup = this.dragDropService.batchDragGroup || this.batchDragGroup;\r\n    if (dragData) {\r\n      dragData.draggable = this.draggable;\r\n      dragData.dragData = this.draggable.dragData;\r\n      this.dragData = dragData;\r\n    } else {\r\n      this.dragData = this.dragData || {\r\n        identity: this.draggable.dragIdentity || undefined,\r\n        draggable: this.draggable,\r\n        dragData: this.draggable.dragData,\r\n      };\r\n      this.dragDropService.batchDragData = this.addToArrayIfNotExist(this.dragDropService.batchDragData, this.dragData);\r\n    }\r\n  }\r\n  removeFromBatchGroup(dragData?) {\r\n    this.deleteFromArrayIfExist(this.dragDropService.batchDragData, dragData || this.dragData);\r\n    this.dragData = undefined;\r\n    if (!(this.dragDropService.batchDragData && this.dragDropService.batchDragData.length)) {\r\n      this.dragDropService.batchDragGroup = undefined;\r\n    }\r\n  }\r\n\r\n  private addToArrayIfNotExist(array: any[], target: any) {\r\n    array = array || [];\r\n    if (array.indexOf(target) === -1) {\r\n      array.push(target);\r\n    }\r\n    return array;\r\n  }\r\n\r\n  private deleteFromArrayIfExist(array: any[], target: any) {\r\n    if (!array) {\r\n      return;\r\n    }\r\n    if (array.length > 0) {\r\n      const index = array.indexOf(target);\r\n      if (index > -1) {\r\n        array.splice(index, 1);\r\n      }\r\n    }\r\n    return array;\r\n  }\r\n\r\n  private findInBatchDragDataByIdentities() {\r\n    if (!this.draggable.dragIdentity) {\r\n      return null;\r\n    } else if (!this.dragDropService.batchDragData) {\r\n      return undefined;\r\n    } else {\r\n      return this.dragDropService.batchDragData.filter((dragData) => dragData.identity === this.draggable.dragIdentity).pop();\r\n    }\r\n  }\r\n\r\n  active() {\r\n    this.batchDragActiveEvent.emit({ el: this.draggable.el.nativeElement, data: this.draggable.dragData });\r\n  }\r\n\r\n  public updateDragData() {\r\n    // 选中状态才更新\r\n    if (!this.dragData) {\r\n      return;\r\n    }\r\n    // 需要维持内存地址不变\r\n    Object.assign(this.dragData, {\r\n      identity: this.draggable.dragIdentity || undefined,\r\n      draggable: this.draggable,\r\n      dragData: this.draggable.dragData,\r\n    });\r\n  }\r\n}\r\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { DragDropService } from '../services/drag-drop.service';\r\n\r\n@Component({\r\n  selector: 'd-drag-preview-clone-dom-ref',\r\n  template: '',\r\n  preserveWhitespaces: false,\r\n})\r\n\r\nexport class DragPreviewCloneDomRefComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n  @Input() domRef: HTMLElement;\r\n  @Input() copyStyle = true;\r\n  cloneNode;\r\n\r\n  constructor(private el: ElementRef, private cdr: ChangeDetectorRef, private dragDropService: DragDropService) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.domRef) {\r\n      if (this.cloneNode) {\r\n        this.destroyView();\r\n        this.createView();\r\n      } else {\r\n        this.createView();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    if (!this.cloneNode) {\r\n      this.createView();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.cloneNode) {\r\n      this.destroyView();\r\n    }\r\n\r\n  }\r\n\r\n  createView() {\r\n    if (this.domRef) {\r\n      this.cloneNode = this.domRef.cloneNode(true);\r\n      if (this.copyStyle) {\r\n        this.dragDropService.copyStyle(this.domRef, this.cloneNode);\r\n      }\r\n      this.el.nativeElement.appendChild(this.cloneNode);\r\n    }\r\n  }\r\n  destroyView() {\r\n    if (this.cloneNode) {\r\n      if (this.el.nativeElement.contains(this.cloneNode)) {\r\n        this.el.nativeElement.removeChild(this.cloneNode);\r\n      }\r\n      this.cloneNode = undefined;\r\n    }\r\n  }\r\n  public updateTemplate() {\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n}\r\n","import { Directive, Injectable, OnDestroy, OnInit, QueryList } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Injectable()\nexport class DescendantRegisterService<T> {\n  protected _result: Array<T> = [];\n  protected changeSubject: Subject<Array<T>> = new BehaviorSubject<Array<T>>([]);\n  public changes: Observable<Array<T>> = this.changeSubject.asObservable().pipe(\n    debounceTime(200)\n  );\n  public register(t: T) {\n    if (!t) {return; }\n    const index = this._result.indexOf(t);\n    if (index === -1) {\n      this._result.push(t);\n      this.changeSubject.next(this._result);\n    }\n  }\n  public unregister(t: T) {\n    if (!t) {return; }\n    const index = this._result.indexOf(t);\n    if (index > -1) {\n      this._result.splice(index, 1);\n      this.changeSubject.next(this._result);\n    }\n  }\n  public queryResult() {\n    return this._result.concat([]);\n  }\n}\n\n@Directive()\n/* eslint-disable-next-line @angular-eslint/directive-class-suffix */\nexport class DescendantChildren<T> implements OnInit, OnDestroy {\n  constructor (private drs: DescendantRegisterService<T>) {}\n  protected descendantItem: T;\n  ngOnInit() {\n    this.drs.register(this.descendantItem);\n  }\n  ngOnDestroy() {\n    this.drs.unregister(this.descendantItem);\n  }\n}\n\nexport class DescendantRoot<T> extends QueryList<T> {\n  protected sub: Subscription;\n  constructor(private drs: DescendantRegisterService<T>) {\n    super();\n  }\n  public on() {\n    if (this.sub) { return; }\n    this.reset(this.drs.queryResult());\n    this.sub = this.drs.changes.subscribe(result => {this.reset(result); });\n  }\n\n  public off() {\n    if (this.sub) {\n      this.sub.unsubscribe();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { DragSyncDirective } from '../directives/drag-sync.directive';\nimport { DropSortSyncDirective } from '../directives/drop-sort-sync.directive';\nimport { DescendantRegisterService } from './drag-drop-desc-reg.service';\n\n@Injectable()\nexport class DragSyncDescendantRegisterService extends DescendantRegisterService<DragSyncDirective> {}\n@Injectable()\nexport class DropSortSyncDescendantRegisterService extends DescendantRegisterService<DropSortSyncDirective> {}\n","import { Injectable, QueryList } from '@angular/core';\nimport { DragSyncDirective } from '../directives/drag-sync.directive';\nimport { DropSortSyncDirective } from '../directives/drop-sort-sync.directive';\n\n@Injectable()\nexport class DragDropSyncService {\n  dragSyncList: QueryList<DragSyncDirective>;\n\n  dropSortSyncList: QueryList<DropSortSyncDirective>;\n\n  public updateDragSyncList(list: QueryList<DragSyncDirective>) {\n    this.dragSyncList = list;\n  }\n  public getDragSyncByGroup(groupName: string) {\n    if (groupName === '') {\n      return [];\n    }\n    return this.dragSyncList ? this.dragSyncList.filter(dragSync => dragSync.dragSyncGroup === groupName) : [];\n  }\n\n  public updateDropSyncList(list: QueryList<DropSortSyncDirective>) {\n    this.dropSortSyncList = list;\n  }\n  public getDropSyncByGroup(groupName: string) {\n    if (groupName === '') {\n      return [];\n    }\n    return this.dropSortSyncList ? this.dropSortSyncList.filter(dropSync => dropSync.dropSyncGroup === groupName) : [];\n  }\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, OnInit, Optional, Self } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DescendantChildren } from '../services/drag-drop-desc-reg.service';\nimport { DragSyncDescendantRegisterService } from '../services/drag-drop-descendant-sync.service';\nimport { DragDropSyncService } from '../services/drag-drop-sync.service';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { DraggableDirective } from './draggable.directive';\n\n@Directive({\n  selector: '[dDragSync]',\n  exportAs: 'dDragSync'\n})\nexport class DragSyncDirective extends DescendantChildren<DragSyncDirective> implements OnInit, OnDestroy {\n  @Input('dDragSync') dragSyncGroup = '';\n  subscription: Subscription = new Subscription();\n  syncGroupDirectives: Array<DragSyncDirective>;\n\n  constructor(\n    public el: ElementRef,\n    @Optional() @Self() private draggable: DraggableDirective,\n    private dragDropSyncService: DragDropSyncService,\n    private dragDropService: DragDropService,\n    private dragSyncDrs: DragSyncDescendantRegisterService,\n  ) {\n    super(dragSyncDrs);\n    this.descendantItem = this;\n  }\n\n  ngOnInit() {\n    if (this.draggable) {\n      this.subscription.add(this.draggable.dragElShowHideEvent.subscribe(this.subDragElEvent));\n      this.subscription.add(this.draggable.beforeDragStartEvent.subscribe(() => {\n        this.syncGroupDirectives = this.dragDropSyncService.getDragSyncByGroup(this.dragSyncGroup).filter(directive => directive !== this);\n        this.dragDropService.dragSyncGroupDirectives = this.syncGroupDirectives;\n      }));\n      this.subscription.add(this.draggable.dropEndEvent.subscribe(() => {\n        this.dragDropService.dragSyncGroupDirectives = undefined;\n        this.syncGroupDirectives = undefined;\n      }));\n    }\n    super.ngOnInit();\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n    super.ngOnDestroy();\n  }\n\n  subDragElEvent = (bool: boolean) => {\n    this.syncGroupDirectives.forEach(dir => this.renderDisplay(dir.el.nativeElement, bool));\n  };\n\n  renderDisplay(nativeEl: HTMLElement, bool: boolean) {\n    nativeEl.style.display = bool ? '' : 'none';\n  }\n\n}\n","import { AfterViewInit, Directive, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DescendantRoot } from '../services/drag-drop-desc-reg.service';\nimport { DragSyncDescendantRegisterService, DropSortSyncDescendantRegisterService } from '../services/drag-drop-descendant-sync.service';\nimport { DragDropSyncService } from '../services/drag-drop-sync.service';\nimport { DragSyncDirective } from './drag-sync.directive';\nimport { DropSortSyncDirective } from './drop-sort-sync.directive';\n\n@Directive({\n  selector: '[dDragDropSyncBox]',\n  exportAs: 'dDragDropSyncBox',\n  providers: [\n    DragDropSyncService,\n    DragSyncDescendantRegisterService,\n    DropSortSyncDescendantRegisterService,\n  ]\n})\nexport class DragDropSyncBoxDirective implements OnInit, AfterViewInit, OnDestroy {\n  sub = new Subscription();\n  // @ContentChildren(DragSyncDirective, {descendants: true})\n  dragSyncList: DescendantRoot<DragSyncDirective>;\n  // @ContentChildren(DropSortSyncDirective, {descendants: true})\n  dropSyncList: DescendantRoot<DropSortSyncDirective>;\n  constructor(private dragDropSyncService: DragDropSyncService,\n              private dragSyncDrs: DragSyncDescendantRegisterService,\n              private dropSortSyncDrs: DropSortSyncDescendantRegisterService) {\n  }\n\n  ngOnInit() {\n    this.dragSyncList = new DescendantRoot<DragSyncDirective>(this.dragSyncDrs);\n    this.dropSyncList = new DescendantRoot<DropSortSyncDirective>(this.dropSortSyncDrs);\n  }\n  ngAfterViewInit() {\n    this.dragSyncList.on();\n    this.dropSyncList.on();\n    this.dragDropSyncService.updateDragSyncList(this.dragSyncList);\n    this.dragDropSyncService.updateDropSyncList(this.dropSyncList);\n    this.sub.add(\n      this.dragSyncList.changes.subscribe(\n        list => this.dragDropSyncService.updateDragSyncList(list)\n      )\n    );\n    this.sub.add(\n      this.dropSyncList.changes.subscribe(\n        list => this.dragDropSyncService.updateDropSyncList(list)\n      )\n    );\n  }\n  ngOnDestroy() {\n    if (this.sub) {\n      this.sub.unsubscribe();\n    }\n    this.dragSyncList.off();\n    this.dropSyncList.off();\n  }\n\n}\n","export type DropScrollEdgeDistancePercent = number; // 单位 px / px\r\nexport type DropScrollSpeed = number; // 单位 px/ s\r\nexport type DropScrollSpeedFunction = (x: DropScrollEdgeDistancePercent) => DropScrollSpeed;\r\nexport type DropScrollDirection = 'h' | 'v'; // 'both' 暂不支持双向滚动\r\nexport enum DropScrollOrientation {\r\n  forward = 0, // 进， 右/下\r\n  backward = 1, // 退， 左/上\r\n}\r\nexport interface DropScrollAreaOffset {\r\n  left?: number;\r\n  right?: number;\r\n  top?: number;\r\n  bottom?: number;\r\n  widthOffset?: number;\r\n  heightOffset?: number;\r\n}\r\n\r\nexport type DropScrollTriggerEdge = 'left' | 'right' | 'top' | 'bottom';\r\n\r\nexport const DropScrollEnhanceTimingFunctionGroup = {\r\n  default: (x: number) => Math.ceil((1 - x) * 18) * 100,\r\n};\r\n","import { DOCUMENT } from '@angular/common';\nimport { AfterViewInit, Directive, ElementRef, Inject, Input, NgZone, OnDestroy } from '@angular/core';\nimport { fromEvent, merge as mergeStatic, Subscription } from 'rxjs';\nimport { tap, throttleTime } from 'rxjs/operators';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { Utils } from '../shared/utils';\nimport {\n  DropScrollAreaOffset, DropScrollDirection, DropScrollEnhanceTimingFunctionGroup, DropScrollOrientation,\n  DropScrollSpeed, DropScrollSpeedFunction, DropScrollTriggerEdge\n} from './drop-scroll-enhance.type';\n\n@Directive({\n  selector: '[dDropScrollEnhanced]',\n  exportAs: 'dDropScrollEnhanced'\n})\nexport class DropScrollEnhancedDirective implements AfterViewInit, OnDestroy {\n  @Input() minSpeed: DropScrollSpeed = 50;\n  @Input() maxSpeed: DropScrollSpeed = 1000;\n  @Input() responseEdgeWidth: string | ((total: number) => string)  = '100px';\n  @Input() speedFn: DropScrollSpeedFunction = DropScrollEnhanceTimingFunctionGroup.default;\n  @Input() direction: DropScrollDirection = 'v';\n  @Input() viewOffset: {\n    forward?: DropScrollAreaOffset; // 仅重要边和次要边有效\n    backward?: DropScrollAreaOffset;\n  };\n  @Input() dropScrollScope: string | Array<string>;\n  @Input() backSpaceDroppable = true;\n\n  private forwardScrollArea: HTMLElement;\n  private backwardScrollArea: HTMLElement;\n  private subscription: Subscription = new Subscription();\n  private forwardScrollFn: (event: DragEvent) => void;\n  private backwardScrollFn: (event: DragEvent) => void;\n  private lastScrollTime;\n  private animationFrameId: number;\n  document: Document;\n\n  constructor(private el: ElementRef, private zone: NgZone, private dragDropService: DragDropService,\n              @Inject(DOCUMENT) private doc: any) {\n    this.document = this.doc;\n  }\n\n  ngAfterViewInit() {\n    // 设置父元素\n    this.el.nativeElement.parentNode.style.position = 'relative';\n    this.el.nativeElement.parentNode.style.display = 'block';\n    // 创建后退前进区域和对应的滚动函数\n    this.forwardScrollArea = this.createScrollArea(this.direction, DropScrollOrientation.forward);\n    this.backwardScrollArea = this.createScrollArea(this.direction, DropScrollOrientation.backward);\n    this.forwardScrollFn = this.createScrollFn(this.direction, DropScrollOrientation.forward, this.speedFn);\n    this.backwardScrollFn = this.createScrollFn(this.direction, DropScrollOrientation.backward, this.speedFn);\n    this.zone.runOutsideAngular(() => {\n      // 拖拽到其上触发滚动\n      this.subscription.add(fromEvent<DragEvent>(this.forwardScrollArea, 'dragover')\n        .pipe(\n          tap(event => {event.preventDefault(); event.stopPropagation(); }),\n          throttleTime(100, undefined, {leading: true, trailing: false})\n        ).subscribe(event => this.forwardScrollFn(event)));\n      this.subscription.add(fromEvent<DragEvent>(this.backwardScrollArea, 'dragover')\n        .pipe(\n          tap(event => {event.preventDefault(); event.stopPropagation(); }),\n          throttleTime(100, undefined, {leading: true, trailing: false}))\n        .subscribe(event => this.backwardScrollFn(event)));\n      // 拖拽放置委托\n      this.subscription.add(\n        mergeStatic(\n          fromEvent<DragEvent>(this.forwardScrollArea, 'drop'),\n          fromEvent<DragEvent>(this.backwardScrollArea, 'drop')\n        ).subscribe(event => this.delegateDropEvent(event)));\n      // 拖拽离开清除参数\n      this.subscription.add(\n        mergeStatic(\n          fromEvent(this.forwardScrollArea, 'dragleave', {passive: true}),\n          fromEvent(this.backwardScrollArea, 'dragleave', {passive: true})\n        ).subscribe(event => this.cleanLastScrollTime())\n      );\n      // 滚动过程计算区域有效性，滚动条贴到边缘的时候无效，无效的时候设置鼠标事件可用为none\n      this.subscription.add(\n        fromEvent(this.el.nativeElement, 'scroll', {passive: true})\n          .pipe(throttleTime(300, undefined, {leading: true, trailing: true}))\n          .subscribe(event => {\n            this.toggleScrollToOneEnd(this.el.nativeElement, this.forwardScrollArea, this.direction, DropScrollOrientation.forward);\n            this.toggleScrollToOneEnd(this.el.nativeElement, this.backwardScrollArea, this.direction, DropScrollOrientation.backward);\n          })\n      );\n      // 窗口缩放的时候重绘有效性区域\n      this.subscription.add(\n        fromEvent(window, 'resize', {passive: true})\n          .pipe(throttleTime(300, undefined, {leading: true, trailing: true}))\n          .subscribe(event => this.resizeArea())\n      );\n      // dragstart的时候显示拖拽滚动边缘面板\n      this.subscription.add(\n        this.dragDropService.dragStartEvent.subscribe(() => {\n          if (!this.allowScroll()) {return; }\n          this.zone.runOutsideAngular(() => {\n            setTimeout(() => {\n              // 立马出现会打断边缘元素的拖拽\n              this.forwardScrollArea.style.display = 'block';\n              this.backwardScrollArea.style.display = 'block';\n            });\n          });\n        })\n      );\n      // dragEnd或drop的时候结束了拖拽，滚动区域影藏起来\n      this.subscription.add(\n        mergeStatic(this.dragDropService.dragEndEvent, this.dragDropService.dropEvent)\n          .subscribe(() => {\n            this.forwardScrollArea.style.display = 'none';\n            this.backwardScrollArea.style.display = 'none';\n            this.lastScrollTime = undefined;\n          })\n      );\n    });\n    setTimeout(() => {\n      this.resizeArea();\n    }, 0);\n  }\n\n  ngOnDestroy() {\n    this.subscription.unsubscribe();\n  }\n\n  createScrollFn(direction: DropScrollDirection, orientation: DropScrollOrientation,\n                 speedFn: DropScrollSpeedFunction) {\n    if (typeof window === 'undefined') {\n      return;\n    }\n    const scrollAttr = (direction === 'v') ? 'scrollTop' : 'scrollLeft';\n    const eventAttr = (direction === 'v') ? 'clientY' : 'clientX';\n    const scrollWidthAttr = (direction === 'v') ? 'scrollHeight' : 'scrollWidth';\n    const offsetWidthAttr = (direction === 'v') ? 'offsetHeight' : 'offsetWidth';\n    const clientWidthAttr = (direction === 'v') ? 'clientHeight' : 'clientWidth';\n    const rectWidthAttr = (direction === 'v') ? 'height' : 'width';\n    const compareTarget = (orientation === DropScrollOrientation.forward) ? this.forwardScrollArea : this.backwardScrollArea;\n    const targetAttr = this.getCriticalEdge(direction, orientation);\n    const scrollElement = this.el.nativeElement;\n\n    return (event: DragEvent) => {\n      const compareTargetRect = compareTarget.getBoundingClientRect();\n      const distance = event[eventAttr] - compareTargetRect[targetAttr];\n      let speed = speedFn(Math.abs(distance / (compareTargetRect[rectWidthAttr] || 1)));\n      if (speed < this.minSpeed) { speed = this.minSpeed; }\n      if (speed > this.maxSpeed) { speed = this.maxSpeed; }\n      if (distance < 0) { speed = - speed; }\n      if (this.animationFrameId) {\n        window.cancelAnimationFrame(this.animationFrameId);\n        this.animationFrameId = undefined;\n      }\n      this.animationFrameId = requestAnimationFrame(() => {\n        const time = new Date().getTime();\n        const moveDistance = Math.ceil(speed * (time - (this.lastScrollTime || time)) / 1000);\n        scrollElement[scrollAttr] -= moveDistance;\n        this.lastScrollTime = time;\n        // 判断是不是到尽头\n        if ((scrollElement[scrollAttr] === 0 && orientation === DropScrollOrientation.backward)\n        || ((scrollElement[scrollAttr]\n          + (scrollElement.getBoundingClientRect())[rectWidthAttr]\n          - scrollElement[offsetWidthAttr]\n          + scrollElement[clientWidthAttr]\n        ) === scrollElement[scrollWidthAttr]\n          && orientation === DropScrollOrientation.forward)\n        ) {\n          compareTarget.style.pointerEvents = 'none';\n          this.toggleActiveClass(compareTarget, false);\n        }\n        this.animationFrameId = undefined;\n      });\n      if (this.backSpaceDroppable) {\n        Utils.dispatchEventToUnderElement(event);\n      }\n    };\n  }\n  delegateDropEvent(event: DragEvent) {\n    if (this.backSpaceDroppable) {\n      const ev = Utils.dispatchEventToUnderElement(event);\n      if (ev.defaultPrevented) {\n        event.preventDefault();\n        event.stopPropagation();\n      }\n    }\n  }\n  getCriticalEdge(direction: DropScrollDirection, orientation: DropScrollOrientation): DropScrollTriggerEdge {\n    return (direction === 'v' && orientation === DropScrollOrientation.forward && 'bottom')\n    || (direction === 'v' && orientation === DropScrollOrientation.backward && 'top')\n    || (direction !== 'v' && orientation === DropScrollOrientation.forward && 'right')\n    || (direction !== 'v' && orientation === DropScrollOrientation.backward && 'left') || 'bottom';\n  }\n  getSecondEdge(direction: DropScrollDirection): DropScrollTriggerEdge {\n    return (direction === 'v' && 'left')\n    || (direction !== 'v' &&  'top') || 'left';\n  }\n\n  createScrollArea(direction: DropScrollDirection, orientation: DropScrollOrientation) {\n    const area = this.document.createElement('div');\n    area.className = `dropover-scroll-area dropover-scroll-area-${this.getCriticalEdge(direction, orientation)}`;\n    // 处理大小\n    area.classList.add('active');\n    this.setAreaSize(area, direction, orientation);\n    // 处理位置\n    area.style.position = 'absolute';\n    this.setAreaStyleLayout(area, direction, orientation);\n\n    // 默认不展示\n    area.style.display = 'none';\n    // 附着元素\n    this.el.nativeElement.parentNode.appendChild(area, this.el.nativeElement);\n    return area;\n  }\n\n  setAreaSize(area: HTMLElement, direction: DropScrollDirection, orientation: DropScrollOrientation) {\n    const rect = this.el.nativeElement.getBoundingClientRect();\n    const containerAttr = direction === 'v' ? 'height' : 'width';\n    const responseEdgeWidth = (typeof this.responseEdgeWidth === 'string')\n      ? this.responseEdgeWidth\n      : this.responseEdgeWidth(rect[containerAttr]);\n    const settingOffset = this.viewOffset\n      && (orientation === DropScrollOrientation.forward ? this.viewOffset.forward : this.viewOffset.backward);\n    let width = direction === 'v' ? (rect.width + 'px') : responseEdgeWidth;\n    let height =  direction === 'v' ? responseEdgeWidth : (rect.height + 'px');\n    if (settingOffset) {\n      if (settingOffset.widthOffset) {\n        width = 'calc(' + width + ' + ' + (settingOffset.widthOffset) + 'px)';\n      }\n      if (settingOffset.heightOffset) {\n        height = 'calc(' + height + ' + ' + (settingOffset.heightOffset) + 'px)';\n      }\n    }\n    area.style.width = width;\n    area.style.height = height;\n  }\n\n  setAreaStyleLayout (area: HTMLElement, direction: DropScrollDirection, orientation: DropScrollOrientation) {\n    const target = this.el.nativeElement;\n    const relatedTarget = this.el.nativeElement.parentNode;\n    const defaultOffset = {left: 0, right: 0, top: 0, bottom: 0};\n    const settingOffset = this.viewOffset\n      && (orientation === DropScrollOrientation.forward ? this.viewOffset.forward : this.viewOffset.backward)\n      || defaultOffset;\n\n    const criticalEdge = this.getCriticalEdge(direction, orientation);\n    const secondEdge = this.getSecondEdge(direction);\n    [criticalEdge, secondEdge].forEach(edge => {\n      area.style[edge] = this.getRelatedPosition(target, relatedTarget, edge, settingOffset[edge]);\n    });\n  }\n\n  getRelatedPosition(target, relatedTarget, edge: DropScrollTriggerEdge, offsetValue?: number) {\n    if (typeof window === 'undefined') {\n      return '0px';\n    }\n    const relatedComputedStyle = window.getComputedStyle(relatedTarget);\n    const relatedRect = relatedTarget.getBoundingClientRect();\n    const selfRect = target.getBoundingClientRect();\n    const helper = {\n      left: ['left', 'Left'],\n      right: ['right', 'Right'],\n      top: ['top', 'Top'],\n      bottom: ['bottom', 'Bottom'],\n    };\n    let factor = 1;\n    if (edge === 'right' || edge === 'bottom') { factor = -1; }\n    return (selfRect[helper[edge][0]] - relatedRect[helper[edge][0]]\n          + parseInt(relatedComputedStyle['border' +  helper[edge][1] + 'Width'], 10)) * factor\n          + (offsetValue || 0)\n          + 'px';\n  }\n\n  resizeArea() {\n    [{area: this.forwardScrollArea, orientation: DropScrollOrientation.forward},\n      {area: this.backwardScrollArea, orientation: DropScrollOrientation.backward}\n    ]\n      .forEach(item => {\n        this.setAreaSize(item.area, this.direction, item.orientation);\n        this.setAreaStyleLayout(item.area, this.direction, item.orientation);\n      });\n  }\n\n  toggleScrollToOneEnd(scrollElement: any, toggleElement: HTMLElement, direction: DropScrollDirection, orientation: DropScrollOrientation) {\n    const scrollAttr = (direction === 'v') ? 'scrollTop' : 'scrollLeft';\n    const scrollWidthAttr = (direction === 'v') ? 'scrollHeight' : 'scrollWidth';\n    const offsetWidthAttr = (direction === 'v') ? 'offsetHeight' : 'offsetWidth';\n    const clientWidthAttr = (direction === 'v') ? 'clientHeight' : 'clientWidth';\n    const rectWidthAttr = (direction === 'v') ? 'height' : 'width';\n    if ((scrollElement[scrollAttr] === 0 && orientation === DropScrollOrientation.backward) || (\n      Math.abs(\n        scrollElement[scrollAttr]\n        + (scrollElement.getBoundingClientRect())[rectWidthAttr]\n        - scrollElement[scrollWidthAttr]\n        - scrollElement[offsetWidthAttr]\n        + scrollElement[clientWidthAttr]\n      ) < 1\n      && orientation === DropScrollOrientation.forward\n    )) {\n      toggleElement.style.pointerEvents = 'none';\n      this.toggleActiveClass(toggleElement, false);\n    } else {\n      toggleElement.style.pointerEvents = 'auto';\n      this.toggleActiveClass(toggleElement, true);\n    }\n  }\n\n  cleanLastScrollTime() {\n    if (this.animationFrameId && typeof window !== 'undefined') {\n      window.cancelAnimationFrame(this.animationFrameId);\n      this.animationFrameId = undefined;\n    }\n    this.lastScrollTime = undefined;\n  }\n\n  toggleActiveClass(target, active) {\n    if (active) {\n      target.classList.remove('inactive');\n      target.classList.add('active');\n    } else {\n      target.classList.remove('active');\n      target.classList.add('inactive');\n    }\n  }\n\n  allowScroll(): boolean {\n    if (!this.dropScrollScope) { return true; }\n    let allowed = false;\n    if (typeof this.dropScrollScope === 'string') {\n      if (typeof this.dragDropService.scope === 'string') {\n        allowed = this.dragDropService.scope === this.dropScrollScope;\n      }\n      if (this.dragDropService.scope instanceof Array) {\n        allowed = this.dragDropService.scope.indexOf(this.dropScrollScope) > -1;\n      }\n    }\n    if (this.dropScrollScope instanceof Array) {\n      if (typeof this.dragDropService.scope === 'string') {\n        allowed = this.dropScrollScope.indexOf(this.dragDropService.scope) > -1;\n      }\n      if (this.dragDropService.scope instanceof Array) {\n        allowed = this.dropScrollScope.filter((item) => {\n          return this.dragDropService.scope.indexOf(item) !== -1;\n        }).length > 0;\n      }\n    }\n    return allowed;\n  }\n}\n","import { Directive,  Input,  OnInit } from '@angular/core';\nimport { DropScrollEnhancedDirective } from './drop-scroll-enhance.directive';\nimport { DropScrollDirection } from './drop-scroll-enhance.type';\n\n@Directive({\n  selector: '[dDropScrollEnhancedSide]',\n  exportAs: 'dDropScrollEnhancedSide'\n})\nexport class DropScrollEnhancedSideDirective extends DropScrollEnhancedDirective implements OnInit {\n  @Input('direction') sideDirection: DropScrollDirection = 'v';\n\n  direction: DropScrollDirection;\n\n  ngOnInit() {\n    this.direction = this.sideDirection === 'v' ? 'h' : 'v';\n  }\n}\n","import { Subject } from 'rxjs';\nexport class DropEvent {\n  nativeEvent: any;\n  dragData: any;\n  batchDragData: any;\n  dropSubject: Subject<any>;\n  dropIndex?: number;\n  dragFromIndex?: number;\n  dropOnItem?: boolean;\n  dropOnOrigin?: boolean;\n  constructor(event: any, data: any, dropSubject: Subject<any>, dropIndex?: number, dragFromIndex?: number, dropOnItem?: boolean,\n              dropOnOrigin?: boolean, batchDragData?: Array<any>) {\n    this.nativeEvent = event;\n    this.dragData = data;\n    this.dropSubject = dropSubject;\n    this.dropIndex = dropIndex;\n    this.dragFromIndex = dragFromIndex;\n    this.dropOnItem = dropOnItem;\n    this.dropOnOrigin = dropOnOrigin;\n    this.batchDragData = batchDragData;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2\n} from '@angular/core';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { DropEvent } from '../shared/drop-event.model';\nimport { Utils } from '../shared/utils';\nimport { DraggableDirective } from './draggable.directive';\nimport { DragPlaceholderInsertionEvent, DragPlaceholderInsertionIndexEvent } from './placeholder-insertion-event.type';\n\nexport type DropIndexFlag = 'beforeAll' | 'afterAll';\n@Directive({\n  selector: '[dDroppable]'\n})\nexport class DroppableDirective implements OnInit, AfterViewInit, OnDestroy {\n\n  /**\n     *  Event fired when Drag dragged element enters a valid drop target.\n     */\n  @Output() dragEnterEvent: EventEmitter<any> = new EventEmitter<any>();\n\n  /**\n     * Event fired when an element is being dragged over a valid drop target\n     */\n  @Output() dragOverEvent: EventEmitter<any> = new EventEmitter<any>();\n\n  /**\n     * Event fired when a dragged element leaves a valid drop target.\n     */\n  @Output() dragLeaveEvent: EventEmitter<any> = new EventEmitter<any>();\n\n  /**\n     * Event fired when an element is dropped on a valid drop target.\n     */\n  @Output() dropEvent: EventEmitter<DropEvent> = new EventEmitter<DropEvent>(); // 注意使用了虚拟滚动后，DropEvent中的dragFromIndex无效\n\n  /**\n     * CSS class applied on the draggable that is applied when the item is being dragged.\n     */\n  @Input() dragOverClass: string;\n\n  /**\n     * Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.\n     */\n  @Input() dropScope: string | Array<string> = 'default';\n\n  @Input() placeholderTag = 'div';\n\n  @Input() placeholderStyle: any = {backgroundColor: ['#859bff', `var(--devui-brand-foil, #859bff)`], opacity: '.4'};\n\n  /**\n     * 设置placeholder的提示性文字，仅支持文本（安全起见）\n     */\n  @Input() placeholderText = '';\n\n  /**\n     * 用于允许拖动到元素上，方便树形结构的拖动可以成为元素的子节点\n     */\n  @Input() allowDropOnItem = false;\n\n  /**\n     * allowDropOnItem为true时，才有效，用于允许拖动到元素上后，被命中的元素增加样式\n     */\n  @Input() dragOverItemClass: string;\n\n  /**\n     *  用于修正有内嵌列表后，父项高度被撑大，此处height，width为父项自己的高度（用于纵向拖动），宽度（用于横向拖动）\n     * */\n  @Input() nestingTargetRect: {height?: number; width?: number};\n\n  /**\n    *  是否启用越过立即交换位置的算法, 不能与allowDropOnItem一起用，allowDropOnItem为true时，此规则无效\n    * */\n  @Input() switchWhileCrossEdge = false;\n\n  /**\n    *  sortable的情况下，拖动到可以drop但不在sortContainer里的时候默认drop的位置\n    * */\n  @Input() defaultDropPosition: 'closest' | 'before' | 'after' = 'closest';\n\n  /**\n    *  sortable的情况下，列表如果使用了virtual scroll等部分加载技术时候返回正确的dropIndex\n    * */\n  @Input() dropSortCountSelector: string;\n  @Input() dropSortVirtualScrollOption: {\n    totalLength?: number;\n    startIndex?: number;\n    // innerSortContainer?: HTMLElement | string; // 用于虚拟滚动列表结构发生内嵌\n  };\n  private dropFlag: DropIndexFlag;\n\n  private sortContainer: any;\n  private sortDirection: 'v' | 'h';\n  private sortDirectionZMode: boolean;\n  private placeholder: any;\n\n  // 用于修复dragleave多次触发\n  private dragCount = 0;\n\n  private dropIndex = undefined;\n\n  private dragStartSubscription: Subscription;\n  private dragEndSubscription: Subscription;\n  private dropEndSubscription: Subscription;\n\n  // 记录上一次悬停的元素，用于对比悬停的元素等是否发生变化\n  private overElement;\n\n  private dragPartEventSub: Subscription;\n  private allowDropCache: boolean;\n  private dragElIndex;\n  /* 协同拖拽需要 */\n  placeholderInsertionEvent = new Subject<DragPlaceholderInsertionEvent>();\n  placeholderRenderEvent = new Subject<any>();\n  document: Document;\n\n  constructor(protected el: ElementRef, private renderer: Renderer2, private dragDropService: DragDropService, private ngZone: NgZone,\n              @Inject(DOCUMENT) private doc: any) {\n    this.document = this.doc;\n  }\n\n  ngOnInit() {\n    this.placeholder = this.document.createElement(this.placeholderTag);\n    this.placeholder.className = 'drag-placeholder';\n    this.placeholder.innerText = this.placeholderText;\n    this.dragStartSubscription = this.dragDropService.dragStartEvent.subscribe(() => this.setPlaceholder());\n    if (this.dragDropService.draggedEl) {\n      this.setPlaceholder(); // 虚拟滚动生成元素过程中\n    }\n    this.dropEndSubscription = this.dragDropService.dropEvent.subscribe(() => {\n      if (this.dragDropService.draggedEl) {\n        if (!this.dragDropService.dragFollow) {\n          this.renderer.setStyle(this.dragDropService.draggedEl, 'display', '');\n          this.dragDropService.dragElShowHideEvent.next(true);\n        }\n      }\n      this.removePlaceholder();\n      this.overElement = undefined;\n      this.allowDropCache = undefined;\n      this.dragElIndex = undefined;\n      this.dropIndex = undefined;\n    });\n    this.dragEndSubscription = this.dragDropService.dragEndEvent.subscribe(() => {\n      if (this.dragDropService.draggedEl) {\n        if (!this.dragDropService.dragFollow) {\n          this.renderer.setStyle(this.dragDropService.draggedEl, 'display', '');\n          this.dragDropService.dragElShowHideEvent.next(true);\n        }\n      }\n      this.removePlaceholder();\n      this.dragCount = 0;\n      this.overElement = undefined;\n      this.allowDropCache = undefined;\n      this.dragElIndex = undefined;\n      this.dropIndex = undefined;\n    });\n    this.ngZone.runOutsideAngular (() => {\n      this.dragPartEventSub = new Subscription();\n      this.dragPartEventSub.add(fromEvent<DragEvent>(this.el.nativeElement, 'dragover')\n        .pipe(\n          filter(event => this.allowDrop(event)),\n          distinctUntilChanged((prev , current) => {\n            const bool = (prev.clientX === current.clientX && prev.clientY === current.clientY && prev.target === current.target);\n            if (bool) { current.preventDefault(); current.stopPropagation(); }\n            return bool;\n          })\n        )\n        .subscribe((event) => this.dragOver(event))\n      );\n      this.dragPartEventSub.add(\n        fromEvent(this.el.nativeElement, 'dragenter').subscribe((event) => this.dragEnter(event))\n      );\n      this.dragPartEventSub.add(\n        fromEvent(this.el.nativeElement, 'dragleave').subscribe((event) => this.dragLeave(event))\n      );\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.el.nativeElement.hasAttribute('d-sortable')) {\n      this.sortContainer = this.el.nativeElement;\n    } else {\n      this.sortContainer = this.el.nativeElement.querySelector('[d-sortable]');\n    }\n    this.sortDirection = this.sortContainer ? this.sortContainer.getAttribute('dsortable') || 'v' : 'v';\n    this.sortDirectionZMode = this.sortContainer ? (this.sortContainer.getAttribute('d-sortable-zmode') === 'true' || false) : false;\n  }\n\n  ngOnDestroy() {\n    this.dragStartSubscription.unsubscribe();\n    this.dragEndSubscription.unsubscribe();\n    this.dropEndSubscription.unsubscribe();\n    if (this.dragPartEventSub) {this.dragPartEventSub.unsubscribe(); }\n  }\n\n  dragEnter(e) {\n    this.dragCount++;\n    e.preventDefault(); // ie11 dragenter需要preventDefault否则dragover无效\n    this.dragEnterEvent.emit(e);\n  }\n\n  dragOver(e) {\n    if (this.allowDrop(e)) {\n      if (this.dragDropService.dropTargets.indexOf(this.el) === -1) {\n        this.dragDropService.dropTargets.forEach(el => {\n          const placeHolderEl = el.nativeElement.querySelector('.drag-placeholder');\n          if (placeHolderEl) {\n            placeHolderEl.parentElement.removeChild(placeHolderEl);\n          }\n          Utils.removeClass(el, this.dragOverClass);\n          this.removeDragoverItemClass(el.nativeElement);\n        });\n        this.dragDropService.dropTargets = [this.el];\n        this.overElement = undefined; // 否则会遇到上一次position= 这一次的然后不刷新和插入。\n      }\n      Utils.addClass(this.el, this.dragOverClass);\n      const hitPlaceholder\n          = this.dragDropService.dragOriginPlaceholder && this.dragDropService.dragOriginPlaceholder.contains(e.target);\n      if (this.sortContainer && (\n        (hitPlaceholder && this.overElement === undefined)\n          || !(e.target.contains(this.placeholder) || hitPlaceholder)\n          || (this.switchWhileCrossEdge && !this.placeholder.contains(e.target) && !hitPlaceholder) // 越边交换回折的情况需要重新计算\n          || (!this.sortContainer.contains(e.target) && this.defaultDropPosition === 'closest') // 就近模式需要重新计算\n      )) {\n        const overElement = this.findSortableEl(e);\n        if (!(this.overElement && overElement) || this.overElement.index !== overElement.index\n            || (this.allowDropOnItem && this.overElement.position !== overElement.position\n              && (this.overElement.position === 'inside' || overElement.position === 'inside'))\n        ) {\n          // overElement的参数有刷新的时候才进行插入等操作\n          this.overElement = overElement;\n\n          this.insertPlaceholder(overElement);\n\n          this.removeDragoverItemClass(this.sortContainer, overElement);\n          if (overElement.position === 'inside' && this.dragOverItemClass) {\n            Utils.addClass(overElement.el, this.dragOverItemClass);\n          }\n        } else {\n          this.overElement = overElement;\n        }\n      } else {\n        if (this.sortContainer && this.overElement && this.overElement.el) {\n          if (!this.overElement.el.contains(e.target)) {\n            this.overElement.realEl = e.target;\n          } else {\n            this.overElement.realEl = undefined;\n          }\n        }\n      }\n      if (this.dragDropService.draggedEl) {\n        if (!this.dragDropService.dragFollow) {\n          this.renderer.setStyle(this.dragDropService.draggedEl, 'display', 'none');\n          this.dragDropService.dragElShowHideEvent.next(false);\n          if (this.dragDropService.dragOriginPlaceholder) {\n            this.renderer.setStyle(this.dragDropService.dragOriginPlaceholder, 'display', 'block');\n          }\n        }\n      }\n      e.preventDefault();\n      e.stopPropagation();\n      this.dragOverEvent.emit(e);\n    }\n  }\n\n  dragLeave(e) {\n    // 用于修复包含子元素时，多次触发dragleave\n    this.dragCount--;\n\n    if (this.dragCount === 0) {\n      if (this.dragDropService.dropTargets.indexOf(this.el) !== -1) {\n        this.dragDropService.dropTargets = [];\n      }\n      Utils.removeClass(this.el, this.dragOverClass);\n      this.removePlaceholder();\n      this.removeDragoverItemClass(this.el.nativeElement);\n      this.overElement = undefined;\n      this.dragElIndex = undefined;\n      this.dropIndex = undefined;\n    }\n    e.preventDefault();\n    this.dragLeaveEvent.emit(e);\n  }\n\n  @HostListener('drop', ['$event'])\n  drop(e) {\n    if (!this.allowDrop(e)) { return; }\n    this.dragCount = 0;\n    Utils.removeClass(this.el, this.dragOverClass);\n    this.removeDragoverItemClass(this.sortContainer);\n    this.removePlaceholder();\n    e.preventDefault();\n    e.stopPropagation();\n    this.dragDropService.dropOnOrigin = this.isDragPlaceholderPosition(this.dropIndex);\n    const draggedElIdentity = this.dragDropService.draggedElIdentity;\n    this.dragDropService.draggedElIdentity = undefined; // 需要提前清除，避免新生成的节点复用了id 刷新了dragOriginPlaceholder\n    let batchDraggble: Array<DraggableDirective> = [];\n    if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {\n      batchDraggble = this.dragDropService.batchDragData.map(dragData => dragData.draggable)\n        .filter(draggable => draggable && draggable.el.nativeElement !== this.dragDropService.draggedEl);\n    }\n    this.dropEvent.emit(\n      new DropEvent(\n        e,\n        this.dragDropService.dragData,\n        this.dragDropService.dropEvent,\n        this.dropSortVirtualScrollOption ? this.getRealIndex(this.dropIndex, this.dropFlag) : this.dropIndex,\n        this.sortContainer ? this.checkSelfFromIndex(this.dragDropService.draggedEl) : -1,\n        this.dragDropService.dropOnItem,\n        this.dragDropService.dropOnOrigin,\n        (this.dragDropService.batchDragging)\n          ? this.dragDropService.getBatchDragData(draggedElIdentity)\n          : undefined\n      )\n    );\n    // 如果drop之后drag元素被删除，则不会发生dragend事件，需要代替dragend清理\n    if (this.dragDropService.dragFollow) {\n      this.dragDropService.disableDraggedCloneNodeFollowMouse();\n    } else {\n      this.renderer.setStyle(this.dragDropService.draggedEl, 'display', '');\n      this.dragDropService.dragElShowHideEvent.next(false);\n    }\n    if (batchDraggble.length > 0 && this.dragDropService.batchDragging) {\n      batchDraggble.forEach((draggable) => {\n        if (!draggable.originPlaceholder || draggable.originPlaceholder.show === false) {\n          draggable.el.nativeElement.style.display = '';\n        } else if (draggable.originPlaceholder.removeDelay > 0 && !this.dragDropService.dropOnOrigin) {\n          draggable.delayRemoveOriginPlaceholder(false);\n        } else {\n          draggable.el.nativeElement.style.display = '';\n          draggable.removeOriginPlaceholder(false);\n        }\n      });\n    }\n    this.dragDropService.dropEvent.next(e);\n    this.dragDropService.dragData = undefined;\n    this.dragDropService.scope = undefined;\n    this.dragDropService.draggedEl = undefined;\n    this.dragDropService.dragFollow = undefined;\n    this.dragDropService.dragFollowOptions = undefined;\n    this.dragDropService.dragOffset = undefined;\n    this.dragDropService.dropOnOrigin = undefined;\n    this.dragDropService.batchDragging = false;\n    this.dragDropService.batchDragStyle = undefined;\n    this.dragDropService.dragPreviewDirective = undefined;\n  }\n\n  allowDrop(e): boolean {\n    if (!e) { return false; }\n    if (this.allowDropCache !== undefined) {\n      return this.allowDropCache;\n    }\n    let allowed = false;\n    if (typeof this.dropScope === 'string') {\n      if (typeof this.dragDropService.scope === 'string') {\n        allowed = this.dragDropService.scope === this.dropScope;\n      }\n      if (this.dragDropService.scope instanceof Array) {\n        allowed = this.dragDropService.scope.indexOf(this.dropScope) > -1;\n      }\n    }\n    if (this.dropScope instanceof Array) {\n      if (typeof this.dragDropService.scope === 'string') {\n        allowed = this.dropScope.indexOf(this.dragDropService.scope) > -1;\n      }\n      if (this.dragDropService.scope instanceof Array) {\n        allowed = this.dropScope.filter((item) => {\n          return this.dragDropService.scope.indexOf(item) !== -1;\n        }).length > 0;\n      }\n    }\n    this.allowDropCache = allowed;\n    return allowed;\n  }\n\n  private dropSortCountSelectorFilterFn = (value) => {\n    return Utils.matches(value, this.dropSortCountSelector)\n      || value.contains(this.placeholder)\n      || value === this.dragDropService.dragOriginPlaceholder;\n  };\n\n  // 查询需要插入placeholder的位置\n  /* eslint-disable-next-line complexity*/\n  private findSortableEl(event) {\n    const moveElement = event.target;\n    let overElement = null;\n    if (!this.sortContainer) {\n      return overElement;\n    }\n    overElement = {index: 0, el: null, position: 'before'};\n    this.dropIndex = 0;\n    this.dropFlag = undefined;\n    let childEls = Utils.slice(this.sortContainer.children);\n    // 删除虚拟滚动等的额外元素不需要计算的元素\n    if (this.dropSortCountSelector) {\n      childEls = childEls.filter(this.dropSortCountSelectorFilterFn);\n    }\n    // 如果没有主动删除则删除多余的originplaceholder\n    if (childEls.some(el =>\n      el !== this.dragDropService.dragOriginPlaceholder\n      && el.classList.contains('drag-origin-placeholder')\n    )) {\n      childEls = childEls.filter(el =>\n        !(el.classList.contains('drag-origin-placeholder')\n        && el !== this.dragDropService.dragOriginPlaceholder)\n      );\n    }\n    // 要先删除clonenode否则placeholderindex是错的\n    if (this.dragDropService.dragFollow && this.dragDropService.dragCloneNode) {\n      const cloneNodeIndex = childEls.findIndex(value => value === this.dragDropService.dragCloneNode);\n      if (-1 !== cloneNodeIndex) {\n        childEls.splice(cloneNodeIndex, 1);\n      }\n    }\n    // 计算index数组需要删除源占位符\n    if (this.dragDropService.dragOriginPlaceholder) {\n      const dragOriginPlaceholderIndex = childEls.findIndex(value => value === this.dragDropService.dragOriginPlaceholder);\n      if (-1 !== dragOriginPlaceholderIndex) {\n        this.dragElIndex = dragOriginPlaceholderIndex - 1;\n        childEls.splice(dragOriginPlaceholderIndex, 1);\n      } else {\n        this.dragElIndex = -1;\n      }\n    } else {\n      this.dragElIndex = -1;\n    }\n    // 查询是否已经插入了placeholder\n    const placeholderIndex = childEls.findIndex(value => value.contains(this.placeholder));\n    // 删除placeholder\n    if (-1 !== placeholderIndex) {\n      childEls.splice(placeholderIndex, 1);\n    }\n    // 如果还有placeholder在前面 dragElIndex得再减一\n    if (-1 !== placeholderIndex && -1 !==  this.dragElIndex && placeholderIndex < this.dragElIndex) {\n      this.dragElIndex--;\n    }\n    const positionIndex = -1 !== placeholderIndex ? placeholderIndex : this.dragElIndex;\n    const currentIndex = childEls.findIndex(value => (\n      value.contains(moveElement)\n        || value.nextElementSibling === moveElement\n        && value.nextElementSibling.classList.contains('drag-origin-placeholder'))\n    );\n    if (this.switchWhileCrossEdge && !this.allowDropOnItem && childEls.length\n      && -1 !== positionIndex\n      && currentIndex > -1\n    ) { // 越过元素边界立即交换位置算法\n      const lastIndex = positionIndex;\n      // 解决抖动\n      const realEl = this.overElement && (this.overElement.realEl || this.overElement.el);\n      if (-1 !== currentIndex && realEl === childEls[currentIndex]) {\n        this.dropIndex = this.overElement.index;\n        return this.overElement;\n      }\n\n      overElement = {\n        index: lastIndex > currentIndex ?  currentIndex : (currentIndex + 1),\n        el:  childEls[currentIndex],\n        position: lastIndex > currentIndex ? 'before' : 'after'\n      };\n\n      this.dragDropService.dropOnItem = false;\n      this.dropIndex = overElement.index;\n      return overElement;\n    }\n\n    if (moveElement === this.sortContainer\n      || moveElement.classList.contains('drag-origin-placeholder')\n      || moveElement === (this.dragDropService && this.dragDropService.dragOriginPlaceholder)\n      || (!this.sortContainer.contains(moveElement) && this.defaultDropPosition === 'closest')\n    ) {\n      if (!childEls.length) {\n        this.dropIndex = 0;\n        this.dragDropService.dropOnItem = false;\n        return overElement;\n      }\n      // 落入A元素和B元素的间隙里\n      let findInGap = false;\n      for (let i = 0; i < childEls.length; i++) {\n        const targetElement = childEls[i];\n        // 处理非越边的落到side-origin-placeholder\n        if (childEls[i].nextSibling === moveElement\n          && moveElement.classList.contains('drag-origin-placeholder')) {\n          const position = this.calcPosition(event, moveElement);\n          this.dragDropService.dropOnItem = position === 'inside';\n          overElement = {index: position === 'after' ? (i + 1) : i, el: childEls[i], position: position};\n          this.dropIndex = overElement.index;\n          return overElement;\n        }\n        const positionOutside = this.calcPositionOutside(event, targetElement);\n        if (positionOutside === 'before') {\n          this.dragDropService.dropOnItem = false;\n          overElement = {index: i, el: childEls[i], position: positionOutside, realEl: moveElement};\n          this.dropIndex = overElement.index;\n          findInGap = true;\n          break;\n        } else {\n          // for 'notsure'\n        }\n      }\n      if (!findInGap) {\n        this.dragDropService.dropOnItem = false;\n        overElement = {index: childEls.length , el:  childEls[childEls.length - 1], position: 'after', realEl: moveElement};\n        this.dropIndex = childEls.length;\n      }\n      return overElement;\n    }\n    if (!this.sortContainer.contains(moveElement)) {\n      if (this.defaultDropPosition === 'before') {\n        overElement = {index: 0, el: childEls.length ? childEls[0] : null, position: 'before', realEl: moveElement};\n        this.dropFlag = 'beforeAll';\n      } else {\n        overElement = {\n          index: childEls.length,\n          el: childEls.length ? childEls[childEls.length - 1] : null,\n          position: 'after',\n          realEl: moveElement\n        };\n        this.dropFlag = 'afterAll';\n      }\n      this.dropIndex = overElement.index;\n      return overElement;\n    }\n    let find = false;\n    for (let i = 0; i < childEls.length; i++) {\n      if (childEls[i].contains(moveElement)) {\n        const targetElement = childEls[i];\n        const position = this.calcPosition(event, targetElement);\n        this.dragDropService.dropOnItem = position === 'inside';\n        overElement = {index: position === 'after' ? (i + 1) : i, el: childEls[i], position: position};\n        this.dropIndex = overElement.index;\n        find = true;\n        break;\n      }\n    }\n    if (!find) {\n      if (childEls.length) {\n        overElement = {index: childEls.length, el: childEls[childEls.length - 1 ], position: 'after'};\n      }\n      this.dropIndex = childEls.length;\n      this.dragDropService.dropOnItem = false;\n    }\n    return overElement;\n  }\n\n  private calcPosition(event: any, targetElement: any) {\n    const rect = targetElement.getBoundingClientRect();\n    const relY = event.clientY - (rect.y || rect.top);\n    const relX = event.clientX - (rect.x || rect.left);\n\n    // 处理允许drop到元素自己\n    if (this.allowDropOnItem) {\n      const dropOnItemEdge = { // 有内嵌列表的时候需要修正元素的高度活宽度\n        height: (this.nestingTargetRect && this.nestingTargetRect.height || rect.height),\n        width: (this.nestingTargetRect && this.nestingTargetRect.width || rect.width)\n      };\n      const threeQuartersOfHeight = dropOnItemEdge.height * 3 / 4;\n      const threeQuartersOfWidth = dropOnItemEdge.width * 3 / 4;\n      const AQuarterOfHeight = Number(dropOnItemEdge.height) / 4;\n      const AQuarterOfWidth = Number(dropOnItemEdge.width) / 4;\n\n      if (this.sortDirectionZMode) {\n        const slashPosition = (relY / dropOnItemEdge.height + relX / dropOnItemEdge.width);\n        if (slashPosition > 0.3 &&  slashPosition <= 0.7) {\n          return 'inside';\n        } else if (slashPosition > 0.7) {\n          const slashPositionNesting = (\n            (relY - rect.height + dropOnItemEdge.height) / dropOnItemEdge.height\n            + (relX - rect.width +  dropOnItemEdge.width) / dropOnItemEdge.width\n          );\n          if (slashPositionNesting <= 0.7) {\n            return 'inside';\n          }\n        }\n      }\n      if ((this.sortDirection === 'v' && relY > AQuarterOfHeight && relY <= threeQuartersOfHeight) ||\n        (this.sortDirection !== 'v' && relX > AQuarterOfWidth && relX <= threeQuartersOfWidth)) {\n        //  高度的中间1/4 - 3/4 属于drop到元素自己\n        return 'inside';\n      } else if ((this.sortDirection === 'v' && relY > threeQuartersOfHeight\n          && relY <= (rect.height - AQuarterOfHeight)) ||\n          (this.sortDirection !== 'v' && relX > threeQuartersOfWidth\n          &&  relX <= (rect.width - AQuarterOfWidth)))  {\n        // 内嵌列表后中间区域都属于inside\n        return 'inside';\n      }\n    }\n\n    if (this.sortDirectionZMode) {\n      if ((relY / rect.height + relX / rect.width) < 1) {\n        return 'before';\n      }\n      return 'after';\n    }\n    // 其他情况保持原来的属于上半部分或者下半部分\n    if ((this.sortDirection === 'v' && relY > (rect.height / 2)) ||\n      (this.sortDirection !== 'v' && relX > (rect.width / 2)))  {\n      return 'after';\n    }\n    return 'before';\n  }\n\n  private calcPositionOutside(event: any, targetElement: any) {\n    // targetElement 获取 getBoundingClientRect\n    const rect = this.getBoundingRectAndRealPosition(targetElement);\n    const relY = event.clientY - (rect.y || rect.top);\n    const relX = event.clientX - (rect.x || rect.left);\n\n    if (this.sortDirectionZMode) {\n      if ((this.sortDirection === 'v' && (relY < 0 || (relY < rect.height && relX < 0)))\n        || (this.sortDirection !== 'v' && (relX < 0 || (relX < rect.width && relY < 0)))\n      ) {\n        return 'before';\n      }\n      return 'notsure';\n    }\n\n    if ((this.sortDirection === 'v' && relY < (rect.height / 2)) ||\n      (this.sortDirection !== 'v' && relX < (rect.width / 2)))  {\n      return 'before';\n    }\n    return 'notsure';\n  }\n  setPlaceholder = () => {\n    this.ngZone.runOutsideAngular(() => {\n      this.placeholder.style.width = this.dragDropService.dragOffset.width + 'px';\n      this.placeholder.style.height = this.dragDropService.dragOffset.height + 'px'; // ie下clientHeight为0\n      Utils.addElStyles(this.placeholder, this.placeholderStyle);\n      this.placeholderRenderEvent.next({width: this.dragDropService.dragOffset.width, height: this.dragDropService.dragOffset.height});\n    });\n  };\n\n  // 插入placeholder\n  private insertPlaceholder(overElement) {\n    const tempScrollTop = this.sortContainer.scrollTop;\n    const tempScrollLeft = this.sortContainer.scrollLeft;\n    let hitPlaceholder = false;\n    let cmd: DragPlaceholderInsertionIndexEvent;\n    const getIndex = (arr, el, defaultValue) => {\n      const index = arr.indexOf(el);\n      return index > -1 ? index : defaultValue;\n    };\n    if (null !== overElement) {\n      const sortContainerChildren = Utils.slice(this.sortContainer.children).filter(\n        el => el !== this.dragDropService.dragCloneNode\n      );\n\n      if (overElement.el === null) {\n        cmd = {\n          command: 'append'\n        };\n        this.sortContainer.appendChild(this.placeholder);\n      } else {\n        if (overElement.position === 'inside') {\n          cmd = {\n            command: 'remove'\n          };\n          this.removePlaceholder();\n        } else if (this.dragDropService.dragOriginPlaceholder && this.isDragPlaceholderPosition(overElement.index)) {\n          cmd = {\n            command: 'remove'\n          };\n          this.removePlaceholder();\n          hitPlaceholder = true;\n        } else if (overElement.position === 'after') {\n          if (overElement.el.nextSibling && overElement.el.nextSibling.classList\n            && overElement.el.nextSibling.classList.contains('drag-origin-placeholder')) {\n            // 针对多源占位符场景\n            cmd = {\n              command: 'insertBefore',\n              index: getIndex(sortContainerChildren, overElement.el.nextSibling, sortContainerChildren.length) + 1\n            };\n            this.sortContainer.insertBefore(this.placeholder, overElement.el.nextSibling.nextSibling);\n\n          } else {\n            cmd = {\n              command: 'insertBefore',\n              index: getIndex(sortContainerChildren, overElement.el, sortContainerChildren.length) + 1\n            };\n            this.sortContainer.insertBefore(this.placeholder, overElement.el.nextSibling);\n          }\n        } else {\n          cmd = {\n            command: 'insertBefore',\n            index: getIndex(sortContainerChildren, overElement.el, sortContainerChildren.length)\n          };\n          this.sortContainer.insertBefore(this.placeholder, overElement.el);\n        }\n      }\n    }\n    this.placeholderInsertionEvent.next(cmd);\n    this.sortContainer.scrollTop = tempScrollTop;\n    this.sortContainer.scrollLeft = tempScrollLeft;\n    if (this.dragDropService.dragOriginPlaceholder) {\n      if (hitPlaceholder) {\n        this.hitDragOriginPlaceholder();\n      } else  {\n        this.hitDragOriginPlaceholder(false);\n      }\n    }\n  }\n\n  private isDragPlaceholderPosition(index) {\n    if (this.dragElIndex > -1 && (index === this.dragElIndex || index === this.dragElIndex + 1)) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n  private hitDragOriginPlaceholder(bool = true) {\n    const placeholder = this.dragDropService.dragOriginPlaceholder;\n    if (bool) {\n      placeholder.classList.add('hit-origin-placeholder');\n    } else {\n      placeholder.classList.remove('hit-origin-placeholder');\n    }\n  }\n\n  private removePlaceholder() {\n    if (this.sortContainer && this.sortContainer.contains(this.placeholder)) {\n      this.sortContainer.removeChild(this.placeholder);\n      this.placeholderInsertionEvent.next({\n        command: 'remove'\n      });\n    }\n  }\n\n  private removeDragoverItemClass(container, overElement?) {\n    if (this.dragOverItemClass) {\n      const dragOverItemClassGroup = container.querySelectorAll('.' + this.dragOverItemClass);\n      if (dragOverItemClassGroup && dragOverItemClassGroup.length > 0) {\n        for (const element of dragOverItemClassGroup) {\n          if (overElement) {\n            if (element !== overElement.el || overElement.position !== 'inside') {\n              Utils.removeClass(element, this.dragOverItemClass);\n            }\n          } else {\n            Utils.removeClass(element, this.dragOverItemClass);\n          }\n        }\n      }\n    }\n  }\n\n  private checkSelfFromIndex(el: any) {\n    let fromIndex = -1;\n    if (!this.sortContainer.contains(el)) {\n      return fromIndex;\n    }\n    let childs = Utils.slice(this.sortContainer.children);\n    if (this.dropSortCountSelector) {\n      childs = childs.filter(this.dropSortCountSelectorFilterFn);\n    }\n    for (let i = 0; i < childs.length; i++) {\n      if (childs[i].contains(this.dragDropService.draggedEl)) {\n        fromIndex = i;\n        break;\n      }\n    }\n    return this.getRealIndex(fromIndex);\n  }\n  private getRealIndex(index, flag?: DropIndexFlag): number {\n    let realIndex;\n    const startIndex = this.dropSortVirtualScrollOption && this.dropSortVirtualScrollOption.startIndex || 0;\n    const totalLength = this.dropSortVirtualScrollOption && this.dropSortVirtualScrollOption.totalLength;\n    if (flag === 'beforeAll') {\n      realIndex = 0;\n    } else if (flag === 'afterAll') {\n      realIndex = totalLength || index;\n    } else {\n      realIndex = startIndex + index;\n    }\n    return realIndex;\n  }\n\n  getBoundingRectAndRealPosition(targetElement) {\n    // 用于修复部分display none的元素获取到的top和left是0， 取它下一个元素的左上角为坐标\n    let rect = targetElement.getBoundingClientRect();\n    const {bottom, right, width, height} = rect;\n    if (rect.width === 0 && rect.height === 0 &&\n      (targetElement.style.display === 'none' || getComputedStyle(targetElement).display === 'none')) {\n      if (targetElement.nextElementSibling) {\n        const {top: realTop, left: realLeft} =  targetElement.nextElementSibling.getBoundingClientRect();\n        rect = {x: realLeft, y: realTop, top: realTop, left: realLeft, bottom, right, width, height};\n      }\n    }\n    return rect;\n  }\n  getSortContainer() {\n    return this.sortContainer;\n  }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit, Optional, Self } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DescendantChildren } from '../services/drag-drop-desc-reg.service';\nimport { DropSortSyncDescendantRegisterService } from '../services/drag-drop-descendant-sync.service';\nimport { DragDropSyncService } from '../services/drag-drop-sync.service';\nimport { Utils } from '../shared/utils';\nimport { DroppableDirective } from './droppable.directive';\nimport { DragPlaceholderInsertionEvent, DragPlaceholderInsertionIndexEvent } from './placeholder-insertion-event.type';\n\n@Directive({\n  selector: '[dDropSortSync]',\n  exportAs: 'dDropSortSync'\n})\n\nexport class DropSortSyncDirective extends DescendantChildren<DropSortSyncDirective> implements OnInit, OnDestroy {\n  @Input('dDropSortSync') dropSyncGroup = '';\n  @Input('dropSyncDirection') direction: 'v'| 'h' = 'v'; // 与sortContainer正交的方向\n  subscription: Subscription = new Subscription();\n  syncGroupDirectives: Array<DropSortSyncDirective>;\n  placeholder: HTMLElement;\n  sortContainer: HTMLElement;\n\n  constructor(\n    public el: ElementRef,\n    @Optional() @Self() private droppable: DroppableDirective,\n    private dragDropSyncService: DragDropSyncService,\n    private dropSortSyncDrs: DropSortSyncDescendantRegisterService,\n  ) {\n    super(dropSortSyncDrs);\n    this.descendantItem = this;\n  }\n\n  ngOnInit() {\n    this.sortContainer = this.el.nativeElement;\n    if (this.droppable) {\n      this.sortContainer = this.droppable.getSortContainer();\n      this.subscription.add(\n        this.droppable.placeholderInsertionEvent.subscribe(this.subInsertionEvent)\n      );\n      this.subscription.add(\n        this.droppable.placeholderRenderEvent.subscribe(this.subRenderEvent)\n      );\n    }\n    super.ngOnInit();\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n    super.ngOnDestroy();\n  }\n  subRenderEvent = (nativeStyle: {width: number; height: number}) => {\n    this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter(directive => directive !== this);\n    this.syncGroupDirectives.forEach(dir => {\n      dir.renderPlaceholder(nativeStyle, this.droppable);\n    });\n  };\n\n  subInsertionEvent = (cmd: DragPlaceholderInsertionIndexEvent) => {\n    this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter(directive => directive !== this);\n    this.syncGroupDirectives.forEach(dir => {\n      dir.insertPlaceholderCommand({\n        command: cmd.command,\n        container: dir.sortContainer,\n        relatedEl: dir.getChildrenElByIndex(dir.sortContainer, cmd.index)\n      });\n    });\n  };\n  getChildrenElByIndex(target, index?) {\n    if (index === undefined || target && target.children && target.children.length < index || index < 0) {\n      return null;\n    }\n    return this.sortContainer.children.item(index);\n  }\n\n  renderPlaceholder(nativeStyle: {width: number; height: number}, droppable) {\n    if (!this.placeholder) {\n      this.placeholder = document.createElement(droppable.placeholderTag);\n      this.placeholder.className = 'drag-placeholder';\n      this.placeholder.classList.add('drag-sync-placeholder');\n      this.placeholder.innerText = droppable.placeholderText;\n    }\n    const {width, height} = nativeStyle;\n    if (this.direction === 'v') {\n      this.placeholder.style.width = width + 'px';\n      this.placeholder.style.height = this.sortContainer.getBoundingClientRect().height + 'px';\n    } else {\n      this.placeholder.style.height = height + 'px';\n      this.placeholder.style.width = this.sortContainer.getBoundingClientRect().width + 'px';\n    }\n    Utils.addElStyles(this.placeholder, droppable.placeholderStyle);\n\n  }\n\n  insertPlaceholderCommand(cmd: DragPlaceholderInsertionEvent) {\n    if (cmd.command === 'insertBefore' && cmd.container) {\n      cmd.container.insertBefore(this.placeholder, cmd.relatedEl);\n      return;\n    }\n    if (cmd.command === 'append' && cmd.container) {\n      cmd.container.appendChild(this.placeholder);\n      return;\n    }\n    if (cmd.command === 'remove' && cmd.container) {\n      if (cmd.container.contains(this.placeholder)) {\n        cmd.container.removeChild(this.placeholder);\n      }\n      return;\n    }\n  }\n\n}\n","import { Directive, ElementRef, HostBinding, Input } from '@angular/core';\n\n@Directive({\n  selector: '[dSortable]'\n})\n/**\n * Makes an element draggable by adding the draggable html attribute\n */\nexport class SortableDirective {\n  @HostBinding('attr.dsortable')\n  @Input('dSortable')  dSortDirection = 'v';\n  @HostBinding('attr.d-sortable-zmode')\n  @Input() dSortableZMode = false;\n  @HostBinding('attr.d-sortable') dSortable = true;\n  constructor(public el: ElementRef) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { BatchDraggableDirective } from './directives/batch-draggable.directive';\nimport { DragPreviewCloneDomRefComponent } from './directives/drag-preivew-clone-from-domRef.component';\nimport { DragPreviewComponent } from './directives/drag-preview.component';\nimport { DragPreviewDirective } from './directives/drag-preview.directive';\nimport { DragSyncDirective } from './directives/drag-sync.directive';\nimport { DragDropSyncBoxDirective } from './directives/dragdrop-sync-box.directive';\nimport { DraggableDirective } from './directives/draggable.directive';\nimport { DropScrollEnhancedSideDirective } from './directives/drop-scroll-enhance-side.directive';\nimport { DropScrollEnhancedDirective } from './directives/drop-scroll-enhance.directive';\nimport { DropSortSyncDirective } from './directives/drop-sort-sync.directive';\nimport { DroppableDirective } from './directives/droppable.directive';\nimport { SortableDirective } from './directives/sortable.directive';\nimport { DragDropService } from './services/drag-drop.service';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    DraggableDirective,\n    DroppableDirective,\n    SortableDirective,\n    DropScrollEnhancedDirective,\n    DropScrollEnhancedSideDirective,\n    BatchDraggableDirective,\n    DragSyncDirective,\n    DropSortSyncDirective,\n    DragDropSyncBoxDirective,\n    DragPreviewDirective,\n    DragPreviewComponent,\n    DragPreviewCloneDomRefComponent,\n  ],\n  exports: [\n    DraggableDirective,\n    DroppableDirective,\n    SortableDirective,\n    DropScrollEnhancedDirective,\n    DropScrollEnhancedSideDirective,\n    BatchDraggableDirective,\n    DragSyncDirective,\n    DropSortSyncDirective,\n    DragDropSyncBoxDirective,\n    DragPreviewDirective,\n    DragPreviewComponent,\n    DragPreviewCloneDomRefComponent,\n  ],\n  providers: [\n    DragDropService\n  ],\n\n})\nexport class DragDropModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.DragDropService","i1.DraggableDirective","i1.DragDropService","i2.DragDropSyncService","i3.DragDropService","i4.DragSyncDescendantRegisterService","i1.DragDropSyncService","i2.DragSyncDescendantRegisterService","i2.DropSortSyncDescendantRegisterService","mergeStatic","i1.DroppableDirective","i3.DropSortSyncDescendantRegisterService"],"mappings":";;;;;;;;MAEa,KAAK,CAAA;AAChB;;;;AAIG;AACI,IAAA,OAAO,OAAO,CAAC,OAAY,EAAE,YAAoB,EAAA;AACtD,QAAA,MAAM,KAAK,GAAQ,OAAO,CAAC,SAAS,CAAC;AACrC,QAAA,MAAM,IAAI,GACR,KAAK,CAAC,OAAO;AACb,YAAA,KAAK,CAAC,eAAe;AACrB,YAAA,KAAK,CAAC,kBAAkB;AACxB,YAAA,KAAK,CAAC,iBAAiB;AACvB,YAAA,KAAK,CAAC,gBAAgB;AACtB,YAAA,KAAK,CAAC,qBAAqB;AAC3B,YAAA,UAAU,CAAC,EAAA;AACT,gBAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC1E,gBAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvB,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;;iBAE5C;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAChB,aAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;KACzC;AAED;;;;AAIG;AACI,IAAA,OAAO,QAAQ,CAAC,UAA4B,EAAE,SAAiB,EAAA;AACpE,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO;SACR;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC5B;KACF;AAED;;;;AAIG;AACI,IAAA,OAAO,WAAW,CAAC,UAA4B,EAAE,SAAiB,EAAA;AACvE,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO;SACR;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC/B;KACF;AAED;;;;;AAKG;IACK,OAAO,4BAA4B,CAAC,UAAsB,EAAA;AAChE,QAAA,MAAM,CAAC,GAAG,UAAU,YAAY,UAAU,GAAG,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC;AAEnF,QAAA,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE;AACrD,YAAA,OAAO,CAAC,CAAC;SACV;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEM,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE,KAAM,EAAE,QAAS,EAAA;QACzC,MAAM,GAAG,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AAEtB,QAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACb,YAAA,OAAO,GAAG,CAAC;SACZ;QAED,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAEhE,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,YAAA,GAAG,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;SAChD;AAED,QAAA,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE;YACpB,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;;AAGM,IAAA,OAAO,WAAW,CAAC,EAAO,EAAE,MAAW,EAAA;AAC5C,QAAA,IAAI,MAAM,YAAY,MAAM,EAAE;AAC5B,YAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,gBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;oBACnD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;;wBAE5B,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACxB,4BAAA,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACpB,yBAAC,CAAC,CAAC;qBACJ;yBAAM;wBACL,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;qBACzB;iBACF;aACF;SACF;KACF;AACM,IAAA,OAAO,2BAA2B,CAAC,KAAgB,EAAE,MAAoB,EAAE,SAAkB,EAAA;AAClG,QAAA,MAAM,EAAE,GAAG,MAAM,IAAiB,KAAK,CAAC,MAAM,CAAC;AAC/C,QAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC1B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK,CAAC;SACd;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,cAAc,CACf,SAAS,IAAI,KAAK,CAAC,IAAI,EACvB,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,CAAC,EACD,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,aAAa,CACpB,CAAC;AACF,QAAA,IAAI,EAAE,CAAC,YAAY,KAAK,IAAI,EAAE;YAC5B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpC,EAAE,CAAC,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC;SAClE;QACD,UAAU,CAAC,MAAK;AACd,YAAA,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;SACzB,EAAE,CAAC,CAAC,CAAC;AACN,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACtJD;;AAEG;MACU,aAAa,CAAA;AACR,IAAA,SAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAC;AACd,IAAA,SAAA,IAAA,CAAA,OAAO,GAAG,GAAG,CAAC;AACd,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,GAAG,CAAC;AACf,IAAA,SAAA,IAAA,CAAA,cAAc,GAAG,GAAG,CAAC;AACrB,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,GAAG,CAAC;AACf,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC;AAC1B,IAAA,SAAA,IAAA,CAAA,gBAAgB,GAAG,GAAG,CAAC;AACvB,IAAA,SAAA,IAAA,CAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,IAAA,SAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,CAAC;aACzB,IAAgB,CAAA,gBAAA,GAAG,2BAAH,CAA+B,EAAA;aAC/C,IAAQ,CAAA,QAAA,GAAG,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAA;aACjD,IAAQ,CAAA,QAAA,GAAG,iCAAiC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAA;aACxD,IAAO,CAAA,OAAA,GAAG,6CAA6C,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAA;aAEpE,IAAQ,CAAA,QAAA,GAAkB,IAAlB,CAAuB,EAAA;AAyB9C,IAAA,WAAA,GAAA;QAtBA,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;;AAoHd,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAa,KAAI;AAC7B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;;AAExB,gBAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE;AACxD,oBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;wBAC/C,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,OAAO;qBACR;iBACF;;gBAED,IAAI,CAAC,KAAK,EAAE,CAAC;;gBAEb,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;oBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,oBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,oBAAA,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACpC,wBAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAK;AACvC,4BAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC9B,4BAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,4BAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpB,yBAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;qBACpC;yBAAM;wBACL,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,wBAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAC/B;iBACF;aACF;AACH,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,CAAC,KAAI;AAC1B,YAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;gBACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACR;AACH,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAa,KAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;gBACrC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACR;AACD,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;gBACjE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AAEjC,gBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;oBAC/D,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACrB;;AAED,gBAAA,IAAI,IAAI,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,oBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,oBAAA,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,oBAAA,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE;;wBAE9B,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3C,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjE,wBAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;qBAC1B;AACD,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;;AAE5D,oBAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;iBAC7B;aACF;AACH,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC,KAAI;AACzB,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;iBAC7B;;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;AACH,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;;AAExB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;;AAEvB,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;iBAC7B;;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACnD,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC7D;AACD,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;AACH,SAAC,CAAC;;AA9LA,QAAA,IAAI,aAAa,CAAC,QAAQ,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC5D;;;QAGD,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACnC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAO,GAAC,EAAE;AAC1C,gBAAA,IAAI,OAAO,GAAA;oBACT,eAAe,GAAG,IAAI,CAAC;AACvB,oBAAA,OAAO,IAAI,CAAC;iBACb;AACF,aAAA,CAAC,CAAC;;AAEH,YAAA,IAAI,aAAa,CAAC,aAAa,EAAE,EAAE;;gBAEjC,MAAM,CAAC,GAAG,QAAQ,CAAC;AACnB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AAC3B,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACtC,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;AACrC,gBAAA,MAAM,GAAG,GAAG,eAAe,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;AACzE,gBAAA,MAAM,UAAU,GAAG,eAAe,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;gBAC/D,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC1C,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAClD,gBAAA,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,gBAAA,CAAC,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;AACxC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,gBAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;aACxB;SACF;KACF;AACD;;AAEG;AACH,IAAA,OAAO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC3B,YAAA,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;SAC9C;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;KAC/B;AACD,IAAA,OAAO,aAAa,GAAA;QAClB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACpE,YAAA,OAAO,KAAK,CAAC;SACd;QACD,MAAM,CAAC,GAAa,QAAQ,CAAC;QAC7B,MAAM,CAAC,GAAW,MAAM,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IACE,cAAc,IAAI,CAAC;AACnB,YAAA,cAAc,IAAI,CAAC;YACnB,SAAS,CAAC,cAAc,GAAG,CAAC;YAC3B,SAAiB,CAAC,gBAAgB,GAAG,CAAC;aACrC,MAAc,CAAC,aAAa,IAAI,QAAQ,YAAa,MAAc,CAAC,aAAa,CAAC,EACpF;YACA,IAAI,GAAG,IAAI,CAAC;SACb;aAAM;YACL,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACpD,QAAQ,CAAC,SAAS,IAAI,CAAA;;;;;;;;eAQb,CAAC;AACV,YAAA,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,aAAa,CAAC,EAAE,GAAG,YAAY,CAAC;AAChC,YAAA,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACpC,YAAA,IAAI,GAAG,aAAa,CAAC,SAAS,KAAK,EAAE,CAAC;AACtC,YAAA,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC9C;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;AAED,IAAA,qBAAqB,CAAC,CAAa,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;AAC5B,QAAA,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjF,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACjE;IACD,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1E,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;SAC9B;KACF;;;AAuGD,IAAA,YAAY,CAAC,CAAC,EAAA;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KACtE;;AAED,IAAA,gBAAgB,CAAC,CAAC,EAAA;QAChB,OAAO,CAAC,aAAa,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAClE;;AAED,IAAA,yBAAyB,CAAC,CAAC,EAAA;AACzB,QAAA,OAAO,aAAa,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;KACrG;;AAED,IAAA,yBAAyB,CAAC,CAAC,EAAA;AACzB,QAAA,OAAO,aAAa,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC;KACtH;;AAED,IAAA,mBAAmB,CAAC,CAAC,EAAA;AACnB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;AAEhD,QAAA,IAAI,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;AAC3E,YAAA,OAAO,KAAK,CAAC;SACd;;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK,GAAG,aAAa,CAAC,SAAS,KAAK,aAAa,CAAC,kBAAkB,IAAI,KAAK,IAAI,aAAa,CAAC,oBAAoB,CAAC,CAAC;KAC7H;;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;SAC3E;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;IAED,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAA;QAC7B,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,KAAK,GAAQ,OAAO,CAAC,SAAS,CAAC;AACrC,YAAA,MAAM,IAAI,GACR,KAAK,CAAC,OAAO;AACb,gBAAA,KAAK,CAAC,eAAe;AACrB,gBAAA,KAAK,CAAC,kBAAkB;AACxB,gBAAA,KAAK,CAAC,iBAAiB;AACvB,gBAAA,KAAK,CAAC,gBAAgB;AACtB,gBAAA,KAAK,CAAC,qBAAqB;AAC3B,gBAAA,UAAU,CAAC,EAAA;AACT,oBAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC1E,oBAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;;qBAE5C;AACD,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAChB,iBAAC,CAAC;YACJ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;SACrC;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;IAED,KAAK,GAAA;QACH,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC;AACrD,QAAA,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;;IAED,QAAQ,CAAC,CAAC,EAAE,IAAK,EAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;AAClB,YAAA,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;KACzE;;AAED,IAAA,QAAQ,CAAC,CAAC,EAAA;QACR,IAAI,aAAa,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpD,YAAA,OAAO,CAAC,CAAC;SACV;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACtE;;AAED,IAAA,SAAS,CAAC,CAAa,EAAA;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,EAAE,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,aAAa,KAAK,MAAM,EAAE;AAC1D,YAAA,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;SACvB;AACD,QAAA,OAAoB,EAAE,CAAC;KACxB;;AAED,IAAA,WAAW,CAAC,CAAC,EAAA;;AAEX,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;SAC3D;;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrC;;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACtC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9C;AACD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;QACT,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;gBACZ,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,gBAAA,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC;AACxB,gBAAA,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC;AACzB,gBAAA,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC;AACpB,gBAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACpD,gBAAA,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aACpD;AACH,SAAC,CAAC,CAAC;KACJ;;AAED,IAAA,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAA;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;;IAED,SAAS,CAAC,GAAG,EAAE,GAAG,EAAA;;AAEhB,QAAA,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;;AAElE,QAAA,IAAI,GAAG,YAAY,iBAAiB,EAAE;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC;YACnB,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,YAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC9B,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACjD;;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACnD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7C;SACF;;AAED,QAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBACjC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;aAC1B;SACF;AACD,QAAA,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;;AAEjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;KACF;;;AAGD,IAAA,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,MAAM,EAAE;YACf,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG;AACV,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,OAAO,EAAE,CAAC;gBACV,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3C,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC;SAC7B;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;AAED,IAAA,gBAAgB,CAAC,CAAC,EAAA;QAChB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE;YAC7B,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAC9C,gBAAA,OAAO,CAAC,CAAC;aACV;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;AAED,IAAA,mBAAmB,CAAC,CAAC,EAAA;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,MAAK;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpD,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;aAC1B;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,SAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;KAClC;IACD,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAChC;KACF;;AAEH;AACA,CAAA,UAAiB,aAAa,EAAA;AAC5B;;;;;;;;;AASG;AACH,IAAA,MAAa,YAAY,CAAA;AASvB,QAAA,IAAI,UAAU,GAAA;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;QACD,IAAI,UAAU,CAAC,KAAK,EAAA;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;AAOD,QAAA,IAAI,aAAa,GAAA;YACf,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;QACD,IAAI,aAAa,CAAC,KAAK,EAAA;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B;AAKD,QAAA,IAAI,KAAK,GAAA;YACP,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAChC;AAED,QAAA,WAAA,GAAA;AACE,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;AACD;;;;;;;;AAQG;AACH,QAAA,SAAS,CAAC,IAAI,EAAA;AACZ,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACzB;iBAAM;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACnB;SACF;AACD;;;;;AAKG;AACH,QAAA,OAAO,CAAC,IAAI,EAAA;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC/B;AAED;;;;;;;;AAQG;QACH,OAAO,CAAC,IAAI,EAAE,KAAK,EAAA;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SAC1B;AACD;;;;;;AAMG;AACH,QAAA,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAA;AAChC,YAAA,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;AACxC,YAAA,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;AACpB,YAAA,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;SAC5C;AACF,KAAA;AA1FY,IAAA,aAAA,CAAA,YAAY,eA0FxB,CAAA;AACH,CAAC,EAtGgB,aAAa,KAAb,aAAa,GAsG7B,EAAA,CAAA,CAAA;;MCpjBY,eAAe,CAAA;IAmD1B,WAAoB,CAAA,MAAc,EAA4B,GAAQ,EAAA;QAAlD,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAA4B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAK;QAtCtE,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,SAAS,GAAiB,IAAI,OAAO,EAAE,CAAC;AACxC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAO,CAAC;AAClC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAO,CAAC;AAgBpC,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,KAAK,EAAE,CAAC;QAI7B,IAAkB,CAAA,kBAAA,GAAG,EAAE,CAAC;QACxB,IAAoB,CAAA,oBAAA,GAAG,EAAE,CAAC;QAC1B,IAAoB,CAAA,oBAAA,GAAQ,IAAI,CAAC;;AAMjC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;AAwL7C,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,KAAK,KAAI;YAChC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AAClD,YAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;YACnC,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,OAAO;iBACR;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC;AAC5D,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;AAC5D,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AA3LA,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;;;QAGjD,IAAI,CAAC,cAAc,CAAC,GAAG;AACrB,YAAA,wHAAwH,CAAC;AAC3H,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;KAC1B;IACD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;;QAEhC,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,EAAE;KACjD;IAED,iCAAiC,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YACtD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;AAC9E,gBAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;gBACnE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC7C;iBAAM;gBACL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACrD;YAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;YACtC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;gBACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;aACpD;AAED,YAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,EAAE,EAAE;gBACpC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACjI,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACnF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;aAC1D;;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACtE,YAAA,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,KAAK,KAAI;AACjD,gBAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBACjC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3G,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;AAEhE,YAAA,IACE,EACE,IAAI,CAAC,oBAAoB;gBACzB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB;gBAC7C,IAAI,CAAC,oBAAoB,CAAC,kBAAkB;gBAC5C,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,gBAAgB,CAC9D,EACD;;AAEA,gBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAE7E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChD,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;;oBAGzC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;wBAClG,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBACjD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACpD,wBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAChD,wBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACjC,wBAAA,MAAM,KAAK,GAAG;AACZ,4BAAA,QAAQ,EAAE,UAAU;AACpB,4BAAA,KAAK,EAAE,KAAK;AACZ,4BAAA,GAAG,EAAE,OAAO;AACZ,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,UAAU,EAAE,MAAM;AAClB,4BAAA,SAAS,EAAE,QAAQ;AACnB,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,UAAU,EAAE,CAAC,SAAS,EAAE,yBAAyB,CAAC;yBACnD,CAAC;AACF,wBAAA,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChC,wBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBACzB;;oBAGD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;wBAClG,IAAI,KAAK,GAAG,CAAC,CAAC;wBACd,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;4BACnC,KAAK,GAAG,CAAC,CAAC;yBACX;AACD,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;4BAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtD,4BAAA,MAAM,UAAU,GAAG;AACjB,gCAAA,QAAQ,EAAE,UAAU;gCACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;gCACzB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;gCACxB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,gCAAA,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI;AACnC,gCAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI;AACrC,gCAAA,UAAU,EAAE,MAAM;AAClB,gCAAA,MAAM,EAAE,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;6BACnE,CAAC;AACF,4BAAA,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACzC,4BAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;yBAC7B;qBACF;AACD,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;iBAC3B;aACF;YAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACpD,YAAA,IAAI,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,EAAE;AACjF,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9D,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;aACjE;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAChD,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC;YAClD,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBACjC,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;wBAClB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACtC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,wBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;4BAC9B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;yBACpD;qBACF;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;KACF;IAED,kCAAkC,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7F,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;AAC9E,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;SAC5C;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;SACxC;KACF;IAED,kBAAkB,CAAC,UAAU,EAAE,aAAa,EAAA;AAC1C,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,IAAI,EAAE,UAAU;SACjB,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC9F,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,KAAI;AAC3C,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,gBAAgB,CAAC,OAAO,EAAA;AACtB,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC1B,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;YACtD,IAAI,cAAc,EAAE;AAClB,gBAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;aACnC;iBAAM;AACL,gBAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aAClC;AACH,SAAC,CAAC,CAAC;KACJ;AAcD,IAAA,gBAAgB,CAAC,QAAS,EAAE,KAAA,GAAoE,gBAAgB,EAAA;AAC9G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,IAAI,CAA6B,KAAK,CAAC,CAAC;SAChD;AAAM,aAAA,IAAI,KAAK,KAAK,gBAAgB,EAAE;AACrC,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,IAAI,QAAQ,EAAE;gBACZ,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;gBAChG,QAAQ,GAAG,YAAY,CAAC;aACzB;AACD,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC/B;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;AAGG;IACI,kBAAkB,GAAA;AACvB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa;iBACf,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,CAAC;iBACxC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,CAAC;AACrC,iBAAA,OAAO,CAAC,CAAC,SAAS,KAAI;AACrB,gBAAA,SAAS,CAAC,cAAc,CAAC,QAAQ,GAAG,SAAS,CAAC;AAChD,aAAC,CAAC,CAAC;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;SACjC;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;IAEM,SAAS,CAAC,MAAM,EAAE,MAAM,EAAA;AAC7B,QAAA,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACpD,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;;AAGH,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAA,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;gBACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;aACxC;SACF;AACD,QAAA,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD;KACF;AAtSU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,wCAmDkB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAnDzC,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;0BAoD4B,MAAM;2BAAC,QAAQ,CAAA;;;AC1DhD,MAAO,wBAA4B,SAAQ,YAAe,CAAA;IAI9D,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IAEjD,WAAY,CAAA,OAAO,GAAG,KAAK,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;AAED,IAAA,aAAa,CAAC,KAAQ,EAAE,IAAI,GAAG,KAAK,EAAA;QAClC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC/C,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,IAAG;gBAC7B,EAAE,CAAE,KAAK,CAAC,CAAC;AACb,aAAC,CAAC,CAAC;YACH,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;KACF;IACD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KAChC;IAED,IAAI,CAAC,KAAS,EAAA,EAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAEtC,IAAA,SAAS,CAAC,eAAqB,EAAE,KAAW,EAAE,QAAc,EAAA;AAC1D,QAAA,IAAI,WAA4B,CAAC;AAEjC,QAAA,IAAI,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;YAC1D,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAU,KAAI;gBAC3C,UAAU,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,aAAC,GAAG,CAAC,KAAU,KAAI,EAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SACtD;aAAM;YACL,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAU,KAAO,EAAA,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACzF,CAAC,KAAU,KAAO,EAAA,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;SAC/C;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAO,CAAC;SACrC;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,OAAO,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KAC1D;AAEF;;MCxCY,oBAAoB,CAAA;IAQ/B,WAAoB,CAAA,EAAc,EAAU,GAAsB,EAAA;QAA9C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAChE,QAAA,IAAI,CAAC,OAAO,GAAI,EAAE,CAAC,aAAa,CAAC;KAClC;IACM,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;+GAbU,oBAAoB,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;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,sDCRjC,uQAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDHa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,uBAEL,KAAK,EAAA,QAAA,EAAA,uQAAA,EAAA,CAAA;;;MEKf,oBAAoB,CAAA;AAO/B,IAAA,WAAA,CAAoB,wBAAkD,EAClD,mBAAwC,EAAU,eAAgC,EAAA;QADlF,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAA0B;QAClD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAL7F,QAAA,IAAA,CAAA,kBAAkB,GAAG;AAC5B,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;KAID;IAEM,aAAa,GAAA;AAClB,QAAA,MAAM,6BAA6B,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAEpE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CACzD,6BAA6B,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,CAC5E,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAEM,UAAU,GAAA;QACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACtC,WAAW,EAAE,IAAI,CAAC,mBAAmB;YACrC,IAAI,EAAE,IAAI,CAAC,eAAe;AAC1B,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;AACzC,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;AACvC,YAAA,aAAa,EAAG,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;YAC7F,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACnG,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;KAC3C;IAEM,cAAc,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;SACpC;KACF;IAEM,iBAAiB,GAAA;QACtB,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC5D;IACO,sBAAsB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;KACtF;+GA7CU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAApB,oBAAoB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,CAAA,cAAA,EAAA,qBAAA,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;4JAGwB,mBAAmB,EAAA,CAAA;sBAAzC,KAAK;uBAAC,cAAc,CAAA;gBACZ,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;;;ACCR;;AAEG;MACU,kBAAkB,CAAA;AAmD7B,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAW,QAAQ,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KAClC;IA8BD,WAAmB,CAAA,EAAc,EAAU,QAAmB,EAAU,eAAgC,EAAU,MAAc,EACzF,oBAA0C,EAA4B,GAAQ,EAAA;QADlG,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAAU,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACzF,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAsB;QAA4B,IAAG,CAAA,GAAA,GAAH,GAAG,CAAK;QAzF3F,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAY3C;;AAEG;QACM,IAAU,CAAA,UAAA,GAAG,MAAM,CAAC;AAE7B;;AAEG;QACM,IAAS,CAAA,SAAA,GAA2B,SAAS,CAAC;QAE9C,IAAe,CAAA,eAAA,GAAG,aAAa,CAAC;AAMzC;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEtE;;;;AAIG;AACO,QAAA,IAAA,CAAA,SAAS,GAAkC,IAAI,wBAAwB,EAAO,CAAC;AAEzF;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAO,CAAC;AAM1D,QAAA,IAAA,CAAA,YAAY,GAAkC,IAAI,wBAAwB,EAAO,CAAC;AAYnF,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC;AAazB,QAAA,IAAA,CAAA,kBAAkB,GAAG,EAAE,CAAC;AACxB,QAAA,IAAA,CAAA,oBAAoB,GAAG,EAAE,CAAC;AAEnC,QAAA,IAAA,CAAA,QAAQ,GAAiB,IAAI,YAAY,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,iBAAiB,GAAiB,IAAI,YAAY,EAAE,CAAC;AAM9C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAW,CAAC;QAqR9C,IAAuB,CAAA,uBAAA,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,KAAI;AAC3E,YAAA,IAAI,IAAI,CAAC,iCAAiC,EAAE;AAC1C,gBAAA,YAAY,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,iCAAiC,GAAG,SAAS,CAAC;aACpD;AAED,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;YAC9E,MAAM,IAAI,GAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YAC5D,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;aAC9B;iBAAM;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aAC7B;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;aAC9C;AACD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;gBAChC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;aACvD;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClD,gBAAA,IAAI,CAAC,eAAe,CAAC,gCAAgC,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;aAC3F;iBAAM;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACnD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9D,gBAAA,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,gBAAA,eAAe,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC7C,gBAAA,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;aACnC;AACD,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;AAC1E,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC5F,SAAC,CAAC;AAEK,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,aAAa,GAAG,IAAI,KAAI;AACxD,YAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;aAClF;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,SAAS,CAAC;AACvD,gBAAA,IAAI,CAAC,eAAe,CAAC,gCAAgC,GAAG,SAAS,CAAC;aACnE;AACD,YAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,gCAAgC,GAAG,SAAS,CAAC;AACpD,SAAC,CAAC;AACK,QAAA,IAAA,CAAA,4BAA4B,GAAG,CAAC,aAAa,GAAG,IAAI,KAAI;AAC7D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;AACnD,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YAC1D,MAAM,gCAAgC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;;;;YAKrG,IAAI,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE;gBACnF,sBAAsB,CAAC,aAAa,CAAC,YAAY,CAC/C,sBAAsB,EACtB,gCAAgC,CACjC,CAAC;aACH;YACD,UAAU,CAAC,MAAK;gBACd,IAAI,sBAAsB,CAAC,aAAa,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE;oBACnF,sBAAsB,CAAC,aAAa,CAAC,YAAY,CAC/C,sBAAsB,EACtB,gCAAgC,CACjC,CAAC;iBACH;AACD,gBAAA,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,iCAAiC,GAAG,UAAU,CAAC,MAAK;AACvD,oBAAA,sBAAsB,CAAC,aAAa,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AACzE,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE;wBACtD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;wBACzC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACtD;iBACF,EAAE,OAAO,CAAC,CAAC;gBACZ,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,GAAG,SAAS,CAAC;AACvD,oBAAA,IAAI,CAAC,eAAe,CAAC,gCAAgC,GAAG,SAAS,CAAC;iBACnE;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;AACvC,gBAAA,IAAI,CAAC,gCAAgC,GAAG,SAAS,CAAC;AACpD,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AArWA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;KAC1B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3G,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3G,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzG,SAAC,CAAC,CAAC;KACJ;IAED,gBAAgB,GAAA;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;AAC3D,QAAA,WAAW,CAAC,GAAG,CACb,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAE9B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;oBAC7E,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBAC9C;aACF;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;gBAC9C,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,CAAC;uBAC/D,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;oBACvC,IAAI,CAAC,4BAA4B,EAAE,CAAC;iBACrC;qBAAM;oBACL,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBAChC;AACD,gBAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,SAAS,CAAC;aACpD;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjD,CAAC,CAAC,CAAC;AACN,QAAA,WAAW,CAAC,GAAG,CACb,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAC7E,CAAC;KACH;IAED,eAAe,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;AAClG,gBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;oBACnE,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBAChC;gBACD,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACvD,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aAC9C;SACF;KACF;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAC5D,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AACvF,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;oBAC7E,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBAC9C;AACD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;aACpC,CAAC,CAAC,CAAC;YACJ,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK;mBAC9D,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;;gBAEzF,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAChC;SACF;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;KAC7B;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAChE,IAAI,CAAC,eAAe,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAClE,IAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACtE,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;AAC9E,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvC,IAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;aACvE;AACD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAEhC,oBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvF,wBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1C,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;qBAC1E;iBACF;AAAM,qBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,mCAAmC,EAAE;AAClE,oBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,mCAAmC;yBAC5E,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;yBAClB,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC;oBACvC,IAAI,eAAe,EAAE;AACnB,wBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvF,4BAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;AAC7B,4BAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;AAEjC,gCAAA,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;6BACvC;AACD,4BAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE;AACpF,gCAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC;gCAC1C,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;6BAC1E;yBACF;qBACF;iBACF;aACF;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACnE,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;gBACnC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;;AAE9C,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAC/E,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG;oBAChC,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,UAAU,EAAE,eAAe,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO;oBAC3E,SAAS,EAAE,eAAe,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO;oBACzE,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;iBAC5B,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,iCAAiC,EAAE,CAAC;aAC1D;iBAAM;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG;oBAChC,IAAI,EAAE,YAAY,CAAC,IAAI;oBACvB,GAAG,EAAE,YAAY,CAAC,GAAG;AACrB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,YAAY,CAAC,KAAK;oBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;iBAC5B,CAAC;aACH;AACD,YAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;AACnE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;aACrC;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa;AACjC,mBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACxF,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC;qBACnE,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AACpD,qBAAA,OAAO,CAAC,CAAC,SAAS,KAAI;AACrB,oBAAA,IAAI,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;AAC7E,wBAAA,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBAC/C,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;qBACnD;yBAAM;AACL,wBAAA,UAAU,CAAC,QAAO,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;qBACzE;AACH,iBAAC,CAAC,CAAC;aACN;;AAED,YAAA,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,EAAE;gBAC3B,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aACpC;YACD,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;gBACnC,IAAI,OAAO,YAAY,CAAC,SAAS,CAAC,YAAY,KAAK,UAAU,EAAE;AAC7D,oBAAA,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,EAAG,CAAC,CAAC,CAAC;iBACzE;qBAAM;oBACL,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;oBACpC,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACtD;aACF;YACD,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC7C;aAAM;YACL,CAAC,CAAC,cAAc,EAAE,CAAC;SACpB;KACF;AAED,IAAA,OAAO,CAAC,CAAC,EAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;;AAElC,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,EAAE,CAAC;aAC3D;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;gBAC9C,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAChC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7H,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC;qBACnE,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AACpD,qBAAA,OAAO,CAAC,CAAC,SAAS,KAAI;AACrB,oBAAA,IAAI,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;wBAC7E,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;wBAC9C,SAAS,CAAC,uBAAuB,EAAE,CAAC;qBACrC;yBAAM;wBACL,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;qBAC/C;AACH,iBAAC,CAAC,CAAC;aACN;YACD,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;AAC/D,gBAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;AAC3C,gBAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3C,gBAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;aACjD;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACrC,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;aACjD;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1C,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5C,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnD,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5C,YAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnD,YAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACvD;QACD,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC3B;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;KAClC;AAEO,IAAA,SAAS,CAAC,CAAC,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,EAAE;AACtE,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAAC,gBAAA,OAAO,IAAI,CAAC;AAAC,aAAC;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAAE,gBAAA,OAAO,KAAK,CAAC;aAAE;AAC7C,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9D;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;IAEO,oBAAoB,GAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;SACnD;aAAM;YACL,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;SAClD;KACF;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACpE;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;AAEO,IAAA,aAAa,CAAC,KAAK,EAAA;QACzB,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;SACjB,CAAC;KACH;AAwFD,IAAA,eAAe,CAAC,kBAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACvC,YAAA,OAAO,kBAAkB,CAAC;SAC3B;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa;AACnC,iBAAA,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC;AAC1E,iBAAA,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE;AACnC,gBAAA,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,CAAC;aACrD;AACD,YAAA,OAAO,kBAAkB,CAAC;SAC3B;KACF;AAEO,IAAA,0BAA0B,CAAC,OAAoB,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;SAAE;;AAEzC,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE;AACxB,YAAA,OAAO,EAAE,GAAG;AACZ,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,GAAG,EAAE,eAAe,CAAC,GAAG,GAAG,IAAI;AAC/B,YAAA,IAAI,EAAE,eAAe,CAAC,IAAI,GAAG,IAAI;AACjC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;AACtD,QAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO;AACL,YAAA,OAAO,EAAE,cAAc,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI;AACnD,YAAA,OAAO,EAAE,cAAc,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG;SAClD,CAAC;KACH;AApeU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,oLA0F8D,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGA1FxF,kBAAkB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;;0BA8Fc,QAAQ;;0BAAI,IAAI;;0BAAuD,MAAM;2BAAC,QAAQ,CAAA;yCAzFzE,SAAS,EAAA,CAAA;sBAAlC,WAAW;uBAAC,WAAW,CAAA;gBAIf,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAMG,UAAU,EAAA,CAAA;sBADlB,WAAW;uBAAC,gCAAgC,CAAA;;sBAC5C,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAIG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAOG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAKG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAMG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEI,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAWG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAGG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAOG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;;;MCpFK,uBAAuB,CAAA;IASlC,WAA4B,CAAA,SAA6B,EAAU,eAAgC,EAAA;QAAvE,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoB;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAR1F,IAAc,CAAA,cAAA,GAAG,SAAS,CAAC;QAC3B,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,mCAAmC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,cAAc,GAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO,CAAC;QAEzD,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAGpB,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC;KACtC;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC;AAC1C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;AAC9C,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;AACpC,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;aACF;SACF;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,eAAe,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE;AAClC,gBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;oBACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;wBACjD,IAAI,CAAC,eAAe,EAAE,CAAC;qBACxB;iBACF;qBAAM;oBACL,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;aACF;SACF;KACF;IACD,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,gCAAgC,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC5B;KACF;IACD,sBAAsB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACxD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAC/B,IAAI,CAAC,qDAAqD,EAAE,CAAC;iBAC9D;aACF;iBAAM;AACL,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;aACrC;SACF;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAED,qDAAqD,GAAA;AACnD,QAAA,IACE,IAAI,CAAC,eAAe,CAAC,SAAS;YAC9B,IAAI,CAAC,eAAe,CAAC,iBAAiB;AACtC,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,EAClE;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;KACF;IACD,gCAAgC,GAAA;AAC9B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;AAC7E,YAAA,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChD;QACD,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;KACnD;IAED,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;SACpE;KACF;AACD,IAAA,eAAe,CAAC,QAAS,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;QACjG,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACpC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI;AAC/B,gBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS;gBAClD,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;aAClC,CAAC;AACF,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnH;KACF;AACD,IAAA,oBAAoB,CAAC,QAAS,EAAA;AAC5B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;SACjD;KACF;IAEO,oBAAoB,CAAC,KAAY,EAAE,MAAW,EAAA;AACpD,QAAA,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAChC,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpB;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,sBAAsB,CAAC,KAAY,EAAE,MAAW,EAAA;QACtD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;AACD,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACpC,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACxB;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,+BAA+B,GAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC;SACb;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AAC9C,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC;SACzH;KACF;IAED,MAAM,GAAA;QACJ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;KACxG;IAEM,cAAc,GAAA;;AAEnB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;SACR;;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS;YAClD,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AAClC,SAAA,CAAC,CAAC;KACJ;+GA5JU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mCAAA,EAAA,qCAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;;0BAUc,IAAI;oEARR,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,mCAAmC,EAAA,CAAA;sBAA3C,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACI,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MCLI,+BAA+B,CAAA;AAK1C,IAAA,WAAA,CAAoB,EAAc,EAAU,GAAsB,EAAU,eAAgC,EAAA;QAAxF,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAHnG,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;KAGsF;AAEhH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;iBAAM;gBACL,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;SACF;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;KAEF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACnD;KACF;IACD,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAClD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACnD;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;KACF;IACM,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;+GAlDU,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,+IAJhC,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAID,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,mBAAmB,EAAE,KAAK;AAC3B,iBAAA,CAAA;0IAGU,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;MCNK,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;QAEY,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;AACvB,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,eAAe,CAAW,EAAE,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,OAAO,GAAyB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAC3E,YAAY,CAAC,GAAG,CAAC,CAClB,CAAC;AAoBH,KAAA;AAnBQ,IAAA,QAAQ,CAAC,CAAI,EAAA;QAClB,IAAI,CAAC,CAAC,EAAE;YAAC,OAAO;SAAE;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;KACF;AACM,IAAA,UAAU,CAAC,CAAI,EAAA;QACpB,IAAI,CAAC,CAAC,EAAE;YAAC,OAAO;SAAE;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvC;KACF;IACM,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAChC;+GAxBU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA,EAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;;AA6BX;MACa,kBAAkB,CAAA;AAC7B,IAAA,WAAA,CAAqB,GAAiC,EAAA;QAAjC,IAAG,CAAA,GAAA,GAAH,GAAG,CAA8B;KAAI;IAE1D,QAAQ,GAAA;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACxC;IACD,WAAW,GAAA;QACT,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC1C;+GARU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlB,kBAAkB,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAF9B,SAAS;;AAaJ,MAAO,cAAkB,SAAQ,SAAY,CAAA;AAEjD,IAAA,WAAA,CAAoB,GAAiC,EAAA;AACnD,QAAA,KAAK,EAAE,CAAC;QADU,IAAG,CAAA,GAAA,GAAH,GAAG,CAA8B;KAEpD;IACM,EAAE,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO;SAAE;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;KACzE;IAEM,GAAG,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SACxB;KACF;AACF;;ACvDK,MAAO,iCAAkC,SAAQ,yBAA4C,CAAA;+GAAtF,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAjC,iCAAiC,EAAA,CAAA,CAAA,EAAA;;4FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;;AAGL,MAAO,qCAAsC,SAAQ,yBAAgD,CAAA;+GAA9F,qCAAqC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAArC,qCAAqC,EAAA,CAAA,CAAA,EAAA;;4FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD,UAAU;;;MCFE,mBAAmB,CAAA;AAKvB,IAAA,kBAAkB,CAAC,IAAkC,EAAA;AAC1D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;AACM,IAAA,kBAAkB,CAAC,SAAiB,EAAA;AACzC,QAAA,IAAI,SAAS,KAAK,EAAE,EAAE;AACpB,YAAA,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;KAC5G;AAEM,IAAA,kBAAkB,CAAC,IAAsC,EAAA;AAC9D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC9B;AACM,IAAA,kBAAkB,CAAC,SAAiB,EAAA;AACzC,QAAA,IAAI,SAAS,KAAK,EAAE,EAAE;AACpB,YAAA,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;KACpH;+GAvBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACQL,MAAO,iBAAkB,SAAQ,kBAAqC,CAAA;IAK1E,WACS,CAAA,EAAc,EACO,SAA6B,EACjD,mBAAwC,EACxC,eAAgC,EAChC,WAA8C,EAAA;QAEtD,KAAK,CAAC,WAAW,CAAC,CAAC;QANZ,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QACO,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoB;QACjD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAChC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmC;QATpC,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;AAoChD,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,IAAa,KAAI;YACjC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1F,SAAC,CAAC;AA3BA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAK;gBACvE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC;gBACnI,IAAI,CAAC,eAAe,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC;aACzE,CAAC,CAAC,CAAC;AACJ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC/D,gBAAA,IAAI,CAAC,eAAe,CAAC,uBAAuB,GAAG,SAAS,CAAC;AACzD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;aACtC,CAAC,CAAC,CAAC;SACL;QACD,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;KACrB;IAMD,aAAa,CAAC,QAAqB,EAAE,IAAa,EAAA;AAChD,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;KAC7C;+GA5CU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAjB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACtB,iBAAA,CAAA;;0BAQI,QAAQ;;0BAAI,IAAI;gJANC,aAAa,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;;;MCIP,wBAAwB,CAAA;AAMnC,IAAA,WAAA,CAAoB,mBAAwC,EACxC,WAA8C,EAC9C,eAAsD,EAAA;QAFtD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmC;QAC9C,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuC;AAP1E,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;KAQxB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAoB,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAwB,IAAI,CAAC,eAAe,CAAC,CAAC;KACrF;IACD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CACjC,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAC1D,CACF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CACjC,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAC1D,CACF,CAAC;KACH;IACD,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SACxB;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;KACzB;+GArCU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EANxB,QAAA,EAAA,oBAAA,EAAA,SAAA,EAAA;YACT,mBAAmB;YACnB,iCAAiC;YACjC,qCAAqC;AACtC,SAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAEU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE;wBACT,mBAAmB;wBACnB,iCAAiC;wBACjC,qCAAqC;AACtC,qBAAA;AACF,iBAAA,CAAA;;;ACZD,IAAY,qBAGX,CAAA;AAHD,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,qBAAA,CAAA,qBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACd,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA,CAAA;AAYM,MAAM,oCAAoC,GAAG;AAClD,IAAA,OAAO,EAAE,CAAC,CAAS,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG;CACtD;;MCNY,2BAA2B,CAAA;AAsBtC,IAAA,WAAA,CAAoB,EAAc,EAAU,IAAY,EAAU,eAAgC,EAC5D,GAAQ,EAAA;QAD1B,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAC5D,IAAG,CAAA,GAAA,GAAH,GAAG,CAAK;QAtBrC,IAAQ,CAAA,QAAA,GAAoB,EAAE,CAAC;QAC/B,IAAQ,CAAA,QAAA,GAAoB,IAAI,CAAC;QACjC,IAAiB,CAAA,iBAAA,GAA0C,OAAO,CAAC;AACnE,QAAA,IAAA,CAAA,OAAO,GAA4B,oCAAoC,CAAC,OAAO,CAAC;QAChF,IAAS,CAAA,SAAA,GAAwB,GAAG,CAAC;QAMrC,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;AAI3B,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;AAStD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;KAC1B;IAED,eAAe,GAAA;;AAEb,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC7D,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;;AAEzD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACxG,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1G,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;;AAE/B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAY,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;iBAC3E,IAAI,CACH,GAAG,CAAC,KAAK,IAAK,EAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EACjE,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAC/D,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAY,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC;AAC5E,iBAAA,IAAI,CACH,GAAG,CAAC,KAAK,IAAK,EAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,EACjE,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AAChE,iBAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAErD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnBC,KAAW,CACT,SAAS,CAAY,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EACpD,SAAS,CAAY,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CACtD,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;YAEvD,IAAI,CAAC,YAAY,CAAC,GAAG,CACnBA,KAAW,CACT,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EAC/D,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CACjE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,CACjD,CAAC;;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AACxD,iBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;iBACnE,SAAS,CAAC,KAAK,IAAG;gBACjB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACxH,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;aAC3H,CAAC,CACL,CAAC;;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;AACzC,iBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;iBACnE,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CACzC,CAAC;;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,MAAK;AACjD,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;oBAAC,OAAO;iBAAE;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;oBAC/B,UAAU,CAAC,MAAK;;wBAEd,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;wBAC/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAClD,qBAAC,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;aACJ,CAAC,CACH,CAAC;;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnBA,KAAW,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;iBAC3E,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC/C,gBAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;aACjC,CAAC,CACL,CAAC;AACJ,SAAC,CAAC,CAAC;QACH,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB,EAAE,CAAC,CAAC,CAAC;KACP;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACjC;AAED,IAAA,cAAc,CAAC,SAA8B,EAAE,WAAkC,EAClE,OAAgC,EAAA;AAC7C,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAO;SACR;AACD,QAAA,MAAM,UAAU,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,WAAW,GAAG,YAAY,CAAC;AACpE,QAAA,MAAM,SAAS,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,SAAS,GAAG,SAAS,CAAC;AAC9D,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,aAAa,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,QAAQ,GAAG,OAAO,CAAC;QAC/D,MAAM,aAAa,GAAG,CAAC,WAAW,KAAK,qBAAqB,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzH,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAChE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QAE5C,OAAO,CAAC,KAAgB,KAAI;AAC1B,YAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;aAAE;AACrD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAAE,gBAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;aAAE;AACrD,YAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAAE,KAAK,GAAG,CAAE,KAAK,CAAC;aAAE;AACtC,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;aACnC;AACD,YAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,MAAK;gBACjD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACtF,gBAAA,aAAa,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;AAC1C,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;AAE3B,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,qBAAqB,CAAC,QAAQ;AACnF,wBAAC,CAAC,aAAa,CAAC,UAAU,CAAC;AAC1B,0BAAA,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC;0BACtD,aAAa,CAAC,eAAe,CAAC;0BAC9B,aAAa,CAAC,eAAe,CAAC,MAC5B,aAAa,CAAC,eAAe,CAAC;AAC/B,2BAAA,WAAW,KAAK,qBAAqB,CAAC,OAAO,CAAC,EACjD;AACA,oBAAA,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC3C,oBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;iBAC9C;AACD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACpC,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;aAC1C;AACH,SAAC,CAAC;KACH;AACD,IAAA,iBAAiB,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;aACzB;SACF;KACF;IACD,eAAe,CAAC,SAA8B,EAAE,WAAkC,EAAA;AAChF,QAAA,OAAO,CAAC,SAAS,KAAK,GAAG,IAAI,WAAW,KAAK,qBAAqB,CAAC,OAAO,IAAI,QAAQ;gBAClF,SAAS,KAAK,GAAG,IAAI,WAAW,KAAK,qBAAqB,CAAC,QAAQ,IAAI,KAAK,CAAC;gBAC7E,SAAS,KAAK,GAAG,IAAI,WAAW,KAAK,qBAAqB,CAAC,OAAO,IAAI,OAAO,CAAC;AAC/E,gBAAC,SAAS,KAAK,GAAG,IAAI,WAAW,KAAK,qBAAqB,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,QAAQ,CAAC;KAChG;AACD,IAAA,aAAa,CAAC,SAA8B,EAAA;AAC1C,QAAA,OAAO,CAAC,SAAS,KAAK,GAAG,IAAI,MAAM;gBAC/B,SAAS,KAAK,GAAG,IAAK,KAAK,CAAC,IAAI,MAAM,CAAC;KAC5C;IAED,gBAAgB,CAAC,SAA8B,EAAE,WAAkC,EAAA;QACjF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAA,0CAAA,EAA6C,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;;AAE7G,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAE/C,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAGtD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;;AAE5B,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAC1E,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,WAAW,CAAC,IAAiB,EAAE,SAA8B,EAAE,WAAkC,EAAA;QAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;AAC3D,QAAA,MAAM,aAAa,GAAG,SAAS,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC7D,MAAM,iBAAiB,GAAG,CAAC,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ;cACjE,IAAI,CAAC,iBAAiB;cACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAChD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU;gBAC/B,WAAW,KAAK,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC1G,QAAA,IAAI,KAAK,GAAG,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,iBAAiB,CAAC;AACxE,QAAA,IAAI,MAAM,GAAI,SAAS,KAAK,GAAG,GAAG,iBAAiB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC3E,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,aAAa,CAAC,WAAW,EAAE;AAC7B,gBAAA,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,aAAa,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;aACvE;AACD,YAAA,IAAI,aAAa,CAAC,YAAY,EAAE;AAC9B,gBAAA,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,IAAI,aAAa,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;aAC1E;SACF;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;KAC5B;AAED,IAAA,kBAAkB,CAAE,IAAiB,EAAE,SAA8B,EAAE,WAAkC,EAAA;AACvG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;AACvD,QAAA,MAAM,aAAa,GAAG,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;AAC7D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU;gBAC/B,WAAW,KAAK,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACpG,eAAA,aAAa,CAAC;QAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/F,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,IAA2B,EAAE,WAAoB,EAAA;AACzF,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,KAAK,CAAC;SACd;QACD,MAAM,oBAAoB,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACpE,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;AAC1D,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;AAChD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;AACtB,YAAA,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;AACzB,YAAA,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;AACnB,YAAA,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAC7B,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE;YAAE,MAAM,GAAG,CAAC,CAAC,CAAC;SAAE;QAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;cACxD,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,GAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM;eAClF,WAAW,IAAI,CAAC,CAAC;AAClB,cAAA,IAAI,CAAC;KACd;IAED,UAAU,GAAA;AACR,QAAA,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,CAAC,OAAO,EAAC;YACzE,EAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,qBAAqB,CAAC,QAAQ,EAAC;AAC7E,SAAA;aACE,OAAO,CAAC,IAAI,IAAG;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACvE,SAAC,CAAC,CAAC;KACN;AAED,IAAA,oBAAoB,CAAC,aAAkB,EAAE,aAA0B,EAAE,SAA8B,EAAE,WAAkC,EAAA;AACrI,QAAA,MAAM,UAAU,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,WAAW,GAAG,YAAY,CAAC;AACpE,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,eAAe,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,cAAc,GAAG,aAAa,CAAC;AAC7E,QAAA,MAAM,aAAa,GAAG,CAAC,SAAS,KAAK,GAAG,IAAI,QAAQ,GAAG,OAAO,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,qBAAqB,CAAC,QAAQ,MACpF,IAAI,CAAC,GAAG,CACN,aAAa,CAAC,UAAU,CAAC;AACvB,cAAA,CAAC,aAAa,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC;cACtD,aAAa,CAAC,eAAe,CAAC;cAC9B,aAAa,CAAC,eAAe,CAAC;AAC9B,cAAA,aAAa,CAAC,eAAe,CAAC,CACjC,GAAG,CAAC;AACF,eAAA,WAAW,KAAK,qBAAqB,CAAC,OAAO,CACjD,EAAE;AACD,YAAA,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;SAC9C;aAAM;AACL,YAAA,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;SAC7C;KACF;IAED,mBAAmB,GAAA;QACjB,IAAI,IAAI,CAAC,gBAAgB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAC1D,YAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;SACnC;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;KACjC;IAED,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAA;QAC9B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAChC;aAAM;AACL,YAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClC,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAClC;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;SAAE;QAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,EAAE;YAC5C,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAClD,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC;aAC/D;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE;AAC/C,gBAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;aACzE;SACF;AACD,QAAA,IAAI,IAAI,CAAC,eAAe,YAAY,KAAK,EAAE;YACzC,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClD,gBAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACzE;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE;gBAC/C,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC7C,oBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,iBAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACf;SACF;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAvUU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,8FAuBlB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAvBjB,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAChC,iBAAA,CAAA;;0BAwBc,MAAM;2BAAC,QAAQ,CAAA;yCAtBnB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAIG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;;;AClBF,MAAO,+BAAgC,SAAQ,2BAA2B,CAAA;AAJhF,IAAA,WAAA,GAAA;;QAKsB,IAAa,CAAA,aAAA,GAAwB,GAAG,CAAC;AAO9D,KAAA;IAHC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACzD;+GAPU,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA/B,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,QAAQ,EAAE,yBAAyB;AACpC,iBAAA,CAAA;8BAEqB,aAAa,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;;;MCRP,SAAS,CAAA;AASpB,IAAA,WAAA,CAAY,KAAU,EAAE,IAAS,EAAE,WAAyB,EAAE,SAAkB,EAAE,aAAsB,EAAE,UAAoB,EAClH,YAAsB,EAAE,aAA0B,EAAA;AAC5D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACpC;AACF;;MCMY,kBAAkB,CAAA;IAsG7B,WAAsB,CAAA,EAAc,EAAU,QAAmB,EAAU,eAAgC,EAAU,MAAc,EAC7F,GAAQ,EAAA;QADxB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAAU,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAC7F,IAAG,CAAA,GAAA,GAAH,GAAG,CAAK;AArG9C;;AAEK;AACK,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEtE;;AAEK;AACK,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAO,CAAC;AAErE;;AAEK;AACK,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAO,CAAC;AAEtE;;AAEK;AACK,QAAA,IAAA,CAAA,SAAS,GAA4B,IAAI,YAAY,EAAa,CAAC;AAO7E;;AAEK;QACI,IAAS,CAAA,SAAA,GAA2B,SAAS,CAAC;QAE9C,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAA,CAAA,gBAAgB,GAAQ,EAAC,eAAe,EAAE,CAAC,SAAS,EAAE,CAAkC,gCAAA,CAAA,CAAC,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AAEnH;;AAEK;QACI,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;AAE9B;;AAEK;QACI,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAYjC;;AAEM;QACG,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;AAEtC;;AAEM;QACG,IAAmB,CAAA,mBAAA,GAAmC,SAAS,CAAC;;QAmBjE,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QAEd,IAAS,CAAA,SAAA,GAAG,SAAS,CAAC;;AAa9B,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,OAAO,EAAiC,CAAC;AACzE,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,OAAO,EAAO,CAAC;AAsQpC,QAAA,IAAA,CAAA,6BAA6B,GAAG,CAAC,KAAK,KAAI;YAChD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC;AAClD,mBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,mBAAA,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;AAC5D,SAAC,CAAC;QAmPF,IAAc,CAAA,cAAA,GAAG,MAAK;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;AAC5E,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC9E,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC3D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAC,CAAC,CAAC;AACnI,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AA/fA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;KAC1B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,kBAAkB,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;AAClD,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AACxG,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;AACD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACpC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrD;aACF;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC1E,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACpC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrD;aACF;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAE,MAAK;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAY,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;iBAC9E,IAAI,CACH,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACtC,oBAAoB,CAAC,CAAC,IAAI,EAAG,OAAO,KAAI;gBACtC,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtH,IAAI,IAAI,EAAE;oBAAE,OAAO,CAAC,cAAc,EAAE,CAAC;oBAAC,OAAO,CAAC,eAAe,EAAE,CAAC;iBAAE;AAClE,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC,CACH;AACA,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAC5C,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC1F,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC1F,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;YACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;SAC5C;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;SAC1E;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;QACpG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC;KAClI;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAAC,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;SAAE;KACnE;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;QACT,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7B;AAED,IAAA,QAAQ,CAAC,CAAC,EAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5D,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAG;oBAC5C,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;oBAC1E,IAAI,aAAa,EAAE;AACjB,wBAAA,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;qBACxD;oBACD,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACjD,iBAAC,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;aAC9B;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,MAAM,cAAc,GACd,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClH,YAAA,IAAI,IAAI,CAAC,aAAa,KACpB,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAC5C,mBAAA,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC;oBACvD,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AACtF,oBAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC;AACxF,aAAA,EAAE;gBACD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK;AAC/E,wBAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ;AACzE,4BAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,QAAQ,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,EACrF;;AAEA,oBAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAE/B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBAEpC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAC9D,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE;wBAC/D,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;qBACxD;iBACF;qBAAM;AACL,oBAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;iBAChC;aACF;iBAAM;AACL,gBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;AACjE,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;wBAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;qBACpC;yBAAM;AACL,wBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;qBACrC;iBACF;aACF;AACD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACpC,oBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;oBAC1E,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,oBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC9C,wBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;qBACxF;iBACF;aACF;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC5B;KACF;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;;QAET,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,EAAE,CAAC;aACvC;YACD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;QACD,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7B;AAGD,IAAA,IAAI,CAAC,CAAC,EAAA;QACJ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO;SAAE;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnF,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnD,IAAI,aAAa,GAA8B,EAAE,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvF,YAAA,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC;AACnF,iBAAA,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;SACpG;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,SAAS,CACX,CAAC,EACD,IAAI,CAAC,eAAe,CAAC,QAAQ,EAC7B,IAAI,CAAC,eAAe,CAAC,SAAS,EAC9B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,EACpG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EACjF,IAAI,CAAC,eAAe,CAAC,UAAU,EAC/B,IAAI,CAAC,eAAe,CAAC,YAAY,EACjC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa;cAC/B,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;AAC1D,cAAE,SAAS,CACd,CACF,CAAC;;AAEF,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,EAAE,CAAC;SAC3D;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtD;AACD,QAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AAClE,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAClC,gBAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE;oBAC9E,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;iBAC/C;AAAM,qBAAA,IAAI,SAAS,CAAC,iBAAiB,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAC5F,oBAAA,SAAS,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;iBAC/C;qBAAM;oBACL,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC9C,oBAAA,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;iBAC1C;AACH,aAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1C,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACvD;AAED,IAAA,SAAS,CAAC,CAAC,EAAA;QACT,IAAI,CAAC,CAAC,EAAE;AAAE,YAAA,OAAO,KAAK,CAAC;SAAE;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACrC,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YACtC,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAClD,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC;aACzD;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE;AAC/C,gBAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aACnE;SACF;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,YAAY,KAAK,EAAE;YACnC,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClD,gBAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACnE;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,YAAY,KAAK,EAAE;gBAC/C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACvC,oBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,iBAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACf;SACF;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;AAC9B,QAAA,OAAO,OAAO,CAAC;KAChB;;;AAUO,IAAA,cAAc,CAAC,KAAK,EAAA;AAC1B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,WAAW,CAAC;SACpB;AACD,QAAA,WAAW,GAAG,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAExD,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;SAChE;;AAED,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,IAClB,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB;eAC9C,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CACpD,EAAE;AACD,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,IAC3B,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC;mBAC/C,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CACtD,CAAC;SACH;;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACzE,YAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjG,YAAA,IAAI,CAAC,CAAC,KAAK,cAAc,EAAE;AACzB,gBAAA,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;aACpC;SACF;;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;AAC9C,YAAA,MAAM,0BAA0B,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;AACrH,YAAA,IAAI,CAAC,CAAC,KAAK,0BAA0B,EAAE;AACrC,gBAAA,IAAI,CAAC,WAAW,GAAG,0BAA0B,GAAG,CAAC,CAAC;AAClD,gBAAA,QAAQ,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;aAChD;iBAAM;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;aACvB;SACF;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;SACvB;;AAED,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;;AAEvF,QAAA,IAAI,CAAC,CAAC,KAAK,gBAAgB,EAAE;AAC3B,YAAA,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;SACtC;;AAED,QAAA,IAAI,CAAC,CAAC,KAAK,gBAAgB,IAAI,CAAC,CAAC,KAAM,IAAI,CAAC,WAAW,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE;YAC9F,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;AACD,QAAA,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;AACpF,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,KAC3C,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;eACtB,KAAK,CAAC,kBAAkB,KAAK,WAAW;mBACxC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAC7E,CAAC;QACF,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,QAAQ,CAAC,MAAM;eACpE,CAAC,CAAC,KAAK,aAAa;AACpB,eAAA,YAAY,GAAG,CAAC,CAAC,EACpB;YACA,MAAM,SAAS,GAAG,aAAa,CAAC;;AAEhC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACxC,OAAO,IAAI,CAAC,WAAW,CAAC;aACzB;AAED,YAAA,WAAW,GAAG;AACZ,gBAAA,KAAK,EAAE,SAAS,GAAG,YAAY,GAAI,YAAY,IAAI,YAAY,GAAG,CAAC,CAAC;AACpE,gBAAA,EAAE,EAAG,QAAQ,CAAC,YAAY,CAAC;gBAC3B,QAAQ,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO;aACxD,CAAC;AAEF,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AACnC,YAAA,OAAO,WAAW,CAAC;SACpB;AAED,QAAA,IAAI,WAAW,KAAK,IAAI,CAAC,aAAa;AACjC,eAAA,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC;eACzD,WAAW,MAAM,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;AACpF,gBAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC,EACxF;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;AACxC,gBAAA,OAAO,WAAW,CAAC;aACpB;;YAED,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAElC,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW;uBACtC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;oBAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBACvD,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC;AACxD,oBAAA,WAAW,GAAG,EAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;AAC/F,oBAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AACnC,oBAAA,OAAO,WAAW,CAAC;iBACpB;gBACD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACvE,gBAAA,IAAI,eAAe,KAAK,QAAQ,EAAE;AAChC,oBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxC,WAAW,GAAG,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAC,CAAC;AAC1F,oBAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;oBACnC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;iBACP;qBAAM;;iBAEN;aACF;YACD,IAAI,CAAC,SAAS,EAAE;AACd,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxC,WAAW,GAAG,EAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAG,EAAE,EAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAC,CAAC;AACpH,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;aAClC;AACD,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC7C,YAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;AACzC,gBAAA,WAAW,GAAG,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAC,CAAC;AAC5G,gBAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;aAC7B;iBAAM;AACL,gBAAA,WAAW,GAAG;oBACZ,KAAK,EAAE,QAAQ,CAAC,MAAM;AACtB,oBAAA,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1D,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,MAAM,EAAE,WAAW;iBACpB,CAAC;AACF,gBAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;aAC5B;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;AACnC,YAAA,OAAO,WAAW,CAAC;SACpB;QACD,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACrC,gBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC;AACxD,gBAAA,WAAW,GAAG,EAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;AAC/F,gBAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;gBACnC,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;aACP;SACF;QACD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,WAAW,GAAG,EAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,EAAE,QAAQ,EAAE,OAAO,EAAC,CAAC;aAC/F;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;SACzC;AACD,QAAA,OAAO,WAAW,CAAC;KACpB;IAEO,YAAY,CAAC,KAAU,EAAE,aAAkB,EAAA;AACjD,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGnD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,cAAc,GAAG;AACrB,gBAAA,MAAM,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;AAChF,gBAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;aAC9E,CAAC;YACF,MAAM,qBAAqB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEzD,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,gBAAA,MAAM,aAAa,IAAI,IAAI,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACnF,IAAI,aAAa,GAAG,GAAG,IAAK,aAAa,IAAI,GAAG,EAAE;AAChD,oBAAA,OAAO,QAAQ,CAAC;iBACjB;AAAM,qBAAA,IAAI,aAAa,GAAG,GAAG,EAAE;AAC9B,oBAAA,MAAM,oBAAoB,IACxB,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM;AAClE,0BAAA,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAI,cAAc,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CACrE,CAAC;AACF,oBAAA,IAAI,oBAAoB,IAAI,GAAG,EAAE;AAC/B,wBAAA,OAAO,QAAQ,CAAC;qBACjB;iBACF;aACF;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,GAAG,gBAAgB,IAAI,IAAI,IAAI,qBAAqB;AACzF,iBAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,GAAG,eAAe,IAAI,IAAI,IAAI,oBAAoB,CAAC,EAAE;;AAExF,gBAAA,OAAO,QAAQ,CAAC;aACjB;iBAAM,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,GAAG,qBAAqB;mBAC/D,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;iBAC1C,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,GAAG,oBAAoB;uBACtD,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,EAAG;;AAEhD,gBAAA,OAAO,QAAQ,CAAC;aACjB;SACF;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;AAChD,gBAAA,OAAO,QAAQ,CAAC;aACjB;AACD,YAAA,OAAO,OAAO,CAAC;SAChB;;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,aAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAG;AAC1D,YAAA,OAAO,OAAO,CAAC;SAChB;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAEO,mBAAmB,CAAC,KAAU,EAAE,aAAkB,EAAA;;QAExD,MAAM,IAAI,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC;AAChE,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnD,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC3E,IAAI,CAAC,aAAa,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAChF;AACA,gBAAA,OAAO,QAAQ,CAAC;aACjB;AACD,YAAA,OAAO,SAAS,CAAC;SAClB;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,aAAC,IAAI,CAAC,aAAa,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAG;AAC1D,YAAA,OAAO,QAAQ,CAAC;SACjB;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;;AAWO,IAAA,iBAAiB,CAAC,WAAW,EAAA;AACnC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AACnD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;QACrD,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,GAAuC,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,YAAY,KAAI;YACzC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9B,YAAA,OAAO,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC;AAC3C,SAAC,CAAC;AACF,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,MAAM,qBAAqB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC3E,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,aAAa,CAChD,CAAC;AAEF,YAAA,IAAI,WAAW,CAAC,EAAE,KAAK,IAAI,EAAE;AAC3B,gBAAA,GAAG,GAAG;AACJ,oBAAA,OAAO,EAAE,QAAQ;iBAClB,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAClD;iBAAM;AACL,gBAAA,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACrC,oBAAA,GAAG,GAAG;AACJ,wBAAA,OAAO,EAAE,QAAQ;qBAClB,CAAC;oBACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC1B;AAAM,qBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,IAAI,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AAC1G,oBAAA,GAAG,GAAG;AACJ,wBAAA,OAAO,EAAE,QAAQ;qBAClB,CAAC;oBACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,cAAc,GAAG,IAAI,CAAC;iBACvB;AAAM,qBAAA,IAAI,WAAW,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC3C,oBAAA,IAAI,WAAW,CAAC,EAAE,CAAC,WAAW,IAAI,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS;AACjE,2BAAA,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;;AAE7E,wBAAA,GAAG,GAAG;AACJ,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,KAAK,EAAE,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;yBACrG,CAAC;AACF,wBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;qBAE3F;yBAAM;AACL,wBAAA,GAAG,GAAG;AACJ,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,KAAK,EAAE,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;yBACzF,CAAC;AACF,wBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;qBAC/E;iBACF;qBAAM;AACL,oBAAA,GAAG,GAAG;AACJ,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,KAAK,EAAE,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC;qBACrF,CAAC;AACF,oBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;iBACnE;aACF;SACF;AACD,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,cAAc,CAAC;AAC/C,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;YAC9C,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC;iBAAO;AACN,gBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;KACF;AAEO,IAAA,yBAAyB,CAAC,KAAK,EAAA;QACrC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC3F,YAAA,OAAO,IAAI,CAAC;SACb;aAAM;AACL,YAAA,OAAO,KAAK,CAAC;SACd;KACF;IACO,wBAAwB,CAAC,IAAI,GAAG,IAAI,EAAA;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC;QAC/D,IAAI,IAAI,EAAE;AACR,YAAA,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;SACrD;aAAM;AACL,YAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;SACxD;KACF;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACvE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAClC,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA,CAAC,CAAC;SACJ;KACF;IAEO,uBAAuB,CAAC,SAAS,EAAE,WAAY,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,MAAM,sBAAsB,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxF,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/D,gBAAA,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE;oBAC5C,IAAI,WAAW,EAAE;AACf,wBAAA,IAAI,OAAO,KAAK,WAAW,CAAC,EAAE,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,EAAE;4BACnE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;yBACpD;qBACF;yBAAM;wBACL,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;qBACpD;iBACF;aACF;SACF;KACF;AAEO,IAAA,kBAAkB,CAAC,EAAO,EAAA;AAChC,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACpC,YAAA,OAAO,SAAS,CAAC;SAClB;AACD,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;SAC5D;AACD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;gBACtD,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;aACP;SACF;AACD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KACrC;IACO,YAAY,CAAC,KAAK,EAAE,IAAoB,EAAA;AAC9C,QAAA,IAAI,SAAS,CAAC;AACd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,UAAU,IAAI,CAAC,CAAC;QACxG,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC;AACrG,QAAA,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,SAAS,GAAG,CAAC,CAAC;SACf;AAAM,aAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AAC9B,YAAA,SAAS,GAAG,WAAW,IAAI,KAAK,CAAC;SAClC;aAAM;AACL,YAAA,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC;SAChC;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,8BAA8B,CAAC,aAAa,EAAA;;AAE1C,QAAA,IAAI,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACjD,MAAM,EAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACvC,aAAC,aAAa,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE;AAChG,YAAA,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACpC,gBAAA,MAAM,EAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAC,GAAI,aAAa,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;gBACjG,IAAI,GAAG,EAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC;aAC9F;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IACD,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;AAvwBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,uHAuGT,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAvGjB,kBAAkB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;;0BAwGc,MAAM;2BAAC,QAAQ,CAAA;yCAlGlB,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAKG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAKG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAKG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAKE,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAKG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAKG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAKG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAKG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAKG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACG,2BAA2B,EAAA,CAAA;sBAAnC,KAAK;gBAyMN,IAAI,EAAA,CAAA;sBADH,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AC3R5B,MAAO,qBAAsB,SAAQ,kBAAyC,CAAA;AAQlF,IAAA,WAAA,CACS,EAAc,EACO,SAA6B,EACjD,mBAAwC,EACxC,eAAsD,EAAA;QAE9D,KAAK,CAAC,eAAe,CAAC,CAAC;QALhB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QACO,IAAS,CAAA,SAAA,GAAT,SAAS,CAAoB;QACjD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;QACxC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAuC;QAXxC,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACf,QAAA,IAAA,CAAA,SAAS,GAAa,GAAG,CAAC;AACtD,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE,CAAC;AAmChD,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,WAA4C,KAAI;YAChE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC;AACnI,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,IAAG;gBACrC,GAAG,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,GAAuC,KAAI;YAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC;AACnI,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,IAAG;gBACrC,GAAG,CAAC,wBAAwB,CAAC;oBAC3B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,GAAG,CAAC,aAAa;AAC5B,oBAAA,SAAS,EAAE,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC;AAClE,iBAAA,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAvCA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC5B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC3E,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CACrE,CAAC;SACH;QACD,KAAK,CAAC,QAAQ,EAAE,CAAC;KAClB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;KACrB;IAkBD,oBAAoB,CAAC,MAAM,EAAE,KAAM,EAAA;QACjC,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE;AACnG,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChD;IAED,iBAAiB,CAAC,WAA4C,EAAE,SAAS,EAAA;AACvE,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,kBAAkB,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC;SACxD;AACD,QAAA,MAAM,EAAC,KAAK,EAAE,MAAM,EAAC,GAAG,WAAW,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;SAC1F;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;SACxF;QACD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;KAEjE;AAED,IAAA,wBAAwB,CAAC,GAAkC,EAAA;QACzD,IAAI,GAAG,CAAC,OAAO,KAAK,cAAc,IAAI,GAAG,CAAC,SAAS,EAAE;AACnD,YAAA,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5D,OAAO;SACR;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE;YAC7C,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5C,OAAO;SACR;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE;YAC7C,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC5C,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC7C;YACD,OAAO;SACR;KACF;+GAhGU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,qCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAArB,qBAAqB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,eAAA,EAAA,eAAA,CAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA,CAAA;;0BAYI,QAAQ;;0BAAI,IAAI;yHATK,aAAa,EAAA,CAAA;sBAApC,KAAK;uBAAC,eAAe,CAAA;gBACM,SAAS,EAAA,CAAA;sBAApC,KAAK;uBAAC,mBAAmB,CAAA;;;ACX5B;;AAEG;MACU,iBAAiB,CAAA;AAM5B,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAJZ,IAAc,CAAA,cAAA,GAAG,GAAG,CAAC;QAEjC,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QACA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;KACZ;+GAN1B,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAjB,iBAAiB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA,CAAA;+EAMsB,cAAc,EAAA,CAAA;sBADlC,WAAW;uBAAC,gBAAgB,CAAA;;sBAC5B,KAAK;uBAAC,WAAW,CAAA;gBAET,cAAc,EAAA,CAAA;sBADtB,WAAW;uBAAC,uBAAuB,CAAA;;sBACnC,KAAK;gBAC0B,SAAS,EAAA,CAAA;sBAAxC,WAAW;uBAAC,iBAAiB,CAAA;;;MCsCnB,cAAc,CAAA;+GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAhCvB,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,2BAA2B;YAC3B,+BAA+B;YAC/B,uBAAuB;YACvB,iBAAiB;YACjB,qBAAqB;YACrB,wBAAwB;YACxB,oBAAoB;YACpB,oBAAoB;YACpB,+BAA+B,CAAA,EAAA,OAAA,EAAA,CAbvB,YAAY,CAAA,EAAA,OAAA,EAAA,CAgBpB,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,2BAA2B;YAC3B,+BAA+B;YAC/B,uBAAuB;YACvB,iBAAiB;YACjB,qBAAqB;YACrB,wBAAwB;YACxB,oBAAoB;YACpB,oBAAoB;YACpB,+BAA+B,CAAA,EAAA,CAAA,CAAA,EAAA;AAOtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EALd,SAAA,EAAA;YACT,eAAe;AAChB,SAAA,EAAA,OAAA,EAAA,CA/BS,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAkCX,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnC1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE;wBACZ,kBAAkB;wBAClB,kBAAkB;wBAClB,iBAAiB;wBACjB,2BAA2B;wBAC3B,+BAA+B;wBAC/B,uBAAuB;wBACvB,iBAAiB;wBACjB,qBAAqB;wBACrB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,+BAA+B;AAChC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,kBAAkB;wBAClB,kBAAkB;wBAClB,iBAAiB;wBACjB,2BAA2B;wBAC3B,+BAA+B;wBAC/B,uBAAuB;wBACvB,iBAAiB;wBACjB,qBAAqB;wBACrB,wBAAwB;wBACxB,oBAAoB;wBACpB,oBAAoB;wBACpB,+BAA+B;AAChC,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,eAAe;AAChB,qBAAA;AAEF,iBAAA,CAAA;;;AClDD;;AAEG;;;;"}