{"version":3,"file":"Timeline.mjs","sources":["../../../../../packages/shared/widgets/Timeline.ts"],"sourcesContent":["import { getElement } from '@vue-cesium/utils/private/dom'\nimport TimelineHighlightRange from './TimelineHighlightRange'\nimport TimelineTrack from './TimelineTrack'\n\nlet timelineWheelDelta = 1e12\n\nconst timelineMouseMode = {\n  none: 0,\n  scrub: 1,\n  slide: 2,\n  zoom: 3,\n  touchOnly: 4\n}\nconst timelineTouchMode = {\n  none: 0,\n  scrub: 1,\n  slideZoom: 2,\n  singleTap: 3,\n  ignore: 4\n}\n\nconst timelineTicScales = [\n  0.001,\n  0.002,\n  0.005,\n  0.01,\n  0.02,\n  0.05,\n  0.1,\n  0.25,\n  0.5,\n  1.0,\n  2.0,\n  5.0,\n  10.0,\n  15.0,\n  30.0,\n  60.0, // 1min\n  120.0, // 2min\n  300.0, // 5min\n  600.0, // 10min\n  900.0, // 15min\n  1800.0, // 30min\n  3600.0, // 1hr\n  7200.0, // 2hr\n  14400.0, // 4hr\n  21600.0, // 6hr\n  43200.0, // 12hr\n  86400.0, // 24hr\n  172800.0, // 2days\n  345600.0, // 4days\n  604800.0, // 7days\n  1296000.0, // 15days\n  2592000.0, // 30days\n  5184000.0, // 60days\n  7776000.0, // 90days\n  15552000.0, // 180days\n  31536000.0, // 365days\n  63072000.0, // 2years\n  126144000.0, // 4years\n  157680000.0, // 5years\n  315360000.0, // 10years\n  630720000.0, // 20years\n  1261440000.0, // 40years\n  1576800000.0, // 50years\n  3153600000.0, // 100years\n  6307200000.0, // 200years\n  12614400000.0, // 400years\n  15768000000.0, // 500years\n  31536000000.0 // 1000years\n]\n\nconst timelineMonthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n// const timelineMonthNames = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n\nexport default class VcTimeline {\n  container: Element\n  _topDiv: HTMLDivElement\n  _endJulian: any\n  _epochJulian: any\n  _lastXPos: any\n  _scrubElement: any\n  _startJulian: any\n  _timeBarSecondsSpan: any\n  _clock: Cesium.Clock\n  _scrubJulian: Cesium.JulianDate\n  _mainTicSpan: number\n  _mouseMode: number\n  _touchMode: number\n  _touchState: { centerX: number; spanX: number }\n  _mouseX: number\n  _timelineDrag: number\n  _timelineDragLocation: any\n  _lastHeight: any\n  _lastWidth: any\n  _timeBarEle: any\n  _trackContainer: any\n  _trackListEle: any\n  _needleEle: any\n  _rulerEle: any\n  _context: any\n  _trackList: any[]\n  _highlightRanges: any[]\n  _onMouseDown: (e: any) => void\n  _onMouseUp: (e: any) => void\n  _onMouseMove: (e: any) => void\n  _onMouseWheel: (e: any) => void\n  _onTouchStart: (e: any) => void\n  _onTouchMove: (e: any) => void\n  _onTouchEnd: (e: any) => void\n  constructor(container: Element, clock: Cesium.Clock) {\n    const { defined, DeveloperError } = Cesium\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(container)) {\n      throw new DeveloperError('container is required.')\n    }\n    if (!defined(clock)) {\n      throw new DeveloperError('clock is required.')\n    }\n    //>>includeEnd('debug');\n\n    container = getElement(container)\n\n    const ownerDocument = container.ownerDocument\n\n    /**\n     * Gets the parent container.\n     * @type {Element}\n     */\n    this.container = container\n\n    const topDiv = ownerDocument.createElement('div')\n    topDiv.className = 'cesium-timeline-main'\n    container.appendChild(topDiv)\n    this._topDiv = topDiv\n\n    this._endJulian = undefined\n    this._epochJulian = undefined\n    this._lastXPos = undefined\n    this._scrubElement = undefined\n    this._startJulian = undefined\n    this._timeBarSecondsSpan = undefined\n    this._clock = clock\n    this._scrubJulian = clock.currentTime\n    this._mainTicSpan = -1\n    this._mouseMode = timelineMouseMode.none\n    this._touchMode = timelineTouchMode.none\n    this._touchState = {\n      centerX: 0,\n      spanX: 0\n    }\n    this._mouseX = 0\n    this._timelineDrag = 0\n    this._timelineDragLocation = undefined\n    this._lastHeight = undefined\n    this._lastWidth = undefined\n\n    this._topDiv.innerHTML =\n      '<div class=\"cesium-timeline-bar\"></div><div class=\"cesium-timeline-trackContainer\">' +\n      '<canvas class=\"cesium-timeline-tracks\" width=\"10\" height=\"1\">' +\n      '</canvas></div><div class=\"cesium-timeline-needle\"></div><span class=\"cesium-timeline-ruler\"></span>'\n    this._timeBarEle = this._topDiv.childNodes[0]\n    this._trackContainer = this._topDiv.childNodes[1]\n    this._trackListEle = this._topDiv.childNodes[1].childNodes[0]\n    this._needleEle = this._topDiv.childNodes[2]\n    this._rulerEle = this._topDiv.childNodes[3]\n    this._context = this._trackListEle.getContext('2d')\n\n    this._trackList = []\n    this._highlightRanges = []\n\n    this.zoomTo(clock.startTime, clock.stopTime)\n\n    this._onMouseDown = createMouseDownCallback(this)\n    this._onMouseUp = createMouseUpCallback(this)\n    this._onMouseMove = createMouseMoveCallback(this)\n    this._onMouseWheel = createMouseWheelCallback(this)\n    this._onTouchStart = createTouchStartCallback(this)\n    this._onTouchMove = createTouchMoveCallback(this)\n    this._onTouchEnd = createTouchEndCallback(this)\n\n    const timeBarEle = this._timeBarEle\n    ownerDocument.addEventListener('mouseup', this._onMouseUp, false)\n    ownerDocument.addEventListener('mousemove', this._onMouseMove, false)\n    timeBarEle.addEventListener('mousedown', this._onMouseDown, false)\n    timeBarEle.addEventListener('DOMMouseScroll', this._onMouseWheel, false) // Mozilla mouse wheel\n    timeBarEle.addEventListener('mousewheel', this._onMouseWheel, false)\n    timeBarEle.addEventListener('touchstart', this._onTouchStart, false)\n    timeBarEle.addEventListener('touchmove', this._onTouchMove, false)\n    timeBarEle.addEventListener('touchend', this._onTouchEnd, false)\n    timeBarEle.addEventListener('touchcancel', this._onTouchEnd, false)\n\n    this._topDiv.oncontextmenu = function () {\n      return false\n    }\n\n    clock.onTick.addEventListener(this.updateFromClock, this)\n    this.updateFromClock()\n  }\n\n  smallestTicInPixels = 7.0\n\n  addEventListener(type, listener, useCapture) {\n    this._topDiv.addEventListener(type, listener, useCapture)\n  }\n\n  removeEventListener(type, listener, useCapture) {\n    this._topDiv.removeEventListener(type, listener, useCapture)\n  }\n\n  isDestroyed() {\n    return false\n  }\n\n  destroy() {\n    this._clock.onTick.removeEventListener(this.updateFromClock, this)\n\n    const doc = this.container.ownerDocument\n    doc.removeEventListener('mouseup', this._onMouseUp, false)\n    doc.removeEventListener('mousemove', this._onMouseMove, false)\n\n    const timeBarEle = this._timeBarEle\n    timeBarEle.removeEventListener('mousedown', this._onMouseDown, false)\n    timeBarEle.removeEventListener('DOMMouseScroll', this._onMouseWheel, false) // Mozilla mouse wheel\n    timeBarEle.removeEventListener('mousewheel', this._onMouseWheel, false)\n    timeBarEle.removeEventListener('touchstart', this._onTouchStart, false)\n    timeBarEle.removeEventListener('touchmove', this._onTouchMove, false)\n    timeBarEle.removeEventListener('touchend', this._onTouchEnd, false)\n    timeBarEle.removeEventListener('touchcancel', this._onTouchEnd, false)\n    this.container.removeChild(this._topDiv)\n    Cesium.destroyObject(this)\n  }\n\n  addHighlightRange(color, heightInPx, base) {\n    const newHighlightRange = new TimelineHighlightRange(color, heightInPx, base)\n    this._highlightRanges.push(newHighlightRange)\n    this.resize()\n    return newHighlightRange\n  }\n\n  addTrack(interval, heightInPx, color, backgroundColor) {\n    // console.log('addTrack', interval, heightInPx, color, backgroundColor)\n    const newTrack = new TimelineTrack(interval, heightInPx, color, backgroundColor)\n    this._trackList.push(newTrack)\n    this._lastHeight = undefined\n    this.resize()\n    return newTrack\n  }\n\n  resize() {\n    const width = this.container.clientWidth\n    const height = this.container.clientHeight\n\n    if (width === this._lastWidth && height === this._lastHeight) {\n      return\n    }\n\n    this._trackContainer.style.height = `${height}px`\n\n    let trackListHeight = 1\n    this._trackList.forEach(function (track) {\n      trackListHeight += track.height\n    })\n    this._trackListEle.style.height = `${trackListHeight.toString()}px`\n    this._trackListEle.width = this._trackListEle.clientWidth\n    this._trackListEle.height = trackListHeight\n    this._makeTics()\n\n    this._lastXPos = undefined\n    this._lastWidth = width\n    this._lastHeight = height\n  }\n\n  zoomTo(startTime, stopTime) {\n    const { defined, JulianDate, DeveloperError, ClockRange } = Cesium\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(startTime)) {\n      throw new DeveloperError('startTime is required.')\n    }\n    if (!defined(stopTime)) {\n      throw new DeveloperError('stopTime is required')\n    }\n    if (JulianDate.lessThanOrEquals(stopTime, startTime)) {\n      throw new DeveloperError('Start time must come before end time.')\n    }\n    //>>includeEnd('debug');\n\n    this._startJulian = startTime\n    this._endJulian = stopTime\n    this._timeBarSecondsSpan = JulianDate.secondsDifference(stopTime, startTime)\n\n    // If clock is not unbounded, clamp timeline range to clock.\n    if (this._clock && this._clock.clockRange !== ClockRange.UNBOUNDED) {\n      const clockStart = this._clock.startTime\n      const clockEnd = this._clock.stopTime\n      const clockSpan = JulianDate.secondsDifference(clockEnd, clockStart)\n      const startOffset = JulianDate.secondsDifference(clockStart, this._startJulian)\n      const endOffset = JulianDate.secondsDifference(clockEnd, this._endJulian)\n\n      if (this._timeBarSecondsSpan >= clockSpan) {\n        // if new duration longer than clock range duration, clamp to full range.\n        this._timeBarSecondsSpan = clockSpan\n        this._startJulian = this._clock.startTime\n        this._endJulian = this._clock.stopTime\n      } else if (startOffset > 0) {\n        // if timeline start is before clock start, shift right\n        this._endJulian = JulianDate.addSeconds(this._endJulian, startOffset, new JulianDate())\n        this._startJulian = clockStart\n        this._timeBarSecondsSpan = JulianDate.secondsDifference(this._endJulian, this._startJulian)\n      } else if (endOffset < 0) {\n        // if timeline end is after clock end, shift left\n        this._startJulian = JulianDate.addSeconds(this._startJulian, endOffset, new JulianDate())\n        this._endJulian = clockEnd\n        this._timeBarSecondsSpan = JulianDate.secondsDifference(this._endJulian, this._startJulian)\n      }\n    }\n\n    this._makeTics()\n\n    // const evt = document.createEvent('Event')\n    const evt: any = new Event('setzoom', { bubbles: true, cancelable: true, composed: true })\n    // evt.initEvent('setzoom', true, true)\n    evt.startJulian = this._startJulian\n    evt.endJulian = this._endJulian\n    evt.epochJulian = this._epochJulian\n    evt.totalSpan = this._timeBarSecondsSpan\n    evt.mainTicSpan = this._mainTicSpan\n    this._topDiv.dispatchEvent(evt)\n  }\n\n  updateFromClock() {\n    const { defined, JulianDate } = Cesium\n    this._scrubJulian = this._clock.currentTime\n    const scrubElement = this._scrubElement\n    if (defined(this._scrubElement)) {\n      const seconds = JulianDate.secondsDifference(this._scrubJulian, this._startJulian)\n      const xPos = Math.round((seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan)\n\n      if (this._lastXPos !== xPos) {\n        this._lastXPos = xPos\n\n        scrubElement.style.left = `${xPos - 8}px`\n        this._needleEle.style.left = `${xPos}px`\n      }\n    }\n    if (defined(this._timelineDragLocation)) {\n      this._setTimeBarTime(this._timelineDragLocation, (this._timelineDragLocation * this._timeBarSecondsSpan) / this._topDiv.clientWidth)\n      this.zoomTo(\n        JulianDate.addSeconds(this._startJulian, this._timelineDrag, new JulianDate()),\n        JulianDate.addSeconds(this._endJulian, this._timelineDrag, new JulianDate())\n      )\n    }\n  }\n\n  _setTimeBarTime(xPos, seconds) {\n    const { JulianDate } = Cesium\n    xPos = Math.round(xPos)\n    this._scrubJulian = JulianDate.addSeconds(this._startJulian, seconds, new JulianDate())\n    if (this._scrubElement) {\n      const scrubX = xPos - 8\n      this._scrubElement.style.left = `${scrubX.toString()}px`\n      this._needleEle.style.left = `${xPos.toString()}px`\n    }\n\n    // const evt = document.createEvent('Event')\n    // evt.initEvent('settime', true, true)\n    const evt: any = new Event('settime', { bubbles: true, cancelable: true, composed: true })\n    evt.clientX = xPos\n    evt.timeSeconds = seconds\n    evt.timeJulian = this._scrubJulian\n    evt.clock = this._clock\n    this._topDiv.dispatchEvent(evt)\n  }\n\n  zoomFrom(amount) {\n    const { JulianDate } = Cesium\n    let centerSec = JulianDate.secondsDifference(this._scrubJulian, this._startJulian)\n    if (amount > 1 || centerSec < 0 || centerSec > this._timeBarSecondsSpan) {\n      centerSec = this._timeBarSecondsSpan * 0.5\n    } else {\n      centerSec += centerSec - this._timeBarSecondsSpan * 0.5\n    }\n    const centerSecFlip = this._timeBarSecondsSpan - centerSec\n    this.zoomTo(\n      JulianDate.addSeconds(this._startJulian, centerSec - centerSec * amount, new JulianDate()),\n      JulianDate.addSeconds(this._endJulian, centerSecFlip * amount - centerSecFlip, new JulianDate())\n    )\n  }\n\n  makeLabel(time) {\n    const { JulianDate } = Cesium\n    const gregorian = JulianDate.toGregorianDate(time)\n    const millisecond = gregorian.millisecond\n    let millisecondString = ' UTC'\n    if (millisecond > 0 && this._timeBarSecondsSpan < 3600) {\n      millisecondString = Math.floor(millisecond).toString()\n      while (millisecondString.length < 3) {\n        millisecondString = `0${millisecondString}`\n      }\n      millisecondString = `.${millisecondString}`\n    }\n\n    return `${timelineMonthNames[gregorian.month - 1]} ${gregorian.day} ${gregorian.year} ${twoDigits(gregorian.hour)}:${twoDigits(\n      gregorian.minute\n    )}:${twoDigits(gregorian.second)}${millisecondString}`\n  }\n\n  _makeTics() {\n    const { JulianDate } = Cesium\n    const timeBar = this._timeBarEle\n\n    const seconds = JulianDate.secondsDifference(this._scrubJulian, this._startJulian)\n    const xPos = Math.round((seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan)\n    const scrubX = xPos - 8\n    let tic\n    const widget = this\n\n    this._needleEle.style.left = `${xPos.toString()}px`\n\n    let tics = ''\n\n    const minimumDuration = 0.01\n    const maximumDuration = 31536000000.0 // ~1000 years\n    const epsilon = 1e-10\n\n    // If time step size is known, enter it here...\n    let minSize = 0\n\n    let duration = this._timeBarSecondsSpan\n    if (duration < minimumDuration) {\n      duration = minimumDuration\n      this._timeBarSecondsSpan = minimumDuration\n      this._endJulian = JulianDate.addSeconds(this._startJulian, minimumDuration, new JulianDate())\n    } else if (duration > maximumDuration) {\n      duration = maximumDuration\n      this._timeBarSecondsSpan = maximumDuration\n      this._endJulian = JulianDate.addSeconds(this._startJulian, maximumDuration, new JulianDate())\n    }\n\n    let timeBarWidth = this._timeBarEle.clientWidth\n    if (timeBarWidth < 10) {\n      timeBarWidth = 10\n    }\n    const startJulian = this._startJulian\n\n    // epsilonTime: a small fraction of one pixel width of the timeline, measured in seconds.\n    const epsilonTime = Math.min((duration / timeBarWidth) * 1e-5, 0.4)\n\n    // epochJulian: a nearby time to be considered \"zero seconds\", should be a round-ish number by human standards.\n    let epochJulian\n    const gregorianDate = JulianDate.toGregorianDate(startJulian)\n    if (duration > 315360000) {\n      // 3650+ days visible, epoch is start of the first visible century.\n      epochJulian = JulianDate.fromDate(new Date(Date.UTC(Math.floor(gregorianDate.year / 100) * 100, 0)))\n    } else if (duration > 31536000) {\n      // 365+ days visible, epoch is start of the first visible decade.\n      epochJulian = JulianDate.fromDate(new Date(Date.UTC(Math.floor(gregorianDate.year / 10) * 10, 0)))\n    } else if (duration > 86400) {\n      // 1+ day(s) visible, epoch is start of the year.\n      epochJulian = JulianDate.fromDate(new Date(Date.UTC(gregorianDate.year, 0)))\n    } else {\n      // Less than a day on timeline, epoch is midnight of the visible day.\n      epochJulian = JulianDate.fromDate(new Date(Date.UTC(gregorianDate.year, gregorianDate.month, gregorianDate.day)))\n    }\n\n    // startTime: Seconds offset of the left side of the timeline from epochJulian.\n    const startTime = JulianDate.secondsDifference(this._startJulian, JulianDate.addSeconds(epochJulian, epsilonTime, new JulianDate()))\n    // endTime: Seconds offset of the right side of the timeline from epochJulian.\n    let endTime = startTime + duration\n    this._epochJulian = epochJulian\n\n    function getStartTic(ticScale) {\n      return Math.floor(startTime / ticScale) * ticScale\n    }\n\n    function getNextTic(tic, ticScale) {\n      return Math.ceil(tic / ticScale + 0.5) * ticScale\n    }\n\n    function getAlpha(time) {\n      return (time - startTime) / duration\n    }\n\n    function remainder(x, y) {\n      //return x % y;\n      return x - y * Math.round(x / y)\n    }\n\n    // Width in pixels of a typical label, plus padding\n    this._rulerEle.innerHTML = this.makeLabel(JulianDate.addSeconds(this._endJulian, -minimumDuration, new JulianDate()))\n    let sampleWidth = this._rulerEle.offsetWidth + 20\n    if (sampleWidth < 30) {\n      // Workaround an apparent IE bug with measuring the width after going full-screen from inside an iframe.\n      sampleWidth = 180\n    }\n\n    const origMinSize = minSize\n    minSize -= epsilon\n\n    const renderState: any = {\n      startTime: startTime,\n      startJulian: startJulian,\n      epochJulian: epochJulian,\n      duration: duration,\n      timeBarWidth: timeBarWidth,\n      getAlpha: getAlpha\n    }\n    this._highlightRanges.forEach(function (highlightRange) {\n      tics += highlightRange.render(renderState)\n    })\n\n    // Calculate tic mark label spacing in the TimeBar.\n    let mainTic = 0.0,\n      subTic = 0.0,\n      tinyTic = 0.0\n    // Ideal labeled tic as percentage of zoom interval\n    let idealTic = sampleWidth / timeBarWidth\n    if (idealTic > 1.0) {\n      // Clamp to width of window, for thin windows.\n      idealTic = 1.0\n    }\n    // Ideal labeled tic size in seconds\n    idealTic *= this._timeBarSecondsSpan\n    let ticIndex = -1,\n      smallestIndex = -1\n\n    const ticScaleLen = timelineTicScales.length\n    let i\n    for (i = 0; i < ticScaleLen; ++i) {\n      const sc = timelineTicScales[i]\n      ++ticIndex\n      mainTic = sc\n      // Find acceptable main tic size not smaller than ideal size.\n      if (sc > idealTic && sc > minSize) {\n        break\n      }\n      if (smallestIndex < 0 && timeBarWidth * (sc / this._timeBarSecondsSpan) >= this.smallestTicInPixels) {\n        smallestIndex = ticIndex\n      }\n    }\n    if (ticIndex > 0) {\n      while (ticIndex > 0) {\n        // Compute sub-tic size that evenly divides main tic.\n        --ticIndex\n        if (Math.abs(remainder(mainTic, timelineTicScales[ticIndex])) < 0.00001) {\n          if (timelineTicScales[ticIndex] >= minSize) {\n            subTic = timelineTicScales[ticIndex]\n          }\n          break\n        }\n      }\n\n      if (smallestIndex >= 0) {\n        while (smallestIndex < ticIndex) {\n          // Compute tiny tic size that evenly divides sub-tic.\n          if (Math.abs(remainder(subTic, timelineTicScales[smallestIndex])) < 0.00001 && timelineTicScales[smallestIndex] >= minSize) {\n            tinyTic = timelineTicScales[smallestIndex]\n            break\n          }\n          ++smallestIndex\n        }\n      }\n    }\n\n    minSize = origMinSize\n    if (minSize > epsilon && tinyTic < 0.00001 && Math.abs(minSize - mainTic) > epsilon) {\n      tinyTic = minSize\n      if (minSize <= mainTic + epsilon) {\n        subTic = 0.0\n      }\n    }\n\n    let lastTextLeft = -999999,\n      textWidth\n    if (timeBarWidth * (tinyTic / this._timeBarSecondsSpan) >= 3.0) {\n      for (tic = getStartTic(tinyTic); tic <= endTime; tic = getNextTic(tic, tinyTic)) {\n        tics += `<span class=\"cesium-timeline-ticTiny\" style=\"left: ${Math.round(timeBarWidth * getAlpha(tic)).toString()}px;\"></span>`\n      }\n    }\n    if (timeBarWidth * (subTic / this._timeBarSecondsSpan) >= 3.0) {\n      for (tic = getStartTic(subTic); tic <= endTime; tic = getNextTic(tic, subTic)) {\n        tics += `<span class=\"cesium-timeline-ticSub\" style=\"left: ${Math.round(timeBarWidth * getAlpha(tic)).toString()}px;\"></span>`\n      }\n    }\n    if (timeBarWidth * (mainTic / this._timeBarSecondsSpan) >= 2.0) {\n      this._mainTicSpan = mainTic\n      endTime += mainTic\n      tic = getStartTic(mainTic)\n      const leapSecond = JulianDate.computeTaiMinusUtc(epochJulian)\n      while (tic <= endTime) {\n        let ticTime = JulianDate.addSeconds(startJulian, tic - startTime, new JulianDate())\n        if (mainTic > 2.1) {\n          const ticLeap = JulianDate.computeTaiMinusUtc(ticTime)\n          if (Math.abs(ticLeap - leapSecond) > 0.1) {\n            tic += ticLeap - leapSecond\n            ticTime = JulianDate.addSeconds(startJulian, tic - startTime, new JulianDate())\n          }\n        }\n        const ticLeft = Math.round(timeBarWidth * getAlpha(tic))\n        const ticLabel = this.makeLabel(ticTime)\n        this._rulerEle.innerHTML = ticLabel\n        textWidth = this._rulerEle.offsetWidth\n        if (textWidth < 10) {\n          // IE iframe fullscreen sampleWidth workaround, continued.\n          textWidth = sampleWidth\n        }\n        const labelLeft = ticLeft - (textWidth / 2 - 1)\n        if (labelLeft > lastTextLeft) {\n          lastTextLeft = labelLeft + textWidth + 5\n          tics +=\n            `<span class=\"cesium-timeline-ticMain\" style=\"left: ${ticLeft.toString()}px;\"></span>` +\n            `<span class=\"cesium-timeline-ticLabel\" style=\"left: ${labelLeft.toString()}px;\">${ticLabel}</span>`\n        } else {\n          tics += `<span class=\"cesium-timeline-ticSub\" style=\"left: ${ticLeft.toString()}px;\"></span>`\n        }\n        tic = getNextTic(tic, mainTic)\n      }\n    } else {\n      this._mainTicSpan = -1\n    }\n\n    tics += `<span class=\"cesium-timeline-icon16\" style=\"left:${scrubX}px;bottom:0;background-position: 0 0;\"></span>`\n    timeBar.innerHTML = tics\n    this._scrubElement = timeBar.lastChild\n\n    // Clear track canvas.\n    this._context.clearRect(0, 0, this._trackListEle.width, this._trackListEle.height)\n\n    renderState.y = 0\n    this._trackList.forEach(function (track) {\n      track.render(widget._context, renderState)\n      renderState.y += track.height\n    })\n  }\n}\n\nfunction createMouseDownCallback(timeline) {\n  return function (e) {\n    if (timeline._mouseMode !== timelineMouseMode.touchOnly) {\n      if (e.button === 0) {\n        timeline._mouseMode = timelineMouseMode.scrub\n        if (timeline._scrubElement) {\n          timeline._scrubElement.style.backgroundPosition = '-16px 0'\n        }\n        timeline._onMouseMove(e)\n      } else {\n        timeline._mouseX = e.clientX\n        if (e.button === 2) {\n          timeline._mouseMode = timelineMouseMode.zoom\n        } else {\n          timeline._mouseMode = timelineMouseMode.slide\n        }\n      }\n    }\n    e.preventDefault()\n  }\n}\n\nfunction createMouseUpCallback(timeline) {\n  return function (e) {\n    timeline._mouseMode = timelineMouseMode.none\n    if (timeline._scrubElement) {\n      timeline._scrubElement.style.backgroundPosition = '0 0'\n    }\n    timeline._timelineDrag = 0\n    timeline._timelineDragLocation = undefined\n  }\n}\n\nfunction createMouseMoveCallback(timeline) {\n  return function (e) {\n    let dx\n    if (timeline._mouseMode === timelineMouseMode.scrub) {\n      e.preventDefault()\n      const x = e.clientX - timeline._topDiv.getBoundingClientRect().left\n      // console.log(`createMouseMoveCallback scrub; x: ${x}; clientWidth: ${timeline._topDiv.clientWidth};`)\n      if (x < 0) {\n        timeline._timelineDragLocation = 0\n        timeline._timelineDrag = -0.01 * timeline._timeBarSecondsSpan\n      } else if (x > timeline._topDiv.clientWidth) {\n        timeline._timelineDragLocation = timeline._topDiv.clientWidth\n        timeline._timelineDrag = 0.01 * timeline._timeBarSecondsSpan\n      } else {\n        // console.log('_setTimeBarTime')\n        timeline._timelineDragLocation = undefined\n        timeline._setTimeBarTime(x, (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth)\n      }\n    } else if (timeline._mouseMode === timelineMouseMode.slide) {\n      // console.log('createMouseMoveCallback slide')\n      dx = timeline._mouseX - e.clientX\n      timeline._mouseX = e.clientX\n      if (dx !== 0) {\n        const { JulianDate } = Cesium\n        const dsec = (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth\n        timeline.zoomTo(\n          JulianDate.addSeconds(timeline._startJulian, dsec, new JulianDate()),\n          JulianDate.addSeconds(timeline._endJulian, dsec, new JulianDate())\n        )\n      }\n    } else if (timeline._mouseMode === timelineMouseMode.zoom) {\n      // console.log('createMouseMoveCallback zoom')\n      dx = timeline._mouseX - e.clientX\n      timeline._mouseX = e.clientX\n      if (dx !== 0) {\n        timeline.zoomFrom(Math.pow(1.01, dx))\n      }\n    }\n  }\n}\n\nfunction createMouseWheelCallback(timeline) {\n  return function (e) {\n    let dy = e.wheelDeltaY || e.wheelDelta || -e.detail\n    timelineWheelDelta = Math.max(Math.min(Math.abs(dy), timelineWheelDelta), 1)\n    dy /= timelineWheelDelta\n    timeline.zoomFrom(Math.pow(1.05, -dy))\n  }\n}\n\nfunction createTouchStartCallback(timeline) {\n  return function (e) {\n    const len = e.touches.length\n    let seconds, xPos\n    const leftX = timeline._topDiv.getBoundingClientRect().left\n    e.preventDefault()\n    timeline._mouseMode = timelineMouseMode.touchOnly\n    if (len === 1) {\n      seconds = Cesium.JulianDate.secondsDifference(timeline._scrubJulian, timeline._startJulian)\n      xPos = Math.round((seconds * timeline._topDiv.clientWidth) / timeline._timeBarSecondsSpan + leftX)\n      if (Math.abs(e.touches[0].clientX - xPos) < 50) {\n        timeline._touchMode = timelineTouchMode.scrub\n        if (timeline._scrubElement) {\n          timeline._scrubElement.style.backgroundPosition = len === 1 ? '-16px 0' : '0 0'\n        }\n      } else {\n        timeline._touchMode = timelineTouchMode.singleTap\n        timeline._touchState.centerX = e.touches[0].clientX - leftX\n      }\n    } else if (len === 2) {\n      timeline._touchMode = timelineTouchMode.slideZoom\n      timeline._touchState.centerX = (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX\n      timeline._touchState.spanX = Math.abs(e.touches[0].clientX - e.touches[1].clientX)\n    } else {\n      timeline._touchMode = timelineTouchMode.ignore\n    }\n  }\n}\n\nfunction createTouchEndCallback(timeline) {\n  return function (e) {\n    const len = e.touches.length,\n      leftX = timeline._topDiv.getBoundingClientRect().left\n    if (timeline._touchMode === timelineTouchMode.singleTap) {\n      timeline._touchMode = timelineTouchMode.scrub\n      timeline._onTouchMove(e)\n    } else if (timeline._touchMode === timelineTouchMode.scrub) {\n      timeline._onTouchMove(e)\n    }\n    timeline._mouseMode = timelineMouseMode.touchOnly\n    if (len !== 1) {\n      timeline._touchMode = len > 0 ? timelineTouchMode.ignore : timelineTouchMode.none\n    } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n      timeline._touchState.centerX = e.touches[0].clientX - leftX\n    }\n    if (timeline._scrubElement) {\n      timeline._scrubElement.style.backgroundPosition = '0 0'\n    }\n  }\n}\n\nfunction createTouchMoveCallback(timeline) {\n  return function (e) {\n    let dx,\n      x,\n      len,\n      newCenter,\n      newSpan,\n      newStartTime,\n      zoom = 1\n    const leftX = timeline._topDiv.getBoundingClientRect().left\n    if (timeline._touchMode === timelineTouchMode.singleTap) {\n      timeline._touchMode = timelineTouchMode.slideZoom\n    }\n    timeline._mouseMode = timelineMouseMode.touchOnly\n    if (timeline._touchMode === timelineTouchMode.scrub) {\n      e.preventDefault()\n      if (e.changedTouches.length === 1) {\n        x = e.changedTouches[0].clientX - leftX\n        if (x >= 0 && x <= timeline._topDiv.clientWidth) {\n          timeline._setTimeBarTime(x, (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth)\n        }\n      }\n    } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n      len = e.touches.length\n      if (len === 2) {\n        newCenter = (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX\n        newSpan = Math.abs(e.touches[0].clientX - e.touches[1].clientX)\n      } else if (len === 1) {\n        newCenter = e.touches[0].clientX - leftX\n        newSpan = 0\n      }\n\n      const { defined, JulianDate } = Cesium\n\n      if (defined(newCenter)) {\n        if (newSpan > 0 && timeline._touchState.spanX > 0) {\n          // Zoom and slide\n          zoom = timeline._touchState.spanX / newSpan\n          newStartTime = JulianDate.addSeconds(\n            timeline._startJulian,\n            (timeline._touchState.centerX * timeline._timeBarSecondsSpan - newCenter * timeline._timeBarSecondsSpan * zoom) /\n              timeline._topDiv.clientWidth,\n            new JulianDate()\n          )\n        } else {\n          // Slide to newCenter\n          dx = timeline._touchState.centerX - newCenter\n          newStartTime = JulianDate.addSeconds(\n            timeline._startJulian,\n            (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth,\n            new JulianDate()\n          )\n        }\n\n        timeline.zoomTo(newStartTime, JulianDate.addSeconds(newStartTime, timeline._timeBarSecondsSpan * zoom, new JulianDate()))\n        timeline._touchState.centerX = newCenter\n        timeline._touchState.spanX = newSpan\n      }\n    }\n  }\n}\n\nfunction twoDigits(num) {\n  return num < 10 ? `0${num.toString()}` : num.toString()\n}\n"],"names":["TimelineHighlightRange","tic"],"mappings":";;;;;AAIA,IAAI,kBAAqB,GAAA,IAAA,CAAA;AAEzB,MAAM,iBAAoB,GAAA;AAAA,EACxB,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AAAA,EACN,SAAW,EAAA,CAAA;AACb,CAAA,CAAA;AACA,MAAM,iBAAoB,GAAA;AAAA,EACxB,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,SAAW,EAAA,CAAA;AAAA,EACX,SAAW,EAAA,CAAA;AAAA,EACX,MAAQ,EAAA,CAAA;AACV,CAAA,CAAA;AAEA,MAAM,iBAAoB,GAAA;AAAA,EACxB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,IAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,KAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,MAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,QAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,QAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,QAAA;AAAA;AAAA,EACA,OAAA;AAAA;AAAA,EACA,OAAA;AAAA;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,CAAC,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAG9G,MAAqB,UAAW,CAAA;AAAA,EAmC9B,WAAA,CAAY,WAAoB,KAAqB,EAAA;AA0FrD,IAAsB,IAAA,CAAA,mBAAA,GAAA,CAAA,CAAA;AAzFpB,IAAM,MAAA,EAAE,OAAS,EAAA,cAAA,EAAmB,GAAA,MAAA,CAAA;AAEpC,IAAI,IAAA,CAAC,OAAQ,CAAA,SAAS,CAAG,EAAA;AACvB,MAAM,MAAA,IAAI,eAAe,wBAAwB,CAAA,CAAA;AAAA,KACnD;AACA,IAAI,IAAA,CAAC,OAAQ,CAAA,KAAK,CAAG,EAAA;AACnB,MAAM,MAAA,IAAI,eAAe,oBAAoB,CAAA,CAAA;AAAA,KAC/C;AAGA,IAAA,SAAA,GAAY,WAAW,SAAS,CAAA,CAAA;AAEhC,IAAA,MAAM,gBAAgB,SAAU,CAAA,aAAA,CAAA;AAMhC,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAEjB,IAAM,MAAA,MAAA,GAAS,aAAc,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAChD,IAAA,MAAA,CAAO,SAAY,GAAA,sBAAA,CAAA;AACnB,IAAA,SAAA,CAAU,YAAY,MAAM,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAA;AAEf,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA,CAAA;AAClB,IAAA,IAAA,CAAK,YAAe,GAAA,KAAA,CAAA,CAAA;AACpB,IAAA,IAAA,CAAK,SAAY,GAAA,KAAA,CAAA,CAAA;AACjB,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA,CAAA;AACrB,IAAA,IAAA,CAAK,YAAe,GAAA,KAAA,CAAA,CAAA;AACpB,IAAA,IAAA,CAAK,mBAAsB,GAAA,KAAA,CAAA,CAAA;AAC3B,IAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AACd,IAAA,IAAA,CAAK,eAAe,KAAM,CAAA,WAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,YAAe,GAAA,CAAA,CAAA,CAAA;AACpB,IAAA,IAAA,CAAK,aAAa,iBAAkB,CAAA,IAAA,CAAA;AACpC,IAAA,IAAA,CAAK,aAAa,iBAAkB,CAAA,IAAA,CAAA;AACpC,IAAA,IAAA,CAAK,WAAc,GAAA;AAAA,MACjB,OAAS,EAAA,CAAA;AAAA,MACT,KAAO,EAAA,CAAA;AAAA,KACT,CAAA;AACA,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAgB,GAAA,CAAA,CAAA;AACrB,IAAA,IAAA,CAAK,qBAAwB,GAAA,KAAA,CAAA,CAAA;AAC7B,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA,CAAA;AACnB,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA,CAAA;AAElB,IAAA,IAAA,CAAK,QAAQ,SACX,GAAA,sPAAA,CAAA;AAGF,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,eAAkB,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAChD,IAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAE,WAAW,CAAC,CAAA,CAAA;AAC5D,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC3C,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,aAAc,CAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAElD,IAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AACnB,IAAA,IAAA,CAAK,mBAAmB,EAAC,CAAA;AAEzB,IAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,SAAW,EAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAE3C,IAAK,IAAA,CAAA,YAAA,GAAe,wBAAwB,IAAI,CAAA,CAAA;AAChD,IAAK,IAAA,CAAA,UAAA,GAAa,sBAAsB,IAAI,CAAA,CAAA;AAC5C,IAAK,IAAA,CAAA,YAAA,GAAe,wBAAwB,IAAI,CAAA,CAAA;AAChD,IAAK,IAAA,CAAA,aAAA,GAAgB,yBAAyB,IAAI,CAAA,CAAA;AAClD,IAAK,IAAA,CAAA,aAAA,GAAgB,yBAAyB,IAAI,CAAA,CAAA;AAClD,IAAK,IAAA,CAAA,YAAA,GAAe,wBAAwB,IAAI,CAAA,CAAA;AAChD,IAAK,IAAA,CAAA,WAAA,GAAc,uBAAuB,IAAI,CAAA,CAAA;AAE9C,IAAA,MAAM,aAAa,IAAK,CAAA,WAAA,CAAA;AACxB,IAAA,aAAA,CAAc,gBAAiB,CAAA,SAAA,EAAW,IAAK,CAAA,UAAA,EAAY,KAAK,CAAA,CAAA;AAChE,IAAA,aAAA,CAAc,gBAAiB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AACpE,IAAA,UAAA,CAAW,gBAAiB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AACjE,IAAA,UAAA,CAAW,gBAAiB,CAAA,gBAAA,EAAkB,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AACvE,IAAA,UAAA,CAAW,gBAAiB,CAAA,YAAA,EAAc,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AACnE,IAAA,UAAA,CAAW,gBAAiB,CAAA,YAAA,EAAc,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AACnE,IAAA,UAAA,CAAW,gBAAiB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AACjE,IAAA,UAAA,CAAW,gBAAiB,CAAA,UAAA,EAAY,IAAK,CAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAC/D,IAAA,UAAA,CAAW,gBAAiB,CAAA,aAAA,EAAe,IAAK,CAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAElE,IAAK,IAAA,CAAA,OAAA,CAAQ,gBAAgB,WAAY;AACvC,MAAO,OAAA,KAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAA,KAAA,CAAM,MAAO,CAAA,gBAAA,CAAiB,IAAK,CAAA,eAAA,EAAiB,IAAI,CAAA,CAAA;AACxD,IAAA,IAAA,CAAK,eAAgB,EAAA,CAAA;AAAA,GACvB;AAAA,EAIA,gBAAA,CAAiB,IAAM,EAAA,QAAA,EAAU,UAAY,EAAA;AAC3C,IAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,IAAM,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAAA,GAC1D;AAAA,EAEA,mBAAA,CAAoB,IAAM,EAAA,QAAA,EAAU,UAAY,EAAA;AAC9C,IAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,IAAM,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAAA,GAC7D;AAAA,EAEA,WAAc,GAAA;AACZ,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEA,OAAU,GAAA;AACR,IAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAO,mBAAoB,CAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA,CAAA;AAEjE,IAAM,MAAA,GAAA,GAAM,KAAK,SAAU,CAAA,aAAA,CAAA;AAC3B,IAAA,GAAA,CAAI,mBAAoB,CAAA,SAAA,EAAW,IAAK,CAAA,UAAA,EAAY,KAAK,CAAA,CAAA;AACzD,IAAA,GAAA,CAAI,mBAAoB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AAE7D,IAAA,MAAM,aAAa,IAAK,CAAA,WAAA,CAAA;AACxB,IAAA,UAAA,CAAW,mBAAoB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AACpE,IAAA,UAAA,CAAW,mBAAoB,CAAA,gBAAA,EAAkB,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AAC1E,IAAA,UAAA,CAAW,mBAAoB,CAAA,YAAA,EAAc,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AACtE,IAAA,UAAA,CAAW,mBAAoB,CAAA,YAAA,EAAc,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA,CAAA;AACtE,IAAA,UAAA,CAAW,mBAAoB,CAAA,WAAA,EAAa,IAAK,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AACpE,IAAA,UAAA,CAAW,mBAAoB,CAAA,UAAA,EAAY,IAAK,CAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAClE,IAAA,UAAA,CAAW,mBAAoB,CAAA,aAAA,EAAe,IAAK,CAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AACrE,IAAK,IAAA,CAAA,SAAA,CAAU,WAAY,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AACvC,IAAA,MAAA,CAAO,cAAc,IAAI,CAAA,CAAA;AAAA,GAC3B;AAAA,EAEA,iBAAA,CAAkB,KAAO,EAAA,UAAA,EAAY,IAAM,EAAA;AACzC,IAAA,MAAM,iBAAoB,GAAA,IAAIA,wBAAuB,CAAA,KAAA,EAAO,YAAY,IAAI,CAAA,CAAA;AAC5E,IAAK,IAAA,CAAA,gBAAA,CAAiB,KAAK,iBAAiB,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AACZ,IAAO,OAAA,iBAAA,CAAA;AAAA,GACT;AAAA,EAEA,QAAS,CAAA,QAAA,EAAU,UAAY,EAAA,KAAA,EAAO,eAAiB,EAAA;AAErD,IAAA,MAAM,WAAW,IAAI,aAAA,CAAc,QAAU,EAAA,UAAA,EAAY,OAAO,eAAe,CAAA,CAAA;AAC/E,IAAK,IAAA,CAAA,UAAA,CAAW,KAAK,QAAQ,CAAA,CAAA;AAC7B,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA,CAAA;AACnB,IAAA,IAAA,CAAK,MAAO,EAAA,CAAA;AACZ,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAS,GAAA;AACP,IAAM,MAAA,KAAA,GAAQ,KAAK,SAAU,CAAA,WAAA,CAAA;AAC7B,IAAM,MAAA,MAAA,GAAS,KAAK,SAAU,CAAA,YAAA,CAAA;AAE9B,IAAA,IAAI,KAAU,KAAA,IAAA,CAAK,UAAc,IAAA,MAAA,KAAW,KAAK,WAAa,EAAA;AAC5D,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,eAAgB,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,CAAA;AAE7C,IAAA,IAAI,eAAkB,GAAA,CAAA,CAAA;AACtB,IAAK,IAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,SAAU,KAAO,EAAA;AACvC,MAAA,eAAA,IAAmB,KAAM,CAAA,MAAA,CAAA;AAAA,KAC1B,CAAA,CAAA;AACD,IAAA,IAAA,CAAK,cAAc,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA,eAAA,CAAgB,UAAU,CAAA,EAAA,CAAA,CAAA;AAC/D,IAAK,IAAA,CAAA,aAAA,CAAc,KAAQ,GAAA,IAAA,CAAK,aAAc,CAAA,WAAA,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAc,MAAS,GAAA,eAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AAEf,IAAA,IAAA,CAAK,SAAY,GAAA,KAAA,CAAA,CAAA;AACjB,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAClB,IAAA,IAAA,CAAK,WAAc,GAAA,MAAA,CAAA;AAAA,GACrB;AAAA,EAEA,MAAA,CAAO,WAAW,QAAU,EAAA;AAC1B,IAAA,MAAM,EAAE,OAAA,EAAS,UAAY,EAAA,cAAA,EAAgB,YAAe,GAAA,MAAA,CAAA;AAE5D,IAAI,IAAA,CAAC,OAAQ,CAAA,SAAS,CAAG,EAAA;AACvB,MAAM,MAAA,IAAI,eAAe,wBAAwB,CAAA,CAAA;AAAA,KACnD;AACA,IAAI,IAAA,CAAC,OAAQ,CAAA,QAAQ,CAAG,EAAA;AACtB,MAAM,MAAA,IAAI,eAAe,sBAAsB,CAAA,CAAA;AAAA,KACjD;AACA,IAAA,IAAI,UAAW,CAAA,gBAAA,CAAiB,QAAU,EAAA,SAAS,CAAG,EAAA;AACpD,MAAM,MAAA,IAAI,eAAe,uCAAuC,CAAA,CAAA;AAAA,KAClE;AAGA,IAAA,IAAA,CAAK,YAAe,GAAA,SAAA,CAAA;AACpB,IAAA,IAAA,CAAK,UAAa,GAAA,QAAA,CAAA;AAClB,IAAA,IAAA,CAAK,mBAAsB,GAAA,UAAA,CAAW,iBAAkB,CAAA,QAAA,EAAU,SAAS,CAAA,CAAA;AAG3E,IAAA,IAAI,KAAK,MAAU,IAAA,IAAA,CAAK,MAAO,CAAA,UAAA,KAAe,WAAW,SAAW,EAAA;AAClE,MAAM,MAAA,UAAA,GAAa,KAAK,MAAO,CAAA,SAAA,CAAA;AAC/B,MAAM,MAAA,QAAA,GAAW,KAAK,MAAO,CAAA,QAAA,CAAA;AAC7B,MAAA,MAAM,SAAY,GAAA,UAAA,CAAW,iBAAkB,CAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AACnE,MAAA,MAAM,WAAc,GAAA,UAAA,CAAW,iBAAkB,CAAA,UAAA,EAAY,KAAK,YAAY,CAAA,CAAA;AAC9E,MAAA,MAAM,SAAY,GAAA,UAAA,CAAW,iBAAkB,CAAA,QAAA,EAAU,KAAK,UAAU,CAAA,CAAA;AAExE,MAAI,IAAA,IAAA,CAAK,uBAAuB,SAAW,EAAA;AAEzC,QAAA,IAAA,CAAK,mBAAsB,GAAA,SAAA,CAAA;AAC3B,QAAK,IAAA,CAAA,YAAA,GAAe,KAAK,MAAO,CAAA,SAAA,CAAA;AAChC,QAAK,IAAA,CAAA,UAAA,GAAa,KAAK,MAAO,CAAA,QAAA,CAAA;AAAA,OAChC,MAAA,IAAW,cAAc,CAAG,EAAA;AAE1B,QAAK,IAAA,CAAA,UAAA,GAAa,WAAW,UAAW,CAAA,IAAA,CAAK,YAAY,WAAa,EAAA,IAAI,YAAY,CAAA,CAAA;AACtF,QAAA,IAAA,CAAK,YAAe,GAAA,UAAA,CAAA;AACpB,QAAA,IAAA,CAAK,sBAAsB,UAAW,CAAA,iBAAA,CAAkB,IAAK,CAAA,UAAA,EAAY,KAAK,YAAY,CAAA,CAAA;AAAA,OAC5F,MAAA,IAAW,YAAY,CAAG,EAAA;AAExB,QAAK,IAAA,CAAA,YAAA,GAAe,WAAW,UAAW,CAAA,IAAA,CAAK,cAAc,SAAW,EAAA,IAAI,YAAY,CAAA,CAAA;AACxF,QAAA,IAAA,CAAK,UAAa,GAAA,QAAA,CAAA;AAClB,QAAA,IAAA,CAAK,sBAAsB,UAAW,CAAA,iBAAA,CAAkB,IAAK,CAAA,UAAA,EAAY,KAAK,YAAY,CAAA,CAAA;AAAA,OAC5F;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AAGf,IAAM,MAAA,GAAA,GAAW,IAAI,KAAA,CAAM,SAAW,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,UAAY,EAAA,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,CAAA,CAAA;AAEzF,IAAA,GAAA,CAAI,cAAc,IAAK,CAAA,YAAA,CAAA;AACvB,IAAA,GAAA,CAAI,YAAY,IAAK,CAAA,UAAA,CAAA;AACrB,IAAA,GAAA,CAAI,cAAc,IAAK,CAAA,YAAA,CAAA;AACvB,IAAA,GAAA,CAAI,YAAY,IAAK,CAAA,mBAAA,CAAA;AACrB,IAAA,GAAA,CAAI,cAAc,IAAK,CAAA,YAAA,CAAA;AACvB,IAAK,IAAA,CAAA,OAAA,CAAQ,cAAc,GAAG,CAAA,CAAA;AAAA,GAChC;AAAA,EAEA,eAAkB,GAAA;AAChB,IAAM,MAAA,EAAE,OAAS,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAChC,IAAK,IAAA,CAAA,YAAA,GAAe,KAAK,MAAO,CAAA,WAAA,CAAA;AAChC,IAAA,MAAM,eAAe,IAAK,CAAA,aAAA,CAAA;AAC1B,IAAI,IAAA,OAAA,CAAQ,IAAK,CAAA,aAAa,CAAG,EAAA;AAC/B,MAAA,MAAM,UAAU,UAAW,CAAA,iBAAA,CAAkB,IAAK,CAAA,YAAA,EAAc,KAAK,YAAY,CAAA,CAAA;AACjF,MAAM,MAAA,IAAA,GAAO,KAAK,KAAO,CAAA,OAAA,GAAU,KAAK,OAAQ,CAAA,WAAA,GAAe,KAAK,mBAAmB,CAAA,CAAA;AAEvF,MAAI,IAAA,IAAA,CAAK,cAAc,IAAM,EAAA;AAC3B,QAAA,IAAA,CAAK,SAAY,GAAA,IAAA,CAAA;AAEjB,QAAA,YAAA,CAAa,KAAM,CAAA,IAAA,GAAO,CAAG,EAAA,IAAA,GAAO,CAAC,CAAA,EAAA,CAAA,CAAA;AACrC,QAAA,IAAA,CAAK,UAAW,CAAA,KAAA,CAAM,IAAO,GAAA,CAAA,EAAG,IAAI,CAAA,EAAA,CAAA,CAAA;AAAA,OACtC;AAAA,KACF;AACA,IAAI,IAAA,OAAA,CAAQ,IAAK,CAAA,qBAAqB,CAAG,EAAA;AACvC,MAAK,IAAA,CAAA,eAAA,CAAgB,KAAK,qBAAwB,EAAA,IAAA,CAAK,wBAAwB,IAAK,CAAA,mBAAA,GAAuB,IAAK,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAA;AACnI,MAAK,IAAA,CAAA,MAAA;AAAA,QACH,UAAA,CAAW,WAAW,IAAK,CAAA,YAAA,EAAc,KAAK,aAAe,EAAA,IAAI,YAAY,CAAA;AAAA,QAC7E,UAAA,CAAW,WAAW,IAAK,CAAA,UAAA,EAAY,KAAK,aAAe,EAAA,IAAI,YAAY,CAAA;AAAA,OAC7E,CAAA;AAAA,KACF;AAAA,GACF;AAAA,EAEA,eAAA,CAAgB,MAAM,OAAS,EAAA;AAC7B,IAAM,MAAA,EAAE,YAAe,GAAA,MAAA,CAAA;AACvB,IAAO,IAAA,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,CAAA;AACtB,IAAK,IAAA,CAAA,YAAA,GAAe,WAAW,UAAW,CAAA,IAAA,CAAK,cAAc,OAAS,EAAA,IAAI,YAAY,CAAA,CAAA;AACtF,IAAA,IAAI,KAAK,aAAe,EAAA;AACtB,MAAA,MAAM,SAAS,IAAO,GAAA,CAAA,CAAA;AACtB,MAAA,IAAA,CAAK,cAAc,KAAM,CAAA,IAAA,GAAO,CAAG,EAAA,MAAA,CAAO,UAAU,CAAA,EAAA,CAAA,CAAA;AACpD,MAAA,IAAA,CAAK,WAAW,KAAM,CAAA,IAAA,GAAO,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,EAAA,CAAA,CAAA;AAAA,KACjD;AAIA,IAAM,MAAA,GAAA,GAAW,IAAI,KAAA,CAAM,SAAW,EAAA,EAAE,OAAS,EAAA,IAAA,EAAM,UAAY,EAAA,IAAA,EAAM,QAAU,EAAA,IAAA,EAAM,CAAA,CAAA;AACzF,IAAA,GAAA,CAAI,OAAU,GAAA,IAAA,CAAA;AACd,IAAA,GAAA,CAAI,WAAc,GAAA,OAAA,CAAA;AAClB,IAAA,GAAA,CAAI,aAAa,IAAK,CAAA,YAAA,CAAA;AACtB,IAAA,GAAA,CAAI,QAAQ,IAAK,CAAA,MAAA,CAAA;AACjB,IAAK,IAAA,CAAA,OAAA,CAAQ,cAAc,GAAG,CAAA,CAAA;AAAA,GAChC;AAAA,EAEA,SAAS,MAAQ,EAAA;AACf,IAAM,MAAA,EAAE,YAAe,GAAA,MAAA,CAAA;AACvB,IAAA,IAAI,YAAY,UAAW,CAAA,iBAAA,CAAkB,IAAK,CAAA,YAAA,EAAc,KAAK,YAAY,CAAA,CAAA;AACjF,IAAA,IAAI,SAAS,CAAK,IAAA,SAAA,GAAY,CAAK,IAAA,SAAA,GAAY,KAAK,mBAAqB,EAAA;AACvE,MAAA,SAAA,GAAY,KAAK,mBAAsB,GAAA,GAAA,CAAA;AAAA,KAClC,MAAA;AACL,MAAa,SAAA,IAAA,SAAA,GAAY,KAAK,mBAAsB,GAAA,GAAA,CAAA;AAAA,KACtD;AACA,IAAM,MAAA,aAAA,GAAgB,KAAK,mBAAsB,GAAA,SAAA,CAAA;AACjD,IAAK,IAAA,CAAA,MAAA;AAAA,MACH,UAAA,CAAW,WAAW,IAAK,CAAA,YAAA,EAAc,YAAY,SAAY,GAAA,MAAA,EAAQ,IAAI,UAAA,EAAY,CAAA;AAAA,MACzF,UAAA,CAAW,WAAW,IAAK,CAAA,UAAA,EAAY,gBAAgB,MAAS,GAAA,aAAA,EAAe,IAAI,UAAA,EAAY,CAAA;AAAA,KACjG,CAAA;AAAA,GACF;AAAA,EAEA,UAAU,IAAM,EAAA;AACd,IAAM,MAAA,EAAE,YAAe,GAAA,MAAA,CAAA;AACvB,IAAM,MAAA,SAAA,GAAY,UAAW,CAAA,eAAA,CAAgB,IAAI,CAAA,CAAA;AACjD,IAAA,MAAM,cAAc,SAAU,CAAA,WAAA,CAAA;AAC9B,IAAA,IAAI,iBAAoB,GAAA,MAAA,CAAA;AACxB,IAAA,IAAI,WAAc,GAAA,CAAA,IAAK,IAAK,CAAA,mBAAA,GAAsB,IAAM,EAAA;AACtD,MAAA,iBAAA,GAAoB,IAAK,CAAA,KAAA,CAAM,WAAW,CAAA,CAAE,QAAS,EAAA,CAAA;AACrD,MAAO,OAAA,iBAAA,CAAkB,SAAS,CAAG,EAAA;AACnC,QAAA,iBAAA,GAAoB,IAAI,iBAAiB,CAAA,CAAA,CAAA;AAAA,OAC3C;AACA,MAAA,iBAAA,GAAoB,IAAI,iBAAiB,CAAA,CAAA,CAAA;AAAA,KAC3C;AAEA,IAAA,OAAO,GAAG,kBAAmB,CAAA,SAAA,CAAU,KAAQ,GAAA,CAAC,CAAC,CAAI,CAAA,EAAA,SAAA,CAAU,GAAG,CAAA,CAAA,EAAI,UAAU,IAAI,CAAA,CAAA,EAAI,UAAU,SAAU,CAAA,IAAI,CAAC,CAAI,CAAA,EAAA,SAAA;AAAA,MACnH,SAAU,CAAA,MAAA;AAAA,KACX,CAAI,CAAA,EAAA,SAAA,CAAU,UAAU,MAAM,CAAC,GAAG,iBAAiB,CAAA,CAAA,CAAA;AAAA,GACtD;AAAA,EAEA,SAAY,GAAA;AACV,IAAM,MAAA,EAAE,YAAe,GAAA,MAAA,CAAA;AACvB,IAAA,MAAM,UAAU,IAAK,CAAA,WAAA,CAAA;AAErB,IAAA,MAAM,UAAU,UAAW,CAAA,iBAAA,CAAkB,IAAK,CAAA,YAAA,EAAc,KAAK,YAAY,CAAA,CAAA;AACjF,IAAM,MAAA,IAAA,GAAO,KAAK,KAAO,CAAA,OAAA,GAAU,KAAK,OAAQ,CAAA,WAAA,GAAe,KAAK,mBAAmB,CAAA,CAAA;AACvF,IAAA,MAAM,SAAS,IAAO,GAAA,CAAA,CAAA;AACtB,IAAI,IAAA,GAAA,CAAA;AACJ,IAAA,MAAM,MAAS,GAAA,IAAA,CAAA;AAEf,IAAA,IAAA,CAAK,WAAW,KAAM,CAAA,IAAA,GAAO,CAAG,EAAA,IAAA,CAAK,UAAU,CAAA,EAAA,CAAA,CAAA;AAE/C,IAAA,IAAI,IAAO,GAAA,EAAA,CAAA;AAEX,IAAA,MAAM,eAAkB,GAAA,IAAA,CAAA;AACxB,IAAA,MAAM,eAAkB,GAAA,OAAA,CAAA;AACxB,IAAA,MAAM,OAAU,GAAA,KAAA,CAAA;AAGhB,IAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,IAAA,IAAI,WAAW,IAAK,CAAA,mBAAA,CAAA;AACpB,IAAA,IAAI,WAAW,eAAiB,EAAA;AAC9B,MAAW,QAAA,GAAA,eAAA,CAAA;AACX,MAAA,IAAA,CAAK,mBAAsB,GAAA,eAAA,CAAA;AAC3B,MAAK,IAAA,CAAA,UAAA,GAAa,WAAW,UAAW,CAAA,IAAA,CAAK,cAAc,eAAiB,EAAA,IAAI,YAAY,CAAA,CAAA;AAAA,KAC9F,MAAA,IAAW,WAAW,eAAiB,EAAA;AACrC,MAAW,QAAA,GAAA,eAAA,CAAA;AACX,MAAA,IAAA,CAAK,mBAAsB,GAAA,eAAA,CAAA;AAC3B,MAAK,IAAA,CAAA,UAAA,GAAa,WAAW,UAAW,CAAA,IAAA,CAAK,cAAc,eAAiB,EAAA,IAAI,YAAY,CAAA,CAAA;AAAA,KAC9F;AAEA,IAAI,IAAA,YAAA,GAAe,KAAK,WAAY,CAAA,WAAA,CAAA;AACpC,IAAA,IAAI,eAAe,EAAI,EAAA;AACrB,MAAe,YAAA,GAAA,EAAA,CAAA;AAAA,KACjB;AACA,IAAA,MAAM,cAAc,IAAK,CAAA,YAAA,CAAA;AAGzB,IAAA,MAAM,cAAc,IAAK,CAAA,GAAA,CAAK,QAAW,GAAA,YAAA,GAAgB,MAAM,GAAG,CAAA,CAAA;AAGlE,IAAI,IAAA,WAAA,CAAA;AACJ,IAAM,MAAA,aAAA,GAAgB,UAAW,CAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAC5D,IAAA,IAAI,WAAW,OAAW,EAAA;AAExB,MAAA,WAAA,GAAc,UAAW,CAAA,QAAA,CAAS,IAAI,IAAA,CAAK,KAAK,GAAI,CAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,OAAO,GAAG,CAAA,GAAI,GAAK,EAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KACrG,MAAA,IAAW,WAAW,OAAU,EAAA;AAE9B,MAAA,WAAA,GAAc,UAAW,CAAA,QAAA,CAAS,IAAI,IAAA,CAAK,KAAK,GAAI,CAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,OAAO,EAAE,CAAA,GAAI,EAAI,EAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KACnG,MAAA,IAAW,WAAW,KAAO,EAAA;AAE3B,MAAc,WAAA,GAAA,UAAA,CAAW,QAAS,CAAA,IAAI,IAAK,CAAA,IAAA,CAAK,IAAI,aAAc,CAAA,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KACtE,MAAA;AAEL,MAAA,WAAA,GAAc,UAAW,CAAA,QAAA,CAAS,IAAI,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,aAAc,CAAA,IAAA,EAAM,aAAc,CAAA,KAAA,EAAO,aAAc,CAAA,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,KAClH;AAGA,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,iBAAkB,CAAA,IAAA,CAAK,YAAc,EAAA,UAAA,CAAW,UAAW,CAAA,WAAA,EAAa,WAAa,EAAA,IAAI,UAAW,EAAC,CAAC,CAAA,CAAA;AAEnI,IAAA,IAAI,UAAU,SAAY,GAAA,QAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,YAAe,GAAA,WAAA,CAAA;AAEpB,IAAA,SAAS,YAAY,QAAU,EAAA;AAC7B,MAAA,OAAO,IAAK,CAAA,KAAA,CAAM,SAAY,GAAA,QAAQ,CAAI,GAAA,QAAA,CAAA;AAAA,KAC5C;AAEA,IAAS,SAAA,UAAA,CAAWC,MAAK,QAAU,EAAA;AACjC,MAAA,OAAO,IAAK,CAAA,IAAA,CAAKA,IAAM,GAAA,QAAA,GAAW,GAAG,CAAI,GAAA,QAAA,CAAA;AAAA,KAC3C;AAEA,IAAA,SAAS,SAAS,IAAM,EAAA;AACtB,MAAA,OAAA,CAAQ,OAAO,SAAa,IAAA,QAAA,CAAA;AAAA,KAC9B;AAEA,IAAS,SAAA,SAAA,CAAU,GAAG,CAAG,EAAA;AAEvB,MAAA,OAAO,CAAI,GAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAAA,KACjC;AAGA,IAAA,IAAA,CAAK,SAAU,CAAA,SAAA,GAAY,IAAK,CAAA,SAAA,CAAU,UAAW,CAAA,UAAA,CAAW,IAAK,CAAA,UAAA,EAAY,CAAC,eAAA,EAAiB,IAAI,UAAA,EAAY,CAAC,CAAA,CAAA;AACpH,IAAI,IAAA,WAAA,GAAc,IAAK,CAAA,SAAA,CAAU,WAAc,GAAA,EAAA,CAAA;AAC/C,IAAA,IAAI,cAAc,EAAI,EAAA;AAEpB,MAAc,WAAA,GAAA,GAAA,CAAA;AAAA,KAChB;AAEA,IAAA,MAAM,WAAc,GAAA,OAAA,CAAA;AACpB,IAAW,OAAA,IAAA,OAAA,CAAA;AAEX,IAAA,MAAM,WAAmB,GAAA;AAAA,MACvB,SAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,KACF,CAAA;AACA,IAAK,IAAA,CAAA,gBAAA,CAAiB,OAAQ,CAAA,SAAU,cAAgB,EAAA;AACtD,MAAQ,IAAA,IAAA,cAAA,CAAe,OAAO,WAAW,CAAA,CAAA;AAAA,KAC1C,CAAA,CAAA;AAGD,IAAA,IAAI,OAAU,GAAA,CAAA,EACZ,MAAS,GAAA,CAAA,EACT,OAAU,GAAA,CAAA,CAAA;AAEZ,IAAA,IAAI,WAAW,WAAc,GAAA,YAAA,CAAA;AAC7B,IAAA,IAAI,WAAW,CAAK,EAAA;AAElB,MAAW,QAAA,GAAA,CAAA,CAAA;AAAA,KACb;AAEA,IAAA,QAAA,IAAY,IAAK,CAAA,mBAAA,CAAA;AACjB,IAAI,IAAA,QAAA,GAAW,IACb,aAAgB,GAAA,CAAA,CAAA,CAAA;AAElB,IAAA,MAAM,cAAc,iBAAkB,CAAA,MAAA,CAAA;AACtC,IAAI,IAAA,CAAA,CAAA;AACJ,IAAA,KAAK,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,EAAa,EAAE,CAAG,EAAA;AAChC,MAAM,MAAA,EAAA,GAAK,kBAAkB,CAAC,CAAA,CAAA;AAC9B,MAAE,EAAA,QAAA,CAAA;AACF,MAAU,OAAA,GAAA,EAAA,CAAA;AAEV,MAAI,IAAA,EAAA,GAAK,QAAY,IAAA,EAAA,GAAK,OAAS,EAAA;AACjC,QAAA,MAAA;AAAA,OACF;AACA,MAAA,IAAI,gBAAgB,CAAK,IAAA,YAAA,IAAgB,KAAK,IAAK,CAAA,mBAAA,CAAA,IAAwB,KAAK,mBAAqB,EAAA;AACnG,QAAgB,aAAA,GAAA,QAAA,CAAA;AAAA,OAClB;AAAA,KACF;AACA,IAAA,IAAI,WAAW,CAAG,EAAA;AAChB,MAAA,OAAO,WAAW,CAAG,EAAA;AAEnB,QAAE,EAAA,QAAA,CAAA;AACF,QAAI,IAAA,IAAA,CAAK,IAAI,SAAU,CAAA,OAAA,EAAS,kBAAkB,QAAQ,CAAC,CAAC,CAAA,GAAI,IAAS,EAAA;AACvE,UAAI,IAAA,iBAAA,CAAkB,QAAQ,CAAA,IAAK,OAAS,EAAA;AAC1C,YAAA,MAAA,GAAS,kBAAkB,QAAQ,CAAA,CAAA;AAAA,WACrC;AACA,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAEA,MAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,QAAA,OAAO,gBAAgB,QAAU,EAAA;AAE/B,UAAA,IAAI,IAAK,CAAA,GAAA,CAAI,SAAU,CAAA,MAAA,EAAQ,iBAAkB,CAAA,aAAa,CAAC,CAAC,CAAI,GAAA,IAAA,IAAW,iBAAkB,CAAA,aAAa,KAAK,OAAS,EAAA;AAC1H,YAAA,OAAA,GAAU,kBAAkB,aAAa,CAAA,CAAA;AACzC,YAAA,MAAA;AAAA,WACF;AACA,UAAE,EAAA,aAAA,CAAA;AAAA,SACJ;AAAA,OACF;AAAA,KACF;AAEA,IAAU,OAAA,GAAA,WAAA,CAAA;AACV,IAAI,IAAA,OAAA,GAAU,WAAW,OAAU,GAAA,IAAA,IAAW,KAAK,GAAI,CAAA,OAAA,GAAU,OAAO,CAAA,GAAI,OAAS,EAAA;AACnF,MAAU,OAAA,GAAA,OAAA,CAAA;AACV,MAAI,IAAA,OAAA,IAAW,UAAU,OAAS,EAAA;AAChC,QAAS,MAAA,GAAA,CAAA,CAAA;AAAA,OACX;AAAA,KACF;AAEA,IAAA,IAAI,eAAe,CACjB,MAAA,EAAA,SAAA,CAAA;AACF,IAAA,IAAI,YAAgB,IAAA,OAAA,GAAU,IAAK,CAAA,mBAAA,CAAA,IAAwB,CAAK,EAAA;AAC9D,MAAK,KAAA,GAAA,GAAM,WAAY,CAAA,OAAO,CAAG,EAAA,GAAA,IAAO,SAAS,GAAM,GAAA,UAAA,CAAW,GAAK,EAAA,OAAO,CAAG,EAAA;AAC/E,QAAQ,IAAA,IAAA,CAAA,mDAAA,EAAsD,KAAK,KAAM,CAAA,YAAA,GAAe,SAAS,GAAG,CAAC,CAAE,CAAA,QAAA,EAAU,CAAA,YAAA,CAAA,CAAA;AAAA,OACnH;AAAA,KACF;AACA,IAAA,IAAI,YAAgB,IAAA,MAAA,GAAS,IAAK,CAAA,mBAAA,CAAA,IAAwB,CAAK,EAAA;AAC7D,MAAK,KAAA,GAAA,GAAM,WAAY,CAAA,MAAM,CAAG,EAAA,GAAA,IAAO,SAAS,GAAM,GAAA,UAAA,CAAW,GAAK,EAAA,MAAM,CAAG,EAAA;AAC7E,QAAQ,IAAA,IAAA,CAAA,kDAAA,EAAqD,KAAK,KAAM,CAAA,YAAA,GAAe,SAAS,GAAG,CAAC,CAAE,CAAA,QAAA,EAAU,CAAA,YAAA,CAAA,CAAA;AAAA,OAClH;AAAA,KACF;AACA,IAAA,IAAI,YAAgB,IAAA,OAAA,GAAU,IAAK,CAAA,mBAAA,CAAA,IAAwB,CAAK,EAAA;AAC9D,MAAA,IAAA,CAAK,YAAe,GAAA,OAAA,CAAA;AACpB,MAAW,OAAA,IAAA,OAAA,CAAA;AACX,MAAA,GAAA,GAAM,YAAY,OAAO,CAAA,CAAA;AACzB,MAAM,MAAA,UAAA,GAAa,UAAW,CAAA,kBAAA,CAAmB,WAAW,CAAA,CAAA;AAC5D,MAAA,OAAO,OAAO,OAAS,EAAA;AACrB,QAAI,IAAA,OAAA,GAAU,WAAW,UAAW,CAAA,WAAA,EAAa,MAAM,SAAW,EAAA,IAAI,YAAY,CAAA,CAAA;AAClF,QAAA,IAAI,UAAU,GAAK,EAAA;AACjB,UAAM,MAAA,OAAA,GAAU,UAAW,CAAA,kBAAA,CAAmB,OAAO,CAAA,CAAA;AACrD,UAAA,IAAI,IAAK,CAAA,GAAA,CAAI,OAAU,GAAA,UAAU,IAAI,GAAK,EAAA;AACxC,YAAA,GAAA,IAAO,OAAU,GAAA,UAAA,CAAA;AACjB,YAAA,OAAA,GAAU,WAAW,UAAW,CAAA,WAAA,EAAa,MAAM,SAAW,EAAA,IAAI,YAAY,CAAA,CAAA;AAAA,WAChF;AAAA,SACF;AACA,QAAA,MAAM,UAAU,IAAK,CAAA,KAAA,CAAM,YAAe,GAAA,QAAA,CAAS,GAAG,CAAC,CAAA,CAAA;AACvD,QAAM,MAAA,QAAA,GAAW,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AACvC,QAAA,IAAA,CAAK,UAAU,SAAY,GAAA,QAAA,CAAA;AAC3B,QAAA,SAAA,GAAY,KAAK,SAAU,CAAA,WAAA,CAAA;AAC3B,QAAA,IAAI,YAAY,EAAI,EAAA;AAElB,UAAY,SAAA,GAAA,WAAA,CAAA;AAAA,SACd;AACA,QAAM,MAAA,SAAA,GAAY,OAAW,IAAA,SAAA,GAAY,CAAI,GAAA,CAAA,CAAA,CAAA;AAC7C,QAAA,IAAI,YAAY,YAAc,EAAA;AAC5B,UAAA,YAAA,GAAe,YAAY,SAAY,GAAA,CAAA,CAAA;AACvC,UACE,IAAA,IAAA,CAAA,mDAAA,EAAsD,QAAQ,QAAS,EAAC,mEACjB,SAAU,CAAA,QAAA,EAAU,CAAA,KAAA,EAAQ,QAAQ,CAAA,OAAA,CAAA,CAAA;AAAA,SACxF,MAAA;AACL,UAAQ,IAAA,IAAA,CAAA,kDAAA,EAAqD,OAAQ,CAAA,QAAA,EAAU,CAAA,YAAA,CAAA,CAAA;AAAA,SACjF;AACA,QAAM,GAAA,GAAA,UAAA,CAAW,KAAK,OAAO,CAAA,CAAA;AAAA,OAC/B;AAAA,KACK,MAAA;AACL,MAAA,IAAA,CAAK,YAAe,GAAA,CAAA,CAAA,CAAA;AAAA,KACtB;AAEA,IAAA,IAAA,IAAQ,oDAAoD,MAAM,CAAA,8CAAA,CAAA,CAAA;AAClE,IAAA,OAAA,CAAQ,SAAY,GAAA,IAAA,CAAA;AACpB,IAAA,IAAA,CAAK,gBAAgB,OAAQ,CAAA,SAAA,CAAA;AAG7B,IAAK,IAAA,CAAA,QAAA,CAAS,UAAU,CAAG,EAAA,CAAA,EAAG,KAAK,aAAc,CAAA,KAAA,EAAO,IAAK,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AAEjF,IAAA,WAAA,CAAY,CAAI,GAAA,CAAA,CAAA;AAChB,IAAK,IAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,SAAU,KAAO,EAAA;AACvC,MAAM,KAAA,CAAA,MAAA,CAAO,MAAO,CAAA,QAAA,EAAU,WAAW,CAAA,CAAA;AACzC,MAAA,WAAA,CAAY,KAAK,KAAM,CAAA,MAAA,CAAA;AAAA,KACxB,CAAA,CAAA;AAAA,GACH;AACF,CAAA;AAEA,SAAS,wBAAwB,QAAU,EAAA;AACzC,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAI,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,SAAW,EAAA;AACvD,MAAI,IAAA,CAAA,CAAE,WAAW,CAAG,EAAA;AAClB,QAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,KAAA,CAAA;AACxC,QAAA,IAAI,SAAS,aAAe,EAAA;AAC1B,UAAS,QAAA,CAAA,aAAA,CAAc,MAAM,kBAAqB,GAAA,SAAA,CAAA;AAAA,SACpD;AACA,QAAA,QAAA,CAAS,aAAa,CAAC,CAAA,CAAA;AAAA,OAClB,MAAA;AACL,QAAA,QAAA,CAAS,UAAU,CAAE,CAAA,OAAA,CAAA;AACrB,QAAI,IAAA,CAAA,CAAE,WAAW,CAAG,EAAA;AAClB,UAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,IAAA,CAAA;AAAA,SACnC,MAAA;AACL,UAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,KAAA,CAAA;AAAA,SAC1C;AAAA,OACF;AAAA,KACF;AACA,IAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AAAA,GACnB,CAAA;AACF,CAAA;AAEA,SAAS,sBAAsB,QAAU,EAAA;AACvC,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,IAAA,CAAA;AACxC,IAAA,IAAI,SAAS,aAAe,EAAA;AAC1B,MAAS,QAAA,CAAA,aAAA,CAAc,MAAM,kBAAqB,GAAA,KAAA,CAAA;AAAA,KACpD;AACA,IAAA,QAAA,CAAS,aAAgB,GAAA,CAAA,CAAA;AACzB,IAAA,QAAA,CAAS,qBAAwB,GAAA,KAAA,CAAA,CAAA;AAAA,GACnC,CAAA;AACF,CAAA;AAEA,SAAS,wBAAwB,QAAU,EAAA;AACzC,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAI,IAAA,EAAA,CAAA;AACJ,IAAI,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,KAAO,EAAA;AACnD,MAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,MAAA,MAAM,IAAI,CAAE,CAAA,OAAA,GAAU,QAAS,CAAA,OAAA,CAAQ,uBAAwB,CAAA,IAAA,CAAA;AAE/D,MAAA,IAAI,IAAI,CAAG,EAAA;AACT,QAAA,QAAA,CAAS,qBAAwB,GAAA,CAAA,CAAA;AACjC,QAAS,QAAA,CAAA,aAAA,GAAgB,QAAQ,QAAS,CAAA,mBAAA,CAAA;AAAA,OACjC,MAAA,IAAA,CAAA,GAAI,QAAS,CAAA,OAAA,CAAQ,WAAa,EAAA;AAC3C,QAAS,QAAA,CAAA,qBAAA,GAAwB,SAAS,OAAQ,CAAA,WAAA,CAAA;AAClD,QAAS,QAAA,CAAA,aAAA,GAAgB,OAAO,QAAS,CAAA,mBAAA,CAAA;AAAA,OACpC,MAAA;AAEL,QAAA,QAAA,CAAS,qBAAwB,GAAA,KAAA,CAAA,CAAA;AACjC,QAAA,QAAA,CAAS,gBAAgB,CAAI,EAAA,CAAA,GAAI,SAAS,mBAAuB,GAAA,QAAA,CAAS,QAAQ,WAAW,CAAA,CAAA;AAAA,OAC/F;AAAA,KACS,MAAA,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,KAAO,EAAA;AAE1D,MAAK,EAAA,GAAA,QAAA,CAAS,UAAU,CAAE,CAAA,OAAA,CAAA;AAC1B,MAAA,QAAA,CAAS,UAAU,CAAE,CAAA,OAAA,CAAA;AACrB,MAAA,IAAI,OAAO,CAAG,EAAA;AACZ,QAAM,MAAA,EAAE,YAAe,GAAA,MAAA,CAAA;AACvB,QAAA,MAAM,IAAQ,GAAA,EAAA,GAAK,QAAS,CAAA,mBAAA,GAAuB,SAAS,OAAQ,CAAA,WAAA,CAAA;AACpE,QAAS,QAAA,CAAA,MAAA;AAAA,UACP,WAAW,UAAW,CAAA,QAAA,CAAS,cAAc,IAAM,EAAA,IAAI,YAAY,CAAA;AAAA,UACnE,WAAW,UAAW,CAAA,QAAA,CAAS,YAAY,IAAM,EAAA,IAAI,YAAY,CAAA;AAAA,SACnE,CAAA;AAAA,OACF;AAAA,KACS,MAAA,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,IAAM,EAAA;AAEzD,MAAK,EAAA,GAAA,QAAA,CAAS,UAAU,CAAE,CAAA,OAAA,CAAA;AAC1B,MAAA,QAAA,CAAS,UAAU,CAAE,CAAA,OAAA,CAAA;AACrB,MAAA,IAAI,OAAO,CAAG,EAAA;AACZ,QAAA,QAAA,CAAS,QAAS,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA;AAAA,OACtC;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,yBAAyB,QAAU,EAAA;AAC1C,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAA,IAAI,KAAK,CAAE,CAAA,WAAA,IAAe,CAAE,CAAA,UAAA,IAAc,CAAC,CAAE,CAAA,MAAA,CAAA;AAC7C,IAAqB,kBAAA,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,IAAI,EAAE,CAAA,EAAG,kBAAkB,CAAA,EAAG,CAAC,CAAA,CAAA;AAC3E,IAAM,EAAA,IAAA,kBAAA,CAAA;AACN,IAAA,QAAA,CAAS,SAAS,IAAK,CAAA,GAAA,CAAI,IAAM,EAAA,CAAC,EAAE,CAAC,CAAA,CAAA;AAAA,GACvC,CAAA;AACF,CAAA;AAEA,SAAS,yBAAyB,QAAU,EAAA;AAC1C,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAM,MAAA,GAAA,GAAM,EAAE,OAAQ,CAAA,MAAA,CAAA;AACtB,IAAA,IAAI,OAAS,EAAA,IAAA,CAAA;AACb,IAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,OAAQ,CAAA,qBAAA,EAAwB,CAAA,IAAA,CAAA;AACvD,IAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,IAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AACxC,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAA,OAAA,GAAU,OAAO,UAAW,CAAA,iBAAA,CAAkB,QAAS,CAAA,YAAA,EAAc,SAAS,YAAY,CAAA,CAAA;AAC1F,MAAO,IAAA,GAAA,IAAA,CAAK,MAAO,OAAU,GAAA,QAAA,CAAS,QAAQ,WAAe,GAAA,QAAA,CAAS,sBAAsB,KAAK,CAAA,CAAA;AACjG,MAAI,IAAA,IAAA,CAAK,IAAI,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAE,CAAA,OAAA,GAAU,IAAI,CAAA,GAAI,EAAI,EAAA;AAC9C,QAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,KAAA,CAAA;AACxC,QAAA,IAAI,SAAS,aAAe,EAAA;AAC1B,UAAA,QAAA,CAAS,aAAc,CAAA,KAAA,CAAM,kBAAqB,GAAA,GAAA,KAAQ,IAAI,SAAY,GAAA,KAAA,CAAA;AAAA,SAC5E;AAAA,OACK,MAAA;AACL,QAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AACxC,QAAA,QAAA,CAAS,YAAY,OAAU,GAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,EAAE,OAAU,GAAA,KAAA,CAAA;AAAA,OACxD;AAAA,KACF,MAAA,IAAW,QAAQ,CAAG,EAAA;AACpB,MAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AACxC,MAAA,QAAA,CAAS,WAAY,CAAA,OAAA,GAAA,CAAW,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAU,GAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAE,CAAA,OAAA,IAAW,GAAM,GAAA,KAAA,CAAA;AACrF,MAAA,QAAA,CAAS,WAAY,CAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAU,GAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,EAAE,OAAO,CAAA,CAAA;AAAA,KAC5E,MAAA;AACL,MAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,MAAA,CAAA;AAAA,KAC1C;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,uBAAuB,QAAU,EAAA;AACxC,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAM,MAAA,GAAA,GAAM,EAAE,OAAQ,CAAA,MAAA,EACpB,QAAQ,QAAS,CAAA,OAAA,CAAQ,uBAAwB,CAAA,IAAA,CAAA;AACnD,IAAI,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,SAAW,EAAA;AACvD,MAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,KAAA,CAAA;AACxC,MAAA,QAAA,CAAS,aAAa,CAAC,CAAA,CAAA;AAAA,KACd,MAAA,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,KAAO,EAAA;AAC1D,MAAA,QAAA,CAAS,aAAa,CAAC,CAAA,CAAA;AAAA,KACzB;AACA,IAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AACxC,IAAA,IAAI,QAAQ,CAAG,EAAA;AACb,MAAA,QAAA,CAAS,UAAa,GAAA,GAAA,GAAM,CAAI,GAAA,iBAAA,CAAkB,SAAS,iBAAkB,CAAA,IAAA,CAAA;AAAA,KACpE,MAAA,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,SAAW,EAAA;AAC9D,MAAA,QAAA,CAAS,YAAY,OAAU,GAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,EAAE,OAAU,GAAA,KAAA,CAAA;AAAA,KACxD;AACA,IAAA,IAAI,SAAS,aAAe,EAAA;AAC1B,MAAS,QAAA,CAAA,aAAA,CAAc,MAAM,kBAAqB,GAAA,KAAA,CAAA;AAAA,KACpD;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,wBAAwB,QAAU,EAAA;AACzC,EAAA,OAAO,SAAU,CAAG,EAAA;AAClB,IAAA,IAAI,IACF,CACA,EAAA,GAAA,EACA,SACA,EAAA,OAAA,EACA,cACA,IAAO,GAAA,CAAA,CAAA;AACT,IAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,OAAQ,CAAA,qBAAA,EAAwB,CAAA,IAAA,CAAA;AACvD,IAAI,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,SAAW,EAAA;AACvD,MAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AAAA,KAC1C;AACA,IAAA,QAAA,CAAS,aAAa,iBAAkB,CAAA,SAAA,CAAA;AACxC,IAAI,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,KAAO,EAAA;AACnD,MAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,MAAI,IAAA,CAAA,CAAE,cAAe,CAAA,MAAA,KAAW,CAAG,EAAA;AACjC,QAAA,CAAA,GAAI,CAAE,CAAA,cAAA,CAAe,CAAC,CAAA,CAAE,OAAU,GAAA,KAAA,CAAA;AAClC,QAAA,IAAI,CAAK,IAAA,CAAA,IAAK,CAAK,IAAA,QAAA,CAAS,QAAQ,WAAa,EAAA;AAC/C,UAAA,QAAA,CAAS,gBAAgB,CAAI,EAAA,CAAA,GAAI,SAAS,mBAAuB,GAAA,QAAA,CAAS,QAAQ,WAAW,CAAA,CAAA;AAAA,SAC/F;AAAA,OACF;AAAA,KACS,MAAA,IAAA,QAAA,CAAS,UAAe,KAAA,iBAAA,CAAkB,SAAW,EAAA;AAC9D,MAAA,GAAA,GAAM,EAAE,OAAQ,CAAA,MAAA,CAAA;AAChB,MAAA,IAAI,QAAQ,CAAG,EAAA;AACb,QAAa,SAAA,GAAA,CAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAE,CAAA,OAAA,GAAU,EAAE,OAAQ,CAAA,CAAC,CAAE,CAAA,OAAA,IAAW,GAAM,GAAA,KAAA,CAAA;AAClE,QAAU,OAAA,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAE,CAAA,OAAA,GAAU,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAO,CAAA,CAAA;AAAA,OAChE,MAAA,IAAW,QAAQ,CAAG,EAAA;AACpB,QAAA,SAAA,GAAY,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAU,GAAA,KAAA,CAAA;AACnC,QAAU,OAAA,GAAA,CAAA,CAAA;AAAA,OACZ;AAEA,MAAM,MAAA,EAAE,OAAS,EAAA,UAAA,EAAe,GAAA,MAAA,CAAA;AAEhC,MAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,QAAA,IAAI,OAAU,GAAA,CAAA,IAAK,QAAS,CAAA,WAAA,CAAY,QAAQ,CAAG,EAAA;AAEjD,UAAO,IAAA,GAAA,QAAA,CAAS,YAAY,KAAQ,GAAA,OAAA,CAAA;AACpC,UAAA,YAAA,GAAe,UAAW,CAAA,UAAA;AAAA,YACxB,QAAS,CAAA,YAAA;AAAA,YACR,CAAA,QAAA,CAAS,WAAY,CAAA,OAAA,GAAU,QAAS,CAAA,mBAAA,GAAsB,YAAY,QAAS,CAAA,mBAAA,GAAsB,IACxG,IAAA,QAAA,CAAS,OAAQ,CAAA,WAAA;AAAA,YACnB,IAAI,UAAW,EAAA;AAAA,WACjB,CAAA;AAAA,SACK,MAAA;AAEL,UAAK,EAAA,GAAA,QAAA,CAAS,YAAY,OAAU,GAAA,SAAA,CAAA;AACpC,UAAA,YAAA,GAAe,UAAW,CAAA,UAAA;AAAA,YACxB,QAAS,CAAA,YAAA;AAAA,YACR,EAAK,GAAA,QAAA,CAAS,mBAAuB,GAAA,QAAA,CAAS,OAAQ,CAAA,WAAA;AAAA,YACvD,IAAI,UAAW,EAAA;AAAA,WACjB,CAAA;AAAA,SACF;AAEA,QAAS,QAAA,CAAA,MAAA,CAAO,YAAc,EAAA,UAAA,CAAW,UAAW,CAAA,YAAA,EAAc,QAAS,CAAA,mBAAA,GAAsB,IAAM,EAAA,IAAI,UAAW,EAAC,CAAC,CAAA,CAAA;AACxH,QAAA,QAAA,CAAS,YAAY,OAAU,GAAA,SAAA,CAAA;AAC/B,QAAA,QAAA,CAAS,YAAY,KAAQ,GAAA,OAAA,CAAA;AAAA,OAC/B;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,UAAU,GAAK,EAAA;AACtB,EAAO,OAAA,GAAA,GAAM,KAAK,CAAI,CAAA,EAAA,GAAA,CAAI,UAAU,CAAA,CAAA,GAAK,IAAI,QAAS,EAAA,CAAA;AACxD;;;;"}