{"version":3,"file":"calendar.mjs","sources":["../../../../../../../packages/components/calendar/src/calendar.tsx"],"sourcesContent":["import {\n  type ExtractPropTypes,\n  type PropType,\n  type TeleportProps,\n  computed,\n  defineComponent,\n  ref,\n  watch,\n} from 'vue'\n\n// Utils\nimport {\n  getScrollTop,\n  isDate,\n  makeNumericProp,\n  makeStringProp,\n  numericProp,\n  pick,\n  raf,\n  truthProp,\n} from '@xzx-design/utils'\n\n// Composables\nimport {\n  onMountedOrActivated,\n  useExpose,\n  useRect,\n  useRefs,\n} from '@xzx-design/hooks'\n\n// Components\nimport {\n  Button,\n  Popup,\n  type PopupPosition,\n  showToast,\n} from '@xzx-design/components'\nimport {\n  bem,\n  calcDateNum,\n  cloneDate,\n  cloneDates,\n  compareDay,\n  compareMonth,\n  getDayByOffset,\n  getMonthByOffset,\n  getNextDay,\n  getPrevDay,\n  getToday,\n  name,\n  t,\n} from './utils'\nimport CalendarMonth from './calendar-month'\nimport CalendarHeader from './calendar-header'\n\n// Types\nimport type {\n  CalendarDayItem,\n  CalendarExpose,\n  CalendarMonthInstance,\n  CalendarSwitchMode,\n  CalendarType,\n} from './types'\n\nexport const calendarProps = {\n  show: Boolean,\n  type: makeStringProp<CalendarType>('single'),\n  switchMode: makeStringProp<CalendarSwitchMode>('none'),\n  title: String,\n  color: String,\n  round: truthProp,\n  readonly: Boolean,\n  poppable: truthProp,\n  maxRange: makeNumericProp(null),\n  position: makeStringProp<PopupPosition>('bottom'),\n  teleport: [String, Object] as PropType<TeleportProps['to']>,\n  showMark: truthProp,\n  showTitle: truthProp,\n  formatter: Function as PropType<(item: CalendarDayItem) => CalendarDayItem>,\n  rowHeight: numericProp,\n  confirmText: String,\n  rangePrompt: String,\n  lazyRender: truthProp,\n  showConfirm: truthProp,\n  defaultDate: [Date, Array] as PropType<Date | Date[] | null>,\n  allowSameDay: Boolean,\n  showSubtitle: truthProp,\n  closeOnPopstate: truthProp,\n  showRangePrompt: truthProp,\n  confirmDisabledText: String,\n  closeOnClickOverlay: truthProp,\n  safeAreaInsetTop: Boolean,\n  safeAreaInsetBottom: truthProp,\n  minDate: {\n    type: Date,\n    validator: isDate,\n  },\n  maxDate: {\n    type: Date,\n    validator: isDate,\n  },\n  firstDayOfWeek: {\n    type: numericProp,\n    default: 0,\n    validator: (val: number) => val >= 0 && val <= 6,\n  },\n}\n\nexport type CalendarProps = ExtractPropTypes<typeof calendarProps>\n\nexport default defineComponent({\n  name,\n\n  props: calendarProps,\n\n  emits: [\n    'select',\n    'confirm',\n    'unselect',\n    'monthShow',\n    'overRange',\n    'update:show',\n    'clickSubtitle',\n    'clickDisabledDate',\n    'clickOverlay',\n    'panelChange',\n  ],\n\n  setup(props, { emit, slots }) {\n    const canSwitch = computed(() => props.switchMode !== 'none')\n\n    const minDate = computed(() => {\n      if (!props.minDate && !canSwitch.value) {\n        return getToday()\n      }\n\n      return props.minDate\n    })\n\n    const maxDate = computed(() => {\n      if (!props.maxDate && !canSwitch.value) {\n        return getMonthByOffset(getToday(), 6)\n      }\n\n      return props.maxDate\n    })\n\n    const limitDateRange = (\n      date: Date,\n      min = minDate.value,\n      max = maxDate.value\n    ) => {\n      if (min && compareDay(date, min) === -1) {\n        return min\n      }\n      if (max && compareDay(date, max) === 1) {\n        return max\n      }\n      return date\n    }\n\n    const getInitialDate = (defaultDate = props.defaultDate) => {\n      const { type, allowSameDay } = props\n\n      if (defaultDate === null) {\n        return defaultDate\n      }\n\n      const now = getToday()\n\n      if (type === 'range') {\n        if (!Array.isArray(defaultDate)) {\n          defaultDate = []\n        }\n\n        // reset invalid default date\n        if (defaultDate.length === 1 && compareDay(defaultDate[0], now) === 1) {\n          defaultDate = []\n        }\n\n        const min = minDate.value\n        const max = maxDate.value\n\n        const start = limitDateRange(\n          defaultDate[0] || now,\n          min,\n          max ? (allowSameDay ? max : getPrevDay(max)) : undefined\n        )\n\n        const end = limitDateRange(\n          defaultDate[1] || (allowSameDay ? now : getNextDay(now)),\n          min ? (allowSameDay ? min : getNextDay(min)) : undefined\n        )\n\n        return [start, end]\n      }\n\n      if (type === 'multiple') {\n        if (Array.isArray(defaultDate)) {\n          return defaultDate.map((date) => limitDateRange(date))\n        }\n        return [limitDateRange(now)]\n      }\n\n      if (!defaultDate || Array.isArray(defaultDate)) {\n        defaultDate = now\n      }\n      return limitDateRange(defaultDate)\n    }\n\n    const getInitialPanelDate = () => {\n      const date = Array.isArray(currentDate.value)\n        ? currentDate.value[0]\n        : currentDate.value\n\n      return date ? date : limitDateRange(getToday())\n    }\n\n    let bodyHeight: number\n\n    const bodyRef = ref<HTMLElement>()\n\n    const currentDate = ref(getInitialDate())\n\n    const currentPanelDate = ref<Date>(getInitialPanelDate())\n\n    const currentMonthRef = ref<CalendarMonthInstance>()\n\n    const [monthRefs, setMonthRefs] = useRefs<CalendarMonthInstance>()\n\n    const dayOffset = computed(() =>\n      props.firstDayOfWeek ? +props.firstDayOfWeek % 7 : 0\n    )\n\n    const months = computed(() => {\n      const months: Date[] = []\n\n      if (!minDate.value || !maxDate.value) {\n        return months\n      }\n\n      const cursor = new Date(minDate.value)\n\n      cursor.setDate(1)\n\n      do {\n        months.push(new Date(cursor))\n        cursor.setMonth(cursor.getMonth() + 1)\n      } while (compareMonth(cursor, maxDate.value) !== 1)\n\n      return months\n    })\n\n    const buttonDisabled = computed(() => {\n      if (currentDate.value) {\n        if (props.type === 'range') {\n          return (\n            !(currentDate.value as Date[])[0] ||\n            !(currentDate.value as Date[])[1]\n          )\n        }\n        if (props.type === 'multiple') {\n          return !(currentDate.value as Date[]).length\n        }\n      }\n      return !currentDate.value\n    })\n\n    const getSelectedDate = () => currentDate.value\n\n    // calculate the position of the elements\n    // and find the elements that needs to be rendered\n    const onScroll = () => {\n      const top = getScrollTop(bodyRef.value!)\n      const bottom = top + bodyHeight\n\n      const heights = months.value.map((item, index) =>\n        monthRefs.value[index].getHeight()\n      )\n      const heightSum = heights.reduce((a, b) => a + b, 0)\n\n      // iOS scroll bounce may exceed the range\n      if (bottom > heightSum && top > 0) {\n        return\n      }\n\n      let height = 0\n      let currentMonth\n      const visibleRange = [-1, -1]\n\n      for (let i = 0; i < months.value.length; i++) {\n        const month = monthRefs.value[i]\n        const visible = height <= bottom && height + heights[i] >= top\n\n        if (visible) {\n          visibleRange[1] = i\n\n          if (!currentMonth) {\n            currentMonth = month\n            visibleRange[0] = i\n          }\n\n          if (!monthRefs.value[i].showed) {\n            monthRefs.value[i].showed = true\n            emit('monthShow', {\n              date: month.date,\n              title: month.getTitle(),\n            })\n          }\n        }\n\n        height += heights[i]\n      }\n\n      months.value.forEach((month, index) => {\n        const visible =\n          index >= visibleRange[0] - 1 && index <= visibleRange[1] + 1\n        monthRefs.value[index].setVisible(visible)\n      })\n\n      /* istanbul ignore else */\n      if (currentMonth) {\n        currentMonthRef.value = currentMonth\n      }\n    }\n\n    const scrollToDate = (targetDate: Date) => {\n      if (canSwitch.value) {\n        currentPanelDate.value = targetDate\n      } else {\n        raf(() => {\n          months.value.some((month, index) => {\n            if (compareMonth(month, targetDate) === 0) {\n              if (bodyRef.value) {\n                monthRefs.value[index].scrollToDate(bodyRef.value, targetDate)\n              }\n              return true\n            }\n\n            return false\n          })\n\n          onScroll()\n        })\n      }\n    }\n\n    const scrollToCurrentDate = () => {\n      if (props.poppable && !props.show) {\n        return\n      }\n\n      if (currentDate.value) {\n        const targetDate =\n          props.type === 'single'\n            ? (currentDate.value as Date)\n            : (currentDate.value as Date[])[0]\n        if (isDate(targetDate)) {\n          scrollToDate(targetDate)\n        }\n      } else if (!canSwitch.value) {\n        raf(onScroll)\n      }\n    }\n\n    const init = () => {\n      if (props.poppable && !props.show) {\n        return\n      }\n\n      if (!canSwitch.value) {\n        raf(() => {\n          // add Math.floor to avoid decimal height issues\n          // https://github.com/vant-ui/vant/issues/5640\n          bodyHeight = Math.floor(useRect(bodyRef).height)\n        })\n      }\n\n      scrollToCurrentDate()\n    }\n\n    const reset = (date = getInitialDate()) => {\n      currentDate.value = date\n      scrollToCurrentDate()\n    }\n\n    const checkRange = (date: [Date, Date]) => {\n      const { maxRange, rangePrompt, showRangePrompt } = props\n\n      if (maxRange && calcDateNum(date) > +maxRange) {\n        if (showRangePrompt) {\n          showToast(rangePrompt || t('rangePrompt', maxRange))\n        }\n        emit('overRange')\n        return false\n      }\n\n      return true\n    }\n\n    const onPanelChange = (date: Date) => {\n      currentPanelDate.value = date\n      emit('panelChange', { date })\n    }\n\n    const onConfirm = () =>\n      emit('confirm', currentDate.value ?? cloneDates(currentDate.value!))\n\n    const select = (date: Date | Date[], complete?: boolean) => {\n      const setCurrentDate = (date: Date | Date[]) => {\n        currentDate.value = date\n        emit('select', cloneDates(date))\n      }\n\n      if (complete && props.type === 'range') {\n        const valid = checkRange(date as [Date, Date])\n\n        if (!valid) {\n          // auto selected to max range\n          setCurrentDate([\n            (date as Date[])[0],\n            getDayByOffset((date as Date[])[0], +props.maxRange - 1),\n          ])\n          return\n        }\n      }\n\n      setCurrentDate(date)\n\n      if (complete && !props.showConfirm) {\n        onConfirm()\n      }\n    }\n\n    // get first disabled calendarDay between date range\n    const getDisabledDate = (\n      disabledDays: CalendarDayItem[],\n      startDay: Date,\n      date: Date\n    ): Date | undefined =>\n      disabledDays.find(\n        (day) =>\n          compareDay(startDay, day.date!) === -1 &&\n          compareDay(day.date!, date) === -1\n      )?.date\n\n    // disabled calendarDayf\n    const disabledDays = computed(() =>\n      monthRefs.value.reduce((arr, ref) => {\n        arr.push(...(ref.disabledDays?.value ?? []))\n        return arr\n      }, [] as CalendarDayItem[])\n    )\n\n    const onClickDay = (item: CalendarDayItem) => {\n      if (props.readonly || !item.date) {\n        return\n      }\n\n      const { date } = item\n      const { type } = props\n\n      if (type === 'range') {\n        if (!currentDate.value) {\n          select([date])\n          return\n        }\n\n        const [startDay, endDay] = currentDate.value as [Date, Date]\n\n        if (startDay && !endDay) {\n          const compareToStart = compareDay(date, startDay)\n\n          if (compareToStart === 1) {\n            const disabledDay = getDisabledDate(\n              disabledDays.value,\n              startDay,\n              date\n            )\n\n            if (disabledDay) {\n              const endDay = getPrevDay(disabledDay)\n              if (compareDay(startDay, endDay) === -1) {\n                select([startDay, endDay])\n              } else {\n                select([date])\n              }\n            } else {\n              select([startDay, date], true)\n            }\n          } else if (compareToStart === -1) {\n            select([date])\n          } else if (props.allowSameDay) {\n            select([date, date], true)\n          }\n        } else {\n          select([date])\n        }\n      } else if (type === 'multiple') {\n        if (!currentDate.value) {\n          select([date])\n          return\n        }\n        const dates = currentDate.value as Date[]\n\n        const selectedIndex = dates.findIndex(\n          (dateItem: Date) => compareDay(dateItem, date) === 0\n        )\n\n        if (selectedIndex !== -1) {\n          const [unselectedDate] = dates.splice(selectedIndex, 1)\n          emit('unselect', cloneDate(unselectedDate))\n        } else if (props.maxRange && dates.length >= +props.maxRange) {\n          showToast(props.rangePrompt || t('rangePrompt', props.maxRange))\n        } else {\n          select([...dates, date])\n        }\n      } else {\n        select(date, true)\n      }\n    }\n\n    const onClickOverlay = (event: MouseEvent) => emit('clickOverlay', event)\n\n    const updateShow = (value: boolean) => emit('update:show', value)\n\n    const renderMonth = (date: Date, index: number) => {\n      return (\n        <CalendarMonth\n          v-slots={pick(slots, [\n            'top-info',\n            'bottom-info',\n            'month-title',\n            'text',\n          ])}\n          ref={canSwitch.value ? currentMonthRef : setMonthRefs(index)}\n          date={date}\n          today={getToday()}\n          currentDate={currentDate.value}\n          showMonthTitle={props.showSubtitle}\n          firstDayOfWeek={dayOffset.value}\n          lazyRender={canSwitch.value ? false : props.lazyRender}\n          maxDate={maxDate.value}\n          minDate={minDate.value}\n          {...pick(props, [\n            'type',\n            'color',\n            'showMark',\n            'formatter',\n            'rowHeight',\n            'showSubtitle',\n            'allowSameDay',\n          ])}\n          onClick={onClickDay}\n          onClickDisabledDate={(item: Date | Date[]) =>\n            emit('clickDisabledDate', item)\n          }\n        />\n      )\n    }\n\n    const renderFooterButton = () => {\n      if (slots.footer) {\n        return slots.footer()\n      }\n\n      if (props.showConfirm) {\n        const slot = slots['confirm-text']\n        const disabled = buttonDisabled.value\n        const text = disabled ? props.confirmDisabledText : props.confirmText\n        return (\n          <Button\n            block\n            size=\"large\"\n            type=\"primary\"\n            color={props.color}\n            class={bem('confirm')}\n            disabled={disabled}\n            nativeType=\"button\"\n            onClick={onConfirm}\n          >\n            {slot ? slot({ disabled }) : text || t('confirm')}\n          </Button>\n        )\n      }\n    }\n\n    const renderFooter = () => (\n      <div\n        class={[\n          bem('footer'),\n          { 'van-safe-area-bottom': props.safeAreaInsetBottom },\n        ]}\n      >\n        {renderFooterButton()}\n      </div>\n    )\n\n    const renderCalendar = () => (\n      <div class={bem()}>\n        <CalendarHeader\n          v-slots={pick(slots, [\n            'title',\n            'subtitle',\n            'prev-month',\n            'prev-year',\n            'next-month',\n            'next-year',\n          ])}\n          date={currentMonthRef.value?.date}\n          maxDate={maxDate.value}\n          minDate={minDate.value}\n          title={props.title}\n          subtitle={currentMonthRef.value?.getTitle()}\n          showTitle={props.showTitle}\n          showSubtitle={props.showSubtitle}\n          switchMode={props.switchMode}\n          firstDayOfWeek={dayOffset.value}\n          onClickSubtitle={(event: MouseEvent) => emit('clickSubtitle', event)}\n          onPanelChange={onPanelChange}\n        />\n        <div\n          ref={bodyRef}\n          class={bem('body')}\n          onScroll={canSwitch.value ? undefined : onScroll}\n        >\n          {canSwitch.value\n            ? renderMonth(currentPanelDate.value, 0)\n            : months.value.map(renderMonth)}\n        </div>\n        {renderFooter()}\n      </div>\n    )\n\n    watch(() => props.show, init)\n    watch(\n      () => [props.type, props.minDate, props.maxDate, props.switchMode],\n      () => reset(getInitialDate(currentDate.value))\n    )\n    watch(\n      () => props.defaultDate,\n      (value) => {\n        reset(value)\n      }\n    )\n\n    useExpose<CalendarExpose>({\n      reset,\n      scrollToDate,\n      getSelectedDate,\n    })\n\n    onMountedOrActivated(init)\n\n    return () => {\n      if (props.poppable) {\n        return (\n          <Popup\n            v-slots={{ default: renderCalendar }}\n            show={props.show}\n            class={bem('popup')}\n            round={props.round}\n            position={props.position}\n            closeable={props.showTitle || props.showSubtitle}\n            teleport={props.teleport}\n            closeOnPopstate={props.closeOnPopstate}\n            safeAreaInsetTop={props.safeAreaInsetTop}\n            closeOnClickOverlay={props.closeOnClickOverlay}\n            onClickOverlay={onClickOverlay}\n            onUpdate:show={updateShow}\n          />\n        )\n      }\n\n      return renderCalendar()\n    }\n  },\n})\n"],"names":["calendarProps","show","Boolean","type","makeStringProp","switchMode","title","String","color","round","truthProp","readonly","poppable","maxRange","makeNumericProp","position","teleport","Object","showMark","showTitle","formatter","Function","rowHeight","numericProp","confirmText","rangePrompt","lazyRender","showConfirm","defaultDate","Date","Array","allowSameDay","showSubtitle","closeOnPopstate","showRangePrompt","confirmDisabledText","closeOnClickOverlay","safeAreaInsetTop","safeAreaInsetBottom","minDate","validator","isDate","maxDate","firstDayOfWeek","default","val","defineComponent","name","props","emits","setup","emit","slots","canSwitch","computed","value","getToday","getMonthByOffset","limitDateRange","date","min","max","compareDay","getInitialDate","now","isArray","length","start","getPrevDay","undefined","end","getNextDay","map","getInitialPanelDate","currentDate","bodyHeight","bodyRef","ref","currentPanelDate","currentMonthRef","monthRefs","setMonthRefs","useRefs","dayOffset","months","cursor","setDate","push","setMonth","getMonth","compareMonth","buttonDisabled","getSelectedDate","onScroll","top","getScrollTop","bottom","heights","item","index","getHeight","heightSum","reduce","a","b","height","currentMonth","visibleRange","i","month","visible","showed","getTitle","forEach","setVisible","scrollToDate","targetDate","raf","some","scrollToCurrentDate","init","Math","floor","useRect","reset","checkRange","calcDateNum","showToast","t","onPanelChange","onConfirm","cloneDates","select","complete","setCurrentDate","valid","getDayByOffset","getDisabledDate","disabledDays","startDay","find","day","arr","onClickDay","endDay","compareToStart","disabledDay","dates","selectedIndex","findIndex","dateItem","unselectedDate","splice","cloneDate","onClickOverlay","event","updateShow","renderMonth","_createVNode","CalendarMonth","_mergeProps","pick","renderFooterButton","footer","slot","disabled","text","Button","bem","renderFooter","renderCalendar","CalendarHeader","watch","useExpose","onMountedOrActivated","Popup"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgEO,MAAMA,aAAgB,GAAA;AAAA,EAC3BC,IAAMC,EAAAA,OAAAA;AAAAA,EACNC,IAAAA,EAAMC,eAA6B,QAAQ,CAAA;AAAA,EAC3CC,UAAAA,EAAYD,eAAmC,MAAM,CAAA;AAAA,EACrDE,KAAOC,EAAAA,MAAAA;AAAAA,EACPC,KAAOD,EAAAA,MAAAA;AAAAA,EACPE,KAAOC,EAAAA,SAAAA;AAAAA,EACPC,QAAUT,EAAAA,OAAAA;AAAAA,EACVU,QAAUF,EAAAA,SAAAA;AAAAA,EACVG,QAAAA,EAAUC,gBAAgB,IAAI,CAAA;AAAA,EAC9BC,QAAAA,EAAUX,eAA8B,QAAQ,CAAA;AAAA,EAChDY,QAAAA,EAAU,CAACT,MAAAA,EAAQU,MAAM,CAAA;AAAA,EACzBC,QAAUR,EAAAA,SAAAA;AAAAA,EACVS,SAAWT,EAAAA,SAAAA;AAAAA,EACXU,SAAWC,EAAAA,QAAAA;AAAAA,EACXC,SAAWC,EAAAA,WAAAA;AAAAA,EACXC,WAAajB,EAAAA,MAAAA;AAAAA,EACbkB,WAAalB,EAAAA,MAAAA;AAAAA,EACbmB,UAAYhB,EAAAA,SAAAA;AAAAA,EACZiB,WAAajB,EAAAA,SAAAA;AAAAA,EACbkB,WAAAA,EAAa,CAACC,IAAAA,EAAMC,KAAK,CAAA;AAAA,EACzBC,YAAc7B,EAAAA,OAAAA;AAAAA,EACd8B,YAActB,EAAAA,SAAAA;AAAAA,EACduB,eAAiBvB,EAAAA,SAAAA;AAAAA,EACjBwB,eAAiBxB,EAAAA,SAAAA;AAAAA,EACjByB,mBAAqB5B,EAAAA,MAAAA;AAAAA,EACrB6B,mBAAqB1B,EAAAA,SAAAA;AAAAA,EACrB2B,gBAAkBnC,EAAAA,OAAAA;AAAAA,EAClBoC,mBAAqB5B,EAAAA,SAAAA;AAAAA,EACrB6B,OAAS,EAAA;AAAA,IACPpC,IAAM0B,EAAAA,IAAAA;AAAAA,IACNW,SAAWC,EAAAA,MAAAA;AAAAA,GACb;AAAA,EACAC,OAAS,EAAA;AAAA,IACPvC,IAAM0B,EAAAA,IAAAA;AAAAA,IACNW,SAAWC,EAAAA,MAAAA;AAAAA,GACb;AAAA,EACAE,cAAgB,EAAA;AAAA,IACdxC,IAAMoB,EAAAA,WAAAA;AAAAA,IACNqB,OAAS,EAAA,CAAA;AAAA,IACTJ,SAAYK,EAAAA,CAAAA,GAAAA,KAAgBA,GAAO,IAAA,CAAA,IAAKA,GAAO,IAAA,CAAA;AAAA,GACjD;AACF,EAAA;AAIA,gBAAeC,eAAgB,CAAA;AAAA,EAC7BC,IAAAA;AAAAA,EAEAC,KAAOhD,EAAAA,aAAAA;AAAAA,EAEPiD,KAAAA,EAAO,CACL,QAAA,EACA,SACA,EAAA,UAAA,EACA,WACA,EAAA,WAAA,EACA,aACA,EAAA,eAAA,EACA,mBACA,EAAA,cAAA,EACA,aAAa,CAAA;AAAA,EAGfC,MAAMF,KAAO,EAAA;AAAA,IAAEG,IAAAA;AAAAA,IAAMC,KAAAA;AAAAA,GAAS,EAAA;AAC5B,IAAA,MAAMC,SAAYC,GAAAA,QAAAA,CAAS,MAAMN,KAAAA,CAAM3C,eAAe,MAAM,CAAA,CAAA;AAE5D,IAAMkC,MAAAA,OAAAA,GAAUe,SAAS,MAAM;AAC7B,MAAA,IAAI,CAACN,KAAAA,CAAMT,OAAW,IAAA,CAACc,UAAUE,KAAO,EAAA;AACtC,QAAA,OAAOC,QAAS,EAAA,CAAA;AAAA,OAClB;AAEA,MAAA,OAAOR,KAAMT,CAAAA,OAAAA,CAAAA;AAAAA,KACd,CAAA,CAAA;AAED,IAAMG,MAAAA,OAAAA,GAAUY,SAAS,MAAM;AAC7B,MAAA,IAAI,CAACN,KAAAA,CAAMN,OAAW,IAAA,CAACW,UAAUE,KAAO,EAAA;AACtC,QAAOE,OAAAA,gBAAAA,CAAiBD,QAAS,EAAA,EAAG,CAAC,CAAA,CAAA;AAAA,OACvC;AAEA,MAAA,OAAOR,KAAMN,CAAAA,OAAAA,CAAAA;AAAAA,KACd,CAAA,CAAA;AAED,IAAMgB,MAAAA,cAAAA,GAAiBA,CACrBC,IACAC,EAAAA,GAAAA,GAAMrB,QAAQgB,KACdM,EAAAA,GAAAA,GAAMnB,QAAQa,KACX,KAAA;AACH,MAAA,IAAIK,GAAOE,IAAAA,UAAAA,CAAWH,IAAMC,EAAAA,GAAG,MAAM,CAAI,CAAA,EAAA;AACvC,QAAOA,OAAAA,GAAAA,CAAAA;AAAAA,OACT;AACA,MAAA,IAAIC,GAAOC,IAAAA,UAAAA,CAAWH,IAAME,EAAAA,GAAG,MAAM,CAAG,EAAA;AACtC,QAAOA,OAAAA,GAAAA,CAAAA;AAAAA,OACT;AACA,MAAOF,OAAAA,IAAAA,CAAAA;AAAAA,KACT,CAAA;AAEA,IAAA,MAAMI,cAAiBA,GAAAA,CAACnC,WAAcoB,GAAAA,KAAAA,CAAMpB,WAAgB,KAAA;AAC1D,MAAM,MAAA;AAAA,QAAEzB,IAAAA;AAAAA,QAAM4B,YAAAA;AAAAA,OAAiBiB,GAAAA,KAAAA,CAAAA;AAE/B,MAAA,IAAIpB,gBAAgB,IAAM,EAAA;AACxB,QAAOA,OAAAA,WAAAA,CAAAA;AAAAA,OACT;AAEA,MAAA,MAAMoC,MAAMR,QAAS,EAAA,CAAA;AAErB,MAAA,IAAIrD,SAAS,OAAS,EAAA;AACpB,QAAA,IAAI,CAAC2B,KAAAA,CAAMmC,OAAQrC,CAAAA,WAAW,CAAG,EAAA;AAC/BA,UAAAA,WAAAA,GAAc,EAAE,CAAA;AAAA,SAClB;AAGA,QAAIA,IAAAA,WAAAA,CAAYsC,WAAW,CAAKJ,IAAAA,UAAAA,CAAWlC,YAAY,CAAIoC,CAAAA,EAAAA,GAAG,MAAM,CAAG,EAAA;AACrEpC,UAAAA,WAAAA,GAAc,EAAE,CAAA;AAAA,SAClB;AAEA,QAAA,MAAMgC,MAAMrB,OAAQgB,CAAAA,KAAAA,CAAAA;AACpB,QAAA,MAAMM,MAAMnB,OAAQa,CAAAA,KAAAA,CAAAA;AAEpB,QAAA,MAAMY,KAAQT,GAAAA,cAAAA,CACZ9B,WAAY,CAAA,CAAA,CAAA,IAAMoC,GAClBJ,EAAAA,GAAAA,EACAC,GAAO9B,GAAAA,YAAAA,GAAe8B,GAAMO,GAAAA,UAAAA,CAAWP,GAAG,CAAA,GAAKQ,KACjD,CAAA,CAAA,CAAA;AAEA,QAAA,MAAMC,GAAMZ,GAAAA,cAAAA,CACV9B,WAAY,CAAA,CAAA,CAAA,KAAOG,eAAeiC,GAAMO,GAAAA,UAAAA,CAAWP,GAAG,CAAA,CAAA,EACtDJ,MAAO7B,YAAe6B,GAAAA,GAAAA,GAAMW,UAAWX,CAAAA,GAAG,IAAKS,KACjD,CAAA,CAAA,CAAA;AAEA,QAAO,OAAA,CAACF,OAAOG,GAAG,CAAA,CAAA;AAAA,OACpB;AAEA,MAAA,IAAInE,SAAS,UAAY,EAAA;AACvB,QAAI2B,IAAAA,KAAAA,CAAMmC,OAAQrC,CAAAA,WAAW,CAAG,EAAA;AAC9B,UAAA,OAAOA,WAAY4C,CAAAA,GAAAA,CAAKb,CAASD,IAAAA,KAAAA,cAAAA,CAAeC,IAAI,CAAC,CAAA,CAAA;AAAA,SACvD;AACA,QAAO,OAAA,CAACD,cAAeM,CAAAA,GAAG,CAAC,CAAA,CAAA;AAAA,OAC7B;AAEA,MAAA,IAAI,CAACpC,WAAAA,IAAeE,KAAMmC,CAAAA,OAAAA,CAAQrC,WAAW,CAAG,EAAA;AAC9CA,QAAcoC,WAAAA,GAAAA,GAAAA,CAAAA;AAAAA,OAChB;AACA,MAAA,OAAON,eAAe9B,WAAW,CAAA,CAAA;AAAA,KACnC,CAAA;AAEA,IAAA,MAAM6C,sBAAsBA,MAAM;AAChC,MAAMd,MAAAA,IAAAA,GAAO7B,MAAMmC,OAAQS,CAAAA,WAAAA,CAAYnB,KAAK,CACxCmB,GAAAA,WAAAA,CAAYnB,KAAM,CAAA,CAAA,CAAA,GAClBmB,WAAYnB,CAAAA,KAAAA,CAAAA;AAEhB,MAAA,OAAOI,IAAOA,GAAAA,IAAAA,GAAOD,cAAeF,CAAAA,QAAAA,EAAU,CAAA,CAAA;AAAA,KAChD,CAAA;AAEA,IAAImB,IAAAA,UAAAA,CAAAA;AAEJ,IAAA,MAAMC,UAAUC,GAAiB,EAAA,CAAA;AAEjC,IAAMH,MAAAA,WAAAA,GAAcG,GAAId,CAAAA,cAAAA,EAAgB,CAAA,CAAA;AAExC,IAAMe,MAAAA,gBAAAA,GAAmBD,GAAUJ,CAAAA,mBAAAA,EAAqB,CAAA,CAAA;AAExD,IAAA,MAAMM,kBAAkBF,GAA2B,EAAA,CAAA;AAEnD,IAAA,MAAM,CAACG,SAAAA,EAAWC,YAAY,CAAA,GAAIC,OAA+B,EAAA,CAAA;AAEjE,IAAMC,MAAAA,SAAAA,GAAY7B,SAAS,MACzBN,KAAAA,CAAML,iBAAiB,CAACK,KAAAA,CAAML,cAAiB,GAAA,CAAA,GAAI,CACrD,CAAA,CAAA;AAEA,IAAMyC,MAAAA,MAAAA,GAAS9B,SAAS,MAAM;AAC5B,MAAA,MAAM8B,UAAiB,EAAE,CAAA;AAEzB,MAAA,IAAI,CAAC7C,OAAAA,CAAQgB,KAAS,IAAA,CAACb,QAAQa,KAAO,EAAA;AACpC,QAAO6B,OAAAA,OAAAA,CAAAA;AAAAA,OACT;AAEA,MAAA,MAAMC,MAAS,GAAA,IAAIxD,IAAKU,CAAAA,OAAAA,CAAQgB,KAAK,CAAA,CAAA;AAErC8B,MAAAA,MAAAA,CAAOC,QAAQ,CAAC,CAAA,CAAA;AAEhB,MAAG,GAAA;AACDF,QAAAA,OAAOG,CAAAA,IAAAA,CAAK,IAAI1D,IAAAA,CAAKwD,MAAM,CAAC,CAAA,CAAA;AAC5BA,QAAAA,MAAAA,CAAOG,QAASH,CAAAA,MAAAA,CAAOI,QAAS,EAAA,GAAI,CAAC,CAAA,CAAA;AAAA,OAC9BC,QAAAA,YAAAA,CAAaL,MAAQ3C,EAAAA,OAAAA,CAAQa,KAAK,CAAM,KAAA,CAAA,EAAA;AAEjD,MAAO6B,OAAAA,OAAAA,CAAAA;AAAAA,KACR,CAAA,CAAA;AAED,IAAMO,MAAAA,cAAAA,GAAiBrC,SAAS,MAAM;AACpC,MAAA,IAAIoB,YAAYnB,KAAO,EAAA;AACrB,QAAIP,IAAAA,KAAAA,CAAM7C,SAAS,OAAS,EAAA;AAC1B,UAAA,OACE,CAAEuE,WAAYnB,CAAAA,KAAAA,CAAiB,CAC/B,CAAA,IAAA,CAAEmB,YAAYnB,KAAiB,CAAA,CAAA,CAAA,CAAA;AAAA,SAEnC;AACA,QAAIP,IAAAA,KAAAA,CAAM7C,SAAS,UAAY,EAAA;AAC7B,UAAO,OAAA,CAAEuE,YAAYnB,KAAiBW,CAAAA,MAAAA,CAAAA;AAAAA,SACxC;AAAA,OACF;AACA,MAAA,OAAO,CAACQ,WAAYnB,CAAAA,KAAAA,CAAAA;AAAAA,KACrB,CAAA,CAAA;AAED,IAAMqC,MAAAA,eAAAA,GAAkBA,MAAMlB,WAAYnB,CAAAA,KAAAA,CAAAA;AAI1C,IAAA,MAAMsC,WAAWA,MAAM;AACrB,MAAMC,MAAAA,GAAAA,GAAMC,YAAanB,CAAAA,OAAAA,CAAQrB,KAAM,CAAA,CAAA;AACvC,MAAA,MAAMyC,SAASF,GAAMnB,GAAAA,UAAAA,CAAAA;AAErB,MAAMsB,MAAAA,OAAAA,GAAUb,MAAO7B,CAAAA,KAAAA,CAAMiB,GAAI,CAAA,CAAC0B,IAAMC,EAAAA,KAAAA,KACtCnB,SAAUzB,CAAAA,KAAAA,CAAM4C,KAAOC,CAAAA,CAAAA,SAAAA,EACzB,CAAA,CAAA;AACA,MAAMC,MAAAA,SAAAA,GAAYJ,QAAQK,MAAO,CAAA,CAACC,GAAGC,CAAMD,KAAAA,CAAAA,GAAIC,GAAG,CAAC,CAAA,CAAA;AAGnD,MAAIR,IAAAA,MAAAA,GAASK,SAAaP,IAAAA,GAAAA,GAAM,CAAG,EAAA;AACjC,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,IAAIW,MAAS,GAAA,CAAA,CAAA;AACb,MAAIC,IAAAA,YAAAA,CAAAA;AACJ,MAAMC,MAAAA,YAAAA,GAAe,CAAC,CAAA,CAAA,EAAI,CAAE,CAAA,CAAA,CAAA;AAE5B,MAAA,KAAA,IAASC,IAAI,CAAGA,EAAAA,CAAAA,GAAIxB,MAAO7B,CAAAA,KAAAA,CAAMW,QAAQ0C,CAAK,EAAA,EAAA;AAC5C,QAAMC,MAAAA,KAAAA,GAAQ7B,UAAUzB,KAAMqD,CAAAA,CAAAA,CAAAA,CAAAA;AAC9B,QAAA,MAAME,OAAUL,GAAAA,MAAAA,IAAUT,MAAUS,IAAAA,MAAAA,GAASR,QAAQW,CAAMd,CAAAA,IAAAA,GAAAA,CAAAA;AAE3D,QAAA,IAAIgB,OAAS,EAAA;AACXH,UAAAA,YAAAA,CAAa,CAAKC,CAAAA,GAAAA,CAAAA,CAAAA;AAElB,UAAA,IAAI,CAACF,YAAc,EAAA;AACjBA,YAAeG,YAAAA,GAAAA,KAAAA,CAAAA;AACfF,YAAAA,YAAAA,CAAa,CAAKC,CAAAA,GAAAA,CAAAA,CAAAA;AAAAA,WACpB;AAEA,UAAA,IAAI,CAAC5B,SAAAA,CAAUzB,KAAMqD,CAAAA,CAAAA,CAAAA,CAAGG,MAAQ,EAAA;AAC9B/B,YAAUzB,SAAAA,CAAAA,KAAAA,CAAMqD,GAAGG,MAAS,GAAA,IAAA,CAAA;AAC5B5D,YAAAA,IAAAA,CAAK,WAAa,EAAA;AAAA,cAChBQ,MAAMkD,KAAMlD,CAAAA,IAAAA;AAAAA,cACZrD,KAAAA,EAAOuG,MAAMG,QAAS,EAAA;AAAA,aACvB,CAAA,CAAA;AAAA,WACH;AAAA,SACF;AAEAP,QAAAA,MAAAA,IAAUR,OAAQW,CAAAA,CAAAA,CAAAA,CAAAA;AAAAA,OACpB;AAEAxB,MAAAA,MAAAA,CAAO7B,KAAM0D,CAAAA,OAAAA,CAAQ,CAACJ,KAAAA,EAAOV,KAAU,KAAA;AACrC,QAAA,MAAMW,UACJX,KAASQ,IAAAA,YAAAA,CAAa,KAAK,CAAKR,IAAAA,KAAAA,IAASQ,aAAa,CAAK,CAAA,GAAA,CAAA,CAAA;AAC7D3B,QAAUzB,SAAAA,CAAAA,KAAAA,CAAM4C,KAAOe,CAAAA,CAAAA,UAAAA,CAAWJ,OAAO,CAAA,CAAA;AAAA,OAC1C,CAAA,CAAA;AAGD,MAAA,IAAIJ,YAAc,EAAA;AAChB3B,QAAAA,eAAAA,CAAgBxB,KAAQmD,GAAAA,YAAAA,CAAAA;AAAAA,OAC1B;AAAA,KACF,CAAA;AAEA,IAAA,MAAMS,eAAgBC,CAAqB,UAAA,KAAA;AACzC,MAAA,IAAI/D,UAAUE,KAAO,EAAA;AACnBuB,QAAAA,gBAAAA,CAAiBvB,KAAQ6D,GAAAA,UAAAA,CAAAA;AAAAA,OACpB,MAAA;AACLC,QAAAA,GAAAA,CAAI,MAAM;AACRjC,UAAAA,MAAAA,CAAO7B,KAAM+D,CAAAA,IAAAA,CAAK,CAACT,KAAAA,EAAOV,KAAU,KAAA;AAClC,YAAA,IAAIT,YAAamB,CAAAA,KAAAA,EAAOO,UAAU,CAAA,KAAM,CAAG,EAAA;AACzC,cAAA,IAAIxC,QAAQrB,KAAO,EAAA;AACjByB,gBAAAA,SAAAA,CAAUzB,KAAM4C,CAAAA,KAAAA,CAAAA,CAAOgB,YAAavC,CAAAA,OAAAA,CAAQrB,OAAO6D,UAAU,CAAA,CAAA;AAAA,eAC/D;AACA,cAAO,OAAA,IAAA,CAAA;AAAA,aACT;AAEA,YAAO,OAAA,KAAA,CAAA;AAAA,WACR,CAAA,CAAA;AAEDvB,UAAS,QAAA,EAAA,CAAA;AAAA,SACV,CAAA,CAAA;AAAA,OACH;AAAA,KACF,CAAA;AAEA,IAAA,MAAM0B,sBAAsBA,MAAM;AAChC,MAAA,IAAIvE,KAAMpC,CAAAA,QAAAA,IAAY,CAACoC,KAAAA,CAAM/C,IAAM,EAAA;AACjC,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,IAAIyE,YAAYnB,KAAO,EAAA;AACrB,QAAA,MAAM6D,aACJpE,KAAM7C,CAAAA,IAAAA,KAAS,WACVuE,WAAYnB,CAAAA,KAAAA,GACZmB,YAAYnB,KAAiB,CAAA,CAAA,CAAA,CAAA;AACpC,QAAId,IAAAA,MAAAA,CAAO2E,UAAU,CAAG,EAAA;AACtBD,UAAAA,YAAAA,CAAaC,UAAU,CAAA,CAAA;AAAA,SACzB;AAAA,OACF,MAAA,IAAW,CAAC/D,SAAAA,CAAUE,KAAO,EAAA;AAC3B8D,QAAAA,GAAAA,CAAIxB,QAAQ,CAAA,CAAA;AAAA,OACd;AAAA,KACF,CAAA;AAEA,IAAA,MAAM2B,OAAOA,MAAM;AACjB,MAAA,IAAIxE,KAAMpC,CAAAA,QAAAA,IAAY,CAACoC,KAAAA,CAAM/C,IAAM,EAAA;AACjC,QAAA,OAAA;AAAA,OACF;AAEA,MAAI,IAAA,CAACoD,UAAUE,KAAO,EAAA;AACpB8D,QAAAA,GAAAA,CAAI,MAAM;AAGR1C,UAAAA,UAAAA,GAAa8C,IAAKC,CAAAA,KAAAA,CAAMC,OAAQ/C,CAAAA,OAAO,EAAE6B,MAAM,CAAA,CAAA;AAAA,SAChD,CAAA,CAAA;AAAA,OACH;AAEAc,MAAoB,mBAAA,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAMK,KAAQA,GAAAA,CAACjE,IAAOI,GAAAA,cAAAA,EAAqB,KAAA;AACzCW,MAAAA,WAAAA,CAAYnB,KAAQI,GAAAA,IAAAA,CAAAA;AACpB4D,MAAoB,mBAAA,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,MAAMM,aAAclE,CAAuB,IAAA,KAAA;AACzC,MAAM,MAAA;AAAA,QAAE9C,QAAAA;AAAAA,QAAUY,WAAAA;AAAAA,QAAaS,eAAAA;AAAAA,OAAoBc,GAAAA,KAAAA,CAAAA;AAEnD,MAAA,IAAInC,QAAYiH,IAAAA,WAAAA,CAAYnE,IAAI,CAAA,GAAI,CAAC9C,QAAU,EAAA;AAC7C,QAAA,IAAIqB,eAAiB,EAAA;AACnB6F,UAAAA,SAAAA,CAAUtG,WAAeuG,IAAAA,CAAAA,CAAE,aAAenH,EAAAA,QAAQ,CAAC,CAAA,CAAA;AAAA,SACrD;AACAsC,QAAAA,IAAAA,CAAK,WAAW,CAAA,CAAA;AAChB,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAA,MAAM8E,gBAAiBtE,CAAe,IAAA,KAAA;AACpCmB,MAAAA,gBAAAA,CAAiBvB,KAAQI,GAAAA,IAAAA,CAAAA;AACzBR,MAAAA,IAAAA,CAAK,aAAe,EAAA;AAAA,QAAEQ,IAAAA;AAAAA,OAAM,CAAA,CAAA;AAAA,KAC9B,CAAA;AAEA,IAAA,MAAMuE,YAAYA;AArZtB,MAAA,IAAA,EAAA,CAAA;AAsZM/E,MAAAA,OAAAA,IAAAA,CAAK,YAAWuB,EAAYnB,GAAAA,WAAAA,CAAAA,KAAAA,KAAZmB,YAAqByD,UAAWzD,CAAAA,WAAAA,CAAYnB,KAAM,CAAC,CAAA,CAAA;AAAA,KAAA,CAAA;AAErE,IAAM6E,MAAAA,MAAAA,GAASA,CAACzE,IAAAA,EAAqB0E,QAAuB,KAAA;AAC1D,MAAMC,MAAAA,cAAAA,GAAkB3E,CAAAA,KAAwB,KAAA;AAC9Ce,QAAAA,WAAAA,CAAYnB,KAAQI,GAAAA,KAAAA,CAAAA;AACpBR,QAAK,IAAA,CAAA,QAAA,EAAUgF,UAAWxE,CAAAA,KAAI,CAAC,CAAA,CAAA;AAAA,OACjC,CAAA;AAEA,MAAI0E,IAAAA,QAAAA,IAAYrF,KAAM7C,CAAAA,IAAAA,KAAS,OAAS,EAAA;AACtC,QAAMoI,MAAAA,KAAAA,GAAQV,WAAWlE,IAAoB,CAAA,CAAA;AAE7C,QAAA,IAAI,CAAC4E,KAAO,EAAA;AAEVD,UAAe,cAAA,CAAA,CACZ3E,IAAgB,CAAA,CAAA,CAAA,EACjB6E,cAAgB7E,CAAAA,IAAAA,CAAgB,CAAI,CAAA,EAAA,CAACX,KAAMnC,CAAAA,QAAAA,GAAW,CAAC,CAAC,CACzD,CAAA,CAAA;AACD,UAAA,OAAA;AAAA,SACF;AAAA,OACF;AAEAyH,MAAAA,cAAAA,CAAe3E,IAAI,CAAA,CAAA;AAEnB,MAAI0E,IAAAA,QAAAA,IAAY,CAACrF,KAAAA,CAAMrB,WAAa,EAAA;AAClCuG,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AAAA,KACF,CAAA;AAGA,IAAA,MAAMO,eAAkBA,GAAAA,CACtBC,aACAC,EAAAA,QAAAA,EACAhF,IAAU,KAAA;AAtbhB,MAAA,IAAA,EAAA,CAAA;AAwbM+E,MAAAA,OAAAA,CAAAA,EAAAA,GAAAA,cAAaE,IACVC,CAAAA,CAAAA,GAAAA,KACC/E,UAAW6E,CAAAA,QAAAA,EAAUE,IAAIlF,IAAK,CAAA,KAAM,CACpCG,CAAAA,IAAAA,UAAAA,CAAW+E,IAAIlF,IAAOA,EAAAA,IAAI,CAAM,KAAA,CAAA,CACpC,MAJA+E,IAIG/E,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,CAAAA;AAAAA,KAAAA,CAAAA;AAGL,IAAM+E,MAAAA,YAAAA,GAAepF,SAAS,MAC5B0B,SAAAA,CAAUzB,MAAM+C,MAAO,CAAA,CAACwC,KAAKjE,IAAQ,KAAA;AAhc3C,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAicQiE,MAAIvD,GAAAA,CAAAA,IAAAA,CAAK,IAAIV,EAAAA,GAAAA,CAAAA,EAAAA,GAAAA,IAAAA,CAAI6D,iBAAJ7D,IAAkBtB,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,KAAAA,KAAlBsB,IAA2B,GAAA,EAAA,GAAA,EAAG,CAAA,CAAA;AAC3C,MAAOiE,OAAAA,GAAAA,CAAAA;AAAAA,KACT,EAAG,EAAuB,CAC5B,CAAA,CAAA;AAEA,IAAA,MAAMC,aAAc7C,CAA0B,IAAA,KAAA;AAC5C,MAAA,IAAIlD,KAAMrC,CAAAA,QAAAA,IAAY,CAACuF,IAAAA,CAAKvC,IAAM,EAAA;AAChC,QAAA,OAAA;AAAA,OACF;AAEA,MAAM,MAAA;AAAA,QAAEA,IAAAA;AAAAA,OAASuC,GAAAA,IAAAA,CAAAA;AACjB,MAAM,MAAA;AAAA,QAAE/F,IAAAA;AAAAA,OAAS6C,GAAAA,KAAAA,CAAAA;AAEjB,MAAA,IAAI7C,SAAS,OAAS,EAAA;AACpB,QAAI,IAAA,CAACuE,YAAYnB,KAAO,EAAA;AACtB6E,UAAO,MAAA,CAAA,CAACzE,IAAI,CAAC,CAAA,CAAA;AACb,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,MAAM,CAACgF,QAAAA,EAAUK,MAAM,CAAA,GAAItE,WAAYnB,CAAAA,KAAAA,CAAAA;AAEvC,QAAIoF,IAAAA,QAAAA,IAAY,CAACK,MAAQ,EAAA;AACvB,UAAMC,MAAAA,cAAAA,GAAiBnF,UAAWH,CAAAA,IAAAA,EAAMgF,QAAQ,CAAA,CAAA;AAEhD,UAAA,IAAIM,mBAAmB,CAAG,EAAA;AACxB,YAAA,MAAMC,WAAcT,GAAAA,eAAAA,CAClBC,YAAanF,CAAAA,KAAAA,EACboF,UACAhF,IACF,CAAA,CAAA;AAEA,YAAA,IAAIuF,WAAa,EAAA;AACf,cAAMF,MAAAA,OAAAA,GAAS5E,WAAW8E,WAAW,CAAA,CAAA;AACrC,cAAA,IAAIpF,UAAW6E,CAAAA,QAAAA,EAAUK,OAAM,CAAA,KAAM,CAAI,CAAA,EAAA;AACvCZ,gBAAO,MAAA,CAAA,CAACO,QAAUK,EAAAA,OAAM,CAAC,CAAA,CAAA;AAAA,eACpB,MAAA;AACLZ,gBAAO,MAAA,CAAA,CAACzE,IAAI,CAAC,CAAA,CAAA;AAAA,eACf;AAAA,aACK,MAAA;AACLyE,cAAAA,MAAAA,CAAO,CAACO,QAAAA,EAAUhF,IAAI,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,aAC/B;AAAA,WACF,MAAA,IAAWsF,mBAAmB,CAAI,CAAA,EAAA;AAChCb,YAAO,MAAA,CAAA,CAACzE,IAAI,CAAC,CAAA,CAAA;AAAA,WACf,MAAA,IAAWX,MAAMjB,YAAc,EAAA;AAC7BqG,YAAAA,MAAAA,CAAO,CAACzE,IAAAA,EAAMA,IAAI,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,WAC3B;AAAA,SACK,MAAA;AACLyE,UAAO,MAAA,CAAA,CAACzE,IAAI,CAAC,CAAA,CAAA;AAAA,SACf;AAAA,OACF,MAAA,IAAWxD,SAAS,UAAY,EAAA;AAC9B,QAAI,IAAA,CAACuE,YAAYnB,KAAO,EAAA;AACtB6E,UAAO,MAAA,CAAA,CAACzE,IAAI,CAAC,CAAA,CAAA;AACb,UAAA,OAAA;AAAA,SACF;AACA,QAAA,MAAMwF,QAAQzE,WAAYnB,CAAAA,KAAAA,CAAAA;AAE1B,QAAM6F,MAAAA,aAAAA,GAAgBD,MAAME,SACzBC,CAAAA,CAAAA,QAAAA,KAAmBxF,WAAWwF,QAAU3F,EAAAA,IAAI,MAAM,CACrD,CAAA,CAAA;AAEA,QAAA,IAAIyF,kBAAkB,CAAI,CAAA,EAAA;AACxB,UAAA,MAAM,CAACG,cAAc,CAAA,GAAIJ,KAAMK,CAAAA,MAAAA,CAAOJ,eAAe,CAAC,CAAA,CAAA;AACtDjG,UAAK,IAAA,CAAA,UAAA,EAAYsG,SAAUF,CAAAA,cAAc,CAAC,CAAA,CAAA;AAAA,mBACjCvG,KAAMnC,CAAAA,QAAAA,IAAYsI,MAAMjF,MAAU,IAAA,CAAClB,MAAMnC,QAAU,EAAA;AAC5DkH,UAAAA,SAAAA,CAAU/E,MAAMvB,WAAeuG,IAAAA,CAAAA,CAAE,aAAehF,EAAAA,KAAAA,CAAMnC,QAAQ,CAAC,CAAA,CAAA;AAAA,SAC1D,MAAA;AACLuH,UAAAA,MAAAA,CAAO,CAAC,GAAGe,KAAOxF,EAAAA,IAAI,CAAC,CAAA,CAAA;AAAA,SACzB;AAAA,OACK,MAAA;AACLyE,QAAAA,MAAAA,CAAOzE,MAAM,IAAI,CAAA,CAAA;AAAA,OACnB;AAAA,KACF,CAAA;AAEA,IAAA,MAAM+F,cAAkBC,GAAAA,CAAAA,KAAAA,KAAsBxG,IAAK,CAAA,cAAA,EAAgBwG,KAAK,CAAA,CAAA;AAExE,IAAA,MAAMC,UAAcrG,GAAAA,CAAAA,KAAAA,KAAmBJ,IAAK,CAAA,aAAA,EAAeI,KAAK,CAAA,CAAA;AAEhE,IAAMsG,MAAAA,WAAAA,GAAcA,CAAClG,IAAAA,EAAYwC,KAAkB,KAAA;AACjD,MAAA2D,OAAAA,WAAAA,CAAAC,eAAAC,UAAA,CAAA;AAAA,QAAA,KAQS3G,EAAAA,SAAAA,CAAUE,KAAQwB,GAAAA,eAAAA,GAAkBE,aAAakB,KAAK,CAAA;AAAA,QAAC,MACtDxC,EAAAA,IAAAA;AAAAA,QAAI,SACHH,QAAS,EAAA;AAAA,QAAC,eACJkB,WAAYnB,CAAAA,KAAAA;AAAAA,QAAK,kBACdP,KAAMhB,CAAAA,YAAAA;AAAAA,QAAY,kBAClBmD,SAAU5B,CAAAA,KAAAA;AAAAA,QAAK,YACnBF,EAAAA,SAAAA,CAAUE,KAAQ,GAAA,KAAA,GAAQP,KAAMtB,CAAAA,UAAAA;AAAAA,QAAU,WAC7CgB,OAAQa,CAAAA,KAAAA;AAAAA,QAAK,WACbhB,OAAQgB,CAAAA,KAAAA;AAAAA,OACb0G,EAAAA,IAAAA,CAAKjH,KAAO,EAAA,CACd,MACA,EAAA,OAAA,EACA,UACA,EAAA,WAAA,EACA,WACA,EAAA,cAAA,EACA,cAAc,CACf,CAAC,EAAA;AAAA,QAAA,SACO+F,EAAAA,UAAAA;AAAAA,QAAU,qBACG7C,EAAAA,CAAAA,IAAAA,KACpB/C,IAAK,CAAA,mBAAA,EAAqB+C,IAAI,CAAA;AAAA,OAAC,CA1BxB+D,EAAAA,IAAAA,CAAK7G,KAAO,EAAA,CACnB,YACA,aACA,EAAA,aAAA,EACA,MAAM,CACP,CAAC,CAAA,CAAA;AAAA,KAyBR,CAAA;AAEA,IAAA,MAAM8G,qBAAqBA,MAAM;AAC/B,MAAA,IAAI9G,MAAM+G,MAAQ,EAAA;AAChB,QAAA,OAAO/G,MAAM+G,MAAO,EAAA,CAAA;AAAA,OACtB;AAEA,MAAA,IAAInH,MAAMrB,WAAa,EAAA;AACrB,QAAA,MAAMyI,OAAOhH,KAAM,CAAA,cAAA,CAAA,CAAA;AACnB,QAAA,MAAMiH,WAAW1E,cAAepC,CAAAA,KAAAA,CAAAA;AAChC,QAAA,MAAM+G,IAAOD,GAAAA,QAAAA,GAAWrH,KAAMb,CAAAA,mBAAAA,GAAsBa,KAAMxB,CAAAA,WAAAA,CAAAA;AAC1D,QAAA,OAAAsI,YAAAS,MAAA,EAAA;AAAA,UAAA,OAAA,EAAA,IAAA;AAAA,UAAA,MAAA,EAAA,OAAA;AAAA,UAAA,MAAA,EAAA,SAAA;AAAA,UAAA,SAKWvH,KAAMxC,CAAAA,KAAAA;AAAAA,UAAK,OAAA,EACXgK,IAAI,SAAS,CAAA;AAAA,UAAC,UACXH,EAAAA,QAAAA;AAAAA,UAAQ,YAAA,EAAA,QAAA;AAAA,UAAA,SAETnC,EAAAA,SAAAA;AAAAA,SAAS,EAAA;AAAA,UAAAtF,OAAAA,EAAAA,MAAA,CAEjBwH,IAAAA,GAAOA,IAAK,CAAA;AAAA,YAAEC,QAAAA;AAAAA,WAAU,CAAA,GAAIC,IAAQtC,IAAAA,CAAAA,CAAE,SAAS,CAAC,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAGvD;AAAA,KACF,CAAA;AAEA,IAAMyC,MAAAA,YAAAA,GAAeA,MAAAX,WAAAA,CAAA,KAAA,EAAA;AAAA,MAAA,OAEV,EAAA,CACLU,GAAI,CAAA,QAAQ,CACZ,EAAA;AAAA,QAAE,wBAAwBxH,KAAMV,CAAAA,mBAAAA;AAAAA,OAAqB,CAAA;AAAA,KAGtD4H,EAAAA,CAAAA,kBAAmB,EAAC,CAExB,CAAA,CAAA;AAED,IAAA,MAAMQ,iBAAiBA,MAAA;AAtlB3B,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAslB2BZ,MAAAA,OAAAA,WAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,SACTU,GAAI,EAAA;AAAA,OAAC,EAAAV,CAAAA,WAAAA,CAAAa,cAAA,EAAA;AAAA,QAAA,MAAA,EAAA,CAUP5F,EAAgBxB,GAAAA,eAAAA,CAAAA,KAAAA,KAAhBwB,IAAuBpB,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA;AAAAA,QAAI,WACxBjB,OAAQa,CAAAA,KAAAA;AAAAA,QAAK,WACbhB,OAAQgB,CAAAA,KAAAA;AAAAA,QAAK,SACfP,KAAM1C,CAAAA,KAAAA;AAAAA,QAAK,UAAA,EAAA,CACRyE,EAAgBxB,GAAAA,eAAAA,CAAAA,KAAAA,KAAhBwB,IAAuBiC,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,QAAAA,EAAAA;AAAAA,QAAU,aAChChE,KAAM7B,CAAAA,SAAAA;AAAAA,QAAS,gBACZ6B,KAAMhB,CAAAA,YAAAA;AAAAA,QAAY,cACpBgB,KAAM3C,CAAAA,UAAAA;AAAAA,QAAU,kBACZ8E,SAAU5B,CAAAA,KAAAA;AAAAA,QAAK,iBACboG,EAAAA,CAAAA,KAAAA,KAAsBxG,IAAK,CAAA,eAAA,EAAiBwG,KAAK,CAAA;AAAA,QAAC,eACrD1B,EAAAA,aAAAA;AAAAA,OAlBNgC,EAAAA,IAAAA,CAAK7G,KAAO,EAAA,CACnB,SACA,UACA,EAAA,YAAA,EACA,WACA,EAAA,YAAA,EACA,WAAW,CACZ,CAAC,CAAA,EAAA0G,YAAA,KAAA,EAAA;AAAA,QAAA,KAcGlF,EAAAA,OAAAA;AAAAA,QAAO,OAAA,EACL4F,IAAI,MAAM,CAAA;AAAA,QAAC,UAAA,EACRnH,SAAUE,CAAAA,KAAAA,GAAQc,KAAYwB,CAAAA,GAAAA,QAAAA;AAAAA,SAEvCxC,CAAAA,SAAAA,CAAUE,QACPsG,WAAY/E,CAAAA,gBAAAA,CAAiBvB,OAAO,CAAC,CAAA,GACrC6B,MAAO7B,CAAAA,KAAAA,CAAMiB,IAAIqF,WAAW,CAAC,CAElCY,CAAAA,EAAAA,YAAAA,EAAc,CAElB,CAAA,CAAA;AAAA,KAAA,CAAA;AAEDG,IAAM,KAAA,CAAA,MAAM5H,KAAM/C,CAAAA,IAAAA,EAAMuH,IAAI,CAAA,CAAA;AAC5BoD,IAAAA,KAAAA,CACE,MAAM,CAAC5H,KAAAA,CAAM7C,IAAM6C,EAAAA,KAAAA,CAAMT,SAASS,KAAMN,CAAAA,OAAAA,EAASM,KAAM3C,CAAAA,UAAU,GACjE,MAAMuH,KAAAA,CAAM7D,eAAeW,WAAYnB,CAAAA,KAAK,CAAC,CAC/C,CAAA,CAAA;AACAqH,IACE,KAAA,CAAA,MAAM5H,KAAMpB,CAAAA,WAAAA,EACX2B,CAAU,KAAA,KAAA;AACTqE,MAAAA,KAAAA,CAAMrE,KAAK,CAAA,CAAA;AAAA,KAEf,CAAA,CAAA;AAEAsH,IAA0B,SAAA,CAAA;AAAA,MACxBjD,KAAAA;AAAAA,MACAT,YAAAA;AAAAA,MACAvB,eAAAA;AAAAA,KACD,CAAA,CAAA;AAEDkF,IAAAA,oBAAAA,CAAqBtD,IAAI,CAAA,CAAA;AAEzB,IAAA,OAAO,MAAM;AACX,MAAA,IAAIxE,MAAMpC,QAAU,EAAA;AAClB,QAAA,OAAAkJ,YAAAiB,KAAA,EAAA;AAAA,UAAA,QAGU/H,KAAM/C,CAAAA,IAAAA;AAAAA,UAAI,OAAA,EACTuK,IAAI,OAAO,CAAA;AAAA,UAAC,SACZxH,KAAMvC,CAAAA,KAAAA;AAAAA,UAAK,YACRuC,KAAMjC,CAAAA,QAAAA;AAAAA,UAAQ,WAAA,EACbiC,KAAM7B,CAAAA,SAAAA,IAAa6B,KAAMhB,CAAAA,YAAAA;AAAAA,UAAY,YACtCgB,KAAMhC,CAAAA,QAAAA;AAAAA,UAAQ,mBACPgC,KAAMf,CAAAA,eAAAA;AAAAA,UAAe,oBACpBe,KAAMX,CAAAA,gBAAAA;AAAAA,UAAgB,uBACnBW,KAAMZ,CAAAA,mBAAAA;AAAAA,UAAmB,gBAC9BsH,EAAAA,cAAAA;AAAAA,UAAc,eACfE,EAAAA,UAAAA;AAAAA,SAXN,EAAA;AAAA,UAAEhH,OAAS8H,EAAAA,cAAAA;AAAAA,SAAgB,CAAA,CAAA;AAAA,OAc1C;AAEA,MAAA,OAAOA,cAAe,EAAA,CAAA;AAAA,KACxB,CAAA;AAAA,GACF;AACF,CAAC,CAAA;;;;"}