{"version":3,"file":"scroll.vue2.cjs","sources":["../../../components/scroll/scroll.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowReadonly,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { scrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\n\nimport type { ScrollbarExposed } from '@/components/scrollbar'\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { ScrollMode } from './symbol'\n\ndefineOptions({ name: 'Scroll' })\n\nconst _props = defineProps(scrollProps)\nconst props = useProps('scroll', _props, {\n  scrollClass: null,\n  scrollStyle: null,\n  scrollAttrs: null,\n  mode: {\n    default: 'vertical',\n    validator: value => scrollModes.includes(value),\n  },\n  width: '',\n  height: '',\n  deltaX: 40,\n  deltaY: 40,\n  disabled: false,\n  pointer: USE_TOUCH,\n  wheel: true,\n  scrollX: {\n    default: 0,\n    static: true,\n  },\n  scrollY: {\n    default: 0,\n    static: true,\n  },\n  useXBar: false,\n  useYBar: false,\n  barFade: 1500,\n  barClass: null,\n  autoplay: false,\n  playWaiting: 500,\n  noBuffer: false,\n  noTransition: false,\n  onBeforeScroll: {\n    default: null,\n    isFunc: true,\n  },\n  useBarTrack: false,\n  scrollTag: 'div',\n})\n\nconst emitter = createEventEmitter()\n\nconst nh = useNameHelper('scroll')\nconst { isRtl } = useRtl()\nconst { timer } = useSetTimeout()\n\nconst usingBar = ref(false)\nconst scrolling = ref(false)\nconst transitionDuration = ref<number>(0)\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\n\nlet waitDelay = 180\n\nconst xBar = ref<ScrollbarExposed>()\nconst yBar = ref<ScrollbarExposed>()\n\nlet initialized = false\n\nconst {\n  wrapperEl,\n  contentEl,\n\n  wrapper,\n  isReady,\n  x,\n  y,\n  percentX,\n  percentY,\n  xScrollLimit,\n  yScrollLimit,\n  enableXScroll,\n  enableYScroll,\n  xBarLength,\n  yBarLength,\n\n  handleResize,\n  verifyScroll,\n  computePercent,\n  refresh,\n  triggerUpdate,\n} = useScrollWrapper({\n  mode,\n  disabled: toRef(props, 'disabled'),\n  width: toRef(props, 'width'),\n  height: toRef(props, 'height'),\n  scrollX: toRef(props, 'scrollX'),\n  scrollY: toRef(props, 'scrollY'),\n  onResize: entry => {\n    emitEvent(props.onResize, entry)\n  },\n  // onBeforeRefresh: stopAutoplay,\n  onAfterRefresh: () => {\n    syncBarScroll()\n\n    if (!initialized) {\n      initialized = true\n      startAutoplay()\n    }\n  },\n})\n\nconst slotParams = shallowReadonly({\n  getState,\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView,\n})\n\n/* autoplay */\nconst canPlay = ref(false)\n\nconst canAutoplay = computed(() => {\n  return (\n    mode.value !== 'both' &&\n    (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n    ((mode.value === 'horizontal' && enableXScroll.value) ||\n      (mode.value === 'vertical' && enableYScroll.value))\n  )\n})\n\nwatch([() => props.autoplay, () => props.playWaiting], () => {\n  stopAutoplay()\n  nextTick(startAutoplay)\n})\n\nfunction startAutoplay() {\n  if (!canAutoplay.value) return\n\n  stopAutoplay()\n\n  const distance = mode.value === 'horizontal' ? 'width' : 'height'\n  const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\n  // const prop = mode.value === 'horizontal' ? 'x' : 'y'\n  const prop = mode.value === 'horizontal' ? x : y\n  const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n\n  let playSpeed = 0.5\n\n  if (typeof props.autoplay === 'number') {\n    playSpeed = (wrapper[distance] / props.autoplay) * 16\n  }\n\n  const precessScroll = () => {\n    computePercent()\n    triggerUpdate()\n    syncBarScroll()\n    emitScrollEvent(mode.value)\n  }\n  const scroll = () => {\n    prop.value -= playSpeed\n\n    if (prop.value <= limit.value) {\n      prop.value = limit.value\n      canPlay.value = false\n\n      precessScroll()\n\n      timer.end = setTimeout(() => {\n        scrollTo(0, 0, 500)\n\n        timer.start = setTimeout(() => {\n          canPlay.value = true\n\n          emitScrollEvent(mode.value)\n          scroll()\n        }, 500 + waiting)\n      }, waiting)\n    } else {\n      precessScroll()\n\n      if (canPlay.value) {\n        requestAnimationFrame(scroll)\n      }\n    }\n  }\n\n  timer.play = setTimeout(() => {\n    canPlay.value = true\n    scroll()\n  }, waiting)\n}\n\nfunction stopAutoplay() {\n  canPlay.value = false\n\n  clearTimeout(timer.play)\n  clearTimeout(timer.start)\n  clearTimeout(timer.end)\n}\n/* autoplay */\n\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    nh.bm(mode.value),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('using-bar')]: usingBar.value,\n      [nh.bm('scrolling')]: scrolling.value,\n      [nh.bm('no-ready')]: !isReady.value,\n      [nh.bm('no-transition')]: props.noTransition,\n    },\n  ]\n})\nconst style = computed(() => {\n  const { width, height } = props\n\n  return {\n    width: width\n      ? typeof width === 'string'\n        ? Number.isNaN(Number(width))\n          ? width\n          : `${Number(width)}px`\n        : `${width}px`\n      : undefined,\n    height: height\n      ? typeof height === 'string'\n        ? Number.isNaN(Number(height))\n          ? height\n          : `${Number(height)}px`\n        : `${height}px`\n      : undefined,\n  }\n})\nconst wrapperClass = computed(() => {\n  return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n})\nconst wrapperStyle = computed(() => {\n  return [props.scrollAttrs?.style, props.scrollStyle]\n})\n\nwatch(enableXScroll, value => {\n  emitEvent(props.onXEnabledChange, value)\n})\nwatch(enableYScroll, value => {\n  emitEvent(props.onYEnabledChange, value)\n})\nwatch(isReady, value => {\n  if (value) {\n    transitionDuration.value = -1\n    emitEvent(props.onReady)\n  } else {\n    transitionDuration.value = 0\n  }\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\n    y.value\n  }px, 0)`\n})\nwatchEffect(() => {\n  if (!contentEl.value) return\n\n  contentEl.value.style.transitionDuration =\n    transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\n})\n\nonMounted(() => {\n  if (!isClient || !wrapperEl.value) return\n\n  const style = getComputedStyle(wrapperEl.value)\n  const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\n\n  if (duration.endsWith('ms')) {\n    waitDelay = parseFloat(duration)\n  } else if (duration.endsWith('s')) {\n    waitDelay = parseFloat(duration) * 1000\n  }\n\n  waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\n})\n\nonBeforeUnmount(stopAutoplay)\n\ndefineExpose({\n  percentX,\n  percentY,\n  x,\n  y,\n  isReady,\n\n  xBarLength,\n  yBarLength,\n  enableXScroll,\n  enableYScroll,\n\n  wrapper: wrapperEl,\n  content: contentEl,\n  xBar,\n  yBar,\n\n  refresh,\n  scrollTo,\n  scrollBy,\n  scrollToElement,\n  ensureInView,\n  getXScrollLimit,\n  getYScrollLimit,\n  addScrollListener,\n  removeScrollListener,\n})\n\nfunction getCommonPayload() {\n  return {\n    clientX: -x.value,\n    clientY: -y.value,\n    percentX: percentX.value,\n    percentY: percentY.value,\n  }\n}\n\nfunction syncBarScroll() {\n  xBar.value?.handleScroll(percentX.value)\n  yBar.value?.handleScroll(percentY.value)\n}\n\nfunction handleMouseDown(event: MouseEvent) {\n  if (!props.pointer || event.button > 0 || USE_TOUCH) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\nfunction handleTouchStart(event: TouchEvent) {\n  if (!props.pointer || event.touches.length !== 1) {\n    return false\n  }\n\n  handlePointerDown(event)\n}\n\n// 记录滚动开始位置\nlet xScrollStartAt = 0\nlet yScrollStartAt = 0\n\n// 记录滚动开始鼠标位置\nlet cursorXPosition = 0\nlet cursorYPosition = 0\n\nlet moved = false\nlet target: EventTarget | null = null\nlet lastDate = 0\n\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\n  if (!enableXScroll.value && !enableYScroll.value) {\n    return false\n  }\n\n  if (event.cancelable) {\n    event.preventDefault()\n  }\n\n  prepareScroll()\n\n  transitionDuration.value = 0\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n\n  xScrollStartAt = x.value\n  yScrollStartAt = y.value\n  cursorXPosition = pointer.clientX\n  cursorYPosition = pointer.clientY\n\n  moved = false\n  target = event.target\n  lastDate = Date.now()\n\n  document.addEventListener(MOVE_EVENT, handlePointerMove)\n  document.addEventListener(UP_EVENT, handlePointerUp)\n\n  emitEvent(props.onScrollStart, getCommonPayload())\n}\n\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\n  event.stopPropagation()\n\n  if (!USE_TOUCH) {\n    event.preventDefault()\n  }\n\n  const pointer = 'touches' in event ? event.touches[0] : event\n  const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\n  const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\n\n  if (props.onBeforeScroll?.({ signX, signY }) === false) {\n    return false\n  }\n\n  scrolling.value = true\n\n  if (enableXScroll.value) {\n    x.value = xScrollStartAt + pointer.clientX - cursorXPosition\n    moved = true\n  }\n\n  if (enableYScroll.value) {\n    y.value = yScrollStartAt + pointer.clientY - cursorYPosition\n    moved = true\n  }\n\n  if (props.noBuffer) {\n    verifyScroll()\n  } else {\n    computePercent()\n    triggerUpdate()\n  }\n\n  syncBarScroll()\n  emitScrollEvent(mode.value)\n}\n\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\n  if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\n    target.dispatchEvent(new MouseEvent('click', event))\n  }\n\n  document.removeEventListener(MOVE_EVENT, handlePointerMove)\n  document.removeEventListener(UP_EVENT, handlePointerUp)\n\n  transitionDuration.value = -1\n  moved = false\n\n  handleBuffer()\n  verifyScroll()\n  syncBarScroll()\n  emitEvent(props.onScrollEnd, getCommonPayload())\n  startAutoplay()\n}\n\n// 按下 shift 时为横向滚动，保持和原生操作一致\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n  const isVerticalScroll = enableYScroll.value && type === 'vertical'\n  const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n\n  // 纵横滚动均使用 deltaY 标记\n  const sign = event.deltaY > 0 ? -1 : 1\n\n  if (\n    props.wheel &&\n    (isVerticalScroll || isHorizontalScroll) &&\n    props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\n  ) {\n    event.preventDefault()\n    event.stopPropagation()\n  } else {\n    return true\n  }\n\n  if (mode.value !== 'both' && mode.value !== type) return false\n\n  prepareScroll()\n\n  const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\n\n  if (isVerticalScroll) {\n    y.value += computedDelta\n  } else if (isHorizontalScroll) {\n    x.value += computedDelta\n  }\n\n  verifyScroll()\n  syncBarScroll()\n  emitScrollEvent(type)\n\n  emitEvent(props.onWheel, {\n    ...getCommonPayload(),\n    type,\n    sign: -sign as 1 | -1,\n  })\n\n  startAutoplay()\n}\n\nfunction prepareScroll() {\n  stopAutoplay()\n  clearTimeout(timer.buffer)\n}\n\nfunction handleBuffer() {\n  if (props.noBuffer) {\n    timer.buffer = setTimeout(() => {\n      scrolling.value = false\n    }, 300)\n  } else {\n    scrolling.value = false\n  }\n}\n\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\n  usingBar.value = true\n  emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\n}\n\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n  usingBar.value = false\n  emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\n}\n\nfunction handleXBarScroll(percent: number) {\n  percentX.value = percent\n  x.value = (percent * xScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'horizontal',\n  })\n  emitScrollEvent('horizontal')\n}\n\nfunction handleYBarScroll(percent: number) {\n  percentY.value = percent\n  y.value = (percent * yScrollLimit.value) / 100\n  triggerUpdate()\n\n  emitEvent(props.onBarScroll, {\n    ...getCommonPayload(),\n    type: 'vertical',\n  })\n  emitScrollEvent('vertical')\n}\n\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\n  emitEvent(props.onScroll, {\n    ...getCommonPayload(),\n    type,\n  })\n  emitter.emit('scroll', {\n    ...getCommonPayload(),\n    type,\n  })\n}\n\nfunction ensureScrollOffset() {\n  if (wrapperEl.value) {\n    wrapperEl.value.scrollTop = 0\n    wrapperEl.value.scrollLeft = 0\n  }\n}\n\nfunction getState() {\n  const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n  return {\n    scrollX,\n    scrollY,\n    percentX,\n    percentY,\n    enableXScroll: enableXScroll.value,\n    enableYScroll: enableYScroll.value,\n  }\n}\n\nfunction waitTransition(duration = waitDelay) {\n  clearTimeout(timer.wait)\n\n  return new Promise<void>(resolve => {\n    timer.wait = setTimeout(() => resolve(), duration + 1)\n  })\n}\n\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\n      x.value = -clientX\n      changed = true\n    }\n\n    if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\n      y.value = -clientY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\n  setDuration(duration)\n  nextTick(() => {\n    let changed = false\n\n    if (deltaX && enableXScroll) {\n      x.value -= deltaX\n      changed = true\n    }\n\n    if (deltaY && enableYScroll) {\n      y.value -= deltaY\n      changed = true\n    }\n\n    verifyScroll()\n    syncBarScroll()\n\n    if (!changed) transitionDuration.value = -1\n  })\n\n  return waitTransition(duration)\n}\n\nfunction setDuration(duration?: number) {\n  if (typeof duration === 'number') {\n    transitionDuration.value = duration\n\n    if (transitionDuration.value === 0) {\n      nextTick(() => {\n        transitionDuration.value = -1\n      })\n    }\n  }\n}\n\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\n  if (!contentEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = contentEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = contentEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    clientX = elRect.left - wrapperRect.left + offset\n  }\n\n  if (mode.value !== 'horizontal') {\n    clientY = elRect.top - wrapperRect.top + offset\n  }\n\n  return scrollTo(clientX, clientY, duration)\n}\n\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\n  if (!wrapperEl.value) return Promise.resolve()\n\n  if (typeof el === 'string') {\n    el = wrapperEl.value.querySelector(el)!\n  }\n\n  if (!isElement(el)) return Promise.resolve()\n\n  const wrapperRect = wrapperEl.value.getBoundingClientRect()\n  const elRect = el.getBoundingClientRect()\n\n  let clientX = 0\n  let clientY = 0\n\n  if (mode.value !== 'vertical') {\n    if (elRect.left < wrapperRect.left + offset) {\n      clientX = elRect.left - wrapperRect.left - offset\n    } else if (elRect.right > wrapperRect.right - offset) {\n      clientX = elRect.right - wrapperRect.right + offset\n    }\n  }\n\n  if (mode.value !== 'horizontal') {\n    if (elRect.top < wrapperRect.top + offset) {\n      clientY = elRect.top - wrapperRect.top - offset\n    } else if (elRect.bottom > wrapperRect.bottom - offset) {\n      clientY = elRect.bottom - wrapperRect.bottom + offset\n    }\n  }\n\n  return scrollBy(clientX, clientY, duration)\n}\n\nfunction getXScrollLimit() {\n  return [0, -xScrollLimit.value]\n}\n\nfunction getYScrollLimit() {\n  return [0, -yScrollLimit.value]\n}\n\nfunction addScrollListener(listener: EventHandler) {\n  emitter.on('scroll', listener)\n}\n\nfunction removeScrollListener(listener: EventHandler) {\n  emitter.off('scroll', listener)\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapperEl\"\n    :class=\"className\"\n    :style=\"style\"\n    @mousedown=\"handleMouseDown\"\n    @touchstart=\"handleTouchStart\"\n    @scroll=\"ensureScrollOffset\"\n    @wheel.exact=\"\n      handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\n    \"\n    @wheel.shift=\"handleWheel($event, 'horizontal')\"\n  >\n    <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\n      <slot name=\"extra\" v-bind=\"slotParams\"></slot>\n    </div>\n    <ResizeObserver throttle :on-resize=\"handleResize\">\n      <component\n        :is=\"props.scrollTag || 'div'\"\n        v-bind=\"props.scrollAttrs\"\n        ref=\"contentEl\"\n        :class=\"wrapperClass\"\n        :style=\"wrapperStyle\"\n        @transitionend=\"transitionDuration = -1\"\n      >\n        <slot v-bind=\"slotParams\"></slot>\n      </component>\n    </ResizeObserver>\n    <Scrollbar\n      v-if=\"props.useXBar\"\n      ref=\"xBar\"\n      inherit\n      placement=\"bottom\"\n      :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"xBarLength\"\n      :disabled=\"!enableXScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('horizontal')\"\n      @scroll=\"handleXBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('horizontal')\"\n    ></Scrollbar>\n    <Scrollbar\n      v-if=\"props.useYBar\"\n      ref=\"yBar\"\n      inherit\n      placement=\"right\"\n      :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\n      :fade=\"props.barFade\"\n      :bar-length=\"yBarLength\"\n      :disabled=\"!enableYScroll\"\n      :duration=\"transitionDuration\"\n      :use-track=\"props.useBarTrack\"\n      @scroll-start=\"handleBarScrollStart('vertical')\"\n      @scroll=\"handleYBarScroll\"\n      @scroll-end=\"handleBarScrollEnd('vertical')\"\n    ></Scrollbar>\n  </div>\n</template>\n"],"names":["_props","__props","props","useProps","value","scrollModes","USE_TOUCH","emitter","createEventEmitter","nh","useNameHelper","isRtl","useRtl","timer","useSetTimeout","usingBar","ref","scrolling","transitionDuration","mode","computed","waitDelay","xBar","yBar","initialized","wrapperEl","contentEl","wrapper","isReady","x","y","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","handleResize","verifyScroll","computePercent","refresh","triggerUpdate","useScrollWrapper","toRef","entry","emitEvent","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","scrollTo","scrollBy","scrollToElement","ensureInView","canPlay","canAutoplay","isTrue","watch","stopAutoplay","nextTick","distance","limit","prop","waiting","playSpeed","precessScroll","emitScrollEvent","scroll","className","style","width","height","wrapperClass","_a","wrapperStyle","watchEffect","onMounted","isClient","duration","onBeforeUnmount","__expose","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","_b","handleMouseDown","event","handlePointerDown","handleTouchStart","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","moved","target","lastDate","prepareScroll","pointer","MOVE_EVENT","handlePointerMove","UP_EVENT","handlePointerUp","signX","signY","handleBuffer","handleWheel","type","isVerticalScroll","isHorizontalScroll","sign","computedDelta","handleBarScrollStart","handleBarScrollEnd","handleXBarScroll","percent","handleYBarScroll","ensureScrollOffset","scrollX","scrollY","waitTransition","resolve","clientX","clientY","setDuration","changed","deltaX","deltaY","el","offset","isElement","wrapperRect","elRect","listener","_createElementBlock","$event","_unref","_cache","_withModifiers","$slots","_normalizeClass","_renderSlot","_ctx","_createVNode","ResizeObserver","_createBlock","_resolveDynamicComponent","_mergeProps","Scrollbar"],"mappings":"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"}