@roadtrip/components 3.12.0 → 3.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/cjs/road-area-code.cjs.entry.js +1 -1
  2. package/dist/cjs/road-area-code.cjs.entry.js.map +1 -1
  3. package/dist/cjs/road-badge_14.cjs.entry.js +3 -3
  4. package/dist/cjs/road-badge_14.cjs.entry.js.map +1 -1
  5. package/dist/cjs/road-carousel.cjs.entry.js +1 -1
  6. package/dist/cjs/road-carousel.cjs.entry.js.map +1 -1
  7. package/dist/cjs/road-dialog.cjs.entry.js +1 -1
  8. package/dist/cjs/road-dialog.cjs.entry.js.map +1 -1
  9. package/dist/cjs/road-modal.cjs.entry.js +1 -1
  10. package/dist/cjs/road-modal.cjs.entry.js.map +1 -1
  11. package/dist/cjs/road-navbar-item.cjs.entry.js +4 -3
  12. package/dist/cjs/road-navbar-item.cjs.entry.js.map +1 -1
  13. package/dist/cjs/road-phone-number-input.cjs.entry.js +5 -4
  14. package/dist/cjs/road-phone-number-input.cjs.entry.js.map +1 -1
  15. package/dist/cjs/road-plate-number.cjs.entry.js +1 -1
  16. package/dist/cjs/road-plate-number.cjs.entry.js.map +1 -1
  17. package/dist/cjs/road-range.cjs.entry.js +1 -1
  18. package/dist/cjs/road-range.cjs.entry.js.map +1 -1
  19. package/dist/cjs/road-select.cjs.entry.js +4 -4
  20. package/dist/cjs/road-select.cjs.entry.js.map +1 -1
  21. package/dist/cjs/road-textarea.cjs.entry.js +1 -1
  22. package/dist/cjs/road-textarea.cjs.entry.js.map +1 -1
  23. package/dist/collection/components/area-code/area-code.css +0 -1
  24. package/dist/collection/components/button/button.css +2 -0
  25. package/dist/collection/components/carousel/carousel.css +1 -1
  26. package/dist/collection/components/dialog/dialog.css +0 -1
  27. package/dist/collection/components/drawer/drawer.css +0 -1
  28. package/dist/collection/components/input/input.css +0 -2
  29. package/dist/collection/components/modal/modal.css +0 -1
  30. package/dist/collection/components/navbar-item/navbar-item.css +28 -1
  31. package/dist/collection/components/navbar-item/navbar-item.js +3 -2
  32. package/dist/collection/components/navbar-item/navbar-item.js.map +1 -1
  33. package/dist/collection/components/phone-number-input/phone-number-input.css +0 -1
  34. package/dist/collection/components/phone-number-input/phone-number-input.js +4 -3
  35. package/dist/collection/components/phone-number-input/phone-number-input.js.map +1 -1
  36. package/dist/collection/components/phone-number-input/phone-number-input.stories.js +0 -1
  37. package/dist/collection/components/plate-number/plate-number.css +0 -1
  38. package/dist/collection/components/range/range.css +2 -5
  39. package/dist/collection/components/select/select.css +0 -1
  40. package/dist/collection/components/select/select.js +3 -3
  41. package/dist/collection/components/select/select.js.map +1 -1
  42. package/dist/collection/components/select/select.stories.js +2 -2
  43. package/dist/collection/components/textarea/textarea.css +0 -1
  44. package/dist/esm/road-area-code.entry.js +1 -1
  45. package/dist/esm/road-area-code.entry.js.map +1 -1
  46. package/dist/esm/road-badge_14.entry.js +3 -3
  47. package/dist/esm/road-badge_14.entry.js.map +1 -1
  48. package/dist/esm/road-carousel.entry.js +1 -1
  49. package/dist/esm/road-carousel.entry.js.map +1 -1
  50. package/dist/esm/road-dialog.entry.js +1 -1
  51. package/dist/esm/road-dialog.entry.js.map +1 -1
  52. package/dist/esm/road-modal.entry.js +1 -1
  53. package/dist/esm/road-modal.entry.js.map +1 -1
  54. package/dist/esm/road-navbar-item.entry.js +4 -3
  55. package/dist/esm/road-navbar-item.entry.js.map +1 -1
  56. package/dist/esm/road-phone-number-input.entry.js +5 -4
  57. package/dist/esm/road-phone-number-input.entry.js.map +1 -1
  58. package/dist/esm/road-plate-number.entry.js +1 -1
  59. package/dist/esm/road-plate-number.entry.js.map +1 -1
  60. package/dist/esm/road-range.entry.js +1 -1
  61. package/dist/esm/road-range.entry.js.map +1 -1
  62. package/dist/esm/road-select.entry.js +4 -4
  63. package/dist/esm/road-select.entry.js.map +1 -1
  64. package/dist/esm/road-textarea.entry.js +1 -1
  65. package/dist/esm/road-textarea.entry.js.map +1 -1
  66. package/dist/roadtrip/{p-c33f5249.entry.js → p-2c132382.entry.js} +2 -2
  67. package/dist/roadtrip/{p-c33f5249.entry.js.map → p-2c132382.entry.js.map} +1 -1
  68. package/dist/roadtrip/p-33002e9d.entry.js +2 -0
  69. package/dist/roadtrip/{p-9b170273.entry.js.map → p-33002e9d.entry.js.map} +1 -1
  70. package/dist/roadtrip/p-336aa5f6.entry.js +2 -0
  71. package/dist/roadtrip/p-336aa5f6.entry.js.map +1 -0
  72. package/dist/roadtrip/p-6e3e0b40.entry.js +2 -0
  73. package/dist/roadtrip/{p-d794a8d4.entry.js.map → p-6e3e0b40.entry.js.map} +1 -1
  74. package/dist/roadtrip/p-869a3d78.entry.js +2 -0
  75. package/dist/roadtrip/{p-be8aee32.entry.js.map → p-869a3d78.entry.js.map} +1 -1
  76. package/dist/roadtrip/{p-9173eb4b.entry.js → p-96b80b11.entry.js} +2 -2
  77. package/dist/roadtrip/{p-9173eb4b.entry.js.map → p-96b80b11.entry.js.map} +1 -1
  78. package/dist/roadtrip/p-a73ef7de.entry.js +2 -0
  79. package/dist/roadtrip/{p-0f8966f4.entry.js.map → p-a73ef7de.entry.js.map} +1 -1
  80. package/dist/roadtrip/p-acbc0a14.entry.js +2 -0
  81. package/dist/roadtrip/{p-5ab03aa4.entry.js.map → p-acbc0a14.entry.js.map} +1 -1
  82. package/dist/roadtrip/p-c5ca63ec.entry.js +2 -0
  83. package/dist/roadtrip/p-c5ca63ec.entry.js.map +1 -0
  84. package/dist/roadtrip/p-ee7aaee5.entry.js +2 -0
  85. package/dist/roadtrip/{p-9fefc8af.entry.js.map → p-ee7aaee5.entry.js.map} +1 -1
  86. package/dist/roadtrip/p-efe6e22f.entry.js +2 -0
  87. package/dist/roadtrip/{p-13d54b3e.entry.js.map → p-efe6e22f.entry.js.map} +1 -1
  88. package/dist/roadtrip/roadtrip.css +1 -1
  89. package/dist/roadtrip/roadtrip.esm.js +1 -1
  90. package/hydrate/index.js +23 -21
  91. package/package.json +1 -1
  92. package/dist/collection/components/icon/svg/vehicle-car-search-color.svg +0 -1
  93. package/dist/roadtrip/p-028243c1.entry.js +0 -2
  94. package/dist/roadtrip/p-028243c1.entry.js.map +0 -1
  95. package/dist/roadtrip/p-0f8966f4.entry.js +0 -2
  96. package/dist/roadtrip/p-13d54b3e.entry.js +0 -2
  97. package/dist/roadtrip/p-5ab03aa4.entry.js +0 -2
  98. package/dist/roadtrip/p-90b35d7e.entry.js +0 -2
  99. package/dist/roadtrip/p-90b35d7e.entry.js.map +0 -1
  100. package/dist/roadtrip/p-9b170273.entry.js +0 -2
  101. package/dist/roadtrip/p-9fefc8af.entry.js +0 -2
  102. package/dist/roadtrip/p-be8aee32.entry.js +0 -2
  103. package/dist/roadtrip/p-d794a8d4.entry.js +0 -2
  104. package/dist/roadtrip/svg/vehicle-car-search-color.svg +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","makeReactive","proto","__proto__","defineProperty","get","set","value","Dom7","Array","items","super","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","arrayUnique","uniqueArray","i","indexOf","qsa","selector","context","a","$","html","trim","toCreate","tempParent","innerHTML","nodeType","fn","addClass","classes","classNames","map","c","split","classList","add","removeClass","remove","toggleClass","className","toggle","hasClass","contains","attr","attrs","arguments","getAttribute","undefined","attrName","removeAttr","removeAttribute","transform","transition","duration","transitionDuration","on","args","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","events","j","event","dom7Listeners","proxyListener","dom7LiveListeners","off","handlers","handler","splice","dom7proxy","trigger","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","index","result","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","els","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","removeChild","Methods","methodName","writable","deleteProps","object","nextTick","delay","now","currentStyle","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","o","slice","isNode","node","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","startTime","time","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","calcSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","checkPassiveListener","supportsPassive","opts","gestures","checkGestures","getSupport","deviceCached","calcDevice","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","iPadScreens","os","getDevice","overrides","browser","calcBrowser","isSafari","toLowerCase","isWebView","test","getBrowser","Resize","emit","observer","resizeHandler","destroyed","initialized","createObserver","ResizeObserver","entries","newWidth","newHeight","contentBoxSize","contentRect","inlineSize","blockSize","observe","removeObserver","unobserve","orientationChangeHandler","resizeObserver","Observer","extendParams","observers","attach","options","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","init","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","destroy","disconnect","eventsEmitter","priority","self","method","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","eventsArray","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","Number","isNaN","assign","size","updateSlides","getDirectionLabel","property","marginRight","getDirectionPropertyValue","label","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","initSlides","slideSize","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isVisible","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","activeSlide","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","update","getSwiperTranslate","virtualTranslate","currentTranslate","setTranslate","byController","x","y","z","previousTranslate","newProgress","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","transitionStart","slideTo","initial","Error","indexAsNumber","isValidNumber","isFinite","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","t","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","snapTranslate","diff","slideChanged","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","touchEventsTarget","cursor","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","assignedSlot","getRootNode","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","isTouchEvent","type","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","isNavButtonTarget","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","start","move","end","passiveListeners","passive","cancel","updateOnWindowResize","attachEvents","bind","detachEvents","events$1","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointOnlyParams","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","containerModifierClass","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","prepareClasses","prefix","resultClasses","item","addClasses","suffixes","autoheight","centered","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","isPicture","complete","onload","onerror","preloadImages","imagesToLoad","imagesLoaded","updateOnImagesReady","currentSrc","images","wasLocked","lastSlideIndex","lastSlideRightEdge","checkOverflow$1","defaults","createElements","url","uniqueNavElements","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","slideInView","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","module","m","prototypeGroup","protoMethod","Keyboard","keyboard","onlyInViewport","pageUpDown","handle","kc","keyCode","charCode","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","createElementIfNotDefined","checkProps","element","classesToSelector","Pagination","pfx","pagination","bulletElement","clickable","hideOnClick","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","hiddenClass","progressbarFillClass","progressbarOppositeClass","clickableClass","lockClass","horizontalClass","verticalClass","bullets","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","position","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","_s","targetEl","isHidden","Scrollbar","timeout","dragTimeout","dragStartPos","dragSize","trackSize","divider","scrollbar","hide","draggable","snapOnRelease","dragClass","dragEl","$dragEl","newSize","newPos","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","activeListener","eventMethod","enableDraggable","disableDraggable","$swiperEl","Zoom","zoom","maxRatio","containerClass","zoomedSlideClass","currentScale","isScaling","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","gesture","$slideEl","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","distance","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","onTransitionEnd","zoomIn","touchAction","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","in","out","Autoplay","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","$activeSlideEl","autoplayResult","stop","pause","onVisibilityChange","visibilityState","onMouseEnter","onMouseLeave","attachMouseEvents","detachMouseEvents","carouselCss","Carousel","swiperReady","Promise","resolve","readySwiper","didInit","optionsChanged","getSwiper","connectedCallback","mut","mutationO","subtree","componentDidLoad","initSwiper","disconnectedCallback","syncSwiper","all","waitForSlides","getActiveIndex","getPreviousIndex","startAutoplay","stopAutoplay","lockSwipeToNext","lock","lockSwipeToPrev","lockSwipes","finalOptions","normalizeOptions","swiperOptions","parallax","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","sticky","minimumVelocity","coverflowEffect","rotate","stretch","depth","modifier","slideShadows","flipEffect","limitRotation","cubeEffect","shadow","shadowOffset","shadowScale","fadeEffect","crossFade","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","pager","paginationEl","eventOptions","roadslidesdidload","slideChangeTransitionStart","roadslidewillchange","slideChangeTransitionEnd","roadslidedidchange","slideNextTransitionStart","roadslidenextstart","slidePrevTransitionStart","roadslideprevstart","slideNextTransitionEnd","roadslidenextend","slidePrevTransitionEnd","roadslideprevend","roadslidetransitionstart","roadslidetransitionend","sliderMove","roadslidedrag","reachBeginning","roadslidereachstart","reachEnd","roadslidereachend","touchStart","roadslidetouchstart","touchEnd","roadslidetouchend","tap","roadslidetap","doubleTap","roadslidedoubletap","customEvents","mergedEventOptions","h","Host","class","ref","arrows","icon","navigationChevron","from","s","componentOnReady"],"sources":["node_modules/ssr-window/ssr-window.esm.js","node_modules/dom7/dom7.esm.js","node_modules/swiper/shared/dom.js","node_modules/swiper/shared/utils.js","node_modules/swiper/shared/get-support.js","node_modules/swiper/shared/get-device.js","node_modules/swiper/shared/get-browser.js","node_modules/swiper/core/modules/resize/resize.js","node_modules/swiper/core/modules/observer/observer.js","node_modules/swiper/core/events-emitter.js","node_modules/swiper/core/update/updateSize.js","node_modules/swiper/core/update/updateSlides.js","node_modules/swiper/core/update/updateAutoHeight.js","node_modules/swiper/core/update/updateSlidesOffset.js","node_modules/swiper/core/update/updateSlidesProgress.js","node_modules/swiper/core/update/updateProgress.js","node_modules/swiper/core/update/updateSlidesClasses.js","node_modules/swiper/core/update/updateActiveIndex.js","node_modules/swiper/core/update/updateClickedSlide.js","node_modules/swiper/core/update/index.js","node_modules/swiper/core/translate/getTranslate.js","node_modules/swiper/core/translate/setTranslate.js","node_modules/swiper/core/translate/minTranslate.js","node_modules/swiper/core/translate/maxTranslate.js","node_modules/swiper/core/translate/translateTo.js","node_modules/swiper/core/translate/index.js","node_modules/swiper/core/transition/setTransition.js","node_modules/swiper/core/transition/transitionEmit.js","node_modules/swiper/core/transition/transitionStart.js","node_modules/swiper/core/transition/transitionEnd.js","node_modules/swiper/core/transition/index.js","node_modules/swiper/core/slide/slideTo.js","node_modules/swiper/core/slide/slideToLoop.js","node_modules/swiper/core/slide/slideNext.js","node_modules/swiper/core/slide/slidePrev.js","node_modules/swiper/core/slide/slideReset.js","node_modules/swiper/core/slide/slideToClosest.js","node_modules/swiper/core/slide/slideToClickedSlide.js","node_modules/swiper/core/slide/index.js","node_modules/swiper/core/loop/loopCreate.js","node_modules/swiper/core/loop/loopFix.js","node_modules/swiper/core/loop/loopDestroy.js","node_modules/swiper/core/loop/index.js","node_modules/swiper/core/grab-cursor/setGrabCursor.js","node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","node_modules/swiper/core/grab-cursor/index.js","node_modules/swiper/core/events/onTouchStart.js","node_modules/swiper/core/events/onTouchMove.js","node_modules/swiper/core/events/onTouchEnd.js","node_modules/swiper/core/events/onResize.js","node_modules/swiper/core/events/onClick.js","node_modules/swiper/core/events/onScroll.js","node_modules/swiper/core/events/index.js","node_modules/swiper/core/breakpoints/setBreakpoint.js","node_modules/swiper/core/breakpoints/getBreakpoint.js","node_modules/swiper/core/breakpoints/index.js","node_modules/swiper/core/classes/addClasses.js","node_modules/swiper/core/classes/removeClasses.js","node_modules/swiper/core/classes/index.js","node_modules/swiper/core/images/loadImage.js","node_modules/swiper/core/images/preloadImages.js","node_modules/swiper/core/images/index.js","node_modules/swiper/core/check-overflow/index.js","node_modules/swiper/core/defaults.js","node_modules/swiper/core/moduleExtendParams.js","node_modules/swiper/core/core.js","node_modules/swiper/modules/keyboard/keyboard.js","node_modules/swiper/shared/create-element-if-not-defined.js","node_modules/swiper/shared/classes-to-selector.js","node_modules/swiper/modules/pagination/pagination.js","node_modules/swiper/modules/scrollbar/scrollbar.js","node_modules/swiper/modules/zoom/zoom.js","node_modules/swiper/modules/autoplay/autoplay.js","src/components/carousel/carousel.css?tag=road-carousel&encapsulation=shadow","src/components/carousel/carousel.tsx"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.2\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n return swiper.slideTo(swiper.slides.length - 1, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n}) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","/*\n * Carousel\n *\n * Index\n * - Container\n * - Bullets\n * - Arrows\n * - Slide\n * - Image\n */\n\n@import \"../../../node_modules/swiper/swiper-bundle.min.css\";\n\n/* CONTAINER\n -------------------- */\n\n:host(.swiper-container) {\n display: block;\n user-select: none;\n position: relative;\n z-index: 1;\n padding: 0;\n margin-right: auto;\n margin-left: auto;\n overflow: hidden;\n list-style: none;\n}\n\n/* BULLETS\n -------------------- */\n\n:host(.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet),\n:host(.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet) {\n margin: 0 0.125rem;\n}\n\n:host(.swiper-container-horizontal > .swiper-pagination-bullets) {\n bottom: 0.5rem;\n}\n\n.swiper-pagination-bullets {\n right: 0;\n display: inline-table;\n width: auto!important;\n padding: 0 0.75rem;\n margin: 0 auto;\n vertical-align: middle;\n background-color: var(--road-overlay-inverse);\n border-radius: 40px;\n}\n\n.swiper-pagination-bullet {\n width: 1.5rem;\n height: 0.25rem;\n vertical-align: middle;\n background: var(--road-overlay);\n border-radius: 0;\n}\n\n.swiper-pagination-bullet-active {\n background: var(--road-on-surface);\n}\n\n:host(.swiper-pagination-progressbar) {\n background: var(--road-grey-70);\n}\n\n:host(.swiper-pagination-progressbar) .swiper-pagination-progressbar-fill {\n background: var(--road-grey-10);\n}\n\n:host(.swiper-scrollbar) {\n background: var(--road-grey-70);\n}\n\n:host(.swiper-scrollbar-drag) {\n background: var(--road-grey-10);\n}\n\n/* ARROWS\n -------------------- */\n\n.swiper-button-prev,\n.swiper-button-next {\n display: none;\n}\n\n@media (min-width: 768px) {\n\n.swiper-button-prev,\n.swiper-button-next {\n display: flex;\n width: 3rem;\n height: 3rem;\n background: var(--road-overlay);\n border: 1px solid var(--road-overlay-inverse);\n border-radius: 3rem;\n }\n\n.swiper-button-prev road-icon,\n.swiper-button-next road-icon{\n color: var(--road-on-overlay);\n }\n}\n\n.swiper-button-prev::after,\n.swiper-button-next::after {\n display: none;\n}\n\n/**\n * Hover state\n */\n\n@media (hover: hover) {\n\n.swiper-button-prev:hover,\n.swiper-button-next:hover {\n background: var(--road-surface);\n }\n\n.swiper-button-prev:hover road-icon,\n.swiper-button-next:hover road-icon {\n color: var(--road-on-surface);\n }\n}\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n left: 1rem;\n}\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n right: 1rem;\n}\n\n@media (min-width: 768px) {\n\n .swiper-button-prev,\n .swiper-container-rtl .swiper-button-next {\n left: 1.5rem;\n }\n\n .swiper-button-next,\n .swiper-container-rtl .swiper-button-prev {\n right: 1.5rem;\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, Method, Prop, Watch, h } from '@stencil/core';\nimport { navigationChevron } from '../../../icons';\nimport Swiper, {SwiperOptions, Autoplay, Pagination, Scrollbar, Keyboard, Zoom} from \"swiper\"\n\nSwiper.use([Pagination, Scrollbar, Autoplay, Keyboard, Zoom]);\n\n/**\n * @slot - content of the carousel, it should be road-carousel-item elements.\n */\n\n@Component({\n tag: 'road-carousel',\n styleUrl: 'carousel.css',\n shadow: true,\n})\nexport class Carousel {\n private paginationEl?: HTMLElement;\n private swiperReady = false;\n private mutationO?: MutationObserver;\n private readySwiper!: (swiper: Swiper) => void;\n private swiper: Promise<Swiper> = new Promise(resolve => {\n this.readySwiper = resolve;\n });\n private syncSwiper?: Swiper;\n private didInit = false;\n\n @Element() el!: HTMLRoadCarouselElement;\n\n /**\n * Options to pass to the swiper instance.\n * See http://idangero.us/swiper/api/ for valid options\n */\n @Prop() options: any = {}; // SwiperOptions; // TODO\n\n @Watch('options')\n async optionsChanged() {\n if (this.swiperReady) {\n const swiper = await this.getSwiper();\n Object.assign(swiper.params, this.options);\n await this.update();\n }\n }\n\n /**\n * If `true`, show the pagination.\n */\n @Prop() pager = true;\n\n /**\n * If `true`, show arrows.\n */\n @Prop() arrows = false;\n\n /**\n * Emitted after Swiper initialization\n */\n @Event() roadslidesdidload!: EventEmitter<void>;\n\n /**\n * Emitted when the user taps/clicks on the slide's container.\n */\n @Event() roadslidetap!: EventEmitter<void>;\n\n /**\n * Emitted when the user double taps on the slide's container.\n */\n @Event() roadslidedoubletap!: EventEmitter<void>;\n\n /**\n * Emitted before the active slide has changed.\n */\n @Event() roadslidewillchange!: EventEmitter<void>;\n\n /**\n * Emitted after the active slide has changed.\n */\n @Event() roadslidedidchange!: EventEmitter<void>;\n\n /**\n * Emitted when the next slide has started.\n */\n @Event() roadslidenextstart!: EventEmitter<void>;\n\n /**\n * Emitted when the previous slide has started.\n */\n @Event() roadslideprevstart!: EventEmitter<void>;\n\n /**\n * Emitted when the next slide has ended.\n */\n @Event() roadslidenextend!: EventEmitter<void>;\n\n /**\n * Emitted when the previous slide has ended.\n */\n @Event() roadslideprevend!: EventEmitter<void>;\n\n /**\n * Emitted when the slide transition has started.\n */\n @Event() roadslidetransitionstart!: EventEmitter<void>;\n\n /**\n * Emitted when the slide transition has ended.\n */\n @Event() roadslidetransitionend!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is actively being moved.\n */\n @Event() roadslidedrag!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is at its initial position.\n */\n @Event() roadslidereachstart!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is at the last slide.\n */\n @Event() roadslidereachend!: EventEmitter<void>;\n\n /**\n * Emitted when the user first touches the slider.\n */\n @Event() roadslidetouchstart!: EventEmitter<void>;\n\n /**\n * Emitted when the user releases the touch.\n */\n @Event() roadslidetouchend!: EventEmitter<void>;\n\n connectedCallback() {\n // tslint:disable-next-line: strict-type-predicates\n if (typeof MutationObserver !== 'undefined') {\n const mut = this.mutationO = new MutationObserver(() => {\n if (this.swiperReady) {\n this.update();\n }\n });\n mut.observe(this.el, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n componentDidLoad(){\n if (!this.didInit) {\n this.didInit = true;\n this.initSwiper();\n }\n }\n\n disconnectedCallback() {\n if (this.mutationO) {\n this.mutationO.disconnect();\n this.mutationO = undefined;\n }\n\n /**\n * We need to synchronously destroy\n * swiper otherwise it is possible\n * that it will be left in a\n * destroyed state if connectedCallback\n * is called multiple times\n */\n const swiper = this.syncSwiper;\n if (swiper !== undefined) {\n swiper.destroy(true, true);\n this.swiper = new Promise(resolve => {\n this.readySwiper = resolve;\n });\n this.swiperReady = false;\n this.syncSwiper = undefined;\n }\n\n this.didInit = false;\n }\n\n /**\n * Update the underlying slider implementation. Call this if you've added or removed\n * child slides.\n */\n @Method()\n async update() {\n const [swiper] = await Promise.all([\n this.getSwiper(),\n waitForSlides(this.el)\n ]);\n swiper.update();\n }\n\n /**\n * Force swiper to update its height (when autoHeight is enabled) for the duration\n * equal to 'speed' parameter.\n *\n * @param speed The transition duration (in ms).\n */\n @Method()\n async updateAutoHeight(speed?: number) {\n const swiper = await this.getSwiper();\n swiper.updateAutoHeight(speed);\n }\n\n /**\n * Transition to the specified slide.\n *\n * @param index The index of the slide to transition to.\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slideTo(index: number, speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slideTo(index, speed, runCallbacks);\n }\n\n /**\n * Transition to the next slide.\n *\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slideNext(speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slideNext(speed!, runCallbacks!);\n }\n\n /**\n * Transition to the previous slide.\n *\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce the [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slidePrev(speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slidePrev(speed, runCallbacks);\n }\n\n /**\n * Get the index of the active slide.\n */\n @Method()\n async getActiveIndex(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.activeIndex;\n }\n\n /**\n * Get the index of the previous slide.\n */\n @Method()\n async getPreviousIndex(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.previousIndex;\n }\n\n /**\n * Get the total number of slides.\n */\n @Method()\n async length(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.slides.length;\n }\n\n /**\n * Get whether or not the current slide is the last slide.\n */\n @Method()\n async isEnd(): Promise<boolean> {\n const swiper = await this.getSwiper();\n return swiper.isEnd;\n }\n\n /**\n * Get whether or not the current slide is the first slide.\n */\n @Method()\n async isBeginning(): Promise<boolean> {\n const swiper = await this.getSwiper();\n return swiper.isBeginning;\n }\n\n /**\n * Start auto play.\n */\n @Method()\n async startAutoplay() {\n const swiper = await this.getSwiper();\n if (swiper.autoplay) {\n swiper.autoplay.start();\n }\n }\n\n /**\n * Stop auto play.\n */\n @Method()\n async stopAutoplay() {\n const swiper = await this.getSwiper();\n if (swiper.autoplay) {\n swiper.autoplay.stop();\n }\n }\n\n /**\n * Lock or unlock the ability to slide to the next slide.\n *\n * @param lock If `true`, disable swiping to the next slide.\n */\n @Method()\n async lockSwipeToNext(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlideNext = !lock;\n }\n\n /**\n * Lock or unlock the ability to slide to the previous slide.\n *\n * @param lock If `true`, disable swiping to the previous slide.\n */\n @Method()\n async lockSwipeToPrev(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlidePrev = !lock;\n }\n\n /**\n * Lock or unlock the ability to slide to the next or previous slide.\n *\n * @param lock If `true`, disable swiping to the next and previous slide.\n */\n @Method()\n async lockSwipes(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlideNext = !lock;\n swiper.allowSlidePrev = !lock;\n swiper.allowTouchMove = !lock;\n }\n\n /**\n * Get the Swiper instance.\n * Use this to access the full Swiper API.\n * See https://idangero.us/swiper/api/ for all API options.\n */\n @Method()\n async getSwiper(): Promise<any> {\n return this.swiper;\n }\n\n private async initSwiper() {\n const finalOptions = this.normalizeOptions();\n\n // init swiper core\n await waitForSlides(this.el);\n // @ts-ignore\n const swiper = new Swiper(this.el, finalOptions);\n this.swiperReady = true;\n this.syncSwiper = swiper;\n this.readySwiper(swiper);\n }\n\n private normalizeOptions(): SwiperOptions {\n // Base options, can be changed\n // TODO Add interface SwiperOptions\n const swiperOptions: SwiperOptions = {\n effect: undefined,\n direction: 'horizontal',\n initialSlide: 0,\n loop: false,\n parallax: false,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 300,\n grid: {\n rows: 1,\n fill: 'column',\n },\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0,\n slidesOffsetAfter: 0,\n touchEventsTarget: 'container',\n autoplay: false,\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02,\n },\n autoHeight: false,\n setWrapperSize: false,\n zoom: {\n maxRatio: 3,\n minRatio: 1,\n toggle: false,\n },\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n touchStartPreventDefault: false,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n resistance: true,\n resistanceRatio: 0.85,\n watchSlidesProgress: false,\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n loopAdditionalSlides: 0,\n noSwiping: true,\n runCallbacksOnInit: true,\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true,\n },\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n fadeEffect: {\n crossFade: false,\n },\n a11y: {\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n },\n };\n\n if (this.pager) {\n swiperOptions.pagination = {\n el: this.paginationEl!,\n type: 'bullets',\n clickable: true,\n hideOnClick: false,\n };\n }\n\n // Keep the event options separate, we dont want users\n // overwriting these\n const eventOptions: SwiperOptions = {\n on: {\n init: () => {\n setTimeout(() => {\n this.roadslidesdidload.emit();\n }, 20);\n },\n // @ts-ignore\n slideChangeTransitionStart: this.roadslidewillchange.emit,\n // @ts-ignore\n slideChangeTransitionEnd: this.roadslidedidchange.emit,\n // @ts-ignore\n slideNextTransitionStart: this.roadslidenextstart.emit,\n // @ts-ignore\n slidePrevTransitionStart: this.roadslideprevstart.emit,\n // @ts-ignore\n slideNextTransitionEnd: this.roadslidenextend.emit,\n // @ts-ignore\n slidePrevTransitionEnd: this.roadslideprevend.emit,\n // @ts-ignore\n transitionStart: this.roadslidetransitionstart.emit,\n // @ts-ignore\n transitionEnd: this.roadslidetransitionend.emit,\n // @ts-ignore\n sliderMove: this.roadslidedrag.emit,\n // @ts-ignore\n reachBeginning: this.roadslidereachstart.emit,\n // @ts-ignore\n reachEnd: this.roadslidereachend.emit,\n // @ts-ignore\n touchStart: this.roadslidetouchstart.emit,\n // @ts-ignore\n touchEnd: this.roadslidetouchend.emit,\n // @ts-ignore\n tap: this.roadslidetap.emit,\n // @ts-ignore\n doubleTap: this.roadslidedoubletap.emit,\n },\n };\n\n const customEvents = (!!this.options && !!this.options.on) ? this.options.on : {};\n\n // merge \"on\" event listeners, while giving our event listeners priority\n const mergedEventOptions = { on: { ...customEvents, ...eventOptions.on } };\n\n // Merge the base, user options, and events together then pas to swiper\n return { ...swiperOptions, ...this.options, ...mergedEventOptions };\n }\n\n render() {\n return (\n <Host class=\"swiper-container\">\n <div class=\"swiper-wrapper\">\n <slot/>\n </div>\n {this.pager && <div class=\"swiper-pagination\" ref={el => this.paginationEl = el}></div>}\n {this.arrows && (\n <div class=\"swiper-button-prev\" onClick={() => this.el.slidePrev()}>\n <road-icon icon={navigationChevron} rotate=\"180\"></road-icon>\n </div>\n )}\n {this.arrows && (\n <div class=\"swiper-button-next\" onClick={() => this.el.slideNext()}>\n <road-icon icon={navigationChevron}></road-icon>\n </div>\n )}\n </Host>\n );\n }\n}\n\nconst waitForSlides = (el: HTMLElement) => {\n return Promise.all(\n Array.from(el.querySelectorAll('road-carousel-item')).map(s => s.componentOnReady())\n );\n};\n"],"mappings":"oGAYA,SAASA,EAASC,GACd,OAAQA,IAAQ,aACLA,IAAQ,UACf,gBAAiBA,GACjBA,EAAIC,cAAgBC,MAC5B,CACA,SAASC,EAAOC,EAAS,GAAIC,EAAM,IAC/BH,OAAOI,KAAKD,GAAKE,SAASC,IACtB,UAAWJ,EAAOI,KAAS,YACvBJ,EAAOI,GAAOH,EAAIG,QACjB,GAAIT,EAASM,EAAIG,KAClBT,EAASK,EAAOI,KAChBN,OAAOI,KAAKD,EAAIG,IAAMC,OAAS,EAAG,CAClCN,EAAOC,EAAOI,GAAMH,EAAIG,GACpC,IAEA,CAEA,MAAME,EAAc,CAChBC,KAAM,GACN,gBAAAC,GAAmB,EACnB,mBAAAC,GAAsB,EACtBC,cAAe,CACX,IAAAC,GAAO,EACPC,SAAU,IAEd,aAAAC,GACI,OAAO,IACf,EACI,gBAAAC,GACI,MAAO,EACf,EACI,cAAAC,GACI,OAAO,IACf,EACI,WAAAC,GACI,MAAO,CACH,SAAAC,GAAY,EAExB,EACI,aAAAC,GACI,MAAO,CACHC,SAAU,GACVC,WAAY,GACZC,MAAO,GACP,YAAAC,GAAe,EACf,oBAAAC,GACI,MAAO,EACvB,EAEA,EACI,eAAAC,GACI,MAAO,EACf,EACI,UAAAC,GACI,OAAO,IACf,EACIC,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,KAGhB,SAASC,IACL,MAAMC,SAAaC,WAAa,YAAcA,SAAW,GACzDtC,EAAOqC,EAAK9B,GACZ,OAAO8B,CACX,CAEA,MAAME,EAAY,CACdD,SAAU/B,EACViC,UAAW,CACPC,UAAW,IAEfd,SAAU,CACNC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,IAEZO,QAAS,CACL,YAAAC,GAAe,EACf,SAAAC,GAAY,EACZ,EAAAC,GAAK,EACL,IAAAC,GAAO,GAEXC,YAAa,SAASA,IAClB,OAAOC,IACf,EACI,gBAAAvC,GAAmB,EACnB,mBAAAC,GAAsB,EACtB,gBAAAuC,GACI,MAAO,CACH,gBAAAC,GACI,MAAO,EACvB,EAEA,EACI,KAAAC,GAAQ,EACR,IAAAC,GAAO,EACPC,OAAQ,GACR,UAAAC,GAAa,EACb,YAAAC,GAAe,EACf,UAAAC,GACI,MAAO,EACf,EACI,qBAAAC,CAAsBC,GAClB,UAAWJ,aAAe,YAAa,CACnCI,IACA,OAAO,IACnB,CACQ,OAAOJ,WAAWI,EAAU,EACpC,EACI,oBAAAC,CAAqBC,GACjB,UAAWN,aAAe,YAAa,CACnC,MACZ,CACQC,aAAaK,EACrB,GAEA,SAASC,IACL,MAAMC,SAAaC,SAAW,YAAcA,OAAS,GACrD/D,EAAO8D,EAAKvB,GACZ,OAAOuB,CACX,CCnIA,SAASE,EAAanE,GACpB,MAAMoE,EAAQpE,EAAIqE,UAClBnE,OAAOoE,eAAetE,EAAK,YAAa,CACtC,GAAAuE,GACE,OAAOH,CACb,EAEI,GAAAI,CAAIC,GACFL,EAAMC,UAAYI,CACxB,GAGA,CAEA,MAAMC,UAAaC,MACjB,WAAA1E,CAAY2E,GACVC,SAAUD,GAAS,IACnBT,EAAahB,KACjB,EAIA,SAAS2B,EAAUC,EAAM,IACvB,MAAMC,EAAM,GACZD,EAAIxE,SAAQ0E,IACV,GAAIN,MAAMO,QAAQD,GAAK,CACrBD,EAAIG,QAAQL,EAAUG,GAC5B,KAAW,CACLD,EAAIG,KAAKF,EACf,KAEE,OAAOD,CACT,CACA,SAASI,EAAYL,EAAKlB,GACxB,OAAOc,MAAMU,UAAUC,OAAOC,KAAKR,EAAKlB,EAC1C,CACA,SAAS2B,EAAYT,GACnB,MAAMU,EAAc,GAEpB,IAAK,IAAIC,EAAI,EAAGA,EAAIX,EAAItE,OAAQiF,GAAK,EAAG,CACtC,GAAID,EAAYE,QAAQZ,EAAIW,OAAS,EAAGD,EAAYN,KAAKJ,EAAIW,GACjE,CAEE,OAAOD,CACT,CAOA,SAASG,EAAIC,EAAUC,GACrB,UAAWD,IAAa,SAAU,CAChC,MAAO,CAACA,EACZ,CAEE,MAAME,EAAI,GACV,MAAMf,EAAMc,EAAQ5E,iBAAiB2E,GAErC,IAAK,IAAIH,EAAI,EAAGA,EAAIV,EAAIvE,OAAQiF,GAAK,EAAG,CACtCK,EAAEZ,KAAKH,EAAIU,GACf,CAEE,OAAOK,CACT,CAEA,SAASC,EAAEH,EAAUC,GACnB,MAAM5B,EAASF,IACf,MAAMvB,EAAWF,IACjB,IAAIwC,EAAM,GAEV,IAAKe,GAAWD,aAAoBnB,EAAM,CACxC,OAAOmB,CACX,CAEE,IAAKA,EAAU,CACb,OAAO,IAAInB,EAAKK,EACpB,CAEE,UAAWc,IAAa,SAAU,CAChC,MAAMI,EAAOJ,EAASK,OAEtB,GAAID,EAAKN,QAAQ,MAAQ,GAAKM,EAAKN,QAAQ,MAAQ,EAAG,CACpD,IAAIQ,EAAW,MACf,GAAIF,EAAKN,QAAQ,SAAW,EAAGQ,EAAW,KAC1C,GAAIF,EAAKN,QAAQ,SAAW,EAAGQ,EAAW,QAC1C,GAAIF,EAAKN,QAAQ,SAAW,GAAKM,EAAKN,QAAQ,SAAW,EAAGQ,EAAW,KACvE,GAAIF,EAAKN,QAAQ,YAAc,EAAGQ,EAAW,QAC7C,GAAIF,EAAKN,QAAQ,aAAe,EAAGQ,EAAW,SAC9C,MAAMC,EAAa3D,EAASnB,cAAc6E,GAC1CC,EAAWC,UAAYJ,EAEvB,IAAK,IAAIP,EAAI,EAAGA,EAAIU,EAAW5E,WAAWf,OAAQiF,GAAK,EAAG,CACxDX,EAAII,KAAKiB,EAAW5E,WAAWkE,GACvC,CACA,KAAW,CACLX,EAAMa,EAAIC,EAASK,OAAQJ,GAAWrD,EAC5C,CAEA,MAAS,GAAIoD,EAASS,UAAYT,IAAa3B,GAAU2B,IAAapD,EAAU,CAC5EsC,EAAII,KAAKU,EACb,MAAS,GAAIlB,MAAMO,QAAQW,GAAW,CAClC,GAAIA,aAAoBnB,EAAM,OAAOmB,EACrCd,EAAMc,CACV,CAEE,OAAO,IAAInB,EAAKc,EAAYT,GAC9B,CAEAiB,EAAEO,GAAK7B,EAAKW,UAIZ,SAASmB,KAAYC,GACnB,MAAMC,EAAa5B,EAAU2B,EAAQE,KAAIC,GAAKA,EAAEC,MAAM,QACtD1D,KAAK5C,SAAQ0E,IACXA,EAAG6B,UAAUC,OAAOL,EAAW,IAEjC,OAAOvD,IACT,CAEA,SAAS6D,KAAeP,GACtB,MAAMC,EAAa5B,EAAU2B,EAAQE,KAAIC,GAAKA,EAAEC,MAAM,QACtD1D,KAAK5C,SAAQ0E,IACXA,EAAG6B,UAAUG,UAAUP,EAAW,IAEpC,OAAOvD,IACT,CAEA,SAAS+D,KAAeT,GACtB,MAAMC,EAAa5B,EAAU2B,EAAQE,KAAIC,GAAKA,EAAEC,MAAM,QACtD1D,KAAK5C,SAAQ0E,IACXyB,EAAWnG,SAAQ4G,IACjBlC,EAAG6B,UAAUM,OAAOD,EAAU,GAC9B,GAEN,CAEA,SAASE,KAAYZ,GACnB,MAAMC,EAAa5B,EAAU2B,EAAQE,KAAIC,GAAKA,EAAEC,MAAM,QACtD,OAAOzB,EAAYjC,MAAM8B,GAChByB,EAAWpB,QAAO6B,GAAalC,EAAG6B,UAAUQ,SAASH,KAAY1G,OAAS,IAChFA,OAAS,CACd,CAEA,SAAS8G,EAAKC,EAAO/C,GACnB,GAAIgD,UAAUhH,SAAW,UAAY+G,IAAU,SAAU,CAEvD,GAAIrE,KAAK,GAAI,OAAOA,KAAK,GAAGuE,aAAaF,GACzC,OAAOG,SACX,CAGE,IAAK,IAAIjC,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,GAAI+B,UAAUhH,SAAW,EAAG,CAE1B0C,KAAKuC,GAAGhE,aAAa8F,EAAO/C,EAClC,KAAW,CAEL,IAAK,MAAMmD,KAAYJ,EAAO,CAC5BrE,KAAKuC,GAAGkC,GAAYJ,EAAMI,GAC1BzE,KAAKuC,GAAGhE,aAAakG,EAAUJ,EAAMI,GAC7C,CACA,CACA,CAEE,OAAOzE,IACT,CAEA,SAAS0E,EAAWN,GAClB,IAAK,IAAI7B,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvCvC,KAAKuC,GAAGoC,gBAAgBP,EAC5B,CAEE,OAAOpE,IACT,CAoIA,SAAS4E,EAAUA,GACjB,IAAK,IAAIrC,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvCvC,KAAKuC,GAAGjE,MAAMsG,UAAYA,CAC9B,CAEE,OAAO5E,IACT,CAEA,SAAS6E,EAAWC,GAClB,IAAK,IAAIvC,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvCvC,KAAKuC,GAAGjE,MAAMyG,0BAA4BD,IAAa,SAAW,GAAGA,MAAeA,CACxF,CAEE,OAAO9E,IACT,CAEA,SAASgF,KAAMC,GACb,IAAKC,EAAWC,EAAgBC,EAAUC,GAAWJ,EAErD,UAAWA,EAAK,KAAO,WAAY,EAChCC,EAAWE,EAAUC,GAAWJ,EACjCE,EAAiBX,SACrB,CAEE,IAAKa,EAASA,EAAU,MAExB,SAASC,EAAgBC,GACvB,MAAMtI,EAASsI,EAAEtI,OACjB,IAAKA,EAAQ,OACb,MAAMuI,EAAYD,EAAEtI,OAAOwI,eAAiB,GAE5C,GAAID,EAAUhD,QAAQ+C,GAAK,EAAG,CAC5BC,EAAUE,QAAQH,EACxB,CAEI,GAAI1C,EAAE5F,GAAQ0I,GAAGR,GAAiBC,EAASQ,MAAM3I,EAAQuI,OAAgB,CACvE,MAAMK,EAAUhD,EAAE5F,GAAQ4I,UAE1B,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAQvI,OAAQwI,GAAK,EAAG,CAC1C,GAAIjD,EAAEgD,EAAQC,IAAIH,GAAGR,GAAiBC,EAASQ,MAAMC,EAAQC,GAAIN,EACzE,CACA,CACA,CAEE,SAASO,EAAYR,GACnB,MAAMC,EAAYD,GAAKA,EAAEtI,OAASsI,EAAEtI,OAAOwI,eAAiB,GAAK,GAEjE,GAAID,EAAUhD,QAAQ+C,GAAK,EAAG,CAC5BC,EAAUE,QAAQH,EACxB,CAEIH,EAASQ,MAAM5F,KAAMwF,EACzB,CAEE,MAAMQ,EAASd,EAAUxB,MAAM,KAC/B,IAAIuC,EAEJ,IAAK,IAAI1D,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,MAAMT,EAAK9B,KAAKuC,GAEhB,IAAK4C,EAAgB,CACnB,IAAKc,EAAI,EAAGA,EAAID,EAAO1I,OAAQ2I,GAAK,EAAG,CACrC,MAAMC,EAAQF,EAAOC,GACrB,IAAKnE,EAAGqE,cAAerE,EAAGqE,cAAgB,GAC1C,IAAKrE,EAAGqE,cAAcD,GAAQpE,EAAGqE,cAAcD,GAAS,GACxDpE,EAAGqE,cAAcD,GAAOlE,KAAK,CAC3BoD,WACAgB,cAAeL,IAEjBjE,EAAGrE,iBAAiByI,EAAOH,EAAaV,EAChD,CACA,KAAW,CAEL,IAAKY,EAAI,EAAGA,EAAID,EAAO1I,OAAQ2I,GAAK,EAAG,CACrC,MAAMC,EAAQF,EAAOC,GACrB,IAAKnE,EAAGuE,kBAAmBvE,EAAGuE,kBAAoB,GAClD,IAAKvE,EAAGuE,kBAAkBH,GAAQpE,EAAGuE,kBAAkBH,GAAS,GAChEpE,EAAGuE,kBAAkBH,GAAOlE,KAAK,CAC/BoD,WACAgB,cAAed,IAEjBxD,EAAGrE,iBAAiByI,EAAOZ,EAAiBD,EACpD,CACA,CACA,CAEE,OAAOrF,IACT,CAEA,SAASsG,KAAOrB,GACd,IAAKC,EAAWC,EAAgBC,EAAUC,GAAWJ,EAErD,UAAWA,EAAK,KAAO,WAAY,EAChCC,EAAWE,EAAUC,GAAWJ,EACjCE,EAAiBX,SACrB,CAEE,IAAKa,EAASA,EAAU,MACxB,MAAMW,EAASd,EAAUxB,MAAM,KAE/B,IAAK,IAAInB,EAAI,EAAGA,EAAIyD,EAAO1I,OAAQiF,GAAK,EAAG,CACzC,MAAM2D,EAAQF,EAAOzD,GAErB,IAAK,IAAI0D,EAAI,EAAGA,EAAIjG,KAAK1C,OAAQ2I,GAAK,EAAG,CACvC,MAAMnE,EAAK9B,KAAKiG,GAChB,IAAIM,EAEJ,IAAKpB,GAAkBrD,EAAGqE,cAAe,CACvCI,EAAWzE,EAAGqE,cAAcD,EACpC,MAAa,GAAIf,GAAkBrD,EAAGuE,kBAAmB,CACjDE,EAAWzE,EAAGuE,kBAAkBH,EACxC,CAEM,GAAIK,GAAYA,EAASjJ,OAAQ,CAC/B,IAAK,IAAIwI,EAAIS,EAASjJ,OAAS,EAAGwI,GAAK,EAAGA,GAAK,EAAG,CAChD,MAAMU,EAAUD,EAAST,GAEzB,GAAIV,GAAYoB,EAAQpB,WAAaA,EAAU,CAC7CtD,EAAGpE,oBAAoBwI,EAAOM,EAAQJ,cAAef,GACrDkB,EAASE,OAAOX,EAAG,EAC/B,MAAiB,GAAIV,GAAYoB,EAAQpB,UAAYoB,EAAQpB,SAASsB,WAAaF,EAAQpB,SAASsB,YAActB,EAAU,CAChHtD,EAAGpE,oBAAoBwI,EAAOM,EAAQJ,cAAef,GACrDkB,EAASE,OAAOX,EAAG,EAC/B,MAAiB,IAAKV,EAAU,CACpBtD,EAAGpE,oBAAoBwI,EAAOM,EAAQJ,cAAef,GACrDkB,EAASE,OAAOX,EAAG,EAC/B,CACA,CACA,CACA,CACA,CAEE,OAAO9F,IACT,CAwBA,SAAS2G,KAAW1B,GAClB,MAAMlE,EAASF,IACf,MAAMmF,EAASf,EAAK,GAAGvB,MAAM,KAC7B,MAAM8B,EAAYP,EAAK,GAEvB,IAAK,IAAI1C,EAAI,EAAGA,EAAIyD,EAAO1I,OAAQiF,GAAK,EAAG,CACzC,MAAM2D,EAAQF,EAAOzD,GAErB,IAAK,IAAI0D,EAAI,EAAGA,EAAIjG,KAAK1C,OAAQ2I,GAAK,EAAG,CACvC,MAAMnE,EAAK9B,KAAKiG,GAEhB,GAAIlF,EAAOhB,YAAa,CACtB,MAAM6G,EAAM,IAAI7F,EAAOhB,YAAYmG,EAAO,CACxCW,OAAQrB,EACRsB,QAAS,KACTC,WAAY,OAEdjF,EAAG2D,cAAgBR,EAAK9C,QAAO,CAAC6E,EAAMC,IAAcA,EAAY,IAChEnF,EAAGoF,cAAcN,GACjB9E,EAAG2D,cAAgB,UACZ3D,EAAG2D,aAClB,CACA,CACA,CAEE,OAAOzF,IACT,CAEA,SAASmH,EAAczG,GACrB,MAAM0G,EAAMpH,KAEZ,SAASqH,EAAa9B,GACpB,GAAIA,EAAEtI,SAAW+C,KAAM,OACvBU,EAAS0B,KAAKpC,KAAMuF,GACpB6B,EAAId,IAAI,gBAAiBe,EAC7B,CAEE,GAAI3G,EAAU,CACZ0G,EAAIpC,GAAG,gBAAiBqC,EAC5B,CAEE,OAAOrH,IACT,CAgCA,SAASsH,EAAWC,GAClB,GAAIvH,KAAK1C,OAAS,EAAG,CACnB,GAAIiK,EAAgB,CAClB,MAAMC,EAASxH,KAAKwH,SACpB,OAAOxH,KAAK,GAAGyH,YAAcC,WAAWF,EAAOtH,iBAAiB,iBAAmBwH,WAAWF,EAAOtH,iBAAiB,eAC5H,CAEI,OAAOF,KAAK,GAAGyH,WACnB,CAEE,OAAO,IACT,CAgBA,SAASE,EAAYJ,GACnB,GAAIvH,KAAK1C,OAAS,EAAG,CACnB,GAAIiK,EAAgB,CAClB,MAAMC,EAASxH,KAAKwH,SACpB,OAAOxH,KAAK,GAAG4H,aAAeF,WAAWF,EAAOtH,iBAAiB,eAAiBwH,WAAWF,EAAOtH,iBAAiB,iBAC3H,CAEI,OAAOF,KAAK,GAAG4H,YACnB,CAEE,OAAO,IACT,CAEA,SAASC,IACP,GAAI7H,KAAK1C,OAAS,EAAG,CACnB,MAAMyD,EAASF,IACf,MAAMvB,EAAWF,IACjB,MAAM0C,EAAK9B,KAAK,GAChB,MAAM8H,EAAMhG,EAAGiG,wBACf,MAAMvK,EAAO8B,EAAS9B,KACtB,MAAMwK,EAAYlG,EAAGkG,WAAaxK,EAAKwK,WAAa,EACpD,MAAMC,EAAanG,EAAGmG,YAAczK,EAAKyK,YAAc,EACvD,MAAMC,EAAYpG,IAAOf,EAASA,EAAOoH,QAAUrG,EAAGoG,UACtD,MAAME,EAAatG,IAAOf,EAASA,EAAOsH,QAAUvG,EAAGsG,WACvD,MAAO,CACLE,IAAKR,EAAIQ,IAAMJ,EAAYF,EAC3BO,KAAMT,EAAIS,KAAOH,EAAaH,EAEpC,CAEE,OAAO,IACT,CA6BA,SAAST,IACP,MAAMzG,EAASF,IACf,GAAIb,KAAK,GAAI,OAAOe,EAAOd,iBAAiBD,KAAK,GAAI,MACrD,MAAO,EACT,CAEA,SAASwI,EAAIC,EAAOnH,GAClB,MAAMP,EAASF,IACf,IAAI0B,EAEJ,GAAI+B,UAAUhH,SAAW,EAAG,CAC1B,UAAWmL,IAAU,SAAU,CAE7B,GAAIzI,KAAK,GAAI,OAAOe,EAAOd,iBAAiBD,KAAK,GAAI,MAAME,iBAAiBuI,EAClF,KAAW,CAEL,IAAKlG,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACnC,IAAK,MAAMmG,KAAQD,EAAO,CACxBzI,KAAKuC,GAAGjE,MAAMoK,GAAQD,EAAMC,EACtC,CACA,CAEM,OAAO1I,IACb,CACA,CAEE,GAAIsE,UAAUhH,SAAW,UAAYmL,IAAU,SAAU,CAEvD,IAAKlG,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACnCvC,KAAKuC,GAAGjE,MAAMmK,GAASnH,CAC7B,CAEI,OAAOtB,IACX,CAEE,OAAOA,IACT,CAEA,SAAS2I,EAAKjI,GACZ,IAAKA,EAAU,OAAOV,KACtBA,KAAK5C,SAAQ,CAAC0E,EAAI8G,KAChBlI,EAASkF,MAAM9D,EAAI,CAACA,EAAI8G,GAAO,IAEjC,OAAO5I,IACT,CAEA,SAASmC,EAAOzB,GACd,MAAMmI,EAAS5G,EAAYjC,KAAMU,GACjC,OAAOmC,EAAEgG,EACX,CAEA,SAAS/F,EAAKA,GACZ,UAAWA,IAAS,YAAa,CAC/B,OAAO9C,KAAK,GAAKA,KAAK,GAAGkD,UAAY,IACzC,CAEE,IAAK,IAAIX,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvCvC,KAAKuC,GAAGW,UAAYJ,CACxB,CAEE,OAAO9C,IACT,CAEA,SAAS8I,EAAKA,GACZ,UAAWA,IAAS,YAAa,CAC/B,OAAO9I,KAAK,GAAKA,KAAK,GAAG+I,YAAYhG,OAAS,IAClD,CAEE,IAAK,IAAIR,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvCvC,KAAKuC,GAAGwG,YAAcD,CAC1B,CAEE,OAAO9I,IACT,CAEA,SAAS2F,EAAGjD,GACV,MAAM3B,EAASF,IACf,MAAMvB,EAAWF,IACjB,MAAM0C,EAAK9B,KAAK,GAChB,IAAIgJ,EACJ,IAAIzG,EACJ,IAAKT,UAAaY,IAAa,YAAa,OAAO,MAEnD,UAAWA,IAAa,SAAU,CAChC,GAAIZ,EAAGmH,QAAS,OAAOnH,EAAGmH,QAAQvG,GAClC,GAAIZ,EAAGoH,sBAAuB,OAAOpH,EAAGoH,sBAAsBxG,GAC9D,GAAIZ,EAAGqH,kBAAmB,OAAOrH,EAAGqH,kBAAkBzG,GACtDsG,EAAcnG,EAAEH,GAEhB,IAAKH,EAAI,EAAGA,EAAIyG,EAAY1L,OAAQiF,GAAK,EAAG,CAC1C,GAAIyG,EAAYzG,KAAOT,EAAI,OAAO,IACxC,CAEI,OAAO,KACX,CAEE,GAAIY,IAAapD,EAAU,CACzB,OAAOwC,IAAOxC,CAClB,CAEE,GAAIoD,IAAa3B,EAAQ,CACvB,OAAOe,IAAOf,CAClB,CAEE,GAAI2B,EAASS,UAAYT,aAAoBnB,EAAM,CACjDyH,EAActG,EAASS,SAAW,CAACT,GAAYA,EAE/C,IAAKH,EAAI,EAAGA,EAAIyG,EAAY1L,OAAQiF,GAAK,EAAG,CAC1C,GAAIyG,EAAYzG,KAAOT,EAAI,OAAO,IACxC,CAEI,OAAO,KACX,CAEE,OAAO,KACT,CAEA,SAAS8G,IACP,IAAIQ,EAAQpJ,KAAK,GACjB,IAAIuC,EAEJ,GAAI6G,EAAO,CACT7G,EAAI,EAEJ,OAAQ6G,EAAQA,EAAMC,mBAAqB,KAAM,CAC/C,GAAID,EAAMjG,WAAa,EAAGZ,GAAK,CACrC,CAEI,OAAOA,CACX,CAEE,OAAOiC,SACT,CAEA,SAAS8E,EAAGV,GACV,UAAWA,IAAU,YAAa,OAAO5I,KACzC,MAAM1C,EAAS0C,KAAK1C,OAEpB,GAAIsL,EAAQtL,EAAS,EAAG,CACtB,OAAOuF,EAAE,GACb,CAEE,GAAI+F,EAAQ,EAAG,CACb,MAAMW,EAAcjM,EAASsL,EAC7B,GAAIW,EAAc,EAAG,OAAO1G,EAAE,IAC9B,OAAOA,EAAE,CAAC7C,KAAKuJ,IACnB,CAEE,OAAO1G,EAAE,CAAC7C,KAAK4I,IACjB,CAEA,SAASY,KAAUC,GACjB,IAAIC,EACJ,MAAMpK,EAAWF,IAEjB,IAAK,IAAI0G,EAAI,EAAGA,EAAI2D,EAAInM,OAAQwI,GAAK,EAAG,CACtC4D,EAAWD,EAAI3D,GAEf,IAAK,IAAIvD,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,UAAWmH,IAAa,SAAU,CAChC,MAAMC,EAAUrK,EAASnB,cAAc,OACvCwL,EAAQzG,UAAYwG,EAEpB,MAAOC,EAAQC,WAAY,CACzB5J,KAAKuC,GAAGsH,YAAYF,EAAQC,WACtC,CACA,MAAa,GAAIF,aAAoBnI,EAAM,CACnC,IAAK,IAAI0E,EAAI,EAAGA,EAAIyD,EAASpM,OAAQ2I,GAAK,EAAG,CAC3CjG,KAAKuC,GAAGsH,YAAYH,EAASzD,GACvC,CACA,KAAa,CACLjG,KAAKuC,GAAGsH,YAAYH,EAC5B,CACA,CACA,CAEE,OAAO1J,IACT,CAOA,SAAS8J,EAAQJ,GACf,MAAMpK,EAAWF,IACjB,IAAImD,EACJ,IAAI0D,EAEJ,IAAK1D,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACnC,UAAWmH,IAAa,SAAU,CAChC,MAAMC,EAAUrK,EAASnB,cAAc,OACvCwL,EAAQzG,UAAYwG,EAEpB,IAAKzD,EAAI0D,EAAQtL,WAAWf,OAAS,EAAG2I,GAAK,EAAGA,GAAK,EAAG,CACtDjG,KAAKuC,GAAGwH,aAAaJ,EAAQtL,WAAW4H,GAAIjG,KAAKuC,GAAGlE,WAAW,GACvE,CACA,MAAW,GAAIqL,aAAoBnI,EAAM,CACnC,IAAK0E,EAAI,EAAGA,EAAIyD,EAASpM,OAAQ2I,GAAK,EAAG,CACvCjG,KAAKuC,GAAGwH,aAAaL,EAASzD,GAAIjG,KAAKuC,GAAGlE,WAAW,GAC7D,CACA,KAAW,CACL2B,KAAKuC,GAAGwH,aAAaL,EAAU1J,KAAKuC,GAAGlE,WAAW,GACxD,CACA,CAEE,OAAO2B,IACT,CAmCA,SAASgK,EAAKtH,GACZ,GAAI1C,KAAK1C,OAAS,EAAG,CACnB,GAAIoF,EAAU,CACZ,GAAI1C,KAAK,GAAGiK,oBAAsBpH,EAAE7C,KAAK,GAAGiK,oBAAoBtE,GAAGjD,GAAW,CAC5E,OAAOG,EAAE,CAAC7C,KAAK,GAAGiK,oBAC1B,CAEM,OAAOpH,EAAE,GACf,CAEI,GAAI7C,KAAK,GAAGiK,mBAAoB,OAAOpH,EAAE,CAAC7C,KAAK,GAAGiK,qBAClD,OAAOpH,EAAE,GACb,CAEE,OAAOA,EAAE,GACX,CAEA,SAASqH,EAAQxH,GACf,MAAMyH,EAAU,GAChB,IAAIrI,EAAK9B,KAAK,GACd,IAAK8B,EAAI,OAAOe,EAAE,IAElB,MAAOf,EAAGmI,mBAAoB,CAC5B,MAAMD,EAAOlI,EAAGmI,mBAEhB,GAAIvH,EAAU,CACZ,GAAIG,EAAEmH,GAAMrE,GAAGjD,GAAWyH,EAAQnI,KAAKgI,EAC7C,MAAWG,EAAQnI,KAAKgI,GAEpBlI,EAAKkI,CACT,CAEE,OAAOnH,EAAEsH,EACX,CAEA,SAASC,EAAK1H,GACZ,GAAI1C,KAAK1C,OAAS,EAAG,CACnB,MAAMwE,EAAK9B,KAAK,GAEhB,GAAI0C,EAAU,CACZ,GAAIZ,EAAGuI,wBAA0BxH,EAAEf,EAAGuI,wBAAwB1E,GAAGjD,GAAW,CAC1E,OAAOG,EAAE,CAACf,EAAGuI,wBACrB,CAEM,OAAOxH,EAAE,GACf,CAEI,GAAIf,EAAGuI,uBAAwB,OAAOxH,EAAE,CAACf,EAAGuI,yBAC5C,OAAOxH,EAAE,GACb,CAEE,OAAOA,EAAE,GACX,CAEA,SAASyH,EAAQ5H,GACf,MAAM6H,EAAU,GAChB,IAAIzI,EAAK9B,KAAK,GACd,IAAK8B,EAAI,OAAOe,EAAE,IAElB,MAAOf,EAAGuI,uBAAwB,CAChC,MAAMD,EAAOtI,EAAGuI,uBAEhB,GAAI3H,EAAU,CACZ,GAAIG,EAAEuH,GAAMzE,GAAGjD,GAAW6H,EAAQvI,KAAKoI,EAC7C,MAAWG,EAAQvI,KAAKoI,GAEpBtI,EAAKsI,CACT,CAEE,OAAOvH,EAAE0H,EACX,CAMA,SAASC,EAAO9H,GACd,MAAMmD,EAAU,GAEhB,IAAK,IAAItD,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,GAAIvC,KAAKuC,GAAGkI,aAAe,KAAM,CAC/B,GAAI/H,EAAU,CACZ,GAAIG,EAAE7C,KAAKuC,GAAGkI,YAAY9E,GAAGjD,GAAWmD,EAAQ7D,KAAKhC,KAAKuC,GAAGkI,WACrE,KAAa,CACL5E,EAAQ7D,KAAKhC,KAAKuC,GAAGkI,WAC7B,CACA,CACA,CAEE,OAAO5H,EAAEgD,EACX,CAEA,SAASA,EAAQnD,GACf,MAAMmD,EAAU,GAEhB,IAAK,IAAItD,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,IAAIiI,EAASxK,KAAKuC,GAAGkI,WAErB,MAAOD,EAAQ,CACb,GAAI9H,EAAU,CACZ,GAAIG,EAAE2H,GAAQ7E,GAAGjD,GAAWmD,EAAQ7D,KAAKwI,EACjD,KAAa,CACL3E,EAAQ7D,KAAKwI,EACrB,CAEMA,EAASA,EAAOC,UACtB,CACA,CAEE,OAAO5H,EAAEgD,EACX,CAEA,SAAS6E,EAAQhI,GACf,IAAIgI,EAAU1K,KAEd,UAAW0C,IAAa,YAAa,CACnC,OAAOG,EAAE,GACb,CAEE,IAAK6H,EAAQ/E,GAAGjD,GAAW,CACzBgI,EAAUA,EAAQ7E,QAAQnD,GAAU4G,GAAG,EAC3C,CAEE,OAAOoB,CACT,CAEA,SAASC,EAAKjI,GACZ,MAAMkI,EAAgB,GAEtB,IAAK,IAAIrI,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,MAAMsI,EAAQ7K,KAAKuC,GAAGxE,iBAAiB2E,GAEvC,IAAK,IAAIuD,EAAI,EAAGA,EAAI4E,EAAMvN,OAAQ2I,GAAK,EAAG,CACxC2E,EAAc5I,KAAK6I,EAAM5E,GAC/B,CACA,CAEE,OAAOpD,EAAE+H,EACX,CAEA,SAASxM,EAASsE,GAChB,MAAMtE,EAAW,GAEjB,IAAK,IAAImE,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,MAAMlE,EAAa2B,KAAKuC,GAAGnE,SAE3B,IAAK,IAAI6H,EAAI,EAAGA,EAAI5H,EAAWf,OAAQ2I,GAAK,EAAG,CAC7C,IAAKvD,GAAYG,EAAExE,EAAW4H,IAAIN,GAAGjD,GAAW,CAC9CtE,EAAS4D,KAAK3D,EAAW4H,GACjC,CACA,CACA,CAEE,OAAOpD,EAAEzE,EACX,CAEA,SAAS0F,KACP,IAAK,IAAIvB,EAAI,EAAGA,EAAIvC,KAAK1C,OAAQiF,GAAK,EAAG,CACvC,GAAIvC,KAAKuC,GAAGkI,WAAYzK,KAAKuC,GAAGkI,WAAWK,YAAY9K,KAAKuC,GAChE,CAEE,OAAOvC,IACT,CClhCA,MAAM+K,GAAU,CACd1H,WACAQ,cACAK,WACAH,cACAK,OACAM,aACAE,YACFC,WAAEA,EACAG,KACAsB,MACAK,UACFQ,cAAEA,EACAG,aACAK,cACAH,SACAK,SACAW,MACAG,OACA7F,OACAgG,OACAnD,KACAiD,QACAU,KACAE,SACAM,UACAE,OACAE,UACAE,OACAE,UACAE,SACA3E,UACA6E,UACAC,OACAvM,WACA+D,SACA2B,WAEF/G,OAAOI,KAAK4N,IAAS3N,SAAQ4N,IAC3BjO,OAAOoE,eAAe0B,EAAEO,GAAI4H,EAAY,CACtC1J,MAAOyJ,GAAQC,GACfC,SAAU,MACV,ICzCJ,SAASC,GAAYrO,GACnB,MAAMsO,EAAStO,EACfE,OAAOI,KAAKgO,GAAQ/N,SAAQC,IAC1B,IACE8N,EAAO9N,GAAO,IACpB,CAAM,MAAOkI,GACb,CAEI,WACS4F,EAAO9N,EACpB,CAAM,MAAOkI,GACb,IAEA,CAEA,SAAS6F,GAAS1K,EAAU2K,EAAQ,GAClC,OAAO/K,WAAWI,EAAU2K,EAC9B,CAEA,SAASC,KACP,OAAOlL,KAAKkL,KACd,CAEA,SAASrL,GAAiB6B,GACxB,MAAMf,EAASF,IACf,IAAIvC,EAEJ,GAAIyC,EAAOd,iBAAkB,CAC3B3B,EAAQyC,EAAOd,iBAAiB6B,EAAI,KACxC,CAEE,IAAKxD,GAASwD,EAAGyJ,aAAc,CAC7BjN,EAAQwD,EAAGyJ,YACf,CAEE,IAAKjN,EAAO,CACVA,EAAQwD,EAAGxD,KACf,CAEE,OAAOA,CACT,CAEA,SAASkN,GAAa1J,EAAI2J,EAAO,KAC/B,MAAM1K,EAASF,IACf,IAAI6K,EACJ,IAAIC,EACJ,IAAIC,EACJ,MAAMC,EAAW5L,GAAiB6B,GAElC,GAAIf,EAAO+K,gBAAiB,CAC1BH,EAAeE,EAASjH,WAAaiH,EAASE,gBAE9C,GAAIJ,EAAajI,MAAM,KAAKpG,OAAS,EAAG,CACtCqO,EAAeA,EAAajI,MAAM,MAAMF,KAAIZ,GAAKA,EAAEoJ,QAAQ,IAAK,OAAMC,KAAK,KACjF,CAIIL,EAAkB,IAAI7K,EAAO+K,gBAAgBH,IAAiB,OAAS,GAAKA,EAChF,KAAS,CACLC,EAAkBC,EAASK,cAAgBL,EAASM,YAAcN,EAASO,aAAeP,EAASQ,aAAeR,EAASjH,WAAaiH,EAAS3L,iBAAiB,aAAa8L,QAAQ,aAAc,sBACrMN,EAASE,EAAgBU,WAAW5I,MAAM,IAC9C,CAEE,GAAI+H,IAAS,IAAK,CAEhB,GAAI1K,EAAO+K,gBAAiBH,EAAeC,EAAgBW,SACtD,GAAIb,EAAOpO,SAAW,GAAIqO,EAAejE,WAAWgE,EAAO,UAC3DC,EAAejE,WAAWgE,EAAO,GAC1C,CAEE,GAAID,IAAS,IAAK,CAEhB,GAAI1K,EAAO+K,gBAAiBH,EAAeC,EAAgBY,SACtD,GAAId,EAAOpO,SAAW,GAAIqO,EAAejE,WAAWgE,EAAO,UAC3DC,EAAejE,WAAWgE,EAAO,GAC1C,CAEE,OAAOC,GAAgB,CACzB,CAEA,SAAS/O,GAAS6P,GAChB,cAAcA,IAAM,UAAYA,IAAM,MAAQA,EAAE3P,aAAeC,OAAOmF,UAAUoK,SAASlK,KAAKqK,GAAGC,MAAM,GAAI,KAAO,QACpH,CAEA,SAASC,GAAOC,GAEd,UAAW7L,SAAW,oBAAsBA,OAAO8L,cAAgB,YAAa,CAC9E,OAAOD,aAAgBC,WAC3B,CAEE,OAAOD,IAASA,EAAKzJ,WAAa,GAAKyJ,EAAKzJ,WAAa,GAC3D,CAEA,SAASnG,MAAUiI,GACjB,MAAM6H,EAAK/P,OAAOkI,EAAK,IACvB,MAAM8H,EAAW,CAAC,YAAa,cAAe,aAE9C,IAAK,IAAIxK,EAAI,EAAGA,EAAI0C,EAAK3H,OAAQiF,GAAK,EAAG,CACvC,MAAMyK,EAAa/H,EAAK1C,GAExB,GAAIyK,IAAexI,WAAawI,IAAe,OAASL,GAAOK,GAAa,CAC1E,MAAMC,EAAYlQ,OAAOI,KAAKJ,OAAOiQ,IAAa7K,QAAO9E,GAAO0P,EAASvK,QAAQnF,GAAO,IAExF,IAAK,IAAI6P,EAAY,EAAGC,EAAMF,EAAU3P,OAAQ4P,EAAYC,EAAKD,GAAa,EAAG,CAC/E,MAAME,EAAUH,EAAUC,GAC1B,MAAMG,EAAOtQ,OAAOuQ,yBAAyBN,EAAYI,GAEzD,GAAIC,IAAS7I,WAAa6I,EAAKE,WAAY,CACzC,GAAI3Q,GAASkQ,EAAGM,KAAaxQ,GAASoQ,EAAWI,IAAW,CAC1D,GAAIJ,EAAWI,GAASI,WAAY,CAClCV,EAAGM,GAAWJ,EAAWI,EACvC,KAAmB,CACLpQ,GAAO8P,EAAGM,GAAUJ,EAAWI,GAC7C,CACA,MAAiB,IAAKxQ,GAASkQ,EAAGM,KAAaxQ,GAASoQ,EAAWI,IAAW,CAClEN,EAAGM,GAAW,GAEd,GAAIJ,EAAWI,GAASI,WAAY,CAClCV,EAAGM,GAAWJ,EAAWI,EACvC,KAAmB,CACLpQ,GAAO8P,EAAGM,GAAUJ,EAAWI,GAC7C,CACA,KAAiB,CACLN,EAAGM,GAAWJ,EAAWI,EACrC,CACA,CACA,CACA,CACA,CAEE,OAAON,CACT,CAEA,SAASW,GAAe3L,EAAI4L,EAASC,GACnC7L,EAAGxD,MAAMsP,YAAYF,EAASC,EAChC,CAEA,SAASE,IAAqBC,OAC5BA,EAAMC,eACNA,EAAcC,KACdA,IAEA,MAAMjN,EAASF,IACf,MAAMoN,GAAiBH,EAAOI,UAC9B,IAAIC,EAAY,KAChB,IAAIC,EACJ,MAAMtJ,EAAWgJ,EAAOO,OAAOC,MAC/BR,EAAOS,UAAUjQ,MAAMkQ,eAAiB,OACxCzN,EAAOJ,qBAAqBmN,EAAOW,gBACnC,MAAMC,EAAMX,EAAiBE,EAAgB,OAAS,OAEtD,MAAMU,EAAe,CAACC,EAAS3R,IACtByR,IAAQ,QAAUE,GAAW3R,GAAUyR,IAAQ,QAAUE,GAAW3R,EAG7E,MAAM4R,EAAU,KACdT,GAAO,IAAIhO,MAAO0O,UAElB,GAAIX,IAAc,KAAM,CACtBA,EAAYC,CAClB,CAEI,MAAMW,EAAWC,KAAKC,IAAID,KAAKE,KAAKd,EAAOD,GAAarJ,EAAU,GAAI,GACtE,MAAMqK,EAAe,GAAMH,KAAKI,IAAIL,EAAWC,KAAKK,IAAM,EAC1D,IAAIC,EAAkBrB,EAAgBkB,GAAgBpB,EAAiBE,GAEvE,GAAIU,EAAaW,EAAiBvB,GAAiB,CACjDuB,EAAkBvB,CACxB,CAEID,EAAOS,UAAUgB,SAAS,CACxBvB,CAACA,GAAOsB,IAGV,GAAIX,EAAaW,EAAiBvB,GAAiB,CACjDD,EAAOS,UAAUjQ,MAAMkR,SAAW,SAClC1B,EAAOS,UAAUjQ,MAAMkQ,eAAiB,GACxClO,YAAW,KACTwN,EAAOS,UAAUjQ,MAAMkR,SAAW,GAClC1B,EAAOS,UAAUgB,SAAS,CACxBvB,CAACA,GAAOsB,GACR,IAEJvO,EAAOJ,qBAAqBmN,EAAOW,gBACnC,MACN,CAEIX,EAAOW,eAAiB1N,EAAON,sBAAsBoO,EAAQ,EAG/DA,GACF,CCjMA,IAAIY,GAEJ,SAASC,KACP,MAAM3O,EAASF,IACf,MAAMvB,EAAWF,IACjB,MAAO,CACLuQ,aAAcrQ,EAASsQ,iBAAmB,mBAAoBtQ,EAASsQ,gBAAgBtR,MACvFuR,SAAU,iBAAkB9O,GAAUA,EAAO+O,eAAiBxQ,aAAoByB,EAAO+O,eACzFC,gBAAiB,SAASC,IACxB,IAAIC,EAAkB,MAEtB,IACE,MAAMC,EAAOnT,OAAOoE,eAAe,GAAI,UAAW,CAEhD,GAAAC,GACE6O,EAAkB,IAC9B,IAGQlP,EAAOtD,iBAAiB,sBAAuB,KAAMyS,EAC7D,CAAQ,MAAO3K,GACf,CAEM,OAAO0K,CACb,CAhBqB,GAiBjBE,SAAU,SAASC,IACjB,MAAO,mBAAoBrP,CACjC,CAFc,GAId,CAEA,SAASsP,KACP,IAAKZ,GAAS,CACZA,GAAUC,IACd,CAEE,OAAOD,EACT,CCpCA,IAAIa,GAEJ,SAASC,IAAW9Q,UAClBA,GACE,IACF,MAAMgQ,EAAUY,KAChB,MAAMtP,EAASF,IACf,MAAM2P,EAAWzP,EAAOvB,UAAUgR,SAClC,MAAMC,EAAKhR,GAAasB,EAAOvB,UAAUC,UACzC,MAAMiR,EAAS,CACbC,IAAK,MACLC,QAAS,OAEX,MAAMC,EAAc9P,EAAOV,OAAOyQ,MAClC,MAAMC,EAAehQ,EAAOV,OAAO2Q,OACnC,MAAMJ,EAAUH,EAAGQ,MAAM,+BAEzB,IAAIC,EAAOT,EAAGQ,MAAM,wBACpB,MAAME,EAAOV,EAAGQ,MAAM,2BACtB,MAAMG,GAAUF,GAAQT,EAAGQ,MAAM,8BACjC,MAAMI,EAAUb,IAAa,QAC7B,IAAIc,EAAQd,IAAa,WAEzB,MAAMe,EAAc,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAE3J,IAAKL,GAAQI,GAAS7B,EAAQI,OAAS0B,EAAY/O,QAAQ,GAAGqO,KAAeE,MAAmB,EAAG,CACjGG,EAAOT,EAAGQ,MAAM,uBAChB,IAAKC,EAAMA,EAAO,CAAC,EAAG,EAAG,UACzBI,EAAQ,KACZ,CAGE,GAAIV,IAAYS,EAAS,CACvBX,EAAOc,GAAK,UACZd,EAAOE,QAAU,IACrB,CAEE,GAAIM,GAAQE,GAAUD,EAAM,CAC1BT,EAAOc,GAAK,MACZd,EAAOC,IAAM,IACjB,CAGE,OAAOD,CACT,CAEA,SAASe,GAAUC,EAAY,IAC7B,IAAKpB,GAAc,CACjBA,GAAeC,GAAWmB,EAC9B,CAEE,OAAOpB,EACT,CCrDA,IAAIqB,GAEJ,SAASC,KACP,MAAM7Q,EAASF,IAEf,SAASgR,IACP,MAAMpB,EAAK1P,EAAOvB,UAAUC,UAAUqS,cACtC,OAAOrB,EAAGjO,QAAQ,WAAa,GAAKiO,EAAGjO,QAAQ,UAAY,GAAKiO,EAAGjO,QAAQ,WAAa,CAC5F,CAEE,MAAO,CACLqP,SAAUA,IACVE,UAAW,+CAA+CC,KAAKjR,EAAOvB,UAAUC,WAEpF,CAEA,SAASwS,KACP,IAAKN,GAAS,CACZA,GAAUC,IACd,CAEE,OAAOD,EACT,CCtBe,SAASO,IAAOpE,OAC7BA,EAAM9I,GACNA,EAAEmN,KACFA,IAEA,MAAMpR,EAASF,IACf,IAAIuR,EAAW,KAEf,MAAMC,EAAgB,KACpB,IAAKvE,GAAUA,EAAOwE,YAAcxE,EAAOyE,YAAa,OACxDJ,EAAK,gBACLA,EAAK,SAAS,EAGhB,MAAMK,EAAiB,KACrB,IAAK1E,GAAUA,EAAOwE,YAAcxE,EAAOyE,YAAa,OACxDH,EAAW,IAAIK,gBAAeC,IAC5B,MAAM5B,MACJA,EAAKE,OACLA,GACElD,EACJ,IAAI6E,EAAW7B,EACf,IAAI8B,EAAY5B,EAChB0B,EAAQtV,SAAQ,EACdyV,iBACAC,cACA7V,aAEA,GAAIA,GAAUA,IAAW6Q,EAAOhM,GAAI,OACpC6Q,EAAWG,EAAcA,EAAYhC,OAAS+B,EAAe,IAAMA,GAAgBE,WACnFH,EAAYE,EAAcA,EAAY9B,QAAU6B,EAAe,IAAMA,GAAgBG,SAAS,IAGhG,GAAIL,IAAa7B,GAAS8B,IAAc5B,EAAQ,CAC9CqB,GACR,KAEID,EAASa,QAAQnF,EAAOhM,GAAG,EAG7B,MAAMoR,EAAiB,KACrB,GAAId,GAAYA,EAASe,WAAarF,EAAOhM,GAAI,CAC/CsQ,EAASe,UAAUrF,EAAOhM,IAC1BsQ,EAAW,IACjB,GAGE,MAAMgB,EAA2B,KAC/B,IAAKtF,GAAUA,EAAOwE,YAAcxE,EAAOyE,YAAa,OACxDJ,EAAK,oBAAoB,EAG3BnN,EAAG,QAAQ,KACT,GAAI8I,EAAOO,OAAOgF,uBAAyBtS,EAAO0R,iBAAmB,YAAa,CAChFD,IACA,MACN,CAEIzR,EAAOtD,iBAAiB,SAAU4U,GAClCtR,EAAOtD,iBAAiB,oBAAqB2V,EAAyB,IAExEpO,EAAG,WAAW,KACZkO,IACAnS,EAAOrD,oBAAoB,SAAU2U,GACrCtR,EAAOrD,oBAAoB,oBAAqB0V,EAAyB,GAE7E,CClEe,SAASE,IAASxF,OAC/BA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,MAAMqB,EAAY,GAClB,MAAMzS,EAASF,IAEf,MAAM4S,EAAS,CAACxW,EAAQyW,EAAU,MAChC,MAAMC,EAAe5S,EAAO6S,kBAAoB7S,EAAO8S,uBACvD,MAAMzB,EAAW,IAAIuB,GAAaG,IAIhC,GAAIA,EAAUxW,SAAW,EAAG,CAC1B6U,EAAK,iBAAkB2B,EAAU,IACjC,MACR,CAEM,MAAMC,EAAiB,SAASA,IAC9B5B,EAAK,iBAAkB2B,EAAU,GACzC,EAEM,GAAI/S,EAAON,sBAAuB,CAChCM,EAAON,sBAAsBsT,EACrC,KAAa,CACLhT,EAAOT,WAAWyT,EAAgB,EAC1C,KAEI3B,EAASa,QAAQhW,EAAQ,CACvB+W,kBAAmBN,EAAQM,aAAe,YAAc,KAAON,EAAQM,WACvEC,iBAAkBP,EAAQO,YAAc,YAAc,KAAOP,EAAQO,UACrEC,qBAAsBR,EAAQQ,gBAAkB,YAAc,KAAOR,EAAQQ,gBAE/EV,EAAUxR,KAAKoQ,EAAS,EAG1B,MAAM+B,EAAO,KACX,IAAKrG,EAAOO,OAAO+D,SAAU,OAE7B,GAAItE,EAAOO,OAAO+F,eAAgB,CAChC,MAAMC,EAAmBvG,EAAOwG,IAAIzO,UAEpC,IAAK,IAAItD,EAAI,EAAGA,EAAI8R,EAAiB/W,OAAQiF,GAAK,EAAG,CACnDkR,EAAOY,EAAiB9R,GAChC,CACA,CAGIkR,EAAO3F,EAAOwG,IAAI,GAAI,CACpBL,UAAWnG,EAAOO,OAAOkG,uBAG3Bd,EAAO3F,EAAO0G,WAAW,GAAI,CAC3BR,WAAY,OACZ,EAGJ,MAAMS,EAAU,KACdjB,EAAUpW,SAAQgV,IAChBA,EAASsC,YAAY,IAEvBlB,EAAU/M,OAAO,EAAG+M,EAAUlW,OAAO,EAGvCiW,EAAa,CACXnB,SAAU,MACVgC,eAAgB,MAChBG,qBAAsB,QAExBvP,EAAG,OAAQmP,GACXnP,EAAG,UAAWyP,EAChB,CCzEA,MAAAE,GAAe,CACb,EAAA3P,CAAGgB,EAAQQ,EAASoO,GAClB,MAAMC,EAAO7U,KACb,UAAWwG,IAAY,WAAY,OAAOqO,EAC1C,MAAMC,EAASF,EAAW,UAAY,OACtC5O,EAAOtC,MAAM,KAAKtG,SAAQ8I,IACxB,IAAK2O,EAAKE,gBAAgB7O,GAAQ2O,EAAKE,gBAAgB7O,GAAS,GAChE2O,EAAKE,gBAAgB7O,GAAO4O,GAAQtO,EAAQ,IAE9C,OAAOqO,CACX,EAEE,IAAAG,CAAKhP,EAAQQ,EAASoO,GACpB,MAAMC,EAAO7U,KACb,UAAWwG,IAAY,WAAY,OAAOqO,EAE1C,SAASI,KAAehQ,GACtB4P,EAAKvO,IAAIN,EAAQiP,GAEjB,GAAIA,EAAYC,eAAgB,QACvBD,EAAYC,cAC3B,CAEM1O,EAAQZ,MAAMiP,EAAM5P,EAC1B,CAEIgQ,EAAYC,eAAiB1O,EAC7B,OAAOqO,EAAK7P,GAAGgB,EAAQiP,EAAaL,EACxC,EAEE,KAAAO,CAAM3O,EAASoO,GACb,MAAMC,EAAO7U,KACb,UAAWwG,IAAY,WAAY,OAAOqO,EAC1C,MAAMC,EAASF,EAAW,UAAY,OAEtC,GAAIC,EAAKO,mBAAmB5S,QAAQgE,GAAW,EAAG,CAChDqO,EAAKO,mBAAmBN,GAAQtO,EACtC,CAEI,OAAOqO,CACX,EAEE,MAAAQ,CAAO7O,GACL,MAAMqO,EAAO7U,KACb,IAAK6U,EAAKO,mBAAoB,OAAOP,EACrC,MAAMjM,EAAQiM,EAAKO,mBAAmB5S,QAAQgE,GAE9C,GAAIoC,GAAS,EAAG,CACdiM,EAAKO,mBAAmB3O,OAAOmC,EAAO,EAC5C,CAEI,OAAOiM,CACX,EAEE,GAAAvO,CAAIN,EAAQQ,GACV,MAAMqO,EAAO7U,KACb,IAAK6U,EAAKE,gBAAiB,OAAOF,EAClC7O,EAAOtC,MAAM,KAAKtG,SAAQ8I,IACxB,UAAWM,IAAY,YAAa,CAClCqO,EAAKE,gBAAgB7O,GAAS,EACtC,MAAa,GAAI2O,EAAKE,gBAAgB7O,GAAQ,CACtC2O,EAAKE,gBAAgB7O,GAAO9I,SAAQ,CAACkY,EAAc1M,KACjD,GAAI0M,IAAiB9O,GAAW8O,EAAaJ,gBAAkBI,EAAaJ,iBAAmB1O,EAAS,CACtGqO,EAAKE,gBAAgB7O,GAAOO,OAAOmC,EAAO,EACtD,IAEA,KAEI,OAAOiM,CACX,EAEE,IAAA1C,IAAQlN,GACN,MAAM4P,EAAO7U,KACb,IAAK6U,EAAKE,gBAAiB,OAAOF,EAClC,IAAI7O,EACJ,IAAIgB,EACJ,IAAIrE,EAEJ,UAAWsC,EAAK,KAAO,UAAYzD,MAAMO,QAAQkD,EAAK,IAAK,CACzDe,EAASf,EAAK,GACd+B,EAAO/B,EAAKyH,MAAM,EAAGzH,EAAK3H,QAC1BqF,EAAUkS,CAChB,KAAW,CACL7O,EAASf,EAAK,GAAGe,OACjBgB,EAAO/B,EAAK,GAAG+B,KACfrE,EAAUsC,EAAK,GAAGtC,SAAWkS,CACnC,CAEI7N,EAAKtB,QAAQ/C,GACb,MAAM4S,EAAc/T,MAAMO,QAAQiE,GAAUA,EAASA,EAAOtC,MAAM,KAClE6R,EAAYnY,SAAQ8I,IAClB,GAAI2O,EAAKO,oBAAsBP,EAAKO,mBAAmB9X,OAAQ,CAC7DuX,EAAKO,mBAAmBhY,SAAQkY,IAC9BA,EAAa1P,MAAMjD,EAAS,CAACuD,KAAUc,GAAM,GAEvD,CAEM,GAAI6N,EAAKE,iBAAmBF,EAAKE,gBAAgB7O,GAAQ,CACvD2O,EAAKE,gBAAgB7O,GAAO9I,SAAQkY,IAClCA,EAAa1P,MAAMjD,EAASqE,EAAK,GAE3C,KAEI,OAAO6N,CACX,GCzGe,SAASW,KACtB,MAAM1H,EAAS9N,KACf,IAAI8Q,EACJ,IAAIE,EACJ,MAAMsD,EAAMxG,EAAOwG,IAEnB,UAAWxG,EAAOO,OAAOyC,QAAU,aAAehD,EAAOO,OAAOyC,QAAU,KAAM,CAC9EA,EAAQhD,EAAOO,OAAOyC,KAC1B,KAAS,CACLA,EAAQwD,EAAI,GAAGmB,WACnB,CAEE,UAAW3H,EAAOO,OAAO2C,SAAW,aAAelD,EAAOO,OAAO2C,SAAW,KAAM,CAChFA,EAASlD,EAAOO,OAAO2C,MAC3B,KAAS,CACLA,EAASsD,EAAI,GAAGoB,YACpB,CAEE,GAAI5E,IAAU,GAAKhD,EAAO6H,gBAAkB3E,IAAW,GAAKlD,EAAO8H,aAAc,CAC/E,MACJ,CAGE9E,EAAQA,EAAQ+E,SAASvB,EAAI9L,IAAI,iBAAmB,EAAG,IAAMqN,SAASvB,EAAI9L,IAAI,kBAAoB,EAAG,IACrGwI,EAASA,EAAS6E,SAASvB,EAAI9L,IAAI,gBAAkB,EAAG,IAAMqN,SAASvB,EAAI9L,IAAI,mBAAqB,EAAG,IACvG,GAAIsN,OAAOC,MAAMjF,GAAQA,EAAQ,EACjC,GAAIgF,OAAOC,MAAM/E,GAASA,EAAS,EACnCjU,OAAOiZ,OAAOlI,EAAQ,CACpBgD,QACAE,SACAiF,KAAMnI,EAAO6H,eAAiB7E,EAAQE,GAE1C,CC/Be,SAASkF,KACtB,MAAMpI,EAAS9N,KAEf,SAASmW,EAAkBC,GACzB,GAAItI,EAAO6H,eAAgB,CACzB,OAAOS,CACb,CAGI,MAAO,CACLtF,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjBuF,YAAe,gBACfD,EACN,CAEE,SAASE,EAA0B1J,EAAM2J,GACvC,OAAO7O,WAAWkF,EAAK1M,iBAAiBiW,EAAkBI,KAAW,EACzE,CAEE,MAAMlI,EAASP,EAAOO,OACtB,MAAMmG,WACJA,EACAyB,KAAMO,EACNC,aAAcC,EAAGC,SACjBA,GACE7I,EACJ,MAAM8I,EAAY9I,EAAO+I,SAAWxI,EAAOwI,QAAQC,QACnD,MAAMC,EAAuBH,EAAY9I,EAAO+I,QAAQG,OAAO1Z,OAASwQ,EAAOkJ,OAAO1Z,OACtF,MAAM0Z,EAASxC,EAAWpW,SAAS,IAAI0P,EAAOO,OAAO4I,cACrD,MAAMC,EAAeN,EAAY9I,EAAO+I,QAAQG,OAAO1Z,OAAS0Z,EAAO1Z,OACvE,IAAI6Z,EAAW,GACf,MAAMC,EAAa,GACnB,MAAMC,EAAkB,GACxB,IAAIC,EAAejJ,EAAOkJ,mBAE1B,UAAWD,IAAiB,WAAY,CACtCA,EAAejJ,EAAOkJ,mBAAmBnV,KAAK0L,EAClD,CAEE,IAAI0J,EAAcnJ,EAAOoJ,kBAEzB,UAAWD,IAAgB,WAAY,CACrCA,EAAcnJ,EAAOoJ,kBAAkBrV,KAAK0L,EAChD,CAEE,MAAM4J,EAAyB5J,EAAOqJ,SAAS7Z,OAC/C,MAAMqa,EAA2B7J,EAAOsJ,WAAW9Z,OACnD,IAAIsa,EAAevJ,EAAOuJ,aAC1B,IAAIC,GAAiBP,EACrB,IAAIQ,EAAgB,EACpB,IAAIlP,EAAQ,EAEZ,UAAW4N,IAAe,YAAa,CACrC,MACJ,CAEE,UAAWoB,IAAiB,UAAYA,EAAapV,QAAQ,MAAQ,EAAG,CACtEoV,EAAelQ,WAAWkQ,EAAa5L,QAAQ,IAAK,KAAO,IAAMwK,CACrE,CAEE1I,EAAOiK,aAAeH,EAEtB,GAAIlB,EAAKM,EAAOxO,IAAI,CAClBwP,WAAY,GACZC,aAAc,GACdC,UAAW,UACLlB,EAAOxO,IAAI,CACjB6N,YAAa,GACb4B,aAAc,GACdC,UAAW,KAGb,GAAI7J,EAAO8J,gBAAkB9J,EAAO+J,QAAS,CAC3C3K,GAAeK,EAAOS,UAAW,kCAAmC,IACpEd,GAAeK,EAAOS,UAAW,iCAAkC,GACvE,CAEE,MAAM8J,EAAchK,EAAOiK,MAAQjK,EAAOiK,KAAKC,KAAO,GAAKzK,EAAOwK,KAElE,GAAID,EAAa,CACfvK,EAAOwK,KAAKE,WAAWtB,EAC3B,CAGE,IAAIuB,EACJ,MAAMC,EAAuBrK,EAAOsK,gBAAkB,QAAUtK,EAAOuK,aAAe7b,OAAOI,KAAKkR,EAAOuK,aAAazW,QAAO9E,UAC7GgR,EAAOuK,YAAYvb,GAAKsb,gBAAkB,cACvDrb,OAAS,EAEZ,IAAK,IAAIiF,EAAI,EAAGA,EAAI2U,EAAc3U,GAAK,EAAG,CACxCkW,EAAY,EACZ,MAAMI,EAAQ7B,EAAO1N,GAAG/G,GAExB,GAAI8V,EAAa,CACfvK,EAAOwK,KAAKQ,YAAYvW,EAAGsW,EAAO3B,EAAcf,EACtD,CAEI,GAAI0C,EAAMrQ,IAAI,aAAe,OAAQ,SAErC,GAAI6F,EAAOsK,gBAAkB,OAAQ,CACnC,GAAID,EAAsB,CACxB1B,EAAOzU,GAAGjE,MAAM6X,EAAkB,UAAY,EACtD,CAEM,MAAM4C,EAAc9Y,iBAAiB4Y,EAAM,IAC3C,MAAMG,EAAmBH,EAAM,GAAGva,MAAMsG,UACxC,MAAMqU,EAAyBJ,EAAM,GAAGva,MAAMyN,gBAE9C,GAAIiN,EAAkB,CACpBH,EAAM,GAAGva,MAAMsG,UAAY,MACnC,CAEM,GAAIqU,EAAwB,CAC1BJ,EAAM,GAAGva,MAAMyN,gBAAkB,MACzC,CAEM,GAAIsC,EAAO6K,aAAc,CACvBT,EAAY3K,EAAO6H,eAAiBkD,EAAMvR,WAAW,MAAQuR,EAAMlR,YAAY,KACvF,KAAa,CAEL,MAAMmJ,EAAQwF,EAA0ByC,EAAa,SACrD,MAAMI,EAAc7C,EAA0ByC,EAAa,gBAC3D,MAAMK,EAAe9C,EAA0ByC,EAAa,iBAC5D,MAAMf,EAAa1B,EAA0ByC,EAAa,eAC1D,MAAM1C,EAAcC,EAA0ByC,EAAa,gBAC3D,MAAMM,EAAYN,EAAY7Y,iBAAiB,cAE/C,GAAImZ,GAAaA,IAAc,aAAc,CAC3CZ,EAAY3H,EAAQkH,EAAa3B,CAC3C,KAAe,CACL,MAAMZ,YACJA,EAAWhO,YACXA,GACEoR,EAAM,GACVJ,EAAY3H,EAAQqI,EAAcC,EAAepB,EAAa3B,GAAe5O,EAAcgO,EACrG,CACA,CAEM,GAAIuD,EAAkB,CACpBH,EAAM,GAAGva,MAAMsG,UAAYoU,CACnC,CAEM,GAAIC,EAAwB,CAC1BJ,EAAM,GAAGva,MAAMyN,gBAAkBkN,CACzC,CAEM,GAAI5K,EAAO6K,aAAcT,EAAYzJ,KAAKsK,MAAMb,EACtD,KAAW,CACLA,GAAajC,GAAcnI,EAAOsK,cAAgB,GAAKf,GAAgBvJ,EAAOsK,cAC9E,GAAItK,EAAO6K,aAAcT,EAAYzJ,KAAKsK,MAAMb,GAEhD,GAAIzB,EAAOzU,GAAI,CACbyU,EAAOzU,GAAGjE,MAAM6X,EAAkB,UAAY,GAAGsC,KACzD,CACA,CAEI,GAAIzB,EAAOzU,GAAI,CACbyU,EAAOzU,GAAGgX,gBAAkBd,CAClC,CAEIpB,EAAgBrV,KAAKyW,GAErB,GAAIpK,EAAO8J,eAAgB,CACzBN,EAAgBA,EAAgBY,EAAY,EAAIX,EAAgB,EAAIF,EACpE,GAAIE,IAAkB,GAAKvV,IAAM,EAAGsV,EAAgBA,EAAgBrB,EAAa,EAAIoB,EACrF,GAAIrV,IAAM,EAAGsV,EAAgBA,EAAgBrB,EAAa,EAAIoB,EAC9D,GAAI5I,KAAKwK,IAAI3B,GAAiB,EAAI,IAAMA,EAAgB,EACxD,GAAIxJ,EAAO6K,aAAcrB,EAAgB7I,KAAKsK,MAAMzB,GACpD,GAAIjP,EAAQyF,EAAOoL,iBAAmB,EAAGtC,EAASnV,KAAK6V,GACvDT,EAAWpV,KAAK6V,EACtB,KAAW,CACL,GAAIxJ,EAAO6K,aAAcrB,EAAgB7I,KAAKsK,MAAMzB,GACpD,IAAKjP,EAAQoG,KAAKE,IAAIpB,EAAOO,OAAOqL,mBAAoB9Q,IAAUkF,EAAOO,OAAOoL,iBAAmB,EAAGtC,EAASnV,KAAK6V,GACpHT,EAAWpV,KAAK6V,GAChBA,EAAgBA,EAAgBY,EAAYb,CAClD,CAEI9J,EAAOiK,aAAeU,EAAYb,EAClCE,EAAgBW,EAChB7P,GAAS,CACb,CAEEkF,EAAOiK,YAAc/I,KAAKC,IAAInB,EAAOiK,YAAavB,GAAcgB,EAEhE,GAAId,GAAOC,IAAatI,EAAOsL,SAAW,SAAWtL,EAAOsL,SAAW,aAAc,CACnFnF,EAAWhM,IAAI,CACbsI,MAAO,GAAGhD,EAAOiK,YAAc1J,EAAOuJ,kBAE5C,CAEE,GAAIvJ,EAAOuL,eAAgB,CACzBpF,EAAWhM,IAAI,CACb,CAAC2N,EAAkB,UAAW,GAAGrI,EAAOiK,YAAc1J,EAAOuJ,kBAEnE,CAEE,GAAIS,EAAa,CACfvK,EAAOwK,KAAKuB,kBAAkBpB,EAAWtB,EAAUhB,EACvD,CAGE,IAAK9H,EAAO8J,eAAgB,CAC1B,MAAM2B,EAAgB,GAEtB,IAAK,IAAIvX,EAAI,EAAGA,EAAI4U,EAAS7Z,OAAQiF,GAAK,EAAG,CAC3C,IAAIwX,EAAiB5C,EAAS5U,GAC9B,GAAI8L,EAAO6K,aAAca,EAAiB/K,KAAKsK,MAAMS,GAErD,GAAI5C,EAAS5U,IAAMuL,EAAOiK,YAAcvB,EAAY,CAClDsD,EAAc9X,KAAK+X,EAC3B,CACA,CAEI5C,EAAW2C,EAEX,GAAI9K,KAAKsK,MAAMxL,EAAOiK,YAAcvB,GAAcxH,KAAKsK,MAAMnC,EAASA,EAAS7Z,OAAS,IAAM,EAAG,CAC/F6Z,EAASnV,KAAK8L,EAAOiK,YAAcvB,EACzC,CACA,CAEE,GAAIW,EAAS7Z,SAAW,EAAG6Z,EAAW,CAAC,GAEvC,GAAI9I,EAAOuJ,eAAiB,EAAG,CAC7B,MAAMva,EAAMyQ,EAAO6H,gBAAkBe,EAAM,aAAeP,EAAkB,eAC5Ea,EAAO7U,QAAO,CAAC6X,EAAGC,KAChB,IAAK5L,EAAO+J,QAAS,OAAO,KAE5B,GAAI6B,IAAejD,EAAO1Z,OAAS,EAAG,CACpC,OAAO,KACf,CAEM,OAAO,IAAI,IACVkL,IAAI,CACLnL,CAACA,GAAM,GAAGua,OAEhB,CAEE,GAAIvJ,EAAO8J,gBAAkB9J,EAAO6L,qBAAsB,CACxD,IAAIC,EAAgB,EACpB9C,EAAgBja,SAAQgd,IACtBD,GAAiBC,GAAkB/L,EAAOuJ,aAAevJ,EAAOuJ,aAAe,EAAE,IAEnFuC,GAAiB9L,EAAOuJ,aACxB,MAAMyC,EAAUF,EAAgB3D,EAChCW,EAAWA,EAAS3T,KAAI8W,IACtB,GAAIA,EAAO,EAAG,OAAQhD,EACtB,GAAIgD,EAAOD,EAAS,OAAOA,EAAU7C,EACrC,OAAO8C,CAAI,GAEjB,CAEE,GAAIjM,EAAOkM,yBAA0B,CACnC,IAAIJ,EAAgB,EACpB9C,EAAgBja,SAAQgd,IACtBD,GAAiBC,GAAkB/L,EAAOuJ,aAAevJ,EAAOuJ,aAAe,EAAE,IAEnFuC,GAAiB9L,EAAOuJ,aAExB,GAAIuC,EAAgB3D,EAAY,CAC9B,MAAMgE,GAAmBhE,EAAa2D,GAAiB,EACvDhD,EAAS/Z,SAAQ,CAACkd,EAAMG,KACtBtD,EAASsD,GAAaH,EAAOE,CAAe,IAE9CpD,EAAWha,SAAQ,CAACkd,EAAMG,KACxBrD,EAAWqD,GAAaH,EAAOE,CAAe,GAEtD,CACA,CAEEzd,OAAOiZ,OAAOlI,EAAQ,CACpBkJ,SACAG,WACAC,aACAC,oBAGF,GAAIhJ,EAAO8J,gBAAkB9J,EAAO+J,UAAY/J,EAAO6L,qBAAsB,CAC3EzM,GAAeK,EAAOS,UAAW,kCAAmC,IAAI4I,EAAS,QACjF1J,GAAeK,EAAOS,UAAW,iCAAkC,GAAGT,EAAOmI,KAAO,EAAIoB,EAAgBA,EAAgB/Z,OAAS,GAAK,OACtI,MAAMod,GAAiB5M,EAAOqJ,SAAS,GACvC,MAAMwD,GAAmB7M,EAAOsJ,WAAW,GAC3CtJ,EAAOqJ,SAAWrJ,EAAOqJ,SAAS3T,KAAIoX,GAAKA,EAAIF,IAC/C5M,EAAOsJ,WAAatJ,EAAOsJ,WAAW5T,KAAIoX,GAAKA,EAAID,GACvD,CAEE,GAAIzD,IAAiBH,EAAsB,CACzCjJ,EAAOqE,KAAK,qBAChB,CAEE,GAAIgF,EAAS7Z,SAAWoa,EAAwB,CAC9C,GAAI5J,EAAOO,OAAOwM,cAAe/M,EAAOgN,gBACxChN,EAAOqE,KAAK,uBAChB,CAEE,GAAIiF,EAAW9Z,SAAWqa,EAA0B,CAClD7J,EAAOqE,KAAK,yBAChB,CAEE,GAAI9D,EAAO0M,oBAAqB,CAC9BjN,EAAOkN,oBACX,CACA,CCpTe,SAASC,GAAiB3M,GACvC,MAAMR,EAAS9N,KACf,MAAMkb,EAAe,GACrB,MAAMtE,EAAY9I,EAAO+I,SAAW/I,EAAOO,OAAOwI,QAAQC,QAC1D,IAAIlE,EAAY,EAChB,IAAIrQ,EAEJ,UAAW+L,IAAU,SAAU,CAC7BR,EAAOqN,cAAc7M,EACzB,MAAS,GAAIA,IAAU,KAAM,CACzBR,EAAOqN,cAAcrN,EAAOO,OAAOC,MACvC,CAEE,MAAM8M,EAAkBxS,IACtB,GAAIgO,EAAW,CACb,OAAO9I,EAAOkJ,OAAO7U,QAAOL,GAAM+T,SAAS/T,EAAGyC,aAAa,2BAA4B,MAAQqE,IAAO,EAC5G,CAEI,OAAOkF,EAAOkJ,OAAO1N,GAAGV,GAAO,EAAE,EAInC,GAAIkF,EAAOO,OAAOsK,gBAAkB,QAAU7K,EAAOO,OAAOsK,cAAgB,EAAG,CAC7E,GAAI7K,EAAOO,OAAO8J,eAAgB,CAChCrK,EAAOuN,cAAc1S,MAAKkQ,IACxBqC,EAAalZ,KAAK6W,EAAM,GAEhC,KAAW,CACL,IAAKtW,EAAI,EAAGA,EAAIyM,KAAKsM,KAAKxN,EAAOO,OAAOsK,eAAgBpW,GAAK,EAAG,CAC9D,MAAMqG,EAAQkF,EAAOyN,YAAchZ,EACnC,GAAIqG,EAAQkF,EAAOkJ,OAAO1Z,SAAWsZ,EAAW,MAChDsE,EAAalZ,KAAKoZ,EAAgBxS,GAC1C,CACA,CACA,KAAS,CACLsS,EAAalZ,KAAKoZ,EAAgBtN,EAAOyN,aAC7C,CAGE,IAAKhZ,EAAI,EAAGA,EAAI2Y,EAAa5d,OAAQiF,GAAK,EAAG,CAC3C,UAAW2Y,EAAa3Y,KAAO,YAAa,CAC1C,MAAMyO,EAASkK,EAAa3Y,GAAGqF,aAC/BgL,EAAY5B,EAAS4B,EAAY5B,EAAS4B,CAChD,CACA,CAGE,GAAIA,GAAaA,IAAc,EAAG9E,EAAO0G,WAAWhM,IAAI,SAAU,GAAGoK,MACvE,CChDe,SAASoI,KACtB,MAAMlN,EAAS9N,KACf,MAAMgX,EAASlJ,EAAOkJ,OAEtB,IAAK,IAAIzU,EAAI,EAAGA,EAAIyU,EAAO1Z,OAAQiF,GAAK,EAAG,CACzCyU,EAAOzU,GAAGiZ,kBAAoB1N,EAAO6H,eAAiBqB,EAAOzU,GAAGkZ,WAAazE,EAAOzU,GAAGmZ,SAC3F,CACA,CCNe,SAASC,GAAqBzN,EAAYlO,MAAQA,KAAKkO,WAAa,GACjF,MAAMJ,EAAS9N,KACf,MAAMqO,EAASP,EAAOO,OACtB,MAAM2I,OACJA,EACAP,aAAcC,EAAGS,SACjBA,GACErJ,EACJ,GAAIkJ,EAAO1Z,SAAW,EAAG,OACzB,UAAW0Z,EAAO,GAAGwE,oBAAsB,YAAa1N,EAAOkN,qBAC/D,IAAIY,GAAgB1N,EACpB,GAAIwI,EAAKkF,EAAe1N,EAExB8I,EAAOnT,YAAYwK,EAAOwN,mBAC1B/N,EAAOgO,qBAAuB,GAC9BhO,EAAOuN,cAAgB,GAEvB,IAAK,IAAI9Y,EAAI,EAAGA,EAAIyU,EAAO1Z,OAAQiF,GAAK,EAAG,CACzC,MAAMsW,EAAQ7B,EAAOzU,GACrB,IAAIwZ,EAAclD,EAAM2C,kBAExB,GAAInN,EAAO+J,SAAW/J,EAAO8J,eAAgB,CAC3C4D,GAAe/E,EAAO,GAAGwE,iBAC/B,CAEI,MAAMQ,GAAiBJ,GAAgBvN,EAAO8J,eAAiBrK,EAAOmO,eAAiB,GAAKF,IAAgBlD,EAAMU,gBAAkBlL,EAAOuJ,cAC3I,MAAMsE,GAAyBN,EAAezE,EAAS,IAAM9I,EAAO8J,eAAiBrK,EAAOmO,eAAiB,GAAKF,IAAgBlD,EAAMU,gBAAkBlL,EAAOuJ,cACjK,MAAMuE,IAAgBP,EAAeG,GACrC,MAAMK,EAAaD,EAAcrO,EAAOuJ,gBAAgB9U,GACxD,MAAM8Z,EAAYF,GAAe,GAAKA,EAAcrO,EAAOmI,KAAO,GAAKmG,EAAa,GAAKA,GAActO,EAAOmI,MAAQkG,GAAe,GAAKC,GAActO,EAAOmI,KAE/J,GAAIoG,EAAW,CACbvO,EAAOuN,cAAcrZ,KAAK6W,GAC1B/K,EAAOgO,qBAAqB9Z,KAAKO,GACjCyU,EAAO1N,GAAG/G,GAAGc,SAASgL,EAAOwN,kBACnC,CAEIhD,EAAM9J,SAAW2H,GAAOsF,EAAgBA,EACxCnD,EAAMyD,iBAAmB5F,GAAOwF,EAAwBA,CAC5D,CAEEpO,EAAOuN,cAAgBxY,EAAEiL,EAAOuN,cAClC,CC3Ce,SAASkB,GAAerO,GACrC,MAAMJ,EAAS9N,KAEf,UAAWkO,IAAc,YAAa,CACpC,MAAMsO,EAAa1O,EAAO2I,cAAgB,EAAI,EAE9CvI,EAAYJ,GAAUA,EAAOI,WAAaJ,EAAOI,UAAYsO,GAAc,CAC/E,CAEE,MAAMnO,EAASP,EAAOO,OACtB,MAAMoO,EAAiB3O,EAAO4O,eAAiB5O,EAAOmO,eACtD,IAAIlN,SACFA,EAAQ4N,YACRA,EAAWC,MACXA,GACE9O,EACJ,MAAM+O,EAAeF,EACrB,MAAMG,EAASF,EAEf,GAAIH,IAAmB,EAAG,CACxB1N,EAAW,EACX4N,EAAc,KACdC,EAAQ,IACZ,KAAS,CACL7N,GAAYb,EAAYJ,EAAOmO,gBAAkBQ,EACjDE,EAAc5N,GAAY,EAC1B6N,EAAQ7N,GAAY,CACxB,CAEEhS,OAAOiZ,OAAOlI,EAAQ,CACpBiB,WACA4N,cACAC,UAEF,GAAIvO,EAAO0M,qBAAuB1M,EAAO8J,gBAAkB9J,EAAO0O,WAAYjP,EAAO6N,qBAAqBzN,GAE1G,GAAIyO,IAAgBE,EAAc,CAChC/O,EAAOqE,KAAK,wBAChB,CAEE,GAAIyK,IAAUE,EAAQ,CACpBhP,EAAOqE,KAAK,kBAChB,CAEE,GAAI0K,IAAiBF,GAAeG,IAAWF,EAAO,CACpD9O,EAAOqE,KAAK,WAChB,CAEErE,EAAOqE,KAAK,WAAYpD,EAC1B,CCjDe,SAASiO,KACtB,MAAMlP,EAAS9N,KACf,MAAMgX,OACJA,EAAM3I,OACNA,EAAMmG,WACNA,EAAU+G,YACVA,EAAW0B,UACXA,GACEnP,EACJ,MAAM8I,EAAY9I,EAAO+I,SAAWxI,EAAOwI,QAAQC,QACnDE,EAAOnT,YAAY,GAAGwK,EAAO6O,oBAAoB7O,EAAO8O,kBAAkB9O,EAAO+O,kBAAkB/O,EAAOgP,6BAA6BhP,EAAOiP,2BAA2BjP,EAAOkP,2BAChL,IAAIC,EAEJ,GAAI5G,EAAW,CACb4G,EAAc1P,EAAO0G,WAAW7J,KAAK,IAAI0D,EAAO4I,uCAAuCsE,MAC3F,KAAS,CACLiC,EAAcxG,EAAO1N,GAAGiS,EAC5B,CAGEiC,EAAYna,SAASgL,EAAO6O,kBAE5B,GAAI7O,EAAOoP,KAAM,CAEf,GAAID,EAAYtZ,SAASmK,EAAOqP,qBAAsB,CACpDlJ,EAAWpW,SAAS,IAAIiQ,EAAO4I,mBAAmB5I,EAAOqP,iDAAiDT,OAAe5Z,SAASgL,EAAOgP,0BAC/I,KAAW,CACL7I,EAAWpW,SAAS,IAAIiQ,EAAO4I,cAAc5I,EAAOqP,gDAAgDT,OAAe5Z,SAASgL,EAAOgP,0BACzI,CACA,CAGE,IAAIM,EAAYH,EAAYtT,QAAQ,IAAImE,EAAO4I,cAAc3N,GAAG,GAAGjG,SAASgL,EAAO8O,gBAEnF,GAAI9O,EAAOoP,MAAQE,EAAUrgB,SAAW,EAAG,CACzCqgB,EAAY3G,EAAO1N,GAAG,GACtBqU,EAAUta,SAASgL,EAAO8O,eAC9B,CAGE,IAAIS,EAAYJ,EAAYlT,QAAQ,IAAI+D,EAAO4I,cAAc3N,GAAG,GAAGjG,SAASgL,EAAO+O,gBAEnF,GAAI/O,EAAOoP,MAAQG,EAAUtgB,SAAW,EAAG,CACzCsgB,EAAY5G,EAAO1N,IAAI,GACvBsU,EAAUva,SAASgL,EAAO+O,eAC9B,CAEE,GAAI/O,EAAOoP,KAAM,CAEf,GAAIE,EAAUzZ,SAASmK,EAAOqP,qBAAsB,CAClDlJ,EAAWpW,SAAS,IAAIiQ,EAAO4I,mBAAmB5I,EAAOqP,iDAAiDC,EAAUvZ,KAAK,gCAAgCf,SAASgL,EAAOiP,wBAC/K,KAAW,CACL9I,EAAWpW,SAAS,IAAIiQ,EAAO4I,cAAc5I,EAAOqP,gDAAgDC,EAAUvZ,KAAK,gCAAgCf,SAASgL,EAAOiP,wBACzK,CAEI,GAAIM,EAAU1Z,SAASmK,EAAOqP,qBAAsB,CAClDlJ,EAAWpW,SAAS,IAAIiQ,EAAO4I,mBAAmB5I,EAAOqP,iDAAiDE,EAAUxZ,KAAK,gCAAgCf,SAASgL,EAAOkP,wBAC/K,KAAW,CACL/I,EAAWpW,SAAS,IAAIiQ,EAAO4I,cAAc5I,EAAOqP,gDAAgDE,EAAUxZ,KAAK,gCAAgCf,SAASgL,EAAOkP,wBACzK,CACA,CAEEzP,EAAO+P,mBACT,CC/De,SAASC,GAAkBC,GACxC,MAAMjQ,EAAS9N,KACf,MAAMkO,EAAYJ,EAAO2I,aAAe3I,EAAOI,WAAaJ,EAAOI,UACnE,MAAMkJ,WACJA,EAAUD,SACVA,EAAQ9I,OACRA,EACAkN,YAAayC,EACbf,UAAWgB,EACXxD,UAAWyD,GACTpQ,EACJ,IAAIyN,EAAcwC,EAClB,IAAItD,EAEJ,UAAWc,IAAgB,YAAa,CACtC,IAAK,IAAIhZ,EAAI,EAAGA,EAAI6U,EAAW9Z,OAAQiF,GAAK,EAAG,CAC7C,UAAW6U,EAAW7U,EAAI,KAAO,YAAa,CAC5C,GAAI2L,GAAakJ,EAAW7U,IAAM2L,EAAYkJ,EAAW7U,EAAI,IAAM6U,EAAW7U,EAAI,GAAK6U,EAAW7U,IAAM,EAAG,CACzGgZ,EAAchZ,CACxB,MAAe,GAAI2L,GAAakJ,EAAW7U,IAAM2L,EAAYkJ,EAAW7U,EAAI,GAAI,CACtEgZ,EAAchZ,EAAI,CAC5B,CACA,MAAa,GAAI2L,GAAakJ,EAAW7U,GAAI,CACrCgZ,EAAchZ,CACtB,CACA,CAGI,GAAI8L,EAAO8P,oBAAqB,CAC9B,GAAI5C,EAAc,UAAYA,IAAgB,YAAaA,EAAc,CAC/E,CACA,CAEE,GAAIpE,EAAS3U,QAAQ0L,IAAc,EAAG,CACpCuM,EAAYtD,EAAS3U,QAAQ0L,EACjC,KAAS,CACL,MAAMkQ,EAAOpP,KAAKE,IAAIb,EAAOqL,mBAAoB6B,GACjDd,EAAY2D,EAAOpP,KAAKsK,OAAOiC,EAAc6C,GAAQ/P,EAAOoL,eAChE,CAEE,GAAIgB,GAAatD,EAAS7Z,OAAQmd,EAAYtD,EAAS7Z,OAAS,EAEhE,GAAIie,IAAgByC,EAAe,CACjC,GAAIvD,IAAcyD,EAAmB,CACnCpQ,EAAO2M,UAAYA,EACnB3M,EAAOqE,KAAK,kBAClB,CAEI,MACJ,CAGE,MAAM8K,EAAYpH,SAAS/H,EAAOkJ,OAAO1N,GAAGiS,GAAanX,KAAK,4BAA8BmX,EAAa,IACzGxe,OAAOiZ,OAAOlI,EAAQ,CACpB2M,YACAwC,YACAe,gBACAzC,gBAEFzN,EAAOqE,KAAK,qBACZrE,EAAOqE,KAAK,mBAEZ,GAAI8L,IAAsBhB,EAAW,CACnCnP,EAAOqE,KAAK,kBAChB,CAEE,GAAIrE,EAAOyE,aAAezE,EAAOO,OAAOgQ,mBAAoB,CAC1DvQ,EAAOqE,KAAK,cAChB,CACA,CCpEe,SAASmM,GAAmB/Y,GACzC,MAAMuI,EAAS9N,KACf,MAAMqO,EAASP,EAAOO,OACtB,MAAMwK,EAAQhW,EAAE0C,GAAGmF,QAAQ,IAAI2D,EAAO4I,cAAc,GACpD,IAAIsH,EAAa,MACjB,IAAItE,EAEJ,GAAIpB,EAAO,CACT,IAAK,IAAItW,EAAI,EAAGA,EAAIuL,EAAOkJ,OAAO1Z,OAAQiF,GAAK,EAAG,CAChD,GAAIuL,EAAOkJ,OAAOzU,KAAOsW,EAAO,CAC9B0F,EAAa,KACbtE,EAAa1X,EACb,KACR,CACA,CACA,CAEE,GAAIsW,GAAS0F,EAAY,CACvBzQ,EAAO0Q,aAAe3F,EAEtB,GAAI/K,EAAO+I,SAAW/I,EAAOO,OAAOwI,QAAQC,QAAS,CACnDhJ,EAAO2Q,aAAe5I,SAAShT,EAAEgW,GAAOzU,KAAK,2BAA4B,GAC/E,KAAW,CACL0J,EAAO2Q,aAAexE,CAC5B,CACA,KAAS,CACLnM,EAAO0Q,aAAeha,UACtBsJ,EAAO2Q,aAAeja,UACtB,MACJ,CAEE,GAAI6J,EAAOqQ,qBAAuB5Q,EAAO2Q,eAAiBja,WAAasJ,EAAO2Q,eAAiB3Q,EAAOyN,YAAa,CACjHzN,EAAO4Q,qBACX,CACA,CC1BA,MAAAC,GAAe,CACbnJ,cACAU,gBACA+E,oBACAD,sBACAW,wBACAY,kBACAS,uBACAc,qBACAQ,uBCjBa,SAASM,GAAmBnT,GAAOzL,KAAK2V,eAAiB,IAAM,MAC5E,MAAM7H,EAAS9N,KACf,MAAMqO,OACJA,EACAoI,aAAcC,EAAGxI,UACjBA,EAASsG,WACTA,GACE1G,EAEJ,GAAIO,EAAOwQ,iBAAkB,CAC3B,OAAOnI,GAAOxI,EAAYA,CAC9B,CAEE,GAAIG,EAAO+J,QAAS,CAClB,OAAOlK,CACX,CAEE,IAAI4Q,EAAmBtT,GAAagJ,EAAW,GAAI/I,GACnD,GAAIiL,EAAKoI,GAAoBA,EAC7B,OAAOA,GAAoB,CAC7B,CCrBe,SAASC,GAAa7Q,EAAW8Q,GAC9C,MAAMlR,EAAS9N,KACf,MACEyW,aAAcC,EAAGrI,OACjBA,EAAMmG,WACNA,EAAUjG,UACVA,EAASQ,SACTA,GACEjB,EACJ,IAAImR,EAAI,EACR,IAAIC,EAAI,EACR,MAAMC,EAAI,EAEV,GAAIrR,EAAO6H,eAAgB,CACzBsJ,EAAIvI,GAAOxI,EAAYA,CAC3B,KAAS,CACLgR,EAAIhR,CACR,CAEE,GAAIG,EAAO6K,aAAc,CACvB+F,EAAIjQ,KAAKsK,MAAM2F,GACfC,EAAIlQ,KAAKsK,MAAM4F,EACnB,CAEE,GAAI7Q,EAAO+J,QAAS,CAClB7J,EAAUT,EAAO6H,eAAiB,aAAe,aAAe7H,EAAO6H,gBAAkBsJ,GAAKC,CAClG,MAAS,IAAK7Q,EAAOwQ,iBAAkB,CACnCrK,EAAW5P,UAAU,eAAeqa,QAAQC,QAAQC,OACxD,CAEErR,EAAOsR,kBAAoBtR,EAAOI,UAClCJ,EAAOI,UAAYJ,EAAO6H,eAAiBsJ,EAAIC,EAE/C,IAAIG,EACJ,MAAM5C,EAAiB3O,EAAO4O,eAAiB5O,EAAOmO,eAEtD,GAAIQ,IAAmB,EAAG,CACxB4C,EAAc,CAClB,KAAS,CACLA,GAAenR,EAAYJ,EAAOmO,gBAAkBQ,CACxD,CAEE,GAAI4C,IAAgBtQ,EAAU,CAC5BjB,EAAOyO,eAAerO,EAC1B,CAEEJ,EAAOqE,KAAK,eAAgBrE,EAAOI,UAAW8Q,EAChD,CC/Ce,SAAS/C,KACtB,OAAQjc,KAAKmX,SAAS,EACxB,CCFe,SAASuF,KACtB,OAAQ1c,KAAKmX,SAASnX,KAAKmX,SAAS7Z,OAAS,EAC/C,CCDe,SAASgiB,GAAYpR,EAAY,EAAGI,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAMC,EAAkB,KAAMC,GACzH,MAAM3R,EAAS9N,KACf,MAAMqO,OACJA,EAAME,UACNA,GACET,EAEJ,GAAIA,EAAO4R,WAAarR,EAAOsR,+BAAgC,CAC7D,OAAO,KACX,CAEE,MAAM1D,EAAenO,EAAOmO,eAC5B,MAAMS,EAAe5O,EAAO4O,eAC5B,IAAIkD,EACJ,GAAIJ,GAAmBtR,EAAY+N,EAAc2D,EAAe3D,OAAkB,GAAIuD,GAAmBtR,EAAYwO,EAAckD,EAAelD,OAAkBkD,EAAe1R,EAEnLJ,EAAOyO,eAAeqD,GAEtB,GAAIvR,EAAO+J,QAAS,CAClB,MAAMyH,EAAM/R,EAAO6H,eAEnB,GAAIrH,IAAU,EAAG,CACfC,EAAUsR,EAAM,aAAe,cAAgBD,CACrD,KAAW,CACL,IAAK9R,EAAO2B,QAAQE,aAAc,CAChC9B,GAAqB,CACnBC,SACAC,gBAAiB6R,EACjB5R,KAAM6R,EAAM,OAAS,QAEvB,OAAO,IACf,CAEMtR,EAAUgB,SAAS,CACjB,CAACsQ,EAAM,OAAS,QAASD,EACzBE,SAAU,UAElB,CAEI,OAAO,IACX,CAEE,GAAIxR,IAAU,EAAG,CACfR,EAAOqN,cAAc,GACrBrN,EAAOiR,aAAaa,GAEpB,GAAIL,EAAc,CAChBzR,EAAOqE,KAAK,wBAAyB7D,EAAOmR,GAC5C3R,EAAOqE,KAAK,gBAClB,CACA,KAAS,CACLrE,EAAOqN,cAAc7M,GACrBR,EAAOiR,aAAaa,GAEpB,GAAIL,EAAc,CAChBzR,EAAOqE,KAAK,wBAAyB7D,EAAOmR,GAC5C3R,EAAOqE,KAAK,kBAClB,CAEI,IAAKrE,EAAO4R,UAAW,CACrB5R,EAAO4R,UAAY,KAEnB,IAAK5R,EAAOiS,kCAAmC,CAC7CjS,EAAOiS,kCAAoC,SAAS5Y,EAAc5B,GAChE,IAAKuI,GAAUA,EAAOwE,UAAW,OACjC,GAAI/M,EAAEtI,SAAW+C,KAAM,OACvB8N,EAAO0G,WAAW,GAAG9W,oBAAoB,gBAAiBoQ,EAAOiS,mCACjEjS,EAAO0G,WAAW,GAAG9W,oBAAoB,sBAAuBoQ,EAAOiS,mCACvEjS,EAAOiS,kCAAoC,YACpCjS,EAAOiS,kCAEd,GAAIR,EAAc,CAChBzR,EAAOqE,KAAK,gBACxB,CACA,CACA,CAEMrE,EAAO0G,WAAW,GAAG/W,iBAAiB,gBAAiBqQ,EAAOiS,mCAC9DjS,EAAO0G,WAAW,GAAG/W,iBAAiB,sBAAuBqQ,EAAOiS,kCAC1E,CACA,CAEE,OAAO,IACT,CC/EA,MAAA7R,GAAe,CACf1C,aAAEA,GACAuT,gBACA9C,gBACAS,gBACA4C,gBCVa,SAASnE,GAAcrW,EAAUka,GAC9C,MAAMlR,EAAS9N,KAEf,IAAK8N,EAAOO,OAAO+J,QAAS,CAC1BtK,EAAO0G,WAAW3P,WAAWC,EACjC,CAEEgJ,EAAOqE,KAAK,gBAAiBrN,EAAUka,EACzC,CCRe,SAASgB,IAAelS,OACrCA,EAAMyR,aACNA,EAAYU,UACZA,EAASC,KACTA,IAEA,MAAM3E,YACJA,EAAWyC,cACXA,GACElQ,EACJ,IAAIY,EAAMuR,EAEV,IAAKvR,EAAK,CACR,GAAI6M,EAAcyC,EAAetP,EAAM,YAAY,GAAI6M,EAAcyC,EAAetP,EAAM,YAAYA,EAAM,OAChH,CAEEZ,EAAOqE,KAAK,aAAa+N,KAEzB,GAAIX,GAAgBhE,IAAgByC,EAAe,CACjD,GAAItP,IAAQ,QAAS,CACnBZ,EAAOqE,KAAK,uBAAuB+N,KACnC,MACN,CAEIpS,EAAOqE,KAAK,wBAAwB+N,KAEpC,GAAIxR,IAAQ,OAAQ,CAClBZ,EAAOqE,KAAK,sBAAsB+N,IACxC,KAAW,CACLpS,EAAOqE,KAAK,sBAAsB+N,IACxC,CACA,CACA,CC/Be,SAASC,GAAgBZ,EAAe,KAAMU,GAC3D,MAAMnS,EAAS9N,KACf,MAAMqO,OACJA,GACEP,EACJ,GAAIO,EAAO+J,QAAS,OAEpB,GAAI/J,EAAO0O,WAAY,CACrBjP,EAAOmN,kBACX,CAEE+E,GAAe,CACblS,SACAyR,eACAU,YACAC,KAAM,SAEV,CCjBe,SAAS/Y,GAAcoY,EAAe,KAAMU,GACzD,MAAMnS,EAAS9N,KACf,MAAMqO,OACJA,GACEP,EACJA,EAAO4R,UAAY,MACnB,GAAIrR,EAAO+J,QAAS,OACpBtK,EAAOqN,cAAc,GACrB6E,GAAe,CACblS,SACAyR,eACAU,YACAC,KAAM,OAEV,CCZA,MAAArb,GAAe,CACbsW,iBACAgF,mBACAhZ,kBCLa,SAASiZ,GAAQxX,EAAQ,EAAG0F,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,EAAUY,GACnG,UAAWzX,IAAU,iBAAmBA,IAAU,SAAU,CAC1D,MAAM,IAAI0X,MAAM,kFAAkF1X,YACtG,CAEE,UAAWA,IAAU,SAAU,CAK7B,MAAM2X,EAAgB1K,SAASjN,EAAO,IAOtC,MAAM4X,EAAgBC,SAASF,GAE/B,IAAKC,EAAe,CAClB,MAAM,IAAIF,MAAM,sEAAsE1X,YAC5F,CAIIA,EAAQ2X,CACZ,CAEE,MAAMzS,EAAS9N,KACf,IAAIia,EAAarR,EACjB,GAAIqR,EAAa,EAAGA,EAAa,EACjC,MAAM5L,OACJA,EAAM8I,SACNA,EAAQC,WACRA,EAAU4G,cACVA,EAAazC,YACbA,EACA9E,aAAcC,EAAGnI,UACjBA,EAASuI,QACTA,GACEhJ,EAEJ,GAAIA,EAAO4R,WAAarR,EAAOsR,iCAAmC7I,IAAY2I,IAAaY,EAAS,CAClG,OAAO,KACX,CAEE,MAAMjC,EAAOpP,KAAKE,IAAIpB,EAAOO,OAAOqL,mBAAoBO,GACxD,IAAIQ,EAAY2D,EAAOpP,KAAKsK,OAAOW,EAAamE,GAAQtQ,EAAOO,OAAOoL,gBACtE,GAAIgB,GAAatD,EAAS7Z,OAAQmd,EAAYtD,EAAS7Z,OAAS,EAEhE,IAAKie,GAAelN,EAAOqS,cAAgB,MAAQ1C,GAAiB,IAAMuB,EAAc,CACtFzR,EAAOqE,KAAK,yBAChB,CAEE,MAAMjE,GAAaiJ,EAASsD,GAE5B3M,EAAOyO,eAAerO,GAEtB,GAAIG,EAAO8P,oBAAqB,CAC9B,IAAK,IAAI5b,EAAI,EAAGA,EAAI6U,EAAW9Z,OAAQiF,GAAK,EAAG,CAC7C,MAAMoe,GAAuB3R,KAAKsK,MAAMpL,EAAY,KACpD,MAAM0S,EAAiB5R,KAAKsK,MAAMlC,EAAW7U,GAAK,KAClD,MAAMse,EAAqB7R,KAAKsK,MAAMlC,EAAW7U,EAAI,GAAK,KAE1D,UAAW6U,EAAW7U,EAAI,KAAO,YAAa,CAC5C,GAAIoe,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAAG,CACjI3G,EAAa1X,CACvB,MAAe,GAAIoe,GAAuBC,GAAkBD,EAAsBE,EAAoB,CAC5F5G,EAAa1X,EAAI,CAC3B,CACA,MAAa,GAAIoe,GAAuBC,EAAgB,CAChD3G,EAAa1X,CACrB,CACA,CACA,CAGE,GAAIuL,EAAOyE,aAAe0H,IAAesB,EAAa,CACpD,IAAKzN,EAAOgT,gBAAkB5S,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOmO,eAAgB,CAC/F,OAAO,KACb,CAEI,IAAKnO,EAAOiT,gBAAkB7S,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAO4O,eAAgB,CAC/F,IAAKnB,GAAe,KAAOtB,EAAY,OAAO,KACpD,CACA,CAEE,IAAIgG,EACJ,GAAIhG,EAAasB,EAAa0E,EAAY,YAAY,GAAIhG,EAAasB,EAAa0E,EAAY,YAAYA,EAAY,QAExH,GAAIvJ,IAAQxI,IAAcJ,EAAOI,YAAcwI,GAAOxI,IAAcJ,EAAOI,UAAW,CACpFJ,EAAOgQ,kBAAkB7D,GAEzB,GAAI5L,EAAO0O,WAAY,CACrBjP,EAAOmN,kBACb,CAEInN,EAAOkP,sBAEP,GAAI3O,EAAOsL,SAAW,QAAS,CAC7B7L,EAAOiR,aAAa7Q,EAC1B,CAEI,GAAI+R,IAAc,QAAS,CACzBnS,EAAOqS,gBAAgBZ,EAAcU,GACrCnS,EAAO3G,cAAcoY,EAAcU,EACzC,CAEI,OAAO,KACX,CAEE,GAAI5R,EAAO+J,QAAS,CAClB,MAAMyH,EAAM/R,EAAO6H,eACnB,MAAMqL,EAAItK,EAAMxI,GAAaA,EAE7B,GAAII,IAAU,EAAG,CACf,MAAMsI,EAAY9I,EAAO+I,SAAW/I,EAAOO,OAAOwI,QAAQC,QAE1D,GAAIF,EAAW,CACb9I,EAAOS,UAAUjQ,MAAMkQ,eAAiB,OACxCV,EAAOmT,kBAAoB,IACnC,CAEM1S,EAAUsR,EAAM,aAAe,aAAemB,EAE9C,GAAIpK,EAAW,CACbnW,uBAAsB,KACpBqN,EAAOS,UAAUjQ,MAAMkQ,eAAiB,GACxCV,EAAOoT,wBAA0B,KAAK,GAEhD,CACA,KAAW,CACL,IAAKpT,EAAO2B,QAAQE,aAAc,CAChC9B,GAAqB,CACnBC,SACAC,eAAgBiT,EAChBhT,KAAM6R,EAAM,OAAS,QAEvB,OAAO,IACf,CAEMtR,EAAUgB,SAAS,CACjB,CAACsQ,EAAM,OAAS,OAAQmB,EACxBlB,SAAU,UAElB,CAEI,OAAO,IACX,CAEEhS,EAAOqN,cAAc7M,GACrBR,EAAOiR,aAAa7Q,GACpBJ,EAAOgQ,kBAAkB7D,GACzBnM,EAAOkP,sBACPlP,EAAOqE,KAAK,wBAAyB7D,EAAOmR,GAC5C3R,EAAOqS,gBAAgBZ,EAAcU,GAErC,GAAI3R,IAAU,EAAG,CACfR,EAAO3G,cAAcoY,EAAcU,EACvC,MAAS,IAAKnS,EAAO4R,UAAW,CAC5B5R,EAAO4R,UAAY,KAEnB,IAAK5R,EAAOqT,8BAA+B,CACzCrT,EAAOqT,8BAAgC,SAASha,EAAc5B,GAC5D,IAAKuI,GAAUA,EAAOwE,UAAW,OACjC,GAAI/M,EAAEtI,SAAW+C,KAAM,OACvB8N,EAAO0G,WAAW,GAAG9W,oBAAoB,gBAAiBoQ,EAAOqT,+BACjErT,EAAO0G,WAAW,GAAG9W,oBAAoB,sBAAuBoQ,EAAOqT,+BACvErT,EAAOqT,8BAAgC,YAChCrT,EAAOqT,8BACdrT,EAAO3G,cAAcoY,EAAcU,EAC3C,CACA,CAEInS,EAAO0G,WAAW,GAAG/W,iBAAiB,gBAAiBqQ,EAAOqT,+BAC9DrT,EAAO0G,WAAW,GAAG/W,iBAAiB,sBAAuBqQ,EAAOqT,8BACxE,CAEE,OAAO,IACT,CCpLe,SAASC,GAAYxY,EAAQ,EAAG0F,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,GAC7F,MAAM3R,EAAS9N,KACf,IAAIqhB,EAAWzY,EAEf,GAAIkF,EAAOO,OAAOoP,KAAM,CACtB4D,GAAYvT,EAAOwT,YACvB,CAEE,OAAOxT,EAAOsS,QAAQiB,EAAU/S,EAAOiR,EAAcE,EACvD,CCRe,SAAS8B,GAAUjT,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,GAChF,MAAM3R,EAAS9N,KACf,MAAM0f,UACJA,EAAS5I,QACTA,EAAOzI,OACPA,GACEP,EACJ,IAAKgJ,EAAS,OAAOhJ,EACrB,IAAI0T,EAAWnT,EAAOoL,eAEtB,GAAIpL,EAAOsK,gBAAkB,QAAUtK,EAAOoL,iBAAmB,GAAKpL,EAAOoT,mBAAoB,CAC/FD,EAAWxS,KAAKC,IAAInB,EAAO4T,qBAAqB,UAAW,MAAO,EACtE,CAEE,MAAMC,EAAY7T,EAAOyN,YAAclN,EAAOqL,mBAAqB,EAAI8H,EAEvE,GAAInT,EAAOoP,KAAM,CACf,GAAIiC,GAAarR,EAAOuT,kBAAmB,OAAO,MAClD9T,EAAO+T,UAEP/T,EAAOgU,YAAchU,EAAO0G,WAAW,GAAGvM,UAC9C,CAEE,GAAIoG,EAAO0T,QAAUjU,EAAO8O,MAAO,CACjC,OAAO9O,EAAOsS,QAAQ,EAAG9R,EAAOiR,EAAcE,EAClD,CAEE,OAAO3R,EAAOsS,QAAQtS,EAAOyN,YAAcoG,EAAWrT,EAAOiR,EAAcE,EAC7E,CC5Be,SAASuC,GAAU1T,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,GAChF,MAAM3R,EAAS9N,KACf,MAAMqO,OACJA,EAAMqR,UACNA,EAASvI,SACTA,EAAQC,WACRA,EAAUX,aACVA,EAAYK,QACZA,GACEhJ,EACJ,IAAKgJ,EAAS,OAAOhJ,EAErB,GAAIO,EAAOoP,KAAM,CACf,GAAIiC,GAAarR,EAAOuT,kBAAmB,OAAO,MAClD9T,EAAO+T,UAEP/T,EAAOgU,YAAchU,EAAO0G,WAAW,GAAGvM,UAC9C,CAEE,MAAMiG,EAAYuI,EAAe3I,EAAOI,WAAaJ,EAAOI,UAE5D,SAAS+T,EAAUC,GACjB,GAAIA,EAAM,EAAG,OAAQlT,KAAKsK,MAAMtK,KAAKwK,IAAI0I,IACzC,OAAOlT,KAAKsK,MAAM4I,EACtB,CAEE,MAAMvB,EAAsBsB,EAAU/T,GACtC,MAAMiU,EAAqBhL,EAAS3T,KAAI0e,GAAOD,EAAUC,KACzD,IAAIE,EAAWjL,EAASgL,EAAmB3f,QAAQme,GAAuB,GAE1E,UAAWyB,IAAa,aAAe/T,EAAO+J,QAAS,CACrD,IAAIiK,EACJlL,EAAS/Z,SAAQ,CAACkd,EAAMG,KACtB,GAAIkG,GAAuBrG,EAAM,CAE/B+H,EAAgB5H,CACxB,KAGI,UAAW4H,IAAkB,YAAa,CACxCD,EAAWjL,EAASkL,EAAgB,EAAIA,EAAgB,EAAIA,EAClE,CACA,CAEE,IAAIC,EAAY,EAEhB,UAAWF,IAAa,YAAa,CACnCE,EAAYlL,EAAW5U,QAAQ4f,GAC/B,GAAIE,EAAY,EAAGA,EAAYxU,EAAOyN,YAAc,EAEpD,GAAIlN,EAAOsK,gBAAkB,QAAUtK,EAAOoL,iBAAmB,GAAKpL,EAAOoT,mBAAoB,CAC/Fa,EAAYA,EAAYxU,EAAO4T,qBAAqB,WAAY,MAAQ,EACxEY,EAAYtT,KAAKC,IAAIqT,EAAW,EACtC,CACA,CAEE,GAAIjU,EAAO0T,QAAUjU,EAAO6O,YAAa,CACvC,OAAO7O,EAAOsS,QAAQtS,EAAOkJ,OAAO1Z,OAAS,EAAGgR,EAAOiR,EAAcE,EACzE,CAEE,OAAO3R,EAAOsS,QAAQkC,EAAWhU,EAAOiR,EAAcE,EACxD,CC7De,SAAS8C,GAAWjU,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,GACjF,MAAM3R,EAAS9N,KACf,OAAO8N,EAAOsS,QAAQtS,EAAOyN,YAAajN,EAAOiR,EAAcE,EACjE,CCHe,SAAS+C,GAAelU,EAAQtO,KAAKqO,OAAOC,MAAOiR,EAAe,KAAME,EAAUgD,EAAY,IAC3G,MAAM3U,EAAS9N,KACf,IAAI4I,EAAQkF,EAAOyN,YACnB,MAAM6C,EAAOpP,KAAKE,IAAIpB,EAAOO,OAAOqL,mBAAoB9Q,GACxD,MAAM6R,EAAY2D,EAAOpP,KAAKsK,OAAO1Q,EAAQwV,GAAQtQ,EAAOO,OAAOoL,gBACnE,MAAMvL,EAAYJ,EAAO2I,aAAe3I,EAAOI,WAAaJ,EAAOI,UAEnE,GAAIA,GAAaJ,EAAOqJ,SAASsD,GAAY,CAG3C,MAAMiI,EAAc5U,EAAOqJ,SAASsD,GACpC,MAAMkI,EAAW7U,EAAOqJ,SAASsD,EAAY,GAE7C,GAAIvM,EAAYwU,GAAeC,EAAWD,GAAeD,EAAW,CAClE7Z,GAASkF,EAAOO,OAAOoL,cAC7B,CACA,KAAS,CAGL,MAAM2I,EAAWtU,EAAOqJ,SAASsD,EAAY,GAC7C,MAAMiI,EAAc5U,EAAOqJ,SAASsD,GAEpC,GAAIvM,EAAYkU,IAAaM,EAAcN,GAAYK,EAAW,CAChE7Z,GAASkF,EAAOO,OAAOoL,cAC7B,CACA,CAEE7Q,EAAQoG,KAAKC,IAAIrG,EAAO,GACxBA,EAAQoG,KAAKE,IAAItG,EAAOkF,EAAOsJ,WAAW9Z,OAAS,GACnD,OAAOwQ,EAAOsS,QAAQxX,EAAO0F,EAAOiR,EAAcE,EACpD,CC7Be,SAASf,KACtB,MAAM5Q,EAAS9N,KACf,MAAMqO,OACJA,EAAMmG,WACNA,GACE1G,EACJ,MAAM6K,EAAgBtK,EAAOsK,gBAAkB,OAAS7K,EAAO4T,uBAAyBrT,EAAOsK,cAC/F,IAAIiK,EAAe9U,EAAO2Q,aAC1B,IAAIxB,EAEJ,GAAI5O,EAAOoP,KAAM,CACf,GAAI3P,EAAO4R,UAAW,OACtBzC,EAAYpH,SAAShT,EAAEiL,EAAO0Q,cAAcpa,KAAK,2BAA4B,IAE7E,GAAIiK,EAAO8J,eAAgB,CACzB,GAAIyK,EAAe9U,EAAOwT,aAAe3I,EAAgB,GAAKiK,EAAe9U,EAAOkJ,OAAO1Z,OAASwQ,EAAOwT,aAAe3I,EAAgB,EAAG,CAC3I7K,EAAO+T,UACPe,EAAepO,EAAWpW,SAAS,IAAIiQ,EAAO4I,uCAAuCgG,YAAoB5O,EAAOqP,wBAAwBpU,GAAG,GAAGV,QAC9IwC,IAAS,KACP0C,EAAOsS,QAAQwC,EAAa,GAEtC,KAAa,CACL9U,EAAOsS,QAAQwC,EACvB,CACA,MAAW,GAAIA,EAAe9U,EAAOkJ,OAAO1Z,OAASqb,EAAe,CAC9D7K,EAAO+T,UACPe,EAAepO,EAAWpW,SAAS,IAAIiQ,EAAO4I,uCAAuCgG,YAAoB5O,EAAOqP,wBAAwBpU,GAAG,GAAGV,QAC9IwC,IAAS,KACP0C,EAAOsS,QAAQwC,EAAa,GAEpC,KAAW,CACL9U,EAAOsS,QAAQwC,EACrB,CACA,KAAS,CACL9U,EAAOsS,QAAQwC,EACnB,CACA,CC/BA,MAAA/J,GAAe,CACbuH,WACAgB,eACAG,aACAS,aACAO,cACAC,kBACA9D,wBCZa,SAASmE,KACtB,MAAM/U,EAAS9N,KACf,MAAMV,EAAWF,IACjB,MAAMiP,OACJA,EAAMmG,WACNA,GACE1G,EAEJ,MAAMgV,EAAYtO,EAAWpW,WAAWd,OAAS,EAAIuF,EAAE2R,EAAWpW,WAAW,GAAGqM,YAAc+J,EAC9FsO,EAAU1kB,SAAS,IAAIiQ,EAAO4I,cAAc5I,EAAOqP,uBAAuB5Z,SAC1E,IAAIkT,EAAS8L,EAAU1kB,SAAS,IAAIiQ,EAAO4I,cAE3C,GAAI5I,EAAO0U,uBAAwB,CACjC,MAAMC,EAAiB3U,EAAOoL,eAAiBzC,EAAO1Z,OAAS+Q,EAAOoL,eAEtE,GAAIuJ,IAAmB3U,EAAOoL,eAAgB,CAC5C,IAAK,IAAIlX,EAAI,EAAGA,EAAIygB,EAAgBzgB,GAAK,EAAG,CAC1C,MAAM0gB,EAAYpgB,EAAEvD,EAASnB,cAAc,QAAQkF,SAAS,GAAGgL,EAAO4I,cAAc5I,EAAO6U,mBAC3FJ,EAAUtZ,OAAOyZ,EACzB,CAEMjM,EAAS8L,EAAU1kB,SAAS,IAAIiQ,EAAO4I,aAC7C,CACA,CAEE,GAAI5I,EAAOsK,gBAAkB,SAAWtK,EAAOiT,aAAcjT,EAAOiT,aAAetK,EAAO1Z,OAC1FwQ,EAAOwT,aAAetS,KAAKsM,KAAK5T,WAAW2G,EAAOiT,cAAgBjT,EAAOsK,cAAe,KACxF7K,EAAOwT,cAAgBjT,EAAO8U,qBAE9B,GAAIrV,EAAOwT,aAAetK,EAAO1Z,OAAQ,CACvCwQ,EAAOwT,aAAetK,EAAO1Z,MACjC,CAEE,MAAM8lB,EAAgB,GACtB,MAAMC,EAAe,GACrBrM,EAAOrO,MAAK,CAAC7G,EAAI8G,KACf,MAAMiQ,EAAQhW,EAAEf,GAEhB,GAAI8G,EAAQkF,EAAOwT,aAAc,CAC/B+B,EAAarhB,KAAKF,EACxB,CAEI,GAAI8G,EAAQoO,EAAO1Z,QAAUsL,GAASoO,EAAO1Z,OAASwQ,EAAOwT,aAAc,CACzE8B,EAAcphB,KAAKF,EACzB,CAEI+W,EAAMzU,KAAK,0BAA2BwE,EAAM,IAG9C,IAAK,IAAIrG,EAAI,EAAGA,EAAI8gB,EAAa/lB,OAAQiF,GAAK,EAAG,CAC/CugB,EAAUtZ,OAAO3G,EAAEwgB,EAAa9gB,GAAG+gB,UAAU,OAAOjgB,SAASgL,EAAOqP,qBACxE,CAEE,IAAK,IAAInb,EAAI6gB,EAAc9lB,OAAS,EAAGiF,GAAK,EAAGA,GAAK,EAAG,CACrDugB,EAAUhZ,QAAQjH,EAAEugB,EAAc7gB,GAAG+gB,UAAU,OAAOjgB,SAASgL,EAAOqP,qBAC1E,CACA,CC1De,SAASmE,KACtB,MAAM/T,EAAS9N,KACf8N,EAAOqE,KAAK,iBACZ,MAAMoJ,YACJA,EAAWvE,OACXA,EAAMsK,aACNA,EAAYP,eACZA,EAAcD,eACdA,EAAc3J,SACdA,EACAV,aAAcC,GACZ5I,EACJ,IAAIuT,EACJvT,EAAOiT,eAAiB,KACxBjT,EAAOgT,eAAiB,KACxB,MAAMyC,GAAiBpM,EAASoE,GAChC,MAAMiI,EAAOD,EAAgBzV,EAAOtC,eAEpC,GAAI+P,EAAc+F,EAAc,CAC9BD,EAAWrK,EAAO1Z,OAASgkB,EAAe,EAAI/F,EAC9C8F,GAAYC,EACZ,MAAMmC,EAAe3V,EAAOsS,QAAQiB,EAAU,EAAG,MAAO,MAExD,GAAIoC,GAAgBD,IAAS,EAAG,CAC9B1V,EAAOiR,cAAcrI,GAAO5I,EAAOI,UAAYJ,EAAOI,WAAasV,EACzE,CACA,MAAS,GAAIjI,GAAevE,EAAO1Z,OAASgkB,EAAc,CAEtDD,GAAYrK,EAAO1Z,OAASie,EAAc+F,EAC1CD,GAAYC,EACZ,MAAMmC,EAAe3V,EAAOsS,QAAQiB,EAAU,EAAG,MAAO,MAExD,GAAIoC,GAAgBD,IAAS,EAAG,CAC9B1V,EAAOiR,cAAcrI,GAAO5I,EAAOI,UAAYJ,EAAOI,WAAasV,EACzE,CACA,CAEE1V,EAAOiT,eAAiBA,EACxBjT,EAAOgT,eAAiBA,EACxBhT,EAAOqE,KAAK,UACd,CCxCe,SAASuR,KACtB,MAAM5V,EAAS9N,KACf,MAAMwU,WACJA,EAAUnG,OACVA,EAAM2I,OACNA,GACElJ,EACJ0G,EAAWpW,SAAS,IAAIiQ,EAAO4I,cAAc5I,EAAOqP,wBAAwBrP,EAAO4I,cAAc5I,EAAO6U,mBAAmBpf,SAC3HkT,EAAOtS,WAAW,0BACpB,CCNA,MAAA+Y,GAAe,CACboF,cACAhB,WACA6B,gBCNa,SAASC,GAAcC,GACpC,MAAM9V,EAAS9N,KACf,GAAI8N,EAAO2B,QAAQI,QAAU/B,EAAOO,OAAOwV,eAAiB/V,EAAOO,OAAOwM,eAAiB/M,EAAOgW,UAAYhW,EAAOO,OAAO+J,QAAS,OACrI,MAAMtW,EAAKgM,EAAOO,OAAO0V,oBAAsB,YAAcjW,EAAOhM,GAAKgM,EAAOS,UAChFzM,EAAGxD,MAAM0lB,OAAS,OAClBliB,EAAGxD,MAAM0lB,OAASJ,EAAS,mBAAqB,eAChD9hB,EAAGxD,MAAM0lB,OAASJ,EAAS,eAAiB,YAC5C9hB,EAAGxD,MAAM0lB,OAASJ,EAAS,WAAa,MAC1C,CCRe,SAASK,KACtB,MAAMnW,EAAS9N,KAEf,GAAI8N,EAAO2B,QAAQI,OAAS/B,EAAOO,OAAOwM,eAAiB/M,EAAOgW,UAAYhW,EAAOO,OAAO+J,QAAS,CACnG,MACJ,CAEEtK,EAAOA,EAAOO,OAAO0V,oBAAsB,YAAc,KAAO,aAAazlB,MAAM0lB,OAAS,EAC9F,CCNA,MAAAE,GAAe,CACbP,iBACAM,oBCAF,SAASE,GAAezhB,EAAU0hB,EAAOpkB,MACvC,SAASqkB,EAAcviB,GACrB,IAAKA,GAAMA,IAAO1C,KAAiB0C,IAAOjB,IAAa,OAAO,KAC9D,GAAIiB,EAAGwiB,aAAcxiB,EAAKA,EAAGwiB,aAC7B,MAAMzZ,EAAQ/I,EAAG4I,QAAQhI,GACzB,OAAOmI,GAASwZ,EAAcviB,EAAGyiB,cAAc1lB,KACnD,CAEE,OAAOwlB,EAAcD,EACvB,CAEe,SAASI,GAAate,GACnC,MAAM4H,EAAS9N,KACf,MAAMV,EAAWF,IACjB,MAAM2B,EAASF,IACf,MAAMmG,EAAO8G,EAAO2W,gBACpB,MAAMpW,OACJA,EAAMqW,QACNA,EAAO5N,QACPA,GACEhJ,EACJ,IAAKgJ,EAAS,OAEd,GAAIhJ,EAAO4R,WAAarR,EAAOsR,+BAAgC,CAC7D,MACJ,CAEE,IAAK7R,EAAO4R,WAAarR,EAAO+J,SAAW/J,EAAOoP,KAAM,CACtD3P,EAAO+T,SACX,CAEE,IAAItc,EAAIW,EACR,GAAIX,EAAEof,cAAepf,EAAIA,EAAEof,cAC3B,IAAIC,EAAY/hB,EAAE0C,EAAEtI,QAEpB,GAAIoR,EAAO0V,oBAAsB,UAAW,CAC1C,IAAKa,EAAUla,QAAQoD,EAAOS,WAAWjR,OAAQ,MACrD,CAEE0J,EAAK6d,aAAetf,EAAEuf,OAAS,aAC/B,IAAK9d,EAAK6d,cAAgB,UAAWtf,GAAKA,EAAEwf,QAAU,EAAG,OACzD,IAAK/d,EAAK6d,cAAgB,WAAYtf,GAAKA,EAAEyf,OAAS,EAAG,OACzD,GAAIhe,EAAKie,WAAaje,EAAKke,QAAS,OAEpC,MAAMC,IAAyB9W,EAAO+W,gBAAkB/W,EAAO+W,iBAAmB,GAElF,GAAID,GAAwB5f,EAAEtI,QAAUsI,EAAEtI,OAAOooB,YAAcnf,EAAMof,MAAQpf,EAAMof,KAAK,GAAI,CAC1FV,EAAY/hB,EAAEqD,EAAMof,KAAK,GAC7B,CAEE,MAAMC,EAAoBlX,EAAOkX,kBAAoBlX,EAAOkX,kBAAoB,IAAIlX,EAAO+W,iBAC3F,MAAMI,KAAoBjgB,EAAEtI,QAAUsI,EAAEtI,OAAOooB,YAE/C,GAAIhX,EAAOoX,YAAcD,EAAiBrB,GAAeoB,EAAmBhgB,EAAEtI,QAAU2nB,EAAUla,QAAQ6a,GAAmB,IAAK,CAChIzX,EAAO4X,WAAa,KACpB,MACJ,CAEE,GAAIrX,EAAOsX,aAAc,CACvB,IAAKf,EAAUla,QAAQ2D,EAAOsX,cAAc,GAAI,MACpD,CAEEjB,EAAQkB,SAAWrgB,EAAEuf,OAAS,aAAevf,EAAEsgB,cAAc,GAAGC,MAAQvgB,EAAEugB,MAC1EpB,EAAQqB,SAAWxgB,EAAEuf,OAAS,aAAevf,EAAEsgB,cAAc,GAAGG,MAAQzgB,EAAEygB,MAC1E,MAAMC,EAASvB,EAAQkB,SACvB,MAAMM,EAASxB,EAAQqB,SAEvB,MAAMI,EAAqB9X,EAAO8X,oBAAsB9X,EAAO+X,sBAC/D,MAAMC,EAAqBhY,EAAOgY,oBAAsBhY,EAAOiY,sBAE/D,GAAIH,IAAuBF,GAAUI,GAAsBJ,GAAUllB,EAAOwlB,WAAaF,GAAqB,CAC5G,GAAIF,IAAuB,UAAW,CACpCjgB,EAAMsgB,gBACZ,KAAW,CACL,MACN,CACA,CAEEzpB,OAAOiZ,OAAOhP,EAAM,CAClBie,UAAW,KACXC,QAAS,MACTuB,oBAAqB,KACrBC,YAAaliB,UACbmiB,YAAaniB,YAEfkgB,EAAQuB,OAASA,EACjBvB,EAAQwB,OAASA,EACjBlf,EAAK4f,eAAiBtb,KACtBwC,EAAO4X,WAAa,KACpB5X,EAAO0H,aACP1H,EAAO+Y,eAAiBriB,UACxB,GAAI6J,EAAOoU,UAAY,EAAGzb,EAAK8f,mBAAqB,MAEpD,GAAIvhB,EAAEuf,OAAS,aAAc,CAC3B,IAAI0B,EAAiB,KACrB,GAAI5B,EAAUjf,GAAGqB,EAAK+f,mBAAoBP,EAAiB,MAE3D,GAAIlnB,EAAS3B,eAAiBkF,EAAEvD,EAAS3B,eAAegI,GAAGqB,EAAK+f,oBAAsBznB,EAAS3B,gBAAkBinB,EAAU,GAAI,CAC7HtlB,EAAS3B,cAAcC,MAC7B,CAEI,MAAMopB,EAAuBR,GAAkB1Y,EAAOmZ,gBAAkB5Y,EAAO6Y,yBAE/E,IAAK7Y,EAAO8Y,+BAAiCH,KAA0BpC,EAAU,GAAGwC,kBAAmB,CACrG7hB,EAAEihB,gBACR,CACA,CAEE1Y,EAAOqE,KAAK,aAAc5M,EAC5B,CC9Ge,SAAS8hB,GAAYnhB,GAClC,MAAM5G,EAAWF,IACjB,MAAM0O,EAAS9N,KACf,MAAMgH,EAAO8G,EAAO2W,gBACpB,MAAMpW,OACJA,EAAMqW,QACNA,EACAjO,aAAcC,EAAGI,QACjBA,GACEhJ,EACJ,IAAKgJ,EAAS,OACd,IAAIvR,EAAIW,EACR,GAAIX,EAAEof,cAAepf,EAAIA,EAAEof,cAE3B,IAAK3d,EAAKie,UAAW,CACnB,GAAIje,EAAK2f,aAAe3f,EAAK0f,YAAa,CACxC5Y,EAAOqE,KAAK,oBAAqB5M,EACvC,CAEI,MACJ,CAEE,GAAIyB,EAAK6d,cAAgBtf,EAAEuf,OAAS,YAAa,OACjD,MAAMwC,EAAc/hB,EAAEuf,OAAS,aAAevf,EAAEsgB,gBAAkBtgB,EAAEsgB,cAAc,IAAMtgB,EAAEgiB,eAAe,IACzG,MAAMzB,EAAQvgB,EAAEuf,OAAS,YAAcwC,EAAYxB,MAAQvgB,EAAEugB,MAC7D,MAAME,EAAQzgB,EAAEuf,OAAS,YAAcwC,EAAYtB,MAAQzgB,EAAEygB,MAE7D,GAAIzgB,EAAEiiB,wBAAyB,CAC7B9C,EAAQuB,OAASH,EACjBpB,EAAQwB,OAASF,EACjB,MACJ,CAEE,IAAKlY,EAAOmZ,eAAgB,CAE1BnZ,EAAO4X,WAAa,MAEpB,GAAI1e,EAAKie,UAAW,CAClBloB,OAAOiZ,OAAO0O,EAAS,CACrBuB,OAAQH,EACRI,OAAQF,EACRJ,SAAUE,EACVC,SAAUC,IAEZhf,EAAK4f,eAAiBtb,IAC5B,CAEI,MACJ,CAEE,GAAItE,EAAK6d,cAAgBxW,EAAOoZ,sBAAwBpZ,EAAOoP,KAAM,CACnE,GAAI3P,EAAO8H,aAAc,CAEvB,GAAIoQ,EAAQtB,EAAQwB,QAAUpY,EAAOI,WAAaJ,EAAO4O,gBAAkBsJ,EAAQtB,EAAQwB,QAAUpY,EAAOI,WAAaJ,EAAOmO,eAAgB,CAC9IjV,EAAKie,UAAY,MACjBje,EAAKke,QAAU,MACf,MACR,CACA,MAAW,GAAIY,EAAQpB,EAAQuB,QAAUnY,EAAOI,WAAaJ,EAAO4O,gBAAkBoJ,EAAQpB,EAAQuB,QAAUnY,EAAOI,WAAaJ,EAAOmO,eAAgB,CACrJ,MACN,CACA,CAEE,GAAIjV,EAAK6d,cAAgBvlB,EAAS3B,cAAe,CAC/C,GAAI4H,EAAEtI,SAAWqC,EAAS3B,eAAiBkF,EAAE0C,EAAEtI,QAAQ0I,GAAGqB,EAAK+f,mBAAoB,CACjF/f,EAAKke,QAAU,KACfpX,EAAO4X,WAAa,MACpB,MACN,CACA,CAEE,GAAI1e,EAAKyf,oBAAqB,CAC5B3Y,EAAOqE,KAAK,YAAa5M,EAC7B,CAEE,GAAIA,EAAEsgB,eAAiBtgB,EAAEsgB,cAAcvoB,OAAS,EAAG,OACnDonB,EAAQkB,SAAWE,EACnBpB,EAAQqB,SAAWC,EACnB,MAAM0B,EAAQhD,EAAQkB,SAAWlB,EAAQuB,OACzC,MAAM0B,EAAQjD,EAAQqB,SAAWrB,EAAQwB,OACzC,GAAIpY,EAAOO,OAAOoU,WAAazT,KAAK4Y,KAAKF,GAAS,EAAIC,GAAS,GAAK7Z,EAAOO,OAAOoU,UAAW,OAE7F,UAAWzb,EAAK0f,cAAgB,YAAa,CAC3C,IAAImB,EAEJ,GAAI/Z,EAAO6H,gBAAkB+O,EAAQqB,WAAarB,EAAQwB,QAAUpY,EAAO8H,cAAgB8O,EAAQkB,WAAalB,EAAQuB,OAAQ,CAC9Hjf,EAAK0f,YAAc,KACzB,KAAW,CAEL,GAAIgB,EAAQA,EAAQC,EAAQA,GAAS,GAAI,CACvCE,EAAa7Y,KAAK8Y,MAAM9Y,KAAKwK,IAAImO,GAAQ3Y,KAAKwK,IAAIkO,IAAU,IAAM1Y,KAAKK,GACvErI,EAAK0f,YAAc5Y,EAAO6H,eAAiBkS,EAAaxZ,EAAOwZ,WAAa,GAAKA,EAAaxZ,EAAOwZ,UAC7G,CACA,CACA,CAEE,GAAI7gB,EAAK0f,YAAa,CACpB5Y,EAAOqE,KAAK,oBAAqB5M,EACrC,CAEE,UAAWyB,EAAK2f,cAAgB,YAAa,CAC3C,GAAIjC,EAAQkB,WAAalB,EAAQuB,QAAUvB,EAAQqB,WAAarB,EAAQwB,OAAQ,CAC9Elf,EAAK2f,YAAc,IACzB,CACA,CAEE,GAAI3f,EAAK0f,YAAa,CACpB1f,EAAKie,UAAY,MACjB,MACJ,CAEE,IAAKje,EAAK2f,YAAa,CACrB,MACJ,CAEE7Y,EAAO4X,WAAa,MAEpB,IAAKrX,EAAO+J,SAAW7S,EAAEwB,WAAY,CACnCxB,EAAEihB,gBACN,CAEE,GAAInY,EAAO0Z,2BAA6B1Z,EAAO2Z,OAAQ,CACrDziB,EAAE0iB,iBACN,CAEE,IAAKjhB,EAAKke,QAAS,CACjB,GAAI7W,EAAOoP,OAASpP,EAAO+J,QAAS,CAClCtK,EAAO+T,SACb,CAEI7a,EAAKkhB,eAAiBpa,EAAOtC,eAC7BsC,EAAOqN,cAAc,GAErB,GAAIrN,EAAO4R,UAAW,CACpB5R,EAAO0G,WAAW7N,QAAQ,oCAChC,CAEIK,EAAKmhB,oBAAsB,MAE3B,GAAI9Z,EAAO6V,aAAepW,EAAOgT,iBAAmB,MAAQhT,EAAOiT,iBAAmB,MAAO,CAC3FjT,EAAO6V,cAAc,KAC3B,CAEI7V,EAAOqE,KAAK,kBAAmB5M,EACnC,CAEEuI,EAAOqE,KAAK,aAAc5M,GAC1ByB,EAAKke,QAAU,KACf,IAAI1B,EAAO1V,EAAO6H,eAAiB+R,EAAQC,EAC3CjD,EAAQlB,KAAOA,EACfA,GAAQnV,EAAO+Z,WACf,GAAI1R,EAAK8M,GAAQA,EACjB1V,EAAO+Y,eAAiBrD,EAAO,EAAI,OAAS,OAC5Cxc,EAAK8X,iBAAmB0E,EAAOxc,EAAKkhB,eACpC,IAAIG,EAAsB,KAC1B,IAAIC,EAAkBja,EAAOia,gBAE7B,GAAIja,EAAOoZ,oBAAqB,CAC9Ba,EAAkB,CACtB,CAEE,GAAI9E,EAAO,GAAKxc,EAAK8X,iBAAmBhR,EAAOmO,eAAgB,CAC7DoM,EAAsB,MACtB,GAAIha,EAAOka,WAAYvhB,EAAK8X,iBAAmBhR,EAAOmO,eAAiB,IAAMnO,EAAOmO,eAAiBjV,EAAKkhB,eAAiB1E,IAAS8E,CACxI,MAAS,GAAI9E,EAAO,GAAKxc,EAAK8X,iBAAmBhR,EAAO4O,eAAgB,CACpE2L,EAAsB,MACtB,GAAIha,EAAOka,WAAYvhB,EAAK8X,iBAAmBhR,EAAO4O,eAAiB,GAAK5O,EAAO4O,eAAiB1V,EAAKkhB,eAAiB1E,IAAS8E,CACvI,CAEE,GAAID,EAAqB,CACvB9iB,EAAEiiB,wBAA0B,IAChC,CAGE,IAAK1Z,EAAOgT,gBAAkBhT,EAAO+Y,iBAAmB,QAAU7f,EAAK8X,iBAAmB9X,EAAKkhB,eAAgB,CAC7GlhB,EAAK8X,iBAAmB9X,EAAKkhB,cACjC,CAEE,IAAKpa,EAAOiT,gBAAkBjT,EAAO+Y,iBAAmB,QAAU7f,EAAK8X,iBAAmB9X,EAAKkhB,eAAgB,CAC7GlhB,EAAK8X,iBAAmB9X,EAAKkhB,cACjC,CAEE,IAAKpa,EAAOiT,iBAAmBjT,EAAOgT,eAAgB,CACpD9Z,EAAK8X,iBAAmB9X,EAAKkhB,cACjC,CAGE,GAAI7Z,EAAOoU,UAAY,EAAG,CACxB,GAAIzT,KAAKwK,IAAIgK,GAAQnV,EAAOoU,WAAazb,EAAK8f,mBAAoB,CAChE,IAAK9f,EAAK8f,mBAAoB,CAC5B9f,EAAK8f,mBAAqB,KAC1BpC,EAAQuB,OAASvB,EAAQkB,SACzBlB,EAAQwB,OAASxB,EAAQqB,SACzB/e,EAAK8X,iBAAmB9X,EAAKkhB,eAC7BxD,EAAQlB,KAAO1V,EAAO6H,eAAiB+O,EAAQkB,SAAWlB,EAAQuB,OAASvB,EAAQqB,SAAWrB,EAAQwB,OACtG,MACR,CACA,KAAW,CACLlf,EAAK8X,iBAAmB9X,EAAKkhB,eAC7B,MACN,CACA,CAEE,IAAK7Z,EAAOma,cAAgBna,EAAO+J,QAAS,OAE5C,GAAI/J,EAAOoa,UAAYpa,EAAOoa,SAAS3R,SAAWhJ,EAAO2a,UAAYpa,EAAO0M,oBAAqB,CAC/FjN,EAAOgQ,oBACPhQ,EAAOkP,qBACX,CAEE,GAAIlP,EAAOO,OAAOoa,UAAYpa,EAAOoa,SAAS3R,SAAWhJ,EAAO2a,SAAU,CACxE3a,EAAO2a,SAASpB,aACpB,CAGEvZ,EAAOyO,eAAevV,EAAK8X,kBAE3BhR,EAAOiR,aAAa/X,EAAK8X,iBAC3B,CC5Ne,SAAS4J,GAAWxiB,GACjC,MAAM4H,EAAS9N,KACf,MAAMgH,EAAO8G,EAAO2W,gBACpB,MAAMpW,OACJA,EAAMqW,QACNA,EACAjO,aAAcC,EAAGU,WACjBA,EAAUN,QACVA,GACEhJ,EACJ,IAAKgJ,EAAS,OACd,IAAIvR,EAAIW,EACR,GAAIX,EAAEof,cAAepf,EAAIA,EAAEof,cAE3B,GAAI3d,EAAKyf,oBAAqB,CAC5B3Y,EAAOqE,KAAK,WAAY5M,EAC5B,CAEEyB,EAAKyf,oBAAsB,MAE3B,IAAKzf,EAAKie,UAAW,CACnB,GAAIje,EAAKke,SAAW7W,EAAO6V,WAAY,CACrCpW,EAAO6V,cAAc,MAC3B,CAEI3c,EAAKke,QAAU,MACfle,EAAK2f,YAAc,MACnB,MACJ,CAGE,GAAItY,EAAO6V,YAAcld,EAAKke,SAAWle,EAAKie,YAAcnX,EAAOgT,iBAAmB,MAAQhT,EAAOiT,iBAAmB,MAAO,CAC7HjT,EAAO6V,cAAc,MACzB,CAGE,MAAMgF,EAAerd,KACrB,MAAMsd,EAAWD,EAAe3hB,EAAK4f,eAErC,GAAI9Y,EAAO4X,WAAY,CACrB,MAAMmD,EAAWtjB,EAAE+f,MAAQ/f,EAAEujB,cAAgBvjB,EAAEujB,eAC/Chb,EAAOwQ,mBAAmBuK,GAAYA,EAAS,IAAMtjB,EAAEtI,QACvD6Q,EAAOqE,KAAK,YAAa5M,GAEzB,GAAIqjB,EAAW,KAAOD,EAAe3hB,EAAK+hB,cAAgB,IAAK,CAC7Djb,EAAOqE,KAAK,wBAAyB5M,EAC3C,CACA,CAEEyB,EAAK+hB,cAAgBzd,KACrBF,IAAS,KACP,IAAK0C,EAAOwE,UAAWxE,EAAO4X,WAAa,IAAI,IAGjD,IAAK1e,EAAKie,YAAcje,EAAKke,UAAYpX,EAAO+Y,gBAAkBnC,EAAQlB,OAAS,GAAKxc,EAAK8X,mBAAqB9X,EAAKkhB,eAAgB,CACrIlhB,EAAKie,UAAY,MACjBje,EAAKke,QAAU,MACfle,EAAK2f,YAAc,MACnB,MACJ,CAEE3f,EAAKie,UAAY,MACjBje,EAAKke,QAAU,MACfle,EAAK2f,YAAc,MACnB,IAAIqC,EAEJ,GAAI3a,EAAOma,aAAc,CACvBQ,EAAatS,EAAM5I,EAAOI,WAAaJ,EAAOI,SAClD,KAAS,CACL8a,GAAchiB,EAAK8X,gBACvB,CAEE,GAAIzQ,EAAO+J,QAAS,CAClB,MACJ,CAEE,GAAItK,EAAOO,OAAOoa,UAAYpa,EAAOoa,SAAS3R,QAAS,CACrDhJ,EAAO2a,SAASC,WAAW,CACzBM,eAEF,MACJ,CAGE,IAAIC,EAAY,EAChB,IAAIC,EAAYpb,EAAOuJ,gBAAgB,GAEvC,IAAK,IAAI9U,EAAI,EAAGA,EAAI6U,EAAW9Z,OAAQiF,GAAKA,EAAI8L,EAAOqL,mBAAqB,EAAIrL,EAAOoL,eAAgB,CACrG,MAAMkI,EAAYpf,EAAI8L,EAAOqL,mBAAqB,EAAI,EAAIrL,EAAOoL,eAEjE,UAAWrC,EAAW7U,EAAIof,KAAe,YAAa,CACpD,GAAIqH,GAAc5R,EAAW7U,IAAMymB,EAAa5R,EAAW7U,EAAIof,GAAY,CACzEsH,EAAY1mB,EACZ2mB,EAAY9R,EAAW7U,EAAIof,GAAavK,EAAW7U,EAC3D,CACA,MAAW,GAAIymB,GAAc5R,EAAW7U,GAAI,CACtC0mB,EAAY1mB,EACZ2mB,EAAY9R,EAAWA,EAAW9Z,OAAS,GAAK8Z,EAAWA,EAAW9Z,OAAS,EACrF,CACA,CAGE,MAAM6rB,GAASH,EAAa5R,EAAW6R,IAAcC,EACrD,MAAMvH,EAAYsH,EAAY5a,EAAOqL,mBAAqB,EAAI,EAAIrL,EAAOoL,eAEzE,GAAImP,EAAWva,EAAO+a,aAAc,CAElC,IAAK/a,EAAOgb,WAAY,CACtBvb,EAAOsS,QAAQtS,EAAOyN,aACtB,MACN,CAEI,GAAIzN,EAAO+Y,iBAAmB,OAAQ,CACpC,GAAIsC,GAAS9a,EAAOib,gBAAiBxb,EAAOsS,QAAQ6I,EAAYtH,QAAgB7T,EAAOsS,QAAQ6I,EACrG,CAEI,GAAInb,EAAO+Y,iBAAmB,OAAQ,CACpC,GAAIsC,EAAQ,EAAI9a,EAAOib,gBAAiBxb,EAAOsS,QAAQ6I,EAAYtH,QAAgB7T,EAAOsS,QAAQ6I,EACxG,CACA,KAAS,CAEL,IAAK5a,EAAOkb,YAAa,CACvBzb,EAAOsS,QAAQtS,EAAOyN,aACtB,MACN,CAEI,MAAMiO,EAAoB1b,EAAO2b,aAAelkB,EAAEtI,SAAW6Q,EAAO2b,WAAWC,QAAUnkB,EAAEtI,SAAW6Q,EAAO2b,WAAWE,QAExH,IAAKH,EAAmB,CACtB,GAAI1b,EAAO+Y,iBAAmB,OAAQ,CACpC/Y,EAAOsS,QAAQ6I,EAAYtH,EACnC,CAEM,GAAI7T,EAAO+Y,iBAAmB,OAAQ,CACpC/Y,EAAOsS,QAAQ6I,EACvB,CACA,MAAW,GAAI1jB,EAAEtI,SAAW6Q,EAAO2b,WAAWC,OAAQ,CAChD5b,EAAOsS,QAAQ6I,EAAYtH,EACjC,KAAW,CACL7T,EAAOsS,QAAQ6I,EACrB,CACA,CACA,CC/Ie,SAASW,KACtB,MAAM9b,EAAS9N,KACf,MAAMqO,OACJA,EAAMvM,GACNA,GACEgM,EACJ,GAAIhM,GAAMA,EAAG2F,cAAgB,EAAG,OAEhC,GAAI4G,EAAOuK,YAAa,CACtB9K,EAAO+b,eACX,CAGE,MAAM/I,eACJA,EAAcC,eACdA,EAAc5J,SACdA,GACErJ,EAEJA,EAAOgT,eAAiB,KACxBhT,EAAOiT,eAAiB,KACxBjT,EAAO0H,aACP1H,EAAOoI,eACPpI,EAAOkP,sBAEP,IAAK3O,EAAOsK,gBAAkB,QAAUtK,EAAOsK,cAAgB,IAAM7K,EAAO8O,QAAU9O,EAAO6O,cAAgB7O,EAAOO,OAAO8J,eAAgB,CACzIrK,EAAOsS,QAAQtS,EAAOkJ,OAAO1Z,OAAS,EAAG,EAAG,MAAO,KACvD,KAAS,CACLwQ,EAAOsS,QAAQtS,EAAOyN,YAAa,EAAG,MAAO,KACjD,CAEE,GAAIzN,EAAOgc,UAAYhc,EAAOgc,SAASC,SAAWjc,EAAOgc,SAASE,OAAQ,CACxElc,EAAOgc,SAASG,KACpB,CAGEnc,EAAOiT,eAAiBA,EACxBjT,EAAOgT,eAAiBA,EAExB,GAAIhT,EAAOO,OAAOwM,eAAiB1D,IAAarJ,EAAOqJ,SAAU,CAC/DrJ,EAAOgN,eACX,CACA,CC1Ce,SAASoP,GAAQ3kB,GAC9B,MAAMuI,EAAS9N,KACf,IAAK8N,EAAOgJ,QAAS,OAErB,IAAKhJ,EAAO4X,WAAY,CACtB,GAAI5X,EAAOO,OAAO8b,cAAe5kB,EAAEihB,iBAEnC,GAAI1Y,EAAOO,OAAO+b,0BAA4Btc,EAAO4R,UAAW,CAC9Dna,EAAE0iB,kBACF1iB,EAAE8kB,0BACR,CACA,CACA,CCZe,SAASC,KACtB,MAAMxc,EAAS9N,KACf,MAAMuO,UACJA,EAASkI,aACTA,EAAYK,QACZA,GACEhJ,EACJ,IAAKgJ,EAAS,OACdhJ,EAAOsR,kBAAoBtR,EAAOI,UAElC,GAAIJ,EAAO6H,eAAgB,CACzB7H,EAAOI,WAAaK,EAAUnG,UAClC,KAAS,CACL0F,EAAOI,WAAaK,EAAUrG,SAClC,CAGE,GAAI4F,EAAOI,aAAe,EAAGJ,EAAOI,UAAY,EAChDJ,EAAOgQ,oBACPhQ,EAAOkP,sBACP,IAAIqC,EACJ,MAAM5C,EAAiB3O,EAAO4O,eAAiB5O,EAAOmO,eAEtD,GAAIQ,IAAmB,EAAG,CACxB4C,EAAc,CAClB,KAAS,CACLA,GAAevR,EAAOI,UAAYJ,EAAOmO,gBAAkBQ,CAC/D,CAEE,GAAI4C,IAAgBvR,EAAOiB,SAAU,CACnCjB,EAAOyO,eAAe9F,GAAgB3I,EAAOI,UAAYJ,EAAOI,UACpE,CAEEJ,EAAOqE,KAAK,eAAgBrE,EAAOI,UAAW,MAChD,CC3BA,IAAIqc,GAAqB,MAEzB,SAASC,KAAqB,CAE9B,MAAMxkB,GAAS,CAAC8H,EAAQgH,KACtB,MAAMxV,EAAWF,IACjB,MAAMiP,OACJA,EAAMoc,YACNA,EAAW3oB,GACXA,EAAEyM,UACFA,EAASmC,OACTA,EAAMjB,QACNA,GACE3B,EACJ,MAAMzI,IAAYgJ,EAAO2Z,OACzB,MAAM0C,EAAY5V,IAAW,KAAO,mBAAqB,sBACzD,MAAM6V,EAAe7V,EAErB,IAAKrF,EAAQI,MAAO,CAClB/N,EAAG4oB,GAAWD,EAAYG,MAAO9c,EAAO0W,aAAc,OACtDllB,EAASorB,GAAWD,EAAYI,KAAM/c,EAAOuZ,YAAahiB,GAC1D/F,EAASorB,GAAWD,EAAYK,IAAKhd,EAAO4a,WAAY,MAC5D,KAAS,CACL,MAAM3Y,EAAkB0a,EAAYG,QAAU,cAAgBnb,EAAQM,iBAAmB1B,EAAO0c,iBAAmB,CACjHC,QAAS,KACT3lB,QAAS,OACP,MACJvD,EAAG4oB,GAAWD,EAAYG,MAAO9c,EAAO0W,aAAczU,GACtDjO,EAAG4oB,GAAWD,EAAYI,KAAM/c,EAAOuZ,YAAa5X,EAAQM,gBAAkB,CAC5Eib,QAAS,MACT3lB,WACEA,GACJvD,EAAG4oB,GAAWD,EAAYK,IAAKhd,EAAO4a,WAAY3Y,GAElD,GAAI0a,EAAYQ,OAAQ,CACtBnpB,EAAG4oB,GAAWD,EAAYQ,OAAQnd,EAAO4a,WAAY3Y,EAC3D,CACA,CAGE,GAAI1B,EAAO8b,eAAiB9b,EAAO+b,yBAA0B,CAC3DtoB,EAAG4oB,GAAW,QAAS5c,EAAOoc,QAAS,KAC3C,CAEE,GAAI7b,EAAO+J,QAAS,CAClB7J,EAAUmc,GAAW,SAAU5c,EAAOwc,SAC1C,CAGE,GAAIjc,EAAO6c,qBAAsB,CAC/Bpd,EAAO6c,GAAcja,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyBgZ,GAAU,KACvI,KAAS,CACL9b,EAAO6c,GAAc,iBAAkBf,GAAU,KACrD,GAGA,SAASuB,KACP,MAAMrd,EAAS9N,KACf,MAAMV,EAAWF,IACjB,MAAMiP,OACJA,EAAMoB,QACNA,GACE3B,EACJA,EAAO0W,aAAeA,GAAa4G,KAAKtd,GACxCA,EAAOuZ,YAAcA,GAAY+D,KAAKtd,GACtCA,EAAO4a,WAAaA,GAAW0C,KAAKtd,GAEpC,GAAIO,EAAO+J,QAAS,CAClBtK,EAAOwc,SAAWA,GAASc,KAAKtd,EACpC,CAEEA,EAAOoc,QAAUA,GAAQkB,KAAKtd,GAE9B,GAAI2B,EAAQI,QAAU0a,GAAoB,CACxCjrB,EAAS7B,iBAAiB,aAAc+sB,IACxCD,GAAqB,IACzB,CAEEvkB,GAAO8H,EAAQ,KACjB,CAEA,SAASud,KACP,MAAMvd,EAAS9N,KACfgG,GAAO8H,EAAQ,MACjB,CAEA,MAAAwd,GAAe,CACbH,gBACAE,iBC7FF,MAAME,GAAgB,CAACzd,EAAQO,IACtBP,EAAOwK,MAAQjK,EAAOiK,MAAQjK,EAAOiK,KAAKC,KAAO,EAG3C,SAASsR,KACtB,MAAM/b,EAAS9N,KACf,MAAMub,YACJA,EAAWhJ,YACXA,EAAW+O,aACXA,EAAe,EAACjT,OAChBA,EAAMiG,IACNA,GACExG,EACJ,MAAM8K,EAAcvK,EAAOuK,YAC3B,IAAKA,GAAeA,GAAe7b,OAAOI,KAAKyb,GAAatb,SAAW,EAAG,OAE1E,MAAMkuB,EAAa1d,EAAO2d,cAAc7S,EAAa9K,EAAOO,OAAOqd,gBAAiB5d,EAAOhM,IAC3F,IAAK0pB,GAAc1d,EAAO6d,oBAAsBH,EAAY,OAC5D,MAAMI,EAAuBJ,KAAc5S,EAAcA,EAAY4S,GAAchnB,UACnF,MAAMqnB,EAAmBD,GAAwB9d,EAAOge,eACxD,MAAMC,EAAcR,GAAczd,EAAQO,GAC1C,MAAM2d,EAAaT,GAAczd,EAAQ+d,GACzC,MAAMI,EAAa5d,EAAOyI,QAE1B,GAAIiV,IAAgBC,EAAY,CAC9B1X,EAAIzQ,YAAY,GAAGwK,EAAO6d,8BAA8B7d,EAAO6d,qCAC/Dpe,EAAOqe,sBACX,MAAS,IAAKJ,GAAeC,EAAY,CACrC1X,EAAIjR,SAAS,GAAGgL,EAAO6d,8BAEvB,GAAIL,EAAiBvT,KAAK8T,MAAQP,EAAiBvT,KAAK8T,OAAS,WAAaP,EAAiBvT,KAAK8T,MAAQ/d,EAAOiK,KAAK8T,OAAS,SAAU,CACzI9X,EAAIjR,SAAS,GAAGgL,EAAO6d,oCAC7B,CAEIpe,EAAOqe,sBACX,CAEE,MAAME,EAAmBR,EAAiB5L,WAAa4L,EAAiB5L,YAAc5R,EAAO4R,UAC7F,MAAMqM,EAAcje,EAAOoP,OAASoO,EAAiBlT,gBAAkBtK,EAAOsK,eAAiB0T,GAE/F,GAAIA,GAAoB9Z,EAAa,CACnCzE,EAAOye,iBACX,CAEEvvB,GAAO8Q,EAAOO,OAAQwd,GACtB,MAAMW,EAAY1e,EAAOO,OAAOyI,QAChC/Z,OAAOiZ,OAAOlI,EAAQ,CACpBmZ,eAAgBnZ,EAAOO,OAAO4Y,eAC9BnG,eAAgBhT,EAAOO,OAAOyS,eAC9BC,eAAgBjT,EAAOO,OAAO0S,iBAGhC,GAAIkL,IAAeO,EAAW,CAC5B1e,EAAO2e,SACX,MAAS,IAAKR,GAAcO,EAAW,CACnC1e,EAAO4e,QACX,CAEE5e,EAAO6d,kBAAoBH,EAC3B1d,EAAOqE,KAAK,oBAAqB0Z,GAEjC,GAAIS,GAAe/Z,EAAa,CAC9BzE,EAAO4V,cACP5V,EAAO+U,aACP/U,EAAOoI,eACPpI,EAAOsS,QAAQ7E,EAAc+F,EAAexT,EAAOwT,aAAc,EAAG,MACxE,CAEExT,EAAOqE,KAAK,aAAc0Z,EAC5B,CCtEe,SAASJ,GAAc7S,EAAawL,EAAO,SAAUuI,GAClE,IAAK/T,GAAewL,IAAS,cAAgBuI,EAAa,OAAOnoB,UACjE,IAAIgnB,EAAa,MACjB,MAAMzqB,EAASF,IACf,MAAM+rB,EAAgBxI,IAAS,SAAWrjB,EAAO8rB,YAAcF,EAAYjX,aAC3E,MAAMoX,EAAS/vB,OAAOI,KAAKyb,GAAapV,KAAIupB,IAC1C,UAAWA,IAAU,UAAYA,EAAMvqB,QAAQ,OAAS,EAAG,CACzD,MAAMwqB,EAAWtlB,WAAWqlB,EAAME,OAAO,IACzC,MAAM3rB,EAAQsrB,EAAgBI,EAC9B,MAAO,CACL1rB,QACAyrB,QAER,CAEI,MAAO,CACLzrB,MAAOyrB,EACPA,QACD,IAEHD,EAAOI,MAAK,CAACtqB,EAAGuqB,IAAMtX,SAASjT,EAAEtB,MAAO,IAAMuU,SAASsX,EAAE7rB,MAAO,MAEhE,IAAK,IAAIiB,EAAI,EAAGA,EAAIuqB,EAAOxvB,OAAQiF,GAAK,EAAG,CACzC,MAAMwqB,MACJA,EAAKzrB,MACLA,GACEwrB,EAAOvqB,GAEX,GAAI6hB,IAAS,SAAU,CACrB,GAAIrjB,EAAOP,WAAW,eAAec,QAAY2H,QAAS,CACxDuiB,EAAauB,CACrB,CACA,MAAW,GAAIzrB,GAASqrB,EAAYlX,YAAa,CAC3C+V,EAAauB,CACnB,CACA,CAEE,OAAOvB,GAAc,KACvB,CCrCA,MAAA5S,GAAe,CACbiR,iBACA4B,kBCJF,SAAS2B,GAAe1a,EAAS2a,GAC/B,MAAMC,EAAgB,GACtB5a,EAAQtV,SAAQmwB,IACd,UAAWA,IAAS,SAAU,CAC5BxwB,OAAOI,KAAKowB,GAAMnwB,SAAQmG,IACxB,GAAIgqB,EAAKhqB,GAAa,CACpB+pB,EAActrB,KAAKqrB,EAAS9pB,EACtC,IAEA,MAAW,UAAWgqB,IAAS,SAAU,CACnCD,EAActrB,KAAKqrB,EAASE,EAClC,KAEE,OAAOD,CACT,CAEe,SAASE,KACtB,MAAM1f,EAAS9N,KACf,MAAMuD,WACJA,EAAU8K,OACVA,EAAMqI,IACNA,EAAGpC,IACHA,EAAG5D,OACHA,EAAMjB,QACNA,GACE3B,EAEJ,MAAM2f,EAAWL,GAAe,CAAC,cAAe/e,EAAO4R,UAAW,CAChE,kBAAmBxQ,EAAQI,OAC1B,CACD,YAAa/B,EAAOO,OAAOoa,UAAYpa,EAAOoa,SAAS3R,SACtD,CACD4W,WAAcrf,EAAO0O,YACpB,CACDrG,IAAOA,GACN,CACD4B,KAAQjK,EAAOiK,MAAQjK,EAAOiK,KAAKC,KAAO,GACzC,CACD,cAAelK,EAAOiK,MAAQjK,EAAOiK,KAAKC,KAAO,GAAKlK,EAAOiK,KAAK8T,OAAS,UAC1E,CACDxb,QAAWF,EAAOE,SACjB,CACDD,IAAOD,EAAOC,KACb,CACD,WAAYtC,EAAO+J,SAClB,CACDuV,SAAYtf,EAAO+J,SAAW/J,EAAO8J,iBACnC9J,EAAO6d,wBACX3oB,EAAWvB,QAAQyrB,GACnBnZ,EAAIjR,SAAS,IAAIE,GAAY0I,KAAK,MAClC6B,EAAOqe,sBACT,CCnDe,SAASyB,KACtB,MAAM9f,EAAS9N,KACf,MAAMsU,IACJA,EAAG/Q,WACHA,GACEuK,EACJwG,EAAIzQ,YAAYN,EAAW0I,KAAK,MAChC6B,EAAOqe,sBACT,CCNA,MAAA7oB,GAAe,CACbkqB,cACAI,kBCFa,SAASC,GAAUC,EAAS5wB,EAAK6wB,EAAQC,EAAOC,EAAkBvtB,GAC/E,MAAMK,EAASF,IACf,IAAIqtB,EAEJ,SAASC,IACP,GAAIztB,EAAUA,GAClB,CAEE,MAAM0tB,EAAYvrB,EAAEirB,GAAStjB,OAAO,WAAW,GAE/C,IAAK4jB,KAAeN,EAAQO,WAAaJ,GAAmB,CAC1D,GAAI/wB,EAAK,CACPgxB,EAAQ,IAAIntB,EAAOZ,MACnB+tB,EAAMI,OAASH,EACfD,EAAMK,QAAUJ,EAEhB,GAAIH,EAAO,CACTE,EAAMF,MAAQA,CACtB,CAEM,GAAID,EAAQ,CACVG,EAAMH,OAASA,CACvB,CAEM,GAAI7wB,EAAK,CACPgxB,EAAMhxB,IAAMA,CACpB,CACA,KAAW,CACLixB,GACN,CACA,KAAS,CAELA,GACJ,CACA,CCpCe,SAASK,KACtB,MAAM1gB,EAAS9N,KACf8N,EAAO2gB,aAAe3gB,EAAOwG,IAAI3J,KAAK,OAEtC,SAASwjB,IACP,UAAWrgB,IAAW,aAAeA,IAAW,OAASA,GAAUA,EAAOwE,UAAW,OACrF,GAAIxE,EAAO4gB,eAAiBlqB,UAAWsJ,EAAO4gB,cAAgB,EAE9D,GAAI5gB,EAAO4gB,eAAiB5gB,EAAO2gB,aAAanxB,OAAQ,CACtD,GAAIwQ,EAAOO,OAAOsgB,oBAAqB7gB,EAAO6Q,SAC9C7Q,EAAOqE,KAAK,cAClB,CACA,CAEE,IAAK,IAAI5P,EAAI,EAAGA,EAAIuL,EAAO2gB,aAAanxB,OAAQiF,GAAK,EAAG,CACtD,MAAMurB,EAAUhgB,EAAO2gB,aAAalsB,GACpCuL,EAAO+f,UAAUC,EAASA,EAAQc,YAAcd,EAAQvpB,aAAa,OAAQupB,EAAQC,QAAUD,EAAQvpB,aAAa,UAAWupB,EAAQE,OAASF,EAAQvpB,aAAa,SAAU,KAAM4pB,EACzL,CACA,CChBA,MAAAU,GAAe,CACbhB,aACAW,kBCJF,SAAS1T,KACP,MAAMhN,EAAS9N,KACf,MACE8jB,SAAUgL,EAASzgB,OACnBA,GACEP,EACJ,MAAMyJ,mBACJA,GACElJ,EAEJ,GAAIkJ,EAAoB,CACtB,MAAMwX,EAAiBjhB,EAAOkJ,OAAO1Z,OAAS,EAC9C,MAAM0xB,EAAqBlhB,EAAOsJ,WAAW2X,GAAkBjhB,EAAOuJ,gBAAgB0X,GAAkBxX,EAAqB,EAC7HzJ,EAAOgW,SAAWhW,EAAOmI,KAAO+Y,CACpC,KAAS,CACLlhB,EAAOgW,SAAWhW,EAAOqJ,SAAS7Z,SAAW,CACjD,CAEE,GAAI+Q,EAAOyS,iBAAmB,KAAM,CAClChT,EAAOgT,gBAAkBhT,EAAOgW,QACpC,CAEE,GAAIzV,EAAO0S,iBAAmB,KAAM,CAClCjT,EAAOiT,gBAAkBjT,EAAOgW,QACpC,CAEE,GAAIgL,GAAaA,IAAchhB,EAAOgW,SAAU,CAC9ChW,EAAO8O,MAAQ,KACnB,CAEE,GAAIkS,IAAchhB,EAAOgW,SAAU,CACjChW,EAAOqE,KAAKrE,EAAOgW,SAAW,OAAS,SAC3C,CACA,CAEA,MAAAmL,GAAe,CACbnU,kBCpCF,MAAAoU,GAAe,CACb/a,KAAM,KACN8L,UAAW,aACX8D,kBAAmB,UACnBrD,aAAc,EACdpS,MAAO,IACP8J,QAAS,MACT8S,qBAAsB,KACtB7X,eAAgB,KAChB2U,OAAQ,MACRmH,eAAgB,MAChBrY,QAAS,KACTiQ,kBAAmB,wDAEnBjW,MAAO,KACPE,OAAQ,KAER2O,+BAAgC,MAEhClgB,UAAW,KACX2vB,IAAK,KAELjJ,mBAAoB,MACpBE,mBAAoB,GAEpBtJ,WAAY,MAEZnD,eAAgB,MAEhBiF,iBAAkB,MAElBlF,OAAQ,QAGRf,YAAapU,UACbknB,gBAAiB,SAEjB9T,aAAc,EACde,cAAe,EACfc,eAAgB,EAChBC,mBAAoB,EACpB+H,mBAAoB,MACpBtJ,eAAgB,MAChB+B,qBAAsB,MACtB3C,mBAAoB,EAEpBE,kBAAmB,EAEnB0G,oBAAqB,KACrB5D,yBAA0B,MAE1BM,cAAe,KAEf3B,aAAc,MAEdkP,WAAY,EACZP,WAAY,GACZhE,cAAe,KACf0F,YAAa,KACbF,WAAY,KACZC,gBAAiB,GACjBF,aAAc,IACdZ,aAAc,KACdvB,eAAgB,KAChBxE,UAAW,EACXsF,yBAA0B,MAC1Bb,yBAA0B,KAC1BC,8BAA+B,MAC/BM,oBAAqB,MAErB4H,kBAAmB,KAEnB9G,WAAY,KACZD,gBAAiB,IAEjBvN,oBAAqB,MAErBmJ,WAAY,MAEZiG,cAAe,KACfC,yBAA0B,KAC1B1L,oBAAqB,MAErB8P,cAAe,KACfG,oBAAqB,KAErBlR,KAAM,MACN0F,qBAAsB,EACtB7B,aAAc,KACdyB,uBAAwB,MACxBnB,kBAAmB,KAEnBG,OAAQ,MAERhB,eAAgB,KAChBD,eAAgB,KAChB6E,aAAc,KAEdF,UAAW,KACXL,eAAgB,oBAChBG,kBAAmB,KAEnBwF,iBAAkB,KAElBmB,uBAAwB,UAExBjV,WAAY,eACZiM,gBAAiB,+BACjBhG,iBAAkB,sBAClBG,0BAA2B,gCAC3BxB,kBAAmB,uBACnB6B,oBAAqB,yBACrBP,eAAgB,oBAChBG,wBAAyB,8BACzBF,eAAgB,oBAChBG,wBAAyB,8BACzB+R,aAAc,iBAEdjR,mBAAoB,KAEpBkR,aAAc,OCvHD,SAASC,GAAmBnhB,EAAQohB,GACjD,OAAO,SAASlc,EAAa1W,EAAM,IACjC,MAAM6yB,EAAkB3yB,OAAOI,KAAKN,GAAK,GACzC,MAAM8yB,EAAe9yB,EAAI6yB,GAEzB,UAAWC,IAAiB,UAAYA,IAAiB,KAAM,CAC7D3yB,GAAOyyB,EAAkB5yB,GACzB,MACN,CAEI,GAAI,CAAC,aAAc,aAAc,aAAa2F,QAAQktB,IAAoB,GAAKrhB,EAAOqhB,KAAqB,KAAM,CAC/GrhB,EAAOqhB,GAAmB,CACxBE,KAAM,KAEd,CAEI,KAAMF,KAAmBrhB,GAAU,YAAashB,GAAe,CAC7D3yB,GAAOyyB,EAAkB5yB,GACzB,MACN,CAEI,GAAIwR,EAAOqhB,KAAqB,KAAM,CACpCrhB,EAAOqhB,GAAmB,CACxB5Y,QAAS,KAEjB,CAEI,UAAWzI,EAAOqhB,KAAqB,YAAc,YAAarhB,EAAOqhB,IAAmB,CAC1FrhB,EAAOqhB,GAAiB5Y,QAAU,IACxC,CAEI,IAAKzI,EAAOqhB,GAAkBrhB,EAAOqhB,GAAmB,CACtD5Y,QAAS,OAEX9Z,GAAOyyB,EAAkB5yB,EAC7B,CACA,CCdA,MAAMgzB,GAAa,CACjBlb,iBACAgK,UACAzQ,aACArJ,cACAgU,SACA4E,QACAyG,cACFle,OAAEA,GACA4S,eACFkC,cAAEA,GACAxX,WACAurB,WAEF,MAAMiB,GAAmB,GAEzB,MAAMC,GACJ,WAAAjzB,IAAemI,GACb,IAAInD,EACJ,IAAIuM,EAEJ,GAAIpJ,EAAK3H,SAAW,GAAK2H,EAAK,GAAGnI,aAAeC,OAAOmF,UAAUoK,SAASlK,KAAK6C,EAAK,IAAIyH,MAAM,GAAI,KAAO,SAAU,CACjH2B,EAASpJ,EAAK,EACpB,KAAW,EACJnD,EAAIuM,GAAUpJ,CACrB,CAEI,IAAKoJ,EAAQA,EAAS,GACtBA,EAASrR,GAAO,GAAIqR,GACpB,GAAIvM,IAAOuM,EAAOvM,GAAIuM,EAAOvM,GAAKA,EAElC,GAAIuM,EAAOvM,IAAMe,EAAEwL,EAAOvM,IAAIxE,OAAS,EAAG,CACxC,MAAM0yB,EAAU,GAChBntB,EAAEwL,EAAOvM,IAAI6G,MAAKgkB,IAChB,MAAMsD,EAAYjzB,GAAO,GAAIqR,EAAQ,CACnCvM,GAAI6qB,IAENqD,EAAQhuB,KAAK,IAAI+tB,GAAOE,GAAW,IAErC,OAAOD,CACb,CAGI,MAAMliB,EAAS9N,KACf8N,EAAON,WAAa,KACpBM,EAAO2B,QAAUY,KACjBvC,EAAO4C,OAASe,GAAU,CACxBhS,UAAW4O,EAAO5O,YAEpBqO,EAAO6D,QAAUM,KACjBnE,EAAOiH,gBAAkB,GACzBjH,EAAOsH,mBAAqB,GAC5BtH,EAAOoiB,QAAU,IAAIpiB,EAAOqiB,aAE5B,GAAI9hB,EAAO6hB,SAAW1uB,MAAMO,QAAQsM,EAAO6hB,SAAU,CACnDpiB,EAAOoiB,QAAQluB,QAAQqM,EAAO6hB,QACpC,CAEI,MAAMT,EAAmB,GACzB3hB,EAAOoiB,QAAQ9yB,SAAQgzB,IACrBA,EAAI,CACFtiB,SACAyF,aAAcic,GAAmBnhB,EAAQohB,GACzCzqB,GAAI8I,EAAO9I,GAAGomB,KAAKtd,GACnBkH,KAAMlH,EAAOkH,KAAKoW,KAAKtd,GACvBxH,IAAKwH,EAAOxH,IAAI8kB,KAAKtd,GACrBqE,KAAMrE,EAAOqE,KAAKiZ,KAAKtd,IACvB,IAGJ,MAAMuiB,EAAerzB,GAAO,GAAIkyB,GAAUO,GAE1C3hB,EAAOO,OAASrR,GAAO,GAAIqzB,EAAcP,GAAkBzhB,GAC3DP,EAAOge,eAAiB9uB,GAAO,GAAI8Q,EAAOO,QAC1CP,EAAOwiB,aAAetzB,GAAO,GAAIqR,GAEjC,GAAIP,EAAOO,QAAUP,EAAOO,OAAOrJ,GAAI,CACrCjI,OAAOI,KAAK2Q,EAAOO,OAAOrJ,IAAI5H,SAAQmzB,IACpCziB,EAAO9I,GAAGurB,EAAWziB,EAAOO,OAAOrJ,GAAGurB,GAAW,GAEzD,CAEI,GAAIziB,EAAOO,QAAUP,EAAOO,OAAO8G,MAAO,CACxCrH,EAAOqH,MAAMrH,EAAOO,OAAO8G,MACjC,CAGIrH,EAAOjL,EAAIA,EAEX9F,OAAOiZ,OAAOlI,EAAQ,CACpBgJ,QAAShJ,EAAOO,OAAOyI,QACvBhV,KAEAyB,WAAY,GAEZyT,OAAQnU,IACRuU,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAGjB,YAAA1B,GACE,OAAO7H,EAAOO,OAAO4R,YAAc,YAC3C,EAEM,UAAArK,GACE,OAAO9H,EAAOO,OAAO4R,YAAc,UAC3C,EAGM1E,YAAa,EACb0B,UAAW,EAEXN,YAAa,KACbC,MAAO,MAEP1O,UAAW,EACXkR,kBAAmB,EACnBrQ,SAAU,EACVyhB,SAAU,EACV9Q,UAAW,MAEXoB,eAAgBhT,EAAOO,OAAOyS,eAC9BC,eAAgBjT,EAAOO,OAAO0S,eAE9B0J,YAAa,SAASA,IACpB,MAAM5a,EAAQ,CAAC,aAAc,YAAa,WAAY,eACtD,MAAM4gB,EAAU,CAAC,cAAe,cAAe,aAC/C3iB,EAAO4iB,iBAAmB,CACxB9F,MAAO/a,EAAM,GACbgb,KAAMhb,EAAM,GACZib,IAAKjb,EAAM,GACXob,OAAQpb,EAAM,IAEhB/B,EAAO6iB,mBAAqB,CAC1B/F,MAAO6F,EAAQ,GACf5F,KAAM4F,EAAQ,GACd3F,IAAK2F,EAAQ,IAEf,OAAO3iB,EAAO2B,QAAQI,QAAU/B,EAAOO,OAAOwV,cAAgB/V,EAAO4iB,iBAAmB5iB,EAAO6iB,kBACvG,CAfmB,GAgBblM,gBAAiB,CACfQ,UAAWzgB,UACX0gB,QAAS1gB,UACTiiB,oBAAqBjiB,UACrBoiB,eAAgBpiB,UAChBkiB,YAAaliB,UACbsa,iBAAkBta,UAClB0jB,eAAgB1jB,UAChBsiB,mBAAoBtiB,UAEpBuiB,kBAAmBjZ,EAAOO,OAAO0Y,kBAEjCgC,cAAezd,KACfslB,aAAcpsB,UAEdqsB,WAAY,GACZ1I,oBAAqB3jB,UACrBqgB,aAAcrgB,UACdmiB,YAAaniB,WAGfkhB,WAAY,KAEZuB,eAAgBnZ,EAAOO,OAAO4Y,eAC9BvC,QAAS,CACPuB,OAAQ,EACRC,OAAQ,EACRN,SAAU,EACVG,SAAU,EACVvC,KAAM,GAGRiL,aAAc,GACdC,aAAc,IAEhB5gB,EAAOqE,KAAK,WAEZ,GAAIrE,EAAOO,OAAO8F,KAAM,CACtBrG,EAAOqG,MACb,CAGI,OAAOrG,CACX,CAEE,MAAA4e,GACE,MAAM5e,EAAS9N,KACf,GAAI8N,EAAOgJ,QAAS,OACpBhJ,EAAOgJ,QAAU,KAEjB,GAAIhJ,EAAOO,OAAO6V,WAAY,CAC5BpW,EAAO6V,eACb,CAEI7V,EAAOqE,KAAK,SAChB,CAEE,OAAAsa,GACE,MAAM3e,EAAS9N,KACf,IAAK8N,EAAOgJ,QAAS,OACrBhJ,EAAOgJ,QAAU,MAEjB,GAAIhJ,EAAOO,OAAO6V,WAAY,CAC5BpW,EAAOmW,iBACb,CAEInW,EAAOqE,KAAK,UAChB,CAEE,WAAA2e,CAAY/hB,EAAUT,GACpB,MAAMR,EAAS9N,KACf+O,EAAWC,KAAKE,IAAIF,KAAKC,IAAIF,EAAU,GAAI,GAC3C,MAAMG,EAAMpB,EAAOmO,eACnB,MAAMhN,EAAMnB,EAAO4O,eACnB,MAAM9N,GAAWK,EAAMC,GAAOH,EAAWG,EACzCpB,EAAOwR,YAAY1Q,SAAgBN,IAAU,YAAc,EAAIA,GAC/DR,EAAOgQ,oBACPhQ,EAAOkP,qBACX,CAEE,oBAAAmP,GACE,MAAMre,EAAS9N,KACf,IAAK8N,EAAOO,OAAOkhB,eAAiBzhB,EAAOhM,GAAI,OAC/C,MAAMivB,EAAMjjB,EAAOhM,GAAGkC,UAAUN,MAAM,KAAKvB,QAAO6B,GACzCA,EAAUxB,QAAQ,YAAc,GAAKwB,EAAUxB,QAAQsL,EAAOO,OAAO6d,0BAA4B,IAE1Gpe,EAAOqE,KAAK,oBAAqB4e,EAAI9kB,KAAK,KAC9C,CAEE,eAAA+kB,CAAgBC,GACd,MAAMnjB,EAAS9N,KACf,OAAOixB,EAAQjtB,UAAUN,MAAM,KAAKvB,QAAO6B,GAClCA,EAAUxB,QAAQ,kBAAoB,GAAKwB,EAAUxB,QAAQsL,EAAOO,OAAO4I,cAAgB,IACjGhL,KAAK,IACZ,CAEE,iBAAA4R,GACE,MAAM/P,EAAS9N,KACf,IAAK8N,EAAOO,OAAOkhB,eAAiBzhB,EAAOhM,GAAI,OAC/C,MAAMovB,EAAU,GAChBpjB,EAAOkJ,OAAOrO,MAAKsoB,IACjB,MAAM1tB,EAAauK,EAAOkjB,gBAAgBC,GAC1CC,EAAQlvB,KAAK,CACXivB,UACA1tB,eAEFuK,EAAOqE,KAAK,cAAe8e,EAAS1tB,EAAW,IAEjDuK,EAAOqE,KAAK,gBAAiB+e,EACjC,CAEE,oBAAAxP,CAAqByP,EAAO,UAAWC,EAAQ,OAC7C,MAAMtjB,EAAS9N,KACf,MAAMqO,OACJA,EAAM2I,OACNA,EAAMI,WACNA,EAAUC,gBACVA,EACApB,KAAMO,EAAU+E,YAChBA,GACEzN,EACJ,IAAIujB,EAAM,EAEV,GAAIhjB,EAAO8J,eAAgB,CACzB,IAAIM,EAAYzB,EAAOuE,GAAahC,gBACpC,IAAI+X,EAEJ,IAAK,IAAI/uB,EAAIgZ,EAAc,EAAGhZ,EAAIyU,EAAO1Z,OAAQiF,GAAK,EAAG,CACvD,GAAIyU,EAAOzU,KAAO+uB,EAAW,CAC3B7Y,GAAazB,EAAOzU,GAAGgX,gBACvB8X,GAAO,EACP,GAAI5Y,EAAYjC,EAAY8a,EAAY,IAClD,CACA,CAEM,IAAK,IAAI/uB,EAAIgZ,EAAc,EAAGhZ,GAAK,EAAGA,GAAK,EAAG,CAC5C,GAAIyU,EAAOzU,KAAO+uB,EAAW,CAC3B7Y,GAAazB,EAAOzU,GAAGgX,gBACvB8X,GAAO,EACP,GAAI5Y,EAAYjC,EAAY8a,EAAY,IAClD,CACA,CACA,KAAW,CAEL,GAAIH,IAAS,UAAW,CACtB,IAAK,IAAI5uB,EAAIgZ,EAAc,EAAGhZ,EAAIyU,EAAO1Z,OAAQiF,GAAK,EAAG,CACvD,MAAMgvB,EAAcH,EAAQha,EAAW7U,GAAK8U,EAAgB9U,GAAK6U,EAAWmE,GAAe/E,EAAaY,EAAW7U,GAAK6U,EAAWmE,GAAe/E,EAElJ,GAAI+a,EAAa,CACfF,GAAO,CACnB,CACA,CACA,KAAa,CAEL,IAAK,IAAI9uB,EAAIgZ,EAAc,EAAGhZ,GAAK,EAAGA,GAAK,EAAG,CAC5C,MAAMgvB,EAAcna,EAAWmE,GAAenE,EAAW7U,GAAKiU,EAE9D,GAAI+a,EAAa,CACfF,GAAO,CACnB,CACA,CACA,CACA,CAEI,OAAOA,CACX,CAEE,MAAA1S,GACE,MAAM7Q,EAAS9N,KACf,IAAK8N,GAAUA,EAAOwE,UAAW,OACjC,MAAM6E,SACJA,EAAQ9I,OACRA,GACEP,EAEJ,GAAIO,EAAOuK,YAAa,CACtB9K,EAAO+b,eACb,CAEI/b,EAAO0H,aACP1H,EAAOoI,eACPpI,EAAOyO,iBACPzO,EAAOkP,sBAEP,SAAS+B,IACP,MAAMyS,EAAiB1jB,EAAO2I,aAAe3I,EAAOI,WAAa,EAAIJ,EAAOI,UAC5E,MAAM0R,EAAe5Q,KAAKE,IAAIF,KAAKC,IAAIuiB,EAAgB1jB,EAAO4O,gBAAiB5O,EAAOmO,gBACtFnO,EAAOiR,aAAaa,GACpB9R,EAAOgQ,oBACPhQ,EAAOkP,qBACb,CAEI,IAAIyU,EAEJ,GAAI3jB,EAAOO,OAAOoa,UAAY3a,EAAOO,OAAOoa,SAAS3R,QAAS,CAC5DiI,IAEA,GAAIjR,EAAOO,OAAO0O,WAAY,CAC5BjP,EAAOmN,kBACf,CACA,KAAW,CACL,IAAKnN,EAAOO,OAAOsK,gBAAkB,QAAU7K,EAAOO,OAAOsK,cAAgB,IAAM7K,EAAO8O,QAAU9O,EAAOO,OAAO8J,eAAgB,CAChIsZ,EAAa3jB,EAAOsS,QAAQtS,EAAOkJ,OAAO1Z,OAAS,EAAG,EAAG,MAAO,KACxE,KAAa,CACLm0B,EAAa3jB,EAAOsS,QAAQtS,EAAOyN,YAAa,EAAG,MAAO,KAClE,CAEM,IAAKkW,EAAY,CACf1S,GACR,CACA,CAEI,GAAI1Q,EAAOwM,eAAiB1D,IAAarJ,EAAOqJ,SAAU,CACxDrJ,EAAOgN,eACb,CAEIhN,EAAOqE,KAAK,SAChB,CAEE,eAAAoa,CAAgBmF,EAAcC,EAAa,MACzC,MAAM7jB,EAAS9N,KACf,MAAM4xB,EAAmB9jB,EAAOO,OAAO4R,UAEvC,IAAKyR,EAAc,CAEjBA,EAAeE,IAAqB,aAAe,WAAa,YACtE,CAEI,GAAIF,IAAiBE,GAAoBF,IAAiB,cAAgBA,IAAiB,WAAY,CACrG,OAAO5jB,CACb,CAEIA,EAAOwG,IAAIzQ,YAAY,GAAGiK,EAAOO,OAAO6d,yBAAyB0F,KAAoBvuB,SAAS,GAAGyK,EAAOO,OAAO6d,yBAAyBwF,KACxI5jB,EAAOqe,uBACPre,EAAOO,OAAO4R,UAAYyR,EAC1B5jB,EAAOkJ,OAAOrO,MAAKsoB,IACjB,GAAIS,IAAiB,WAAY,CAC/BT,EAAQ3yB,MAAMwS,MAAQ,EAC9B,KAAa,CACLmgB,EAAQ3yB,MAAM0S,OAAS,EAC/B,KAEIlD,EAAOqE,KAAK,mBACZ,GAAIwf,EAAY7jB,EAAO6Q,SACvB,OAAO7Q,CACX,CAEE,KAAA+jB,CAAM/vB,GACJ,MAAMgM,EAAS9N,KACf,GAAI8N,EAAOgkB,QAAS,OAAO,KAE3B,MAAMxd,EAAMzR,EAAEf,GAAMgM,EAAOO,OAAOvM,IAClCA,EAAKwS,EAAI,GAET,IAAKxS,EAAI,CACP,OAAO,KACb,CAEIA,EAAGgM,OAASA,EAEZ,MAAMikB,EAAqB,IAClB,KAAKjkB,EAAOO,OAAOihB,cAAgB,IAAIvsB,OAAOW,MAAM,KAAKuI,KAAK,OAGvE,MAAM+lB,EAAa,KACjB,GAAIlwB,GAAMA,EAAGujB,YAAcvjB,EAAGujB,WAAWvnB,cAAe,CACtD,MAAM+D,EAAMgB,EAAEf,EAAGujB,WAAWvnB,cAAci0B,MAE1ClwB,EAAIzD,SAAWsV,GAAWY,EAAIlW,SAASsV,GAEvC,OAAO7R,CACf,CAEM,OAAOyS,EAAIlW,SAAS2zB,IAAqB,EAI3C,IAAIvd,EAAawd,IAEjB,GAAIxd,EAAWlX,SAAW,GAAKwQ,EAAOO,OAAO8gB,eAAgB,CAC3D,MAAM7vB,EAAWF,IACjB,MAAM6yB,EAAU3yB,EAASnB,cAAc,OACvCqW,EAAa3R,EAAEovB,GACfA,EAAQjuB,UAAY8J,EAAOO,OAAOihB,aAClChb,EAAI9K,OAAOyoB,GACX3d,EAAIlW,SAAS,IAAI0P,EAAOO,OAAO4I,cAActO,MAAKsoB,IAChDzc,EAAWhL,OAAOynB,EAAQ,GAElC,CAEIl0B,OAAOiZ,OAAOlI,EAAQ,CACpBwG,MACAxS,KACA0S,aACAjG,UAAWiG,EAAW,GACtBsd,QAAS,KAETpb,IAAK5U,EAAG4M,IAAIoD,gBAAkB,OAASwC,EAAI9L,IAAI,eAAiB,MAChEiO,aAAc3I,EAAOO,OAAO4R,YAAc,eAAiBne,EAAG4M,IAAIoD,gBAAkB,OAASwC,EAAI9L,IAAI,eAAiB,OACtHmO,SAAUnC,EAAWhM,IAAI,aAAe,gBAE1C,OAAO,IACX,CAEE,IAAA2L,CAAKrS,GACH,MAAMgM,EAAS9N,KACf,GAAI8N,EAAOyE,YAAa,OAAOzE,EAC/B,MAAMgkB,EAAUhkB,EAAO+jB,MAAM/vB,GAC7B,GAAIgwB,IAAY,MAAO,OAAOhkB,EAC9BA,EAAOqE,KAAK,cAEZ,GAAIrE,EAAOO,OAAOuK,YAAa,CAC7B9K,EAAO+b,eACb,CAGI/b,EAAO0f,aAEP,GAAI1f,EAAOO,OAAOoP,KAAM,CACtB3P,EAAO+U,YACb,CAGI/U,EAAO0H,aAEP1H,EAAOoI,eAEP,GAAIpI,EAAOO,OAAOwM,cAAe,CAC/B/M,EAAOgN,eACb,CAGI,GAAIhN,EAAOO,OAAO6V,YAAcpW,EAAOgJ,QAAS,CAC9ChJ,EAAO6V,eACb,CAEI,GAAI7V,EAAOO,OAAOmgB,cAAe,CAC/B1gB,EAAO0gB,eACb,CAGI,GAAI1gB,EAAOO,OAAOoP,KAAM,CACtB3P,EAAOsS,QAAQtS,EAAOO,OAAOqS,aAAe5S,EAAOwT,aAAc,EAAGxT,EAAOO,OAAOgQ,mBAAoB,MAAO,KACnH,KAAW,CACLvQ,EAAOsS,QAAQtS,EAAOO,OAAOqS,aAAc,EAAG5S,EAAOO,OAAOgQ,mBAAoB,MAAO,KAC7F,CAGIvQ,EAAOqd,eAEPrd,EAAOyE,YAAc,KAErBzE,EAAOqE,KAAK,QACZrE,EAAOqE,KAAK,aACZ,OAAOrE,CACX,CAEE,OAAA2G,CAAQyd,EAAiB,KAAMC,EAAc,MAC3C,MAAMrkB,EAAS9N,KACf,MAAMqO,OACJA,EAAMiG,IACNA,EAAGE,WACHA,EAAUwC,OACVA,GACElJ,EAEJ,UAAWA,EAAOO,SAAW,aAAeP,EAAOwE,UAAW,CAC5D,OAAO,IACb,CAEIxE,EAAOqE,KAAK,iBAEZrE,EAAOyE,YAAc,MAErBzE,EAAOud,eAEP,GAAIhd,EAAOoP,KAAM,CACf3P,EAAO4V,aACb,CAGI,GAAIyO,EAAa,CACfrkB,EAAO8f,gBACPtZ,EAAI5P,WAAW,SACf8P,EAAW9P,WAAW,SAEtB,GAAIsS,GAAUA,EAAO1Z,OAAQ,CAC3B0Z,EAAOnT,YAAY,CAACwK,EAAOwN,kBAAmBxN,EAAO6O,iBAAkB7O,EAAO8O,eAAgB9O,EAAO+O,gBAAgBnR,KAAK,MAAMvH,WAAW,SAASA,WAAW,0BACvK,CACA,CAEIoJ,EAAOqE,KAAK,WAEZpV,OAAOI,KAAK2Q,EAAOiH,iBAAiB3X,SAAQmzB,IAC1CziB,EAAOxH,IAAIiqB,EAAU,IAGvB,GAAI2B,IAAmB,MAAO,CAC5BpkB,EAAOwG,IAAI,GAAGxG,OAAS,KACvB5C,GAAY4C,EAClB,CAEIA,EAAOwE,UAAY,KACnB,OAAO,IACX,CAEE,qBAAO8f,CAAeC,GACpBr1B,GAAO8yB,GAAkBuC,EAC7B,CAEE,2BAAWvC,GACT,OAAOA,EACX,CAEE,mBAAWZ,GACT,OAAOA,EACX,CAEE,oBAAOoD,CAAclC,GACnB,IAAKL,GAAO7tB,UAAUiuB,YAAaJ,GAAO7tB,UAAUiuB,YAAc,GAClE,MAAMD,EAAUH,GAAO7tB,UAAUiuB,YAEjC,UAAWC,IAAQ,YAAcF,EAAQ1tB,QAAQ4tB,GAAO,EAAG,CACzDF,EAAQluB,KAAKouB,EACnB,CACA,CAEE,UAAOmC,CAAIC,GACT,GAAIhxB,MAAMO,QAAQywB,GAAS,CACzBA,EAAOp1B,SAAQq1B,GAAK1C,GAAOuC,cAAcG,KACzC,OAAO1C,EACb,CAEIA,GAAOuC,cAAcE,GACrB,OAAOzC,EACX,EAIAhzB,OAAOI,KAAK0yB,IAAYzyB,SAAQs1B,IAC9B31B,OAAOI,KAAK0yB,GAAW6C,IAAiBt1B,SAAQu1B,IAC9C5C,GAAO7tB,UAAUywB,GAAe9C,GAAW6C,GAAgBC,EAAY,GACvE,IAEJ5C,GAAOwC,IAAI,CAACrgB,GAAQoB,KC7lBL,SAASsf,IAAS9kB,OAC/BA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,MAAM7S,EAAWF,IACjB,MAAM2B,EAASF,IACfiN,EAAO+kB,SAAW,CAChB/b,QAAS,OAEXvD,EAAa,CACXsf,SAAU,CACR/b,QAAS,MACTgc,eAAgB,KAChBC,WAAY,QAIhB,SAASC,EAAO9sB,GACd,IAAK4H,EAAOgJ,QAAS,OACrB,MACEL,aAAcC,GACZ5I,EACJ,IAAIvI,EAAIW,EACR,GAAIX,EAAEof,cAAepf,EAAIA,EAAEof,cAE3B,MAAMsO,EAAK1tB,EAAE2tB,SAAW3tB,EAAE4tB,SAC1B,MAAMJ,EAAajlB,EAAOO,OAAOwkB,SAASE,WAC1C,MAAMK,EAAWL,GAAcE,IAAO,GACtC,MAAMI,EAAaN,GAAcE,IAAO,GACxC,MAAMK,EAAcL,IAAO,GAC3B,MAAMM,EAAeN,IAAO,GAC5B,MAAMO,EAAYP,IAAO,GACzB,MAAMQ,EAAcR,IAAO,GAE3B,IAAKnlB,EAAOgT,iBAAmBhT,EAAO6H,gBAAkB4d,GAAgBzlB,EAAO8H,cAAgB6d,GAAeJ,GAAa,CACzH,OAAO,KACb,CAEI,IAAKvlB,EAAOiT,iBAAmBjT,EAAO6H,gBAAkB2d,GAAexlB,EAAO8H,cAAgB4d,GAAaJ,GAAW,CACpH,OAAO,KACb,CAEI,GAAI7tB,EAAEmuB,UAAYnuB,EAAEouB,QAAUpuB,EAAEquB,SAAWruB,EAAEsuB,QAAS,CACpD,OAAOrvB,SACb,CAEI,GAAIlF,EAAS3B,eAAiB2B,EAAS3B,cAAcE,WAAayB,EAAS3B,cAAcE,SAASiU,gBAAkB,SAAWxS,EAAS3B,cAAcE,SAASiU,gBAAkB,YAAa,CAC5L,OAAOtN,SACb,CAEI,GAAIsJ,EAAOO,OAAOwkB,SAASC,iBAAmBM,GAAYC,GAAcC,GAAeC,GAAgBC,GAAaC,GAAc,CAChI,IAAIK,EAAS,MAEb,GAAIhmB,EAAOwG,IAAIzO,QAAQ,IAAIiI,EAAOO,OAAO4I,cAAc3Z,OAAS,GAAKwQ,EAAOwG,IAAIzO,QAAQ,IAAIiI,EAAOO,OAAO6O,oBAAoB5f,SAAW,EAAG,CAC1I,OAAOkH,SACf,CAEM,MAAM8P,EAAMxG,EAAOwG,IACnB,MAAMyf,EAAczf,EAAI,GAAGmB,YAC3B,MAAMue,EAAe1f,EAAI,GAAGoB,aAC5B,MAAMue,EAAclzB,EAAOwlB,WAC3B,MAAM2N,EAAenzB,EAAO8rB,YAC5B,MAAMsH,EAAermB,EAAOwG,IAAIzM,SAChC,GAAI6O,EAAKyd,EAAa5rB,MAAQuF,EAAOwG,IAAI,GAAGlM,WAC5C,MAAMgsB,EAAc,CAAC,CAACD,EAAa5rB,KAAM4rB,EAAa7rB,KAAM,CAAC6rB,EAAa5rB,KAAOwrB,EAAaI,EAAa7rB,KAAM,CAAC6rB,EAAa5rB,KAAM4rB,EAAa7rB,IAAM0rB,GAAe,CAACG,EAAa5rB,KAAOwrB,EAAaI,EAAa7rB,IAAM0rB,IAE5N,IAAK,IAAIzxB,EAAI,EAAGA,EAAI6xB,EAAY92B,OAAQiF,GAAK,EAAG,CAC9C,MAAMwqB,EAAQqH,EAAY7xB,GAE1B,GAAIwqB,EAAM,IAAM,GAAKA,EAAM,IAAMkH,GAAelH,EAAM,IAAM,GAAKA,EAAM,IAAMmH,EAAc,CACzF,GAAInH,EAAM,KAAO,GAAKA,EAAM,KAAO,EAAG,SAEtC+G,EAAS,IACnB,CACA,CAEM,IAAKA,EAAQ,OAAOtvB,SAC1B,CAEI,GAAIsJ,EAAO6H,eAAgB,CACzB,GAAIyd,GAAYC,GAAcC,GAAeC,EAAc,CACzD,GAAIhuB,EAAEihB,eAAgBjhB,EAAEihB,sBAAsBjhB,EAAE8uB,YAAc,KACtE,CAEM,IAAKhB,GAAcE,KAAkB7c,IAAQ0c,GAAYE,IAAgB5c,EAAK5I,EAAOyT,YACrF,IAAK6R,GAAYE,KAAiB5c,IAAQ2c,GAAcE,IAAiB7c,EAAK5I,EAAOkU,WAC3F,KAAW,CACL,GAAIoR,GAAYC,GAAcG,GAAaC,EAAa,CACtD,GAAIluB,EAAEihB,eAAgBjhB,EAAEihB,sBAAsBjhB,EAAE8uB,YAAc,KACtE,CAEM,GAAIhB,GAAcI,EAAa3lB,EAAOyT,YACtC,GAAI6R,GAAYI,EAAW1lB,EAAOkU,WACxC,CAEI7P,EAAK,WAAY8gB,GACjB,OAAOzuB,SACX,CAEE,SAASkoB,IACP,GAAI5e,EAAO+kB,SAAS/b,QAAS,OAC7BjU,EAAEvD,GAAU0F,GAAG,UAAWguB,GAC1BllB,EAAO+kB,SAAS/b,QAAU,IAC9B,CAEE,SAAS2V,IACP,IAAK3e,EAAO+kB,SAAS/b,QAAS,OAC9BjU,EAAEvD,GAAUgH,IAAI,UAAW0sB,GAC3BllB,EAAO+kB,SAAS/b,QAAU,KAC9B,CAEE9R,EAAG,QAAQ,KACT,GAAI8I,EAAOO,OAAOwkB,SAAS/b,QAAS,CAClC4V,GACN,KAEE1nB,EAAG,WAAW,KACZ,GAAI8I,EAAO+kB,SAAS/b,QAAS,CAC3B2V,GACN,KAEE1vB,OAAOiZ,OAAOlI,EAAO+kB,SAAU,CAC7BnG,SACAD,WAEJ,CCjIe,SAAS6H,GAA0BxmB,EAAQge,EAAgBzd,EAAQkmB,GAChF,MAAMj1B,EAAWF,IAEjB,GAAI0O,EAAOO,OAAO8gB,eAAgB,CAChCpyB,OAAOI,KAAKo3B,GAAYn3B,SAAQC,IAC9B,IAAKgR,EAAOhR,IAAQgR,EAAOuhB,OAAS,KAAM,CACxC,IAAI4E,EAAU1mB,EAAOwG,IAAIlW,SAAS,IAAIm2B,EAAWl3B,MAAQ,GAEzD,IAAKm3B,EAAS,CACZA,EAAUl1B,EAASnB,cAAc,OACjCq2B,EAAQxwB,UAAYuwB,EAAWl3B,GAC/ByQ,EAAOwG,IAAI9K,OAAOgrB,EAC5B,CAEQnmB,EAAOhR,GAAOm3B,EACd1I,EAAezuB,GAAOm3B,CAC9B,IAEA,CAEE,OAAOnmB,CACT,CCtBe,SAASomB,GAAkBnxB,EAAU,IAClD,MAAO,IAAIA,EAAQP,OAAOiJ,QAAQ,cAAe,QAChDA,QAAQ,KAAM,MACjB,CCAe,SAAS0oB,IAAW5mB,OACjCA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,MAAMwiB,EAAM,oBACZphB,EAAa,CACXqhB,WAAY,CACV9yB,GAAI,KACJ+yB,cAAe,OACfC,UAAW,MACXC,YAAa,MACbC,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,oBAAqB,MACrBtQ,KAAM,UAENuQ,eAAgB,MAChBC,mBAAoB,EACpBC,sBAAuBC,GAAUA,EACjCC,oBAAqBD,GAAUA,EAC/BE,YAAa,GAAGf,WAChBgB,kBAAmB,GAAGhB,kBACtBiB,cAAe,GAAGjB,KAClBkB,aAAc,GAAGlB,YACjBmB,WAAY,GAAGnB,UACfoB,YAAa,GAAGpB,WAChBqB,qBAAsB,GAAGrB,qBACzBsB,yBAA0B,GAAGtB,yBAC7BuB,eAAgB,GAAGvB,cACnBwB,UAAW,GAAGxB,SACdyB,gBAAiB,GAAGzB,eACpB0B,cAAe,GAAG1B,gBAGtB7mB,EAAO8mB,WAAa,CAClB9yB,GAAI,KACJwS,IAAK,KACLgiB,QAAS,IAEX,IAAIC,EACJ,IAAIC,EAAqB,EAEzB,SAASC,IACP,OAAQ3oB,EAAOO,OAAOumB,WAAW9yB,KAAOgM,EAAO8mB,WAAW9yB,KAAOgM,EAAO8mB,WAAWtgB,KAAOxG,EAAO8mB,WAAWtgB,IAAIhX,SAAW,CAC/H,CAEE,SAASo5B,EAAeC,EAAWC,GACjC,MAAMjB,kBACJA,GACE7nB,EAAOO,OAAOumB,WAClB+B,EAAUC,KAAYvzB,SAAS,GAAGsyB,KAAqBiB,KAAYA,KAAYvzB,SAAS,GAAGsyB,KAAqBiB,KAAYA,IAChI,CAEE,SAASjY,IAEP,MAAMjI,EAAM5I,EAAO4I,IACnB,MAAMrI,EAASP,EAAOO,OAAOumB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAMvf,EAAepJ,EAAO+I,SAAW/I,EAAOO,OAAOwI,QAAQC,QAAUhJ,EAAO+I,QAAQG,OAAO1Z,OAASwQ,EAAOkJ,OAAO1Z,OACpH,MAAMgX,EAAMxG,EAAO8mB,WAAWtgB,IAE9B,IAAI1F,EACJ,MAAMioB,EAAQ/oB,EAAOO,OAAOoP,KAAOzO,KAAKsM,MAAMpE,EAAepJ,EAAOwT,aAAe,GAAKxT,EAAOO,OAAOoL,gBAAkB3L,EAAOqJ,SAAS7Z,OAExI,GAAIwQ,EAAOO,OAAOoP,KAAM,CACtB7O,EAAUI,KAAKsM,MAAMxN,EAAOyN,YAAczN,EAAOwT,cAAgBxT,EAAOO,OAAOoL,gBAE/E,GAAI7K,EAAUsI,EAAe,EAAIpJ,EAAOwT,aAAe,EAAG,CACxD1S,GAAWsI,EAAepJ,EAAOwT,aAAe,CACxD,CAEM,GAAI1S,EAAUioB,EAAQ,EAAGjoB,GAAWioB,EACpC,GAAIjoB,EAAU,GAAKd,EAAOO,OAAOyoB,iBAAmB,UAAWloB,EAAUioB,EAAQjoB,CACvF,MAAW,UAAWd,EAAO2M,YAAc,YAAa,CAClD7L,EAAUd,EAAO2M,SACvB,KAAW,CACL7L,EAAUd,EAAOyN,aAAe,CACtC,CAGI,GAAIlN,EAAOyW,OAAS,WAAahX,EAAO8mB,WAAW0B,SAAWxoB,EAAO8mB,WAAW0B,QAAQh5B,OAAS,EAAG,CAClG,MAAMg5B,EAAUxoB,EAAO8mB,WAAW0B,QAClC,IAAIS,EACJ,IAAIC,EACJ,IAAIC,EAEJ,GAAI5oB,EAAOgnB,eAAgB,CACzBkB,EAAaD,EAAQhtB,GAAG,GAAGwE,EAAO6H,eAAiB,aAAe,eAAe,MACjFrB,EAAI9L,IAAIsF,EAAO6H,eAAiB,QAAU,SAAU,GAAG4gB,GAAcloB,EAAOinB,mBAAqB,QAEjG,GAAIjnB,EAAOinB,mBAAqB,GAAKxnB,EAAOkQ,gBAAkBxZ,UAAW,CACvEgyB,GAAsB5nB,GAAWd,EAAOkQ,cAAgBlQ,EAAOwT,cAAgB,GAE/E,GAAIkV,EAAqBnoB,EAAOinB,mBAAqB,EAAG,CACtDkB,EAAqBnoB,EAAOinB,mBAAqB,CAC7D,MAAiB,GAAIkB,EAAqB,EAAG,CACjCA,EAAqB,CACjC,CACA,CAEQO,EAAa/nB,KAAKC,IAAIL,EAAU4nB,EAAoB,GACpDQ,EAAYD,GAAc/nB,KAAKE,IAAIonB,EAAQh5B,OAAQ+Q,EAAOinB,oBAAsB,GAChF2B,GAAYD,EAAYD,GAAc,CAC9C,CAEMT,EAAQzyB,YAAY,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASL,KAAI0zB,GAAU,GAAG7oB,EAAOsnB,oBAAoBuB,MAAUjrB,KAAK,MAE3I,GAAIqI,EAAIhX,OAAS,EAAG,CAClBg5B,EAAQ3tB,MAAKwuB,IACX,MAAMC,EAAUv0B,EAAEs0B,GAClB,MAAME,EAAcD,EAAQxuB,QAE5B,GAAIyuB,IAAgBzoB,EAAS,CAC3BwoB,EAAQ/zB,SAASgL,EAAOsnB,kBACpC,CAEU,GAAItnB,EAAOgnB,eAAgB,CACzB,GAAIgC,GAAeN,GAAcM,GAAeL,EAAW,CACzDI,EAAQ/zB,SAAS,GAAGgL,EAAOsnB,yBACzC,CAEY,GAAI0B,IAAgBN,EAAY,CAC9BL,EAAeU,EAAS,OACtC,CAEY,GAAIC,IAAgBL,EAAW,CAC7BN,EAAeU,EAAS,OACtC,CACA,IAEA,KAAa,CACL,MAAMA,EAAUd,EAAQhtB,GAAGsF,GAC3B,MAAMyoB,EAAcD,EAAQxuB,QAC5BwuB,EAAQ/zB,SAASgL,EAAOsnB,mBAExB,GAAItnB,EAAOgnB,eAAgB,CACzB,MAAMiC,EAAwBhB,EAAQhtB,GAAGytB,GACzC,MAAMQ,EAAuBjB,EAAQhtB,GAAG0tB,GAExC,IAAK,IAAIz0B,EAAIw0B,EAAYx0B,GAAKy0B,EAAWz0B,GAAK,EAAG,CAC/C+zB,EAAQhtB,GAAG/G,GAAGc,SAAS,GAAGgL,EAAOsnB,yBAC7C,CAEU,GAAI7nB,EAAOO,OAAOoP,KAAM,CACtB,GAAI4Z,GAAef,EAAQh5B,OAAQ,CACjC,IAAK,IAAIiF,EAAI8L,EAAOinB,mBAAoB/yB,GAAK,EAAGA,GAAK,EAAG,CACtD+zB,EAAQhtB,GAAGgtB,EAAQh5B,OAASiF,GAAGc,SAAS,GAAGgL,EAAOsnB,yBAClE,CAEcW,EAAQhtB,GAAGgtB,EAAQh5B,OAAS+Q,EAAOinB,mBAAqB,GAAGjyB,SAAS,GAAGgL,EAAOsnB,yBAC5F,KAAmB,CACLe,EAAeY,EAAuB,QACtCZ,EAAea,EAAsB,OACnD,CACA,KAAiB,CACLb,EAAeY,EAAuB,QACtCZ,EAAea,EAAsB,OACjD,CACA,CACA,CAEM,GAAIlpB,EAAOgnB,eAAgB,CACzB,MAAMmC,EAAuBxoB,KAAKE,IAAIonB,EAAQh5B,OAAQ+Q,EAAOinB,mBAAqB,GAClF,MAAMmC,GAAiBlB,EAAaiB,EAAuBjB,GAAc,EAAIU,EAAWV,EACxF,MAAMmB,EAAahhB,EAAM,QAAU,OACnC4f,EAAQ9tB,IAAIsF,EAAO6H,eAAiB+hB,EAAa,MAAO,GAAGD,MACnE,CACA,CAEI,GAAIppB,EAAOyW,OAAS,WAAY,CAC9BxQ,EAAI3J,KAAK8pB,GAAkBpmB,EAAOwnB,eAAe/sB,KAAKuF,EAAOknB,sBAAsB3mB,EAAU,IAC7F0F,EAAI3J,KAAK8pB,GAAkBpmB,EAAOynB,aAAahtB,KAAKuF,EAAOonB,oBAAoBoB,GACrF,CAEI,GAAIxoB,EAAOyW,OAAS,cAAe,CACjC,IAAI6S,EAEJ,GAAItpB,EAAO+mB,oBAAqB,CAC9BuC,EAAuB7pB,EAAO6H,eAAiB,WAAa,YACpE,KAAa,CACLgiB,EAAuB7pB,EAAO6H,eAAiB,aAAe,UACtE,CAEM,MAAMiiB,GAAShpB,EAAU,GAAKioB,EAC9B,IAAIgB,EAAS,EACb,IAAIC,EAAS,EAEb,GAAIH,IAAyB,aAAc,CACzCE,EAASD,CACjB,KAAa,CACLE,EAASF,CACjB,CAEMtjB,EAAI3J,KAAK8pB,GAAkBpmB,EAAO2nB,uBAAuBpxB,UAAU,6BAA6BizB,aAAkBC,MAAWjzB,WAAWiJ,EAAOO,OAAOC,MAC5J,CAEI,GAAID,EAAOyW,OAAS,UAAYzW,EAAO8mB,aAAc,CACnD7gB,EAAIxR,KAAKuL,EAAO8mB,aAAarnB,EAAQc,EAAU,EAAGioB,IAClD1kB,EAAK,mBAAoBmC,EAAI,GACnC,KAAW,CACLnC,EAAK,mBAAoBmC,EAAI,GACnC,CAEI,GAAIxG,EAAOO,OAAOwM,eAAiB/M,EAAOgJ,QAAS,CACjDxC,EAAIxG,EAAOgW,SAAW,WAAa,eAAezV,EAAO8nB,UAC/D,CACA,CAEE,SAAS4B,IAEP,MAAM1pB,EAASP,EAAOO,OAAOumB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAMvf,EAAepJ,EAAO+I,SAAW/I,EAAOO,OAAOwI,QAAQC,QAAUhJ,EAAO+I,QAAQG,OAAO1Z,OAASwQ,EAAOkJ,OAAO1Z,OACpH,MAAMgX,EAAMxG,EAAO8mB,WAAWtgB,IAC9B,IAAI0jB,EAAiB,GAErB,GAAI3pB,EAAOyW,OAAS,UAAW,CAC7B,IAAImT,EAAkBnqB,EAAOO,OAAOoP,KAAOzO,KAAKsM,MAAMpE,EAAepJ,EAAOwT,aAAe,GAAKxT,EAAOO,OAAOoL,gBAAkB3L,EAAOqJ,SAAS7Z,OAEhJ,GAAIwQ,EAAOO,OAAOoa,UAAY3a,EAAOO,OAAOoa,SAAS3R,UAAYhJ,EAAOO,OAAOoP,MAAQwa,EAAkB/gB,EAAc,CACrH+gB,EAAkB/gB,CAC1B,CAEM,IAAK,IAAI3U,EAAI,EAAGA,EAAI01B,EAAiB11B,GAAK,EAAG,CAC3C,GAAI8L,EAAO2mB,aAAc,CACvBgD,GAAkB3pB,EAAO2mB,aAAa5yB,KAAK0L,EAAQvL,EAAG8L,EAAOqnB,YACvE,KAAe,CACLsC,GAAkB,IAAI3pB,EAAOwmB,wBAAwBxmB,EAAOqnB,kBAAkBrnB,EAAOwmB,gBAC/F,CACA,CAEMvgB,EAAIxR,KAAKk1B,GACTlqB,EAAO8mB,WAAW0B,QAAUhiB,EAAI3J,KAAK8pB,GAAkBpmB,EAAOqnB,aACpE,CAEI,GAAIrnB,EAAOyW,OAAS,WAAY,CAC9B,GAAIzW,EAAO6mB,eAAgB,CACzB8C,EAAiB3pB,EAAO6mB,eAAe9yB,KAAK0L,EAAQO,EAAOwnB,aAAcxnB,EAAOynB,WACxF,KAAa,CACLkC,EAAiB,gBAAgB3pB,EAAOwnB,wBAA0B,MAAQ,gBAAgBxnB,EAAOynB,qBACzG,CAEMxhB,EAAIxR,KAAKk1B,EACf,CAEI,GAAI3pB,EAAOyW,OAAS,cAAe,CACjC,GAAIzW,EAAO4mB,kBAAmB,CAC5B+C,EAAiB3pB,EAAO4mB,kBAAkB7yB,KAAK0L,EAAQO,EAAO2nB,qBACtE,KAAa,CACLgC,EAAiB,gBAAgB3pB,EAAO2nB,+BAChD,CAEM1hB,EAAIxR,KAAKk1B,EACf,CAEI,GAAI3pB,EAAOyW,OAAS,SAAU,CAC5B3S,EAAK,mBAAoBrE,EAAO8mB,WAAWtgB,IAAI,GACrD,CACA,CAEE,SAASH,IACPrG,EAAOO,OAAOumB,WAAaN,GAA0BxmB,EAAQA,EAAOge,eAAe8I,WAAY9mB,EAAOO,OAAOumB,WAAY,CACvH9yB,GAAI,sBAEN,MAAMuM,EAASP,EAAOO,OAAOumB,WAC7B,IAAKvmB,EAAOvM,GAAI,OAChB,IAAIwS,EAAMzR,EAAEwL,EAAOvM,IACnB,GAAIwS,EAAIhX,SAAW,EAAG,OAEtB,GAAIwQ,EAAOO,OAAOghB,0BAA4BhhB,EAAOvM,KAAO,UAAYwS,EAAIhX,OAAS,EAAG,CACtFgX,EAAMxG,EAAOwG,IAAI3J,KAAK0D,EAAOvM,IAE7B,GAAIwS,EAAIhX,OAAS,EAAG,CAClBgX,EAAMA,EAAInS,QAAOL,IACf,GAAIe,EAAEf,GAAI+D,QAAQ,WAAW,KAAOiI,EAAOhM,GAAI,OAAO,MACtD,OAAO,IAAI,GAErB,CACA,CAEI,GAAIuM,EAAOyW,OAAS,WAAazW,EAAOymB,UAAW,CACjDxgB,EAAIjR,SAASgL,EAAO6nB,eAC1B,CAEI5hB,EAAIjR,SAASgL,EAAOunB,cAAgBvnB,EAAOyW,MAC3CxQ,EAAIjR,SAASgL,EAAOunB,cAAgB9nB,EAAOO,OAAO4R,WAElD,GAAI5R,EAAOyW,OAAS,WAAazW,EAAOgnB,eAAgB,CACtD/gB,EAAIjR,SAAS,GAAGgL,EAAOunB,gBAAgBvnB,EAAOyW,gBAC9C0R,EAAqB,EAErB,GAAInoB,EAAOinB,mBAAqB,EAAG,CACjCjnB,EAAOinB,mBAAqB,CACpC,CACA,CAEI,GAAIjnB,EAAOyW,OAAS,eAAiBzW,EAAO+mB,oBAAqB,CAC/D9gB,EAAIjR,SAASgL,EAAO4nB,yBAC1B,CAEI,GAAI5nB,EAAOymB,UAAW,CACpBxgB,EAAItP,GAAG,QAASyvB,GAAkBpmB,EAAOqnB,cAAc,SAASxL,EAAQ3kB,GACtEA,EAAEihB,iBACF,IAAI5d,EAAQ/F,EAAE7C,MAAM4I,QAAUkF,EAAOO,OAAOoL,eAC5C,GAAI3L,EAAOO,OAAOoP,KAAM7U,GAASkF,EAAOwT,aACxCxT,EAAOsS,QAAQxX,EACvB,GACA,CAEI7L,OAAOiZ,OAAOlI,EAAO8mB,WAAY,CAC/BtgB,MACAxS,GAAIwS,EAAI,KAGV,IAAKxG,EAAOgJ,QAAS,CACnBxC,EAAIjR,SAASgL,EAAO8nB,UAC1B,CACA,CAEE,SAAS1hB,IACP,MAAMpG,EAASP,EAAOO,OAAOumB,WAC7B,GAAI6B,IAAwB,OAC5B,MAAMniB,EAAMxG,EAAO8mB,WAAWtgB,IAC9BA,EAAIzQ,YAAYwK,EAAO0nB,aACvBzhB,EAAIzQ,YAAYwK,EAAOunB,cAAgBvnB,EAAOyW,MAC9CxQ,EAAIzQ,YAAYwK,EAAOunB,cAAgB9nB,EAAOO,OAAO4R,WACrD,GAAInS,EAAO8mB,WAAW0B,SAAWxoB,EAAO8mB,WAAW0B,QAAQzyB,YAAaiK,EAAO8mB,WAAW0B,QAAQzyB,YAAYwK,EAAOsnB,mBAErH,GAAItnB,EAAOymB,UAAW,CACpBxgB,EAAIhO,IAAI,QAASmuB,GAAkBpmB,EAAOqnB,aAChD,CACA,CAEE1wB,EAAG,QAAQ,KACTmP,IACA4jB,IACApZ,GAAQ,IAEV3Z,EAAG,qBAAqB,KACtB,GAAI8I,EAAOO,OAAOoP,KAAM,CACtBkB,GACN,MAAW,UAAW7Q,EAAO2M,YAAc,YAAa,CAClDkE,GACN,KAEE3Z,EAAG,mBAAmB,KACpB,IAAK8I,EAAOO,OAAOoP,KAAM,CACvBkB,GACN,KAEE3Z,EAAG,sBAAsB,KACvB,GAAI8I,EAAOO,OAAOoP,KAAM,CACtBsa,IACApZ,GACN,KAEE3Z,EAAG,wBAAwB,KACzB,IAAK8I,EAAOO,OAAOoP,KAAM,CACvBsa,IACApZ,GACN,KAEE3Z,EAAG,WAAW,KACZyP,GAAS,IAEXzP,EAAG,kBAAkB,KACnB,MAAMsP,IACJA,GACExG,EAAO8mB,WAEX,GAAItgB,EAAK,CACPA,EAAIxG,EAAOgJ,QAAU,cAAgB,YAAYhJ,EAAOO,OAAOumB,WAAWuB,UAChF,KAEEnxB,EAAG,eAAe,KAChB2Z,GAAQ,IAEV3Z,EAAG,SAAS,CAACkzB,EAAI3yB,KACf,MAAM4yB,EAAW5yB,EAAEtI,OACnB,MAAMqX,IACJA,GACExG,EAAO8mB,WAEX,GAAI9mB,EAAOO,OAAOumB,WAAW9yB,IAAMgM,EAAOO,OAAOumB,WAAWG,aAAezgB,EAAIhX,OAAS,IAAMuF,EAAEs1B,GAAUj0B,SAAS4J,EAAOO,OAAOumB,WAAWc,aAAc,CACxJ,GAAI5nB,EAAO2b,aAAe3b,EAAO2b,WAAWC,QAAUyO,IAAarqB,EAAO2b,WAAWC,QAAU5b,EAAO2b,WAAWE,QAAUwO,IAAarqB,EAAO2b,WAAWE,QAAS,OACnK,MAAMyO,EAAW9jB,EAAIpQ,SAAS4J,EAAOO,OAAOumB,WAAWmB,aAEvD,GAAIqC,IAAa,KAAM,CACrBjmB,EAAK,iBACb,KAAa,CACLA,EAAK,iBACb,CAEMmC,EAAIvQ,YAAY+J,EAAOO,OAAOumB,WAAWmB,YAC/C,KAEEh5B,OAAOiZ,OAAOlI,EAAO8mB,WAAY,CAC/BmD,SACApZ,SACAxK,OACAM,WAEJ,CCrZe,SAAS4jB,IAAUvqB,OAChCA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,MAAM7S,EAAWF,IACjB,IAAI6lB,EAAY,MAChB,IAAIqT,EAAU,KACd,IAAIC,EAAc,KAClB,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJplB,EAAa,CACXqlB,UAAW,CACT92B,GAAI,KACJ22B,SAAU,OACVI,KAAM,MACNC,UAAW,MACXC,cAAe,KACf5C,UAAW,wBACX6C,UAAW,2BAGflrB,EAAO8qB,UAAY,CACjB92B,GAAI,KACJm3B,OAAQ,KACR3kB,IAAK,KACL4kB,QAAS,MAGX,SAASna,IACP,IAAKjR,EAAOO,OAAOuqB,UAAU92B,KAAOgM,EAAO8qB,UAAU92B,GAAI,OACzD,MAAM82B,UACJA,EACAniB,aAAcC,EAAG3H,SACjBA,GACEjB,EACJ,MAAMorB,QACJA,EAAO5kB,IACPA,GACEskB,EACJ,MAAMvqB,EAASP,EAAOO,OAAOuqB,UAC7B,IAAIO,EAAUV,EACd,IAAIW,GAAUV,EAAYD,GAAY1pB,EAEtC,GAAI2H,EAAK,CACP0iB,GAAUA,EAEV,GAAIA,EAAS,EAAG,CACdD,EAAUV,EAAWW,EACrBA,EAAS,CACjB,MAAa,IAAKA,EAASX,EAAWC,EAAW,CACzCS,EAAUT,EAAYU,CAC9B,CACA,MAAW,GAAIA,EAAS,EAAG,CACrBD,EAAUV,EAAWW,EACrBA,EAAS,CACf,MAAW,GAAIA,EAASX,EAAWC,EAAW,CACxCS,EAAUT,EAAYU,CAC5B,CAEI,GAAItrB,EAAO6H,eAAgB,CACzBujB,EAAQt0B,UAAU,eAAew0B,cACjCF,EAAQ,GAAG56B,MAAMwS,MAAQ,GAAGqoB,KAClC,KAAW,CACLD,EAAQt0B,UAAU,oBAAoBw0B,WACtCF,EAAQ,GAAG56B,MAAM0S,OAAS,GAAGmoB,KACnC,CAEI,GAAI9qB,EAAOwqB,KAAM,CACft4B,aAAa+3B,GACbhkB,EAAI,GAAGhW,MAAM+6B,QAAU,EACvBf,EAAUh4B,YAAW,KACnBgU,EAAI,GAAGhW,MAAM+6B,QAAU,EACvB/kB,EAAIzP,WAAW,IAAI,GAClB,IACT,CACA,CAEE,SAASsW,EAAcrW,GACrB,IAAKgJ,EAAOO,OAAOuqB,UAAU92B,KAAOgM,EAAO8qB,UAAU92B,GAAI,OACzDgM,EAAO8qB,UAAUM,QAAQr0B,WAAWC,EACxC,CAEE,SAAS0Q,IACP,IAAK1H,EAAOO,OAAOuqB,UAAU92B,KAAOgM,EAAO8qB,UAAU92B,GAAI,OACzD,MAAM82B,UACJA,GACE9qB,EACJ,MAAMorB,QACJA,EAAO5kB,IACPA,GACEskB,EACJM,EAAQ,GAAG56B,MAAMwS,MAAQ,GACzBooB,EAAQ,GAAG56B,MAAM0S,OAAS,GAC1B0nB,EAAY5qB,EAAO6H,eAAiBrB,EAAI,GAAG7M,YAAc6M,EAAI,GAAG1M,aAChE+wB,EAAU7qB,EAAOmI,MAAQnI,EAAOiK,YAAcjK,EAAOO,OAAOkJ,oBAAsBzJ,EAAOO,OAAO8J,eAAiBrK,EAAOqJ,SAAS,GAAK,IAEtI,GAAIrJ,EAAOO,OAAOuqB,UAAUH,WAAa,OAAQ,CAC/CA,EAAWC,EAAYC,CAC7B,KAAW,CACLF,EAAW5iB,SAAS/H,EAAOO,OAAOuqB,UAAUH,SAAU,GAC5D,CAEI,GAAI3qB,EAAO6H,eAAgB,CACzBujB,EAAQ,GAAG56B,MAAMwS,MAAQ,GAAG2nB,KAClC,KAAW,CACLS,EAAQ,GAAG56B,MAAM0S,OAAS,GAAGynB,KACnC,CAEI,GAAIE,GAAW,EAAG,CAChBrkB,EAAI,GAAGhW,MAAMg7B,QAAU,MAC7B,KAAW,CACLhlB,EAAI,GAAGhW,MAAMg7B,QAAU,EAC7B,CAEI,GAAIxrB,EAAOO,OAAOuqB,UAAUC,KAAM,CAChCvkB,EAAI,GAAGhW,MAAM+6B,QAAU,CAC7B,CAEI,GAAIvrB,EAAOO,OAAOwM,eAAiB/M,EAAOgJ,QAAS,CACjD8hB,EAAUtkB,IAAIxG,EAAOgW,SAAW,WAAa,eAAehW,EAAOO,OAAOuqB,UAAUzC,UAC1F,CACA,CAEE,SAASoD,EAAmBh0B,GAC1B,GAAIuI,EAAO6H,eAAgB,CACzB,OAAOpQ,EAAEuf,OAAS,cAAgBvf,EAAEuf,OAAS,YAAcvf,EAAEsgB,cAAc,GAAG2T,QAAUj0B,EAAEi0B,OAChG,CAEI,OAAOj0B,EAAEuf,OAAS,cAAgBvf,EAAEuf,OAAS,YAAcvf,EAAEsgB,cAAc,GAAG4T,QAAUl0B,EAAEk0B,OAC9F,CAEE,SAASC,EAAgBn0B,GACvB,MAAMqzB,UACJA,EACAniB,aAAcC,GACZ5I,EACJ,MAAMwG,IACJA,GACEskB,EACJ,IAAIe,EACJA,GAAiBJ,EAAmBh0B,GAAK+O,EAAIzM,SAASiG,EAAO6H,eAAiB,OAAS,QAAU6iB,IAAiB,KAAOA,EAAeC,EAAW,KAAOC,EAAYD,GACtKkB,EAAgB3qB,KAAKC,IAAID,KAAKE,IAAIyqB,EAAe,GAAI,GAErD,GAAIjjB,EAAK,CACPijB,EAAgB,EAAIA,CAC1B,CAEI,MAAM/C,EAAW9oB,EAAOmO,gBAAkBnO,EAAO4O,eAAiB5O,EAAOmO,gBAAkB0d,EAC3F7rB,EAAOyO,eAAeqa,GACtB9oB,EAAOiR,aAAa6X,GACpB9oB,EAAOgQ,oBACPhQ,EAAOkP,qBACX,CAEE,SAAS4c,EAAYr0B,GACnB,MAAM8I,EAASP,EAAOO,OAAOuqB,UAC7B,MAAMA,UACJA,EAASpkB,WACTA,GACE1G,EACJ,MAAMwG,IACJA,EAAG4kB,QACHA,GACEN,EACJ3T,EAAY,KACZuT,EAAejzB,EAAEtI,SAAWi8B,EAAQ,IAAM3zB,EAAEtI,SAAWi8B,EAAUK,EAAmBh0B,GAAKA,EAAEtI,OAAO8K,wBAAwB+F,EAAO6H,eAAiB,OAAS,OAAS,KACpKpQ,EAAEihB,iBACFjhB,EAAE0iB,kBACFzT,EAAW3P,WAAW,KACtBq0B,EAAQr0B,WAAW,KACnB60B,EAAgBn0B,GAChBhF,aAAag4B,GACbjkB,EAAIzP,WAAW,GAEf,GAAIwJ,EAAOwqB,KAAM,CACfvkB,EAAI9L,IAAI,UAAW,EACzB,CAEI,GAAIsF,EAAOO,OAAO+J,QAAS,CACzBtK,EAAO0G,WAAWhM,IAAI,mBAAoB,OAChD,CAEI2J,EAAK,qBAAsB5M,EAC/B,CAEE,SAASs0B,EAAWt0B,GAClB,MAAMqzB,UACJA,EAASpkB,WACTA,GACE1G,EACJ,MAAMwG,IACJA,EAAG4kB,QACHA,GACEN,EACJ,IAAK3T,EAAW,OAChB,GAAI1f,EAAEihB,eAAgBjhB,EAAEihB,sBAAsBjhB,EAAE8uB,YAAc,MAC9DqF,EAAgBn0B,GAChBiP,EAAW3P,WAAW,GACtByP,EAAIzP,WAAW,GACfq0B,EAAQr0B,WAAW,GACnBsN,EAAK,oBAAqB5M,EAC9B,CAEE,SAASu0B,EAAUv0B,GACjB,MAAM8I,EAASP,EAAOO,OAAOuqB,UAC7B,MAAMA,UACJA,EAASpkB,WACTA,GACE1G,EACJ,MAAMwG,IACJA,GACEskB,EACJ,IAAK3T,EAAW,OAChBA,EAAY,MAEZ,GAAInX,EAAOO,OAAO+J,QAAS,CACzBtK,EAAO0G,WAAWhM,IAAI,mBAAoB,IAC1CgM,EAAW3P,WAAW,GAC5B,CAEI,GAAIwJ,EAAOwqB,KAAM,CACft4B,aAAag4B,GACbA,EAAcntB,IAAS,KACrBkJ,EAAI9L,IAAI,UAAW,GACnB8L,EAAIzP,WAAW,IAAI,GAClB,IACT,CAEIsN,EAAK,mBAAoB5M,GAEzB,GAAI8I,EAAO0qB,cAAe,CACxBjrB,EAAO0U,gBACb,CACA,CAEE,SAASxc,EAAO8O,GACd,MAAM8jB,UACJA,EAASlI,iBACTA,EAAgBC,mBAChBA,EAAkBtiB,OAClBA,EAAMoB,QACNA,GACE3B,EACJ,MAAMwG,EAAMskB,EAAUtkB,IACtB,MAAMrX,EAASqX,EAAI,GACnB,MAAMylB,EAAiBtqB,EAAQM,iBAAmB1B,EAAO0c,iBAAmB,CAC1EC,QAAS,MACT3lB,QAAS,OACP,MACJ,MAAM0K,EAAkBN,EAAQM,iBAAmB1B,EAAO0c,iBAAmB,CAC3EC,QAAS,KACT3lB,QAAS,OACP,MACJ,IAAKpI,EAAQ,OACb,MAAM+8B,EAAcllB,IAAW,KAAO,mBAAqB,sBAE3D,IAAKrF,EAAQI,MAAO,CAClB5S,EAAO+8B,GAAarJ,EAAmB/F,MAAOgP,EAAaG,GAC3Dz6B,EAAS06B,GAAarJ,EAAmB9F,KAAMgP,EAAYE,GAC3Dz6B,EAAS06B,GAAarJ,EAAmB7F,IAAKgP,EAAW/pB,EAC/D,KAAW,CACL9S,EAAO+8B,GAAatJ,EAAiB9F,MAAOgP,EAAaG,GACzD98B,EAAO+8B,GAAatJ,EAAiB7F,KAAMgP,EAAYE,GACvD98B,EAAO+8B,GAAatJ,EAAiB5F,IAAKgP,EAAW/pB,EAC3D,CACA,CAEE,SAASkqB,IACP,IAAKnsB,EAAOO,OAAOuqB,UAAU92B,GAAI,OACjCkE,EAAO,KACX,CAEE,SAASk0B,IACP,IAAKpsB,EAAOO,OAAOuqB,UAAU92B,GAAI,OACjCkE,EAAO,MACX,CAEE,SAASmO,IACP,MAAMykB,UACJA,EACAtkB,IAAK6lB,GACHrsB,EACJA,EAAOO,OAAOuqB,UAAYtE,GAA0BxmB,EAAQA,EAAOge,eAAe8M,UAAW9qB,EAAOO,OAAOuqB,UAAW,CACpH92B,GAAI,qBAEN,MAAMuM,EAASP,EAAOO,OAAOuqB,UAC7B,IAAKvqB,EAAOvM,GAAI,OAChB,IAAIwS,EAAMzR,EAAEwL,EAAOvM,IAEnB,GAAIgM,EAAOO,OAAOghB,0BAA4BhhB,EAAOvM,KAAO,UAAYwS,EAAIhX,OAAS,GAAK68B,EAAUxvB,KAAK0D,EAAOvM,IAAIxE,SAAW,EAAG,CAChIgX,EAAM6lB,EAAUxvB,KAAK0D,EAAOvM,GAClC,CAEI,IAAIo3B,EAAU5kB,EAAI3J,KAAK,IAAImD,EAAOO,OAAOuqB,UAAUI,aAEnD,GAAIE,EAAQ57B,SAAW,EAAG,CACxB47B,EAAUr2B,EAAE,eAAeiL,EAAOO,OAAOuqB,UAAUI,qBACnD1kB,EAAI9K,OAAO0vB,EACjB,CAEIn8B,OAAOiZ,OAAO4iB,EAAW,CACvBtkB,MACAxS,GAAIwS,EAAI,GACR4kB,UACAD,OAAQC,EAAQ,KAGlB,GAAI7qB,EAAOyqB,UAAW,CACpBmB,GACN,CAEI,GAAI3lB,EAAK,CACPA,EAAIxG,EAAOgJ,QAAU,cAAgB,YAAYhJ,EAAOO,OAAOuqB,UAAUzC,UAC/E,CACA,CAEE,SAAS1hB,IACPylB,GACJ,CAEEl1B,EAAG,QAAQ,KACTmP,IACAqB,IACAuJ,GAAc,IAEhB/Z,EAAG,4CAA4C,KAC7CwQ,GAAY,IAEdxQ,EAAG,gBAAgB,KACjB+Z,GAAc,IAEhB/Z,EAAG,iBAAiB,CAACkzB,EAAIpzB,KACvBqW,EAAcrW,EAAS,IAEzBE,EAAG,kBAAkB,KACnB,MAAMsP,IACJA,GACExG,EAAO8qB,UAEX,GAAItkB,EAAK,CACPA,EAAIxG,EAAOgJ,QAAU,cAAgB,YAAYhJ,EAAOO,OAAOuqB,UAAUzC,UAC/E,KAEEnxB,EAAG,WAAW,KACZyP,GAAS,IAEX1X,OAAOiZ,OAAOlI,EAAO8qB,UAAW,CAC9BpjB,aACAuJ,eACA5K,OACAM,WAEJ,CCrWe,SAAS2lB,IAAKtsB,OAC3BA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,MAAMpR,EAASF,IACf0S,EAAa,CACX8mB,KAAM,CACJvjB,QAAS,MACTwjB,SAAU,EACVtN,SAAU,EACV/oB,OAAQ,KACRs2B,eAAgB,wBAChBC,iBAAkB,yBAGtB1sB,EAAOusB,KAAO,CACZvjB,QAAS,OAEX,IAAI2jB,EAAe,EACnB,IAAIC,EAAY,MAChB,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJ,MAAMC,EAAU,CACdC,SAAUv2B,UACVw2B,WAAYx2B,UACZy2B,YAAaz2B,UACb02B,SAAU12B,UACV22B,aAAc32B,UACd81B,SAAU,GAEZ,MAAMpM,EAAQ,CACZjJ,UAAWzgB,UACX0gB,QAAS1gB,UACTohB,SAAUphB,UACVuhB,SAAUvhB,UACV42B,KAAM52B,UACN62B,KAAM72B,UACN82B,KAAM92B,UACN+2B,KAAM/2B,UACNsM,MAAOtM,UACPwM,OAAQxM,UACRyhB,OAAQzhB,UACR0hB,OAAQ1hB,UACRg3B,aAAc,GACdC,eAAgB,IAElB,MAAMjL,EAAW,CACfvR,EAAGza,UACH0a,EAAG1a,UACHk3B,cAAel3B,UACfm3B,cAAen3B,UACfo3B,SAAUp3B,WAEZ,IAAIozB,EAAQ,EACZ76B,OAAOoE,eAAe2M,EAAOusB,KAAM,QAAS,CAC1C,GAAAj5B,GACE,OAAOw2B,CACb,EAEI,GAAAv2B,CAAIC,GACF,GAAIs2B,IAAUt2B,EAAO,CACnB,MAAMwsB,EAAUgN,EAAQI,SAAWJ,EAAQI,SAAS,GAAK12B,UACzD,MAAMysB,EAAU6J,EAAQC,SAAWD,EAAQC,SAAS,GAAKv2B,UACzD2N,EAAK,aAAc7Q,EAAOwsB,EAASmD,EAC3C,CAEM2G,EAAQt2B,CACd,IAIE,SAASu6B,EAA0Bt2B,GACjC,GAAIA,EAAEsgB,cAAcvoB,OAAS,EAAG,OAAO,EACvC,MAAMw+B,EAAKv2B,EAAEsgB,cAAc,GAAGC,MAC9B,MAAMiW,EAAKx2B,EAAEsgB,cAAc,GAAGG,MAC9B,MAAMgW,EAAKz2B,EAAEsgB,cAAc,GAAGC,MAC9B,MAAMmW,EAAK12B,EAAEsgB,cAAc,GAAGG,MAC9B,MAAMkW,EAAWltB,KAAK4Y,MAAMoU,EAAKF,IAAO,GAAKG,EAAKF,IAAO,GACzD,OAAOG,CACX,CAGE,SAASC,EAAe52B,GACtB,MAAMkK,EAAU3B,EAAO2B,QACvB,MAAMpB,EAASP,EAAOO,OAAOgsB,KAC7BO,EAAqB,MACrBC,EAAmB,MAEnB,IAAKprB,EAAQU,SAAU,CACrB,GAAI5K,EAAEuf,OAAS,cAAgBvf,EAAEuf,OAAS,cAAgBvf,EAAEsgB,cAAcvoB,OAAS,EAAG,CACpF,MACR,CAEMs9B,EAAqB,KACrBE,EAAQsB,WAAaP,EAA0Bt2B,EACrD,CAEI,IAAKu1B,EAAQC,WAAaD,EAAQC,SAASz9B,OAAQ,CACjDw9B,EAAQC,SAAWl4B,EAAE0C,EAAEtI,QAAQyN,QAAQ,IAAIoD,EAAOO,OAAO4I,cACzD,GAAI6jB,EAAQC,SAASz9B,SAAW,EAAGw9B,EAAQC,SAAWjtB,EAAOkJ,OAAO1N,GAAGwE,EAAOyN,aAC9Euf,EAAQI,SAAWJ,EAAQC,SAASpwB,KAAK,IAAI0D,EAAOksB,kBAAkBjxB,GAAG,GAAGqB,KAAK,kDAAkDrB,GAAG,GACtIwxB,EAAQK,aAAeL,EAAQI,SAAS1wB,OAAO,IAAI6D,EAAOksB,kBAC1DO,EAAQR,SAAWQ,EAAQK,aAAa/2B,KAAK,qBAAuBiK,EAAOisB,SAE3E,GAAIQ,EAAQK,aAAa79B,SAAW,EAAG,CACrCw9B,EAAQI,SAAW12B,UACnB,MACR,CACA,CAEI,GAAIs2B,EAAQI,SAAU,CACpBJ,EAAQI,SAASr2B,WAAW,EAClC,CAEI61B,EAAY,IAChB,CAEE,SAAS2B,EAAgB92B,GACvB,MAAMkK,EAAU3B,EAAO2B,QACvB,MAAMpB,EAASP,EAAOO,OAAOgsB,KAC7B,MAAMA,EAAOvsB,EAAOusB,KAEpB,IAAK5qB,EAAQU,SAAU,CACrB,GAAI5K,EAAEuf,OAAS,aAAevf,EAAEuf,OAAS,aAAevf,EAAEsgB,cAAcvoB,OAAS,EAAG,CAClF,MACR,CAEMu9B,EAAmB,KACnBC,EAAQwB,UAAYT,EAA0Bt2B,EACpD,CAEI,IAAKu1B,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,EAAG,CACtD,GAAIiI,EAAEuf,OAAS,gBAAiBqX,EAAe52B,GAC/C,MACN,CAEI,GAAIkK,EAAQU,SAAU,CACpBkqB,EAAKzC,MAAQryB,EAAEqyB,MAAQ6C,CAC7B,KAAW,CACLJ,EAAKzC,MAAQkD,EAAQwB,UAAYxB,EAAQsB,WAAa3B,CAC5D,CAEI,GAAIJ,EAAKzC,MAAQkD,EAAQR,SAAU,CACjCD,EAAKzC,MAAQkD,EAAQR,SAAW,GAAKD,EAAKzC,MAAQkD,EAAQR,SAAW,IAAM,EACjF,CAEI,GAAID,EAAKzC,MAAQvpB,EAAO2e,SAAU,CAChCqN,EAAKzC,MAAQvpB,EAAO2e,SAAW,GAAK3e,EAAO2e,SAAWqN,EAAKzC,MAAQ,IAAM,EAC/E,CAEIkD,EAAQI,SAASt2B,UAAU,4BAA4By1B,EAAKzC,SAChE,CAEE,SAAS2E,EAAah3B,GACpB,MAAMmL,EAAS5C,EAAO4C,OACtB,MAAMjB,EAAU3B,EAAO2B,QACvB,MAAMpB,EAASP,EAAOO,OAAOgsB,KAC7B,MAAMA,EAAOvsB,EAAOusB,KAEpB,IAAK5qB,EAAQU,SAAU,CACrB,IAAKyqB,IAAuBC,EAAkB,CAC5C,MACR,CAEM,GAAIt1B,EAAEuf,OAAS,YAAcvf,EAAEuf,OAAS,YAAcvf,EAAEgiB,eAAejqB,OAAS,IAAMoT,EAAOE,QAAS,CACpG,MACR,CAEMgqB,EAAqB,MACrBC,EAAmB,KACzB,CAEI,IAAKC,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,EAAG,OACxD+8B,EAAKzC,MAAQ5oB,KAAKC,IAAID,KAAKE,IAAImrB,EAAKzC,MAAOkD,EAAQR,UAAWjsB,EAAO2e,UACrE8N,EAAQI,SAASr2B,WAAWiJ,EAAOO,OAAOC,OAAO1J,UAAU,4BAA4By1B,EAAKzC,UAC5F6C,EAAeJ,EAAKzC,MACpB8C,EAAY,MACZ,GAAIL,EAAKzC,QAAU,EAAGkD,EAAQC,SAAWv2B,SAC7C,CAEE,SAASggB,EAAajf,GACpB,MAAMmL,EAAS5C,EAAO4C,OACtB,IAAKoqB,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,EAAG,OACxD,GAAI4wB,EAAMjJ,UAAW,OACrB,GAAIvU,EAAOE,SAAWrL,EAAEwB,WAAYxB,EAAEihB,iBACtC0H,EAAMjJ,UAAY,KAClBiJ,EAAMsN,aAAavc,EAAI1Z,EAAEuf,OAAS,aAAevf,EAAEsgB,cAAc,GAAGC,MAAQvgB,EAAEugB,MAC9EoI,EAAMsN,aAAatc,EAAI3Z,EAAEuf,OAAS,aAAevf,EAAEsgB,cAAc,GAAGG,MAAQzgB,EAAEygB,KAClF,CAEE,SAASqB,EAAY9hB,GACnB,MAAM80B,EAAOvsB,EAAOusB,KACpB,IAAKS,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,EAAG,OACxDwQ,EAAO4X,WAAa,MACpB,IAAKwI,EAAMjJ,YAAc6V,EAAQC,SAAU,OAE3C,IAAK7M,EAAMhJ,QAAS,CAClBgJ,EAAMpd,MAAQgqB,EAAQI,SAAS,GAAGzzB,YAClCymB,EAAMld,OAAS8pB,EAAQI,SAAS,GAAGtzB,aACnCsmB,EAAMjI,OAASza,GAAasvB,EAAQK,aAAa,GAAI,MAAQ,EAC7DjN,EAAMhI,OAAS1a,GAAasvB,EAAQK,aAAa,GAAI,MAAQ,EAC7DL,EAAQE,WAAaF,EAAQC,SAAS,GAAGtzB,YACzCqzB,EAAQG,YAAcH,EAAQC,SAAS,GAAGnzB,aAC1CkzB,EAAQK,aAAat2B,WAAW,EACtC,CAGI,MAAM23B,EAActO,EAAMpd,MAAQupB,EAAKzC,MACvC,MAAM6E,EAAevO,EAAMld,OAASqpB,EAAKzC,MACzC,GAAI4E,EAAc1B,EAAQE,YAAcyB,EAAe3B,EAAQG,YAAa,OAC5E/M,EAAMkN,KAAOpsB,KAAKE,IAAI4rB,EAAQE,WAAa,EAAIwB,EAAc,EAAG,GAChEtO,EAAMoN,MAAQpN,EAAMkN,KACpBlN,EAAMmN,KAAOrsB,KAAKE,IAAI4rB,EAAQG,YAAc,EAAIwB,EAAe,EAAG,GAClEvO,EAAMqN,MAAQrN,EAAMmN,KACpBnN,EAAMuN,eAAexc,EAAI1Z,EAAEuf,OAAS,YAAcvf,EAAEsgB,cAAc,GAAGC,MAAQvgB,EAAEugB,MAC/EoI,EAAMuN,eAAevc,EAAI3Z,EAAEuf,OAAS,YAAcvf,EAAEsgB,cAAc,GAAGG,MAAQzgB,EAAEygB,MAE/E,IAAKkI,EAAMhJ,UAAYwV,EAAW,CAChC,GAAI5sB,EAAO6H,iBAAmB3G,KAAKsK,MAAM4U,EAAMkN,QAAUpsB,KAAKsK,MAAM4U,EAAMjI,SAAWiI,EAAMuN,eAAexc,EAAIiP,EAAMsN,aAAavc,GAAKjQ,KAAKsK,MAAM4U,EAAMoN,QAAUtsB,KAAKsK,MAAM4U,EAAMjI,SAAWiI,EAAMuN,eAAexc,EAAIiP,EAAMsN,aAAavc,GAAI,CAC3OiP,EAAMjJ,UAAY,MAClB,MACR,CAEM,IAAKnX,EAAO6H,iBAAmB3G,KAAKsK,MAAM4U,EAAMmN,QAAUrsB,KAAKsK,MAAM4U,EAAMhI,SAAWgI,EAAMuN,eAAevc,EAAIgP,EAAMsN,aAAatc,GAAKlQ,KAAKsK,MAAM4U,EAAMqN,QAAUvsB,KAAKsK,MAAM4U,EAAMhI,SAAWgI,EAAMuN,eAAevc,EAAIgP,EAAMsN,aAAatc,GAAI,CAC5OgP,EAAMjJ,UAAY,MAClB,MACR,CACA,CAEI,GAAI1f,EAAEwB,WAAY,CAChBxB,EAAEihB,gBACR,CAEIjhB,EAAE0iB,kBACFiG,EAAMhJ,QAAU,KAChBgJ,EAAMtI,SAAWsI,EAAMuN,eAAexc,EAAIiP,EAAMsN,aAAavc,EAAIiP,EAAMjI,OACvEiI,EAAMnI,SAAWmI,EAAMuN,eAAevc,EAAIgP,EAAMsN,aAAatc,EAAIgP,EAAMhI,OAEvE,GAAIgI,EAAMtI,SAAWsI,EAAMkN,KAAM,CAC/BlN,EAAMtI,SAAWsI,EAAMkN,KAAO,GAAKlN,EAAMkN,KAAOlN,EAAMtI,SAAW,IAAM,EAC7E,CAEI,GAAIsI,EAAMtI,SAAWsI,EAAMoN,KAAM,CAC/BpN,EAAMtI,SAAWsI,EAAMoN,KAAO,GAAKpN,EAAMtI,SAAWsI,EAAMoN,KAAO,IAAM,EAC7E,CAEI,GAAIpN,EAAMnI,SAAWmI,EAAMmN,KAAM,CAC/BnN,EAAMnI,SAAWmI,EAAMmN,KAAO,GAAKnN,EAAMmN,KAAOnN,EAAMnI,SAAW,IAAM,EAC7E,CAEI,GAAImI,EAAMnI,SAAWmI,EAAMqN,KAAM,CAC/BrN,EAAMnI,SAAWmI,EAAMqN,KAAO,GAAKrN,EAAMnI,SAAWmI,EAAMqN,KAAO,IAAM,EAC7E,CAGI,IAAK/K,EAASkL,cAAelL,EAASkL,cAAgBxN,EAAMuN,eAAexc,EAC3E,IAAKuR,EAASmL,cAAenL,EAASmL,cAAgBzN,EAAMuN,eAAevc,EAC3E,IAAKsR,EAASoL,SAAUpL,EAASoL,SAAWx7B,KAAKkL,MACjDklB,EAASvR,GAAKiP,EAAMuN,eAAexc,EAAIuR,EAASkL,gBAAkBt7B,KAAKkL,MAAQklB,EAASoL,UAAY,EACpGpL,EAAStR,GAAKgP,EAAMuN,eAAevc,EAAIsR,EAASmL,gBAAkBv7B,KAAKkL,MAAQklB,EAASoL,UAAY,EACpG,GAAI5sB,KAAKwK,IAAI0U,EAAMuN,eAAexc,EAAIuR,EAASkL,eAAiB,EAAGlL,EAASvR,EAAI,EAChF,GAAIjQ,KAAKwK,IAAI0U,EAAMuN,eAAevc,EAAIsR,EAASmL,eAAiB,EAAGnL,EAAStR,EAAI,EAChFsR,EAASkL,cAAgBxN,EAAMuN,eAAexc,EAC9CuR,EAASmL,cAAgBzN,EAAMuN,eAAevc,EAC9CsR,EAASoL,SAAWx7B,KAAKkL,MACzBwvB,EAAQK,aAAav2B,UAAU,eAAespB,EAAMtI,eAAesI,EAAMnI,gBAC7E,CAEE,SAAS2C,IACP,MAAM2R,EAAOvsB,EAAOusB,KACpB,IAAKS,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,EAAG,OAExD,IAAK4wB,EAAMjJ,YAAciJ,EAAMhJ,QAAS,CACtCgJ,EAAMjJ,UAAY,MAClBiJ,EAAMhJ,QAAU,MAChB,MACN,CAEIgJ,EAAMjJ,UAAY,MAClBiJ,EAAMhJ,QAAU,MAChB,IAAIwX,EAAoB,IACxB,IAAIC,EAAoB,IACxB,MAAMC,EAAoBpM,EAASvR,EAAIyd,EACvC,MAAMG,EAAe3O,EAAMtI,SAAWgX,EACtC,MAAME,EAAoBtM,EAAStR,EAAIyd,EACvC,MAAMI,EAAe7O,EAAMnI,SAAW+W,EAEtC,GAAItM,EAASvR,IAAM,EAAGyd,EAAoB1tB,KAAKwK,KAAKqjB,EAAe3O,EAAMtI,UAAY4K,EAASvR,GAC9F,GAAIuR,EAAStR,IAAM,EAAGyd,EAAoB3tB,KAAKwK,KAAKujB,EAAe7O,EAAMnI,UAAYyK,EAAStR,GAC9F,MAAM8d,EAAmBhuB,KAAKC,IAAIytB,EAAmBC,GACrDzO,EAAMtI,SAAWiX,EACjB3O,EAAMnI,SAAWgX,EAEjB,MAAMP,EAActO,EAAMpd,MAAQupB,EAAKzC,MACvC,MAAM6E,EAAevO,EAAMld,OAASqpB,EAAKzC,MACzC1J,EAAMkN,KAAOpsB,KAAKE,IAAI4rB,EAAQE,WAAa,EAAIwB,EAAc,EAAG,GAChEtO,EAAMoN,MAAQpN,EAAMkN,KACpBlN,EAAMmN,KAAOrsB,KAAKE,IAAI4rB,EAAQG,YAAc,EAAIwB,EAAe,EAAG,GAClEvO,EAAMqN,MAAQrN,EAAMmN,KACpBnN,EAAMtI,SAAW5W,KAAKC,IAAID,KAAKE,IAAIgf,EAAMtI,SAAUsI,EAAMoN,MAAOpN,EAAMkN,MACtElN,EAAMnI,SAAW/W,KAAKC,IAAID,KAAKE,IAAIgf,EAAMnI,SAAUmI,EAAMqN,MAAOrN,EAAMmN,MACtEP,EAAQK,aAAat2B,WAAWm4B,GAAkBp4B,UAAU,eAAespB,EAAMtI,eAAesI,EAAMnI,gBAC1G,CAEE,SAASkX,IACP,MAAM5C,EAAOvsB,EAAOusB,KAEpB,GAAIS,EAAQC,UAAYjtB,EAAOkQ,gBAAkBlQ,EAAOyN,YAAa,CACnE,GAAIuf,EAAQI,SAAU,CACpBJ,EAAQI,SAASt2B,UAAU,8BACnC,CAEM,GAAIk2B,EAAQK,aAAc,CACxBL,EAAQK,aAAav2B,UAAU,qBACvC,CAEMy1B,EAAKzC,MAAQ,EACb6C,EAAe,EACfK,EAAQC,SAAWv2B,UACnBs2B,EAAQI,SAAW12B,UACnBs2B,EAAQK,aAAe32B,SAC7B,CACA,CAEE,SAAS04B,EAAO33B,GACd,MAAM80B,EAAOvsB,EAAOusB,KACpB,MAAMhsB,EAASP,EAAOO,OAAOgsB,KAE7B,IAAKS,EAAQC,SAAU,CACrB,GAAIx1B,GAAKA,EAAEtI,OAAQ,CACjB69B,EAAQC,SAAWl4B,EAAE0C,EAAEtI,QAAQyN,QAAQ,IAAIoD,EAAOO,OAAO4I,aACjE,CAEM,IAAK6jB,EAAQC,SAAU,CACrB,GAAIjtB,EAAOO,OAAOwI,SAAW/I,EAAOO,OAAOwI,QAAQC,SAAWhJ,EAAO+I,QAAS,CAC5EikB,EAAQC,SAAWjtB,EAAO0G,WAAWpW,SAAS,IAAI0P,EAAOO,OAAO6O,mBAC1E,KAAe,CACL4d,EAAQC,SAAWjtB,EAAOkJ,OAAO1N,GAAGwE,EAAOyN,YACrD,CACA,CAEMuf,EAAQI,SAAWJ,EAAQC,SAASpwB,KAAK,IAAI0D,EAAOksB,kBAAkBjxB,GAAG,GAAGqB,KAAK,kDAAkDrB,GAAG,GACtIwxB,EAAQK,aAAeL,EAAQI,SAAS1wB,OAAO,IAAI6D,EAAOksB,iBAChE,CAEI,IAAKO,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,IAAMw9B,EAAQK,cAAgBL,EAAQK,aAAa79B,SAAW,EAAG,OAEtH,GAAIwQ,EAAOO,OAAO+J,QAAS,CACzBtK,EAAOS,UAAUjQ,MAAMkR,SAAW,SAClC1B,EAAOS,UAAUjQ,MAAM6+B,YAAc,MAC3C,CAEIrC,EAAQC,SAAS13B,SAAS,GAAGgL,EAAOmsB,oBACpC,IAAI4C,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAI7V,EACJ,IAAIC,EACJ,IAAI6V,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAInB,EACJ,IAAIC,EACJ,IAAImB,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAIC,EACJ,IAAI/C,EACJ,IAAIC,EAEJ,UAAW/M,EAAMsN,aAAavc,IAAM,aAAe1Z,EAAG,CACpD63B,EAAS73B,EAAEuf,OAAS,WAAavf,EAAEgiB,eAAe,GAAGzB,MAAQvgB,EAAEugB,MAC/DuX,EAAS93B,EAAEuf,OAAS,WAAavf,EAAEgiB,eAAe,GAAGvB,MAAQzgB,EAAEygB,KACrE,KAAW,CACLoX,EAASlP,EAAMsN,aAAavc,EAC5Boe,EAASnP,EAAMsN,aAAatc,CAClC,CAEImb,EAAKzC,MAAQkD,EAAQK,aAAa/2B,KAAK,qBAAuBiK,EAAOisB,SACrEG,EAAeK,EAAQK,aAAa/2B,KAAK,qBAAuBiK,EAAOisB,SAEvE,GAAI/0B,EAAG,CACLy1B,EAAaF,EAAQC,SAAS,GAAGtzB,YACjCwzB,EAAcH,EAAQC,SAAS,GAAGnzB,aAClC01B,EAAUxC,EAAQC,SAASlzB,SAASU,KAAOxH,EAAOsH,QAClDk1B,EAAUzC,EAAQC,SAASlzB,SAASS,IAAMvH,EAAOoH,QACjDuf,EAAQ4V,EAAUtC,EAAa,EAAIoC,EACnCzV,EAAQ4V,EAAUtC,EAAc,EAAIoC,EACpCK,EAAa5C,EAAQI,SAAS,GAAGzzB,YACjCk2B,EAAc7C,EAAQI,SAAS,GAAGtzB,aAClC40B,EAAckB,EAAarD,EAAKzC,MAChC6E,EAAekB,EAActD,EAAKzC,MAClCgG,EAAgB5uB,KAAKE,IAAI8rB,EAAa,EAAIwB,EAAc,EAAG,GAC3DqB,EAAgB7uB,KAAKE,IAAI+rB,EAAc,EAAIwB,EAAe,EAAG,GAC7DqB,GAAiBF,EACjBG,GAAiBF,EACjBL,EAAa9V,EAAQ2S,EAAKzC,MAC1B6F,EAAa9V,EAAQ0S,EAAKzC,MAE1B,GAAI4F,EAAaI,EAAe,CAC9BJ,EAAaI,CACrB,CAEM,GAAIJ,EAAaM,EAAe,CAC9BN,EAAaM,CACrB,CAEM,GAAIL,EAAaI,EAAe,CAC9BJ,EAAaI,CACrB,CAEM,GAAIJ,EAAaM,EAAe,CAC9BN,EAAaM,CACrB,CACA,KAAW,CACLP,EAAa,EACbC,EAAa,CACnB,CAEI3C,EAAQK,aAAat2B,WAAW,KAAKD,UAAU,eAAe44B,QAAiBC,UAC/E3C,EAAQI,SAASr2B,WAAW,KAAKD,UAAU,4BAA4By1B,EAAKzC,SAChF,CAEE,SAASoG,IACP,MAAM3D,EAAOvsB,EAAOusB,KACpB,MAAMhsB,EAASP,EAAOO,OAAOgsB,KAE7B,IAAKS,EAAQC,SAAU,CACrB,GAAIjtB,EAAOO,OAAOwI,SAAW/I,EAAOO,OAAOwI,QAAQC,SAAWhJ,EAAO+I,QAAS,CAC5EikB,EAAQC,SAAWjtB,EAAO0G,WAAWpW,SAAS,IAAI0P,EAAOO,OAAO6O,mBACxE,KAAa,CACL4d,EAAQC,SAAWjtB,EAAOkJ,OAAO1N,GAAGwE,EAAOyN,YACnD,CAEMuf,EAAQI,SAAWJ,EAAQC,SAASpwB,KAAK,IAAI0D,EAAOksB,kBAAkBjxB,GAAG,GAAGqB,KAAK,kDAAkDrB,GAAG,GACtIwxB,EAAQK,aAAeL,EAAQI,SAAS1wB,OAAO,IAAI6D,EAAOksB,iBAChE,CAEI,IAAKO,EAAQI,UAAYJ,EAAQI,SAAS59B,SAAW,IAAMw9B,EAAQK,cAAgBL,EAAQK,aAAa79B,SAAW,EAAG,OAEtH,GAAIwQ,EAAOO,OAAO+J,QAAS,CACzBtK,EAAOS,UAAUjQ,MAAMkR,SAAW,GAClC1B,EAAOS,UAAUjQ,MAAM6+B,YAAc,EAC3C,CAEI9C,EAAKzC,MAAQ,EACb6C,EAAe,EACfK,EAAQK,aAAat2B,WAAW,KAAKD,UAAU,sBAC/Ck2B,EAAQI,SAASr2B,WAAW,KAAKD,UAAU,+BAC3Ck2B,EAAQC,SAASl3B,YAAY,GAAGwK,EAAOmsB,oBACvCM,EAAQC,SAAWv2B,SACvB,CAGE,SAASy5B,EAAW14B,GAClB,MAAM80B,EAAOvsB,EAAOusB,KAEpB,GAAIA,EAAKzC,OAASyC,EAAKzC,QAAU,EAAG,CAElCoG,GACN,KAAW,CAELd,EAAO33B,EACb,CACA,CAEE,SAAS24B,IACP,MAAMzuB,EAAU3B,EAAO2B,QACvB,MAAMM,EAAkBjC,EAAO2c,YAAYG,QAAU,cAAgBnb,EAAQM,iBAAmBjC,EAAOO,OAAO0c,iBAAmB,CAC/HC,QAAS,KACT3lB,QAAS,OACP,MACJ,MAAM84B,EAA4B1uB,EAAQM,gBAAkB,CAC1Dib,QAAS,MACT3lB,QAAS,MACP,KACJ,MAAO,CACL0K,kBACAouB,4BAEN,CAEE,SAASC,IACP,MAAO,IAAItwB,EAAOO,OAAO4I,YAC7B,CAEE,SAASonB,EAAevpB,GACtB,MAAM/E,gBACJA,GACEmuB,IACJ,MAAMI,EAAgBF,IACtBtwB,EAAO0G,WAAWM,GAAQ,eAAgBwpB,EAAenC,EAAgBpsB,GACzEjC,EAAO0G,WAAWM,GAAQ,gBAAiBwpB,EAAejC,EAAiBtsB,GAC3EjC,EAAO0G,WAAWM,GAAQ,aAAcwpB,EAAe/B,EAAcxsB,EACzE,CAEE,SAASwuB,IACP,GAAI5D,EAAiB,OACrBA,EAAkB,KAClB0D,EAAe,KACnB,CAEE,SAASG,IACP,IAAK7D,EAAiB,OACtBA,EAAkB,MAClB0D,EAAe,MACnB,CAGE,SAAS3R,IACP,MAAM2N,EAAOvsB,EAAOusB,KACpB,GAAIA,EAAKvjB,QAAS,OAClBujB,EAAKvjB,QAAU,KACf,MAAMrH,EAAU3B,EAAO2B,QACvB,MAAMM,gBACJA,EAAeouB,0BACfA,GACED,IACJ,MAAMI,EAAgBF,IAEtB,GAAI3uB,EAAQU,SAAU,CACpBrC,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYG,MAAO2T,EAAgBxuB,GAC/DjC,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYK,IAAK0T,EAAiBzuB,EACpE,MAAW,GAAIjC,EAAO2c,YAAYG,QAAU,aAAc,CACpD9c,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYG,MAAO0T,EAAenC,EAAgBpsB,GAC9EjC,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYI,KAAMyT,EAAejC,EAAiB8B,GAC9ErwB,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYK,IAAKwT,EAAe/B,EAAcxsB,GAE1E,GAAIjC,EAAO2c,YAAYQ,OAAQ,CAC7Bnd,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYQ,OAAQqT,EAAe/B,EAAcxsB,EACrF,CACA,CAGIjC,EAAO0G,WAAWxP,GAAG8I,EAAO2c,YAAYI,KAAM,IAAI/c,EAAOO,OAAOgsB,KAAKE,iBAAkBlT,EAAa8W,EACxG,CAEE,SAAS1R,IACP,MAAM4N,EAAOvsB,EAAOusB,KACpB,IAAKA,EAAKvjB,QAAS,OACnB,MAAMrH,EAAU3B,EAAO2B,QACvB4qB,EAAKvjB,QAAU,MACf,MAAM/G,gBACJA,EAAeouB,0BACfA,GACED,IACJ,MAAMI,EAAgBF,IAEtB,GAAI3uB,EAAQU,SAAU,CACpBrC,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYG,MAAO2T,EAAgBxuB,GAChEjC,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYK,IAAK0T,EAAiBzuB,EACrE,MAAW,GAAIjC,EAAO2c,YAAYG,QAAU,aAAc,CACpD9c,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYG,MAAO0T,EAAenC,EAAgBpsB,GAC/EjC,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYI,KAAMyT,EAAejC,EAAiB8B,GAC/ErwB,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYK,IAAKwT,EAAe/B,EAAcxsB,GAE3E,GAAIjC,EAAO2c,YAAYQ,OAAQ,CAC7Bnd,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYQ,OAAQqT,EAAe/B,EAAcxsB,EACtF,CACA,CAGIjC,EAAO0G,WAAWlO,IAAIwH,EAAO2c,YAAYI,KAAM,IAAI/c,EAAOO,OAAOgsB,KAAKE,iBAAkBlT,EAAa8W,EACzG,CAEEn5B,EAAG,QAAQ,KACT,GAAI8I,EAAOO,OAAOgsB,KAAKvjB,QAAS,CAC9B4V,GACN,KAEE1nB,EAAG,WAAW,KACZynB,GAAS,IAEXznB,EAAG,cAAc,CAACkzB,EAAI3yB,KACpB,IAAKuI,EAAOusB,KAAKvjB,QAAS,OAC1B0N,EAAajf,EAAE,IAEjBP,EAAG,YAAY,CAACkzB,EAAI3yB,KAClB,IAAKuI,EAAOusB,KAAKvjB,QAAS,OAC1B4R,GAAa,IAEf1jB,EAAG,aAAa,CAACkzB,EAAI3yB,KACnB,IAAKuI,EAAO4R,WAAa5R,EAAOO,OAAOgsB,KAAKvjB,SAAWhJ,EAAOusB,KAAKvjB,SAAWhJ,EAAOO,OAAOgsB,KAAKp2B,OAAQ,CACvGg6B,EAAW14B,EACjB,KAEEP,EAAG,iBAAiB,KAClB,GAAI8I,EAAOusB,KAAKvjB,SAAWhJ,EAAOO,OAAOgsB,KAAKvjB,QAAS,CACrDmmB,GACN,KAEEj4B,EAAG,eAAe,KAChB,GAAI8I,EAAOusB,KAAKvjB,SAAWhJ,EAAOO,OAAOgsB,KAAKvjB,SAAWhJ,EAAOO,OAAO+J,QAAS,CAC9E6kB,GACN,KAEElgC,OAAOiZ,OAAOlI,EAAOusB,KAAM,CACzB3N,SACAD,UACAgS,GAAIvB,EACJwB,IAAKV,EACL/5B,OAAQg6B,GAEZ,CC9lBe,SAASU,IAAS7wB,OAC/BA,EAAMyF,aACNA,EAAYvO,GACZA,EAAEmN,KACFA,IAEA,IAAImmB,EACJxqB,EAAOgc,SAAW,CAChBC,QAAS,MACTC,OAAQ,OAEVzW,EAAa,CACXuW,SAAU,CACRhT,QAAS,MACTzL,MAAO,IACPuzB,kBAAmB,KACnBC,qBAAsB,KACtBC,gBAAiB,MACjBC,iBAAkB,MAClBC,kBAAmB,SAIvB,SAAS/U,IACP,MAAMgV,EAAiBnxB,EAAOkJ,OAAO1N,GAAGwE,EAAOyN,aAC/C,IAAIlQ,EAAQyC,EAAOO,OAAOyb,SAASze,MAEnC,GAAI4zB,EAAe76B,KAAK,wBAAyB,CAC/CiH,EAAQ4zB,EAAe76B,KAAK,yBAA2B0J,EAAOO,OAAOyb,SAASze,KACpF,CAEI9K,aAAa+3B,GACbA,EAAUltB,IAAS,KACjB,IAAI8zB,EAEJ,GAAIpxB,EAAOO,OAAOyb,SAASiV,iBAAkB,CAC3C,GAAIjxB,EAAOO,OAAOoP,KAAM,CACtB3P,EAAO+T,UACPqd,EAAiBpxB,EAAOkU,UAAUlU,EAAOO,OAAOC,MAAO,KAAM,MAC7D6D,EAAK,WACf,MAAe,IAAKrE,EAAO6O,YAAa,CAC9BuiB,EAAiBpxB,EAAOkU,UAAUlU,EAAOO,OAAOC,MAAO,KAAM,MAC7D6D,EAAK,WACf,MAAe,IAAKrE,EAAOO,OAAOyb,SAASgV,gBAAiB,CAClDI,EAAiBpxB,EAAOsS,QAAQtS,EAAOkJ,OAAO1Z,OAAS,EAAGwQ,EAAOO,OAAOC,MAAO,KAAM,MACrF6D,EAAK,WACf,KAAe,CACLgtB,GACV,CACA,MAAa,GAAIrxB,EAAOO,OAAOoP,KAAM,CAC7B3P,EAAO+T,UACPqd,EAAiBpxB,EAAOyT,UAAUzT,EAAOO,OAAOC,MAAO,KAAM,MAC7D6D,EAAK,WACb,MAAa,IAAKrE,EAAO8O,MAAO,CACxBsiB,EAAiBpxB,EAAOyT,UAAUzT,EAAOO,OAAOC,MAAO,KAAM,MAC7D6D,EAAK,WACb,MAAa,IAAKrE,EAAOO,OAAOyb,SAASgV,gBAAiB,CAClDI,EAAiBpxB,EAAOsS,QAAQ,EAAGtS,EAAOO,OAAOC,MAAO,KAAM,MAC9D6D,EAAK,WACb,KAAa,CACLgtB,GACR,CAEM,GAAIrxB,EAAOO,OAAO+J,SAAWtK,EAAOgc,SAASC,QAASE,SAAW,GAAIiV,IAAmB,MAAO,CAC7FjV,GACR,IACO5e,EACP,CAEE,SAASuf,IACP,UAAW0N,IAAY,YAAa,OAAO,MAC3C,GAAIxqB,EAAOgc,SAASC,QAAS,OAAO,MACpCjc,EAAOgc,SAASC,QAAU,KAC1B5X,EAAK,iBACL8X,IACA,OAAO,IACX,CAEE,SAASkV,IACP,IAAKrxB,EAAOgc,SAASC,QAAS,OAAO,MACrC,UAAWuO,IAAY,YAAa,OAAO,MAE3C,GAAIA,EAAS,CACX/3B,aAAa+3B,GACbA,EAAU9zB,SAChB,CAEIsJ,EAAOgc,SAASC,QAAU,MAC1B5X,EAAK,gBACL,OAAO,IACX,CAEE,SAASitB,EAAM9wB,GACb,IAAKR,EAAOgc,SAASC,QAAS,OAC9B,GAAIjc,EAAOgc,SAASE,OAAQ,OAC5B,GAAIsO,EAAS/3B,aAAa+3B,GAC1BxqB,EAAOgc,SAASE,OAAS,KAEzB,GAAI1b,IAAU,IAAMR,EAAOO,OAAOyb,SAAS8U,kBAAmB,CAC5D9wB,EAAOgc,SAASE,OAAS,MACzBC,GACN,KAAW,CACL,CAAC,gBAAiB,uBAAuB7sB,SAAQ8I,IAC/C4H,EAAO0G,WAAW,GAAG/W,iBAAiByI,EAAO+2B,EAAgB,GAErE,CACA,CAEE,SAASoC,IACP,MAAM//B,EAAWF,IAEjB,GAAIE,EAASggC,kBAAoB,UAAYxxB,EAAOgc,SAASC,QAAS,CACpEqV,GACN,CAEI,GAAI9/B,EAASggC,kBAAoB,WAAaxxB,EAAOgc,SAASE,OAAQ,CACpEC,IACAnc,EAAOgc,SAASE,OAAS,KAC/B,CACA,CAEE,SAASiT,EAAgB13B,GACvB,IAAKuI,GAAUA,EAAOwE,YAAcxE,EAAO0G,WAAY,OACvD,GAAIjP,EAAEtI,SAAW6Q,EAAO0G,WAAW,GAAI,OACvC,CAAC,gBAAiB,uBAAuBpX,SAAQ8I,IAC/C4H,EAAO0G,WAAW,GAAG9W,oBAAoBwI,EAAO+2B,EAAgB,IAElEnvB,EAAOgc,SAASE,OAAS,MAEzB,IAAKlc,EAAOgc,SAASC,QAAS,CAC5BoV,GACN,KAAW,CACLlV,GACN,CACA,CAEE,SAASsV,IACP,GAAIzxB,EAAOO,OAAOyb,SAAS+U,qBAAsB,CAC/CM,GACN,KAAW,CACLC,GACN,CAEI,CAAC,gBAAiB,uBAAuBhiC,SAAQ8I,IAC/C4H,EAAO0G,WAAW,GAAG9W,oBAAoBwI,EAAO+2B,EAAgB,GAEtE,CAEE,SAASuC,IACP,GAAI1xB,EAAOO,OAAOyb,SAAS+U,qBAAsB,CAC/C,MACN,CAEI/wB,EAAOgc,SAASE,OAAS,MACzBC,GACJ,CAEE,SAASwV,IACP,GAAI3xB,EAAOO,OAAOyb,SAASkV,kBAAmB,CAC5ClxB,EAAOwG,IAAItP,GAAG,aAAcu6B,GAC5BzxB,EAAOwG,IAAItP,GAAG,aAAcw6B,EAClC,CACA,CAEE,SAASE,IACP5xB,EAAOwG,IAAIhO,IAAI,aAAci5B,GAC7BzxB,EAAOwG,IAAIhO,IAAI,aAAck5B,EACjC,CAEEx6B,EAAG,QAAQ,KACT,GAAI8I,EAAOO,OAAOyb,SAAShT,QAAS,CAClC8T,IACA,MAAMtrB,EAAWF,IACjBE,EAAS7B,iBAAiB,mBAAoB4hC,GAC9CI,GACN,KAEEz6B,EAAG,yBAAyB,CAACkzB,EAAI5pB,EAAOmR,KACtC,GAAI3R,EAAOgc,SAASC,QAAS,CAC3B,GAAItK,IAAa3R,EAAOO,OAAOyb,SAAS+U,qBAAsB,CAC5D/wB,EAAOgc,SAASsV,MAAM9wB,EAC9B,KAAa,CACL6wB,GACR,CACA,KAEEn6B,EAAG,mBAAmB,KACpB,GAAI8I,EAAOgc,SAASC,QAAS,CAC3B,GAAIjc,EAAOO,OAAOyb,SAAS+U,qBAAsB,CAC/CM,GACR,KAAa,CACLC,GACR,CACA,KAEEp6B,EAAG,YAAY,KACb,GAAI8I,EAAOO,OAAO+J,SAAWtK,EAAOgc,SAASE,SAAWlc,EAAOO,OAAOyb,SAAS+U,qBAAsB,CACnG5U,GACN,KAEEjlB,EAAG,WAAW,KACZ06B,IAEA,GAAI5xB,EAAOgc,SAASC,QAAS,CAC3BoV,GACN,CAEI,MAAM7/B,EAAWF,IACjBE,EAAS5B,oBAAoB,mBAAoB2hC,EAAmB,IAEtEtiC,OAAOiZ,OAAOlI,EAAOgc,SAAU,CAC7BsV,QACAnV,MACAW,QACAuU,QAEJ,CC7NA,MAAMQ,GAAc,8+hBCIpB5P,GAAOwC,IAAI,CAACmC,GAAY2D,GAAWsG,GAAU/L,GAAUwH,K,MAW1CwF,GAAQ,M,+3BAEX5/B,KAAA6/B,YAAc,MAGd7/B,KAAA8N,OAA0B,IAAIgyB,SAAQC,IAC5C//B,KAAKggC,YAAcD,CAAO,IAGpB//B,KAAAigC,QAAU,M,aAQK,G,WAcP,K,YAKC,K,CAhBjB,oBAAMC,GACJ,GAAIlgC,KAAK6/B,YAAa,CACpB,MAAM/xB,QAAe9N,KAAKmgC,YAC1BpjC,OAAOiZ,OAAOlI,EAAOO,OAAQrO,KAAK0T,eAC5B1T,KAAK2e,Q,EA8Ff,iBAAAyhB,GAEE,UAAWxsB,mBAAqB,YAAa,CAC3C,MAAMysB,EAAMrgC,KAAKsgC,UAAY,IAAI1sB,kBAAiB,KAChD,GAAI5T,KAAK6/B,YAAa,CACpB7/B,KAAK2e,Q,KAGT0hB,EAAIptB,QAAQjT,KAAK8B,GAAI,CACnBmS,UAAW,KACXssB,QAAS,M,EAKf,gBAAAC,GACE,IAAKxgC,KAAKigC,QAAS,CACjBjgC,KAAKigC,QAAU,KACfjgC,KAAKygC,Y,EAIT,oBAAAC,GACE,GAAI1gC,KAAKsgC,UAAW,CAClBtgC,KAAKsgC,UAAU5rB,aACf1U,KAAKsgC,UAAY97B,S,CAUnB,MAAMsJ,EAAS9N,KAAK2gC,WACpB,GAAI7yB,IAAWtJ,UAAW,CACxBsJ,EAAO2G,QAAQ,KAAM,MACrBzU,KAAK8N,OAAS,IAAIgyB,SAAQC,IACxB//B,KAAKggC,YAAcD,CAAO,IAE5B//B,KAAK6/B,YAAc,MACnB7/B,KAAK2gC,WAAan8B,S,CAGpBxE,KAAKigC,QAAU,K,CAQjB,YAAMthB,GACJ,MAAO7Q,SAAgBgyB,QAAQc,IAAI,CACjC5gC,KAAKmgC,YACLU,GAAc7gC,KAAK8B,MAErBgM,EAAO6Q,Q,CAUT,sBAAM1D,CAAiB3M,GACrB,MAAMR,QAAe9N,KAAKmgC,YAC1BryB,EAAOmN,iBAAiB3M,E,CAW1B,aAAM8R,CAAQxX,EAAe0F,EAAgBiR,GAC3C,MAAMzR,QAAe9N,KAAKmgC,YAC1BryB,EAAOsS,QAAQxX,EAAO0F,EAAOiR,E,CAU/B,eAAMgC,CAAUjT,EAAgBiR,GAC9B,MAAMzR,QAAe9N,KAAKmgC,YAC1BryB,EAAOyT,UAAUjT,EAAQiR,E,CAU3B,eAAMyC,CAAU1T,EAAgBiR,GAC9B,MAAMzR,QAAe9N,KAAKmgC,YAC1BryB,EAAOkU,UAAU1T,EAAOiR,E,CAO1B,oBAAMuhB,GACJ,MAAMhzB,QAAe9N,KAAKmgC,YAC1B,OAAOryB,EAAOyN,W,CAOhB,sBAAMwlB,GACJ,MAAMjzB,QAAe9N,KAAKmgC,YAC1B,OAAOryB,EAAOkQ,a,CAOhB,YAAM1gB,GACJ,MAAMwQ,QAAe9N,KAAKmgC,YAC1B,OAAOryB,EAAOkJ,OAAO1Z,M,CAOvB,WAAMsf,GACJ,MAAM9O,QAAe9N,KAAKmgC,YAC1B,OAAOryB,EAAO8O,K,CAOhB,iBAAMD,GACJ,MAAM7O,QAAe9N,KAAKmgC,YAC1B,OAAOryB,EAAO6O,W,CAOhB,mBAAMqkB,GACJ,MAAMlzB,QAAe9N,KAAKmgC,YAC1B,GAAIryB,EAAOgc,SAAU,CACnBhc,EAAOgc,SAASc,O,EAQpB,kBAAMqW,GACJ,MAAMnzB,QAAe9N,KAAKmgC,YAC1B,GAAIryB,EAAOgc,SAAU,CACnBhc,EAAOgc,SAASqV,M,EAUpB,qBAAM+B,CAAgBC,GACpB,MAAMrzB,QAAe9N,KAAKmgC,YAC1BryB,EAAOgT,gBAAkBqgB,C,CAS3B,qBAAMC,CAAgBD,GACpB,MAAMrzB,QAAe9N,KAAKmgC,YAC1BryB,EAAOiT,gBAAkBogB,C,CAS3B,gBAAME,CAAWF,GACf,MAAMrzB,QAAe9N,KAAKmgC,YAC1BryB,EAAOgT,gBAAkBqgB,EACzBrzB,EAAOiT,gBAAkBogB,EACzBrzB,EAAOmZ,gBAAkBka,C,CAS3B,eAAMhB,GACJ,OAAOngC,KAAK8N,M,CAGN,gBAAM2yB,GACZ,MAAMa,EAAethC,KAAKuhC,yBAGpBV,GAAc7gC,KAAK8B,IAEzB,MAAMgM,EAAS,IAAIiiB,GAAO/vB,KAAK8B,GAAIw/B,GACnCthC,KAAK6/B,YAAc,KACnB7/B,KAAK2gC,WAAa7yB,EAClB9N,KAAKggC,YAAYlyB,E,CAGX,gBAAAyzB,GAGN,MAAMC,EAA+B,CACnC7nB,OAAQnV,UACRyb,UAAW,aACXS,aAAc,EACdjD,KAAM,MACNgkB,SAAU,MACV9oB,cAAe,EACff,aAAc,EACdtJ,MAAO,IACPgK,KAAM,CACJC,KAAM,EACN6T,KAAM,UAER3S,eAAgB,EAChBtB,eAAgB,MAChBZ,mBAAoB,EACpBE,kBAAmB,EACnBsM,kBAAmB,YACnB+F,SAAU,MACVrB,SAAU,CACR3R,QAAS,MACT4qB,SAAU,KACVC,cAAe,EACfC,eAAgB,KAChBC,oBAAqB,EACrBC,sBAAuB,EACvBC,OAAQ,MACRC,gBAAiB,KAEnBjlB,WAAY,MACZnD,eAAgB,MAChBygB,KAAM,CACJC,SAAU,EACVtN,SAAU,EACV/oB,OAAQ,OAEVmkB,WAAY,EACZP,WAAY,GACZhE,cAAe,KACfqD,yBAA0B,MAC1BqC,YAAa,KACbF,WAAY,KACZC,gBAAiB,GACjBF,aAAc,IACdZ,aAAc,KACd/F,UAAW,EACXsF,yBAA0B,KAC1BN,oBAAqB,MACrBc,WAAY,KACZD,gBAAiB,IACjBvN,oBAAqB,MACrBoP,cAAe,KACfC,yBAA0B,KAC1B1L,oBAAqB,MACrByE,qBAAsB,EACtBsC,UAAW,KACXpH,mBAAoB,KACpB4jB,gBAAiB,CACfC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACPC,SAAU,EACVC,aAAc,MAEhBC,WAAY,CACVD,aAAc,KACdE,cAAe,MAEjBC,WAAY,CACVH,aAAc,KACdI,OAAQ,KACRC,aAAc,GACdC,YAAa,KAEfC,WAAY,CACVC,UAAW,OAEbC,KAAM,CACJC,iBAAkB,iBAClBC,iBAAkB,aAClBC,kBAAmB,0BACnBC,iBAAkB,2BAItB,GAAInjC,KAAKojC,MAAO,CACd5B,EAAc5M,WAAa,CACzB9yB,GAAI9B,KAAKqjC,aACTve,KAAM,UACNgQ,UAAW,KACXC,YAAa,M,CAMjB,MAAMuO,EAA8B,CAClCt+B,GAAI,CACFmP,KAAM,KACJ7T,YAAW,KACTN,KAAKujC,kBAAkBpxB,MAAM,GAC5B,GAAG,EAGRqxB,2BAA4BxjC,KAAKyjC,oBAAoBtxB,KAErDuxB,yBAA0B1jC,KAAK2jC,mBAAmBxxB,KAElDyxB,yBAA0B5jC,KAAK6jC,mBAAmB1xB,KAElD2xB,yBAA0B9jC,KAAK+jC,mBAAmB5xB,KAElD6xB,uBAAwBhkC,KAAKikC,iBAAiB9xB,KAE9C+xB,uBAAwBlkC,KAAKmkC,iBAAiBhyB,KAE9CgO,gBAAiBngB,KAAKokC,yBAAyBjyB,KAE/ChL,cAAenH,KAAKqkC,uBAAuBlyB,KAE3CmyB,WAAYtkC,KAAKukC,cAAcpyB,KAE/BqyB,eAAgBxkC,KAAKykC,oBAAoBtyB,KAEzCuyB,SAAU1kC,KAAK2kC,kBAAkBxyB,KAEjCyyB,WAAY5kC,KAAK6kC,oBAAoB1yB,KAErC2yB,SAAU9kC,KAAK+kC,kBAAkB5yB,KAEjC6yB,IAAKhlC,KAAKilC,aAAa9yB,KAEvB+yB,UAAWllC,KAAKmlC,mBAAmBhzB,OAIvC,MAAMizB,IAAkBplC,KAAK0T,WAAa1T,KAAK0T,QAAQ1O,GAAMhF,KAAK0T,QAAQ1O,GAAK,GAG/E,MAAMqgC,EAAqB,CAAErgC,GAAEjI,OAAAiZ,OAAAjZ,OAAAiZ,OAAA,GAAOovB,GAAiB9B,EAAat+B,KAGpE,OAAAjI,OAAAiZ,OAAAjZ,OAAAiZ,OAAAjZ,OAAAiZ,OAAA,GAAYwrB,GAAkBxhC,KAAK0T,SAAY2xB,E,CAGjD,MAAAtN,GACE,OACEuN,EAACC,EAAI,CAACC,MAAM,oBACVF,EAAA,OAAKE,MAAM,kBACTF,EAAA,cAEDtlC,KAAKojC,OAASkC,EAAA,OAAKE,MAAM,oBAAoBC,IAAK3jC,GAAM9B,KAAKqjC,aAAevhC,IAC5E9B,KAAK0lC,QACJJ,EAAA,OAAKE,MAAM,qBAAqBtb,QAAS,IAAMlqB,KAAK8B,GAAGkgB,aACrDsjB,EAAA,aAAWK,KAAMC,EAAmB1D,OAAO,SAG9CliC,KAAK0lC,QACJJ,EAAA,OAAKE,MAAM,qBAAqBtb,QAAS,IAAMlqB,KAAK8B,GAAGyf,aACrD+jB,EAAA,aAAWK,KAAMC,K,oFAQ7B,MAAM/E,GAAiB/+B,GACdg+B,QAAQc,IACbp/B,MAAMqkC,KAAK/jC,EAAG/D,iBAAiB,uBAAuByF,KAAIsiC,GAAKA,EAAEC,sB"}
1
+ {"version":3,"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","makeReactive","proto","__proto__","defineProperty","get","set","value","Dom7","Array","items","super","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","arrayUnique","uniqueArray","i","indexOf","qsa","selector","context","a","$","html","trim","toCreate","tempParent","innerHTML","nodeType","fn","addClass","classes","classNames","map","c","split","classList","add","removeClass","remove","toggleClass","className","toggle","hasClass","contains","attr","attrs","arguments","getAttribute","undefined","attrName","removeAttr","removeAttribute","transform","transition","duration","transitionDuration","on","args","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","events","j","event","dom7Listeners","proxyListener","dom7LiveListeners","off","handlers","handler","splice","dom7proxy","trigger","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","index","result","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","els","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","removeChild","Methods","methodName","writable","deleteProps","object","nextTick","delay","now","currentStyle","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","o","slice","isNode","node","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","startTime","time","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","calcSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","checkPassiveListener","supportsPassive","opts","gestures","checkGestures","getSupport","deviceCached","calcDevice","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","iPadScreens","os","getDevice","overrides","browser","calcBrowser","isSafari","toLowerCase","isWebView","test","getBrowser","Resize","emit","observer","resizeHandler","destroyed","initialized","createObserver","ResizeObserver","entries","newWidth","newHeight","contentBoxSize","contentRect","inlineSize","blockSize","observe","removeObserver","unobserve","orientationChangeHandler","resizeObserver","Observer","extendParams","observers","attach","options","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","init","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","destroy","disconnect","eventsEmitter","priority","self","method","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","eventsArray","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","Number","isNaN","assign","size","updateSlides","getDirectionLabel","property","marginRight","getDirectionPropertyValue","label","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","initSlides","slideSize","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isVisible","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","activeSlide","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","update","getSwiperTranslate","virtualTranslate","currentTranslate","setTranslate","byController","x","y","z","previousTranslate","newProgress","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","transitionStart","slideTo","initial","Error","indexAsNumber","isValidNumber","isFinite","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","t","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","snapTranslate","diff","slideChanged","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","touchEventsTarget","cursor","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","assignedSlot","getRootNode","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","isTouchEvent","type","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","isNavButtonTarget","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","start","move","end","passiveListeners","passive","cancel","updateOnWindowResize","attachEvents","bind","detachEvents","events$1","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointOnlyParams","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","containerModifierClass","emitContainerClasses","fill","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","prepareClasses","prefix","resultClasses","item","addClasses","suffixes","autoheight","centered","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","isPicture","complete","onload","onerror","preloadImages","imagesToLoad","imagesLoaded","updateOnImagesReady","currentSrc","images","wasLocked","lastSlideIndex","lastSlideRightEdge","checkOverflow$1","defaults","createElements","url","uniqueNavElements","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","slideInView","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","module","m","prototypeGroup","protoMethod","Keyboard","keyboard","onlyInViewport","pageUpDown","handle","kc","keyCode","charCode","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","createElementIfNotDefined","checkProps","element","classesToSelector","Pagination","pfx","pagination","bulletElement","clickable","hideOnClick","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","hiddenClass","progressbarFillClass","progressbarOppositeClass","clickableClass","lockClass","horizontalClass","verticalClass","bullets","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","position","total","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","_s","targetEl","isHidden","Scrollbar","timeout","dragTimeout","dragStartPos","dragSize","trackSize","divider","scrollbar","hide","draggable","snapOnRelease","dragClass","dragEl","$dragEl","newSize","newPos","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","activeListener","eventMethod","enableDraggable","disableDraggable","$swiperEl","Zoom","zoom","maxRatio","containerClass","zoomedSlideClass","currentScale","isScaling","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","gesture","$slideEl","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","distance","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","onTransitionEnd","zoomIn","touchAction","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","in","out","Autoplay","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","$activeSlideEl","autoplayResult","stop","pause","onVisibilityChange","visibilityState","onMouseEnter","onMouseLeave","attachMouseEvents","detachMouseEvents","carouselCss","Carousel","swiperReady","Promise","resolve","readySwiper","didInit","optionsChanged","getSwiper","connectedCallback","mut","mutationO","subtree","componentDidLoad","initSwiper","disconnectedCallback","syncSwiper","all","waitForSlides","getActiveIndex","getPreviousIndex","startAutoplay","stopAutoplay","lockSwipeToNext","lock","lockSwipeToPrev","lockSwipes","finalOptions","normalizeOptions","swiperOptions","parallax","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","sticky","minimumVelocity","coverflowEffect","rotate","stretch","depth","modifier","slideShadows","flipEffect","limitRotation","cubeEffect","shadow","shadowOffset","shadowScale","fadeEffect","crossFade","a11y","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","pager","paginationEl","eventOptions","roadslidesdidload","slideChangeTransitionStart","roadslidewillchange","slideChangeTransitionEnd","roadslidedidchange","slideNextTransitionStart","roadslidenextstart","slidePrevTransitionStart","roadslideprevstart","slideNextTransitionEnd","roadslidenextend","slidePrevTransitionEnd","roadslideprevend","roadslidetransitionstart","roadslidetransitionend","sliderMove","roadslidedrag","reachBeginning","roadslidereachstart","reachEnd","roadslidereachend","touchStart","roadslidetouchstart","touchEnd","roadslidetouchend","tap","roadslidetap","doubleTap","roadslidedoubletap","customEvents","mergedEventOptions","h","Host","class","ref","arrows","icon","navigationChevron","from","s","componentOnReady"],"sources":["node_modules/ssr-window/ssr-window.esm.js","node_modules/dom7/dom7.esm.js","node_modules/swiper/shared/dom.js","node_modules/swiper/shared/utils.js","node_modules/swiper/shared/get-support.js","node_modules/swiper/shared/get-device.js","node_modules/swiper/shared/get-browser.js","node_modules/swiper/core/modules/resize/resize.js","node_modules/swiper/core/modules/observer/observer.js","node_modules/swiper/core/events-emitter.js","node_modules/swiper/core/update/updateSize.js","node_modules/swiper/core/update/updateSlides.js","node_modules/swiper/core/update/updateAutoHeight.js","node_modules/swiper/core/update/updateSlidesOffset.js","node_modules/swiper/core/update/updateSlidesProgress.js","node_modules/swiper/core/update/updateProgress.js","node_modules/swiper/core/update/updateSlidesClasses.js","node_modules/swiper/core/update/updateActiveIndex.js","node_modules/swiper/core/update/updateClickedSlide.js","node_modules/swiper/core/update/index.js","node_modules/swiper/core/translate/getTranslate.js","node_modules/swiper/core/translate/setTranslate.js","node_modules/swiper/core/translate/minTranslate.js","node_modules/swiper/core/translate/maxTranslate.js","node_modules/swiper/core/translate/translateTo.js","node_modules/swiper/core/translate/index.js","node_modules/swiper/core/transition/setTransition.js","node_modules/swiper/core/transition/transitionEmit.js","node_modules/swiper/core/transition/transitionStart.js","node_modules/swiper/core/transition/transitionEnd.js","node_modules/swiper/core/transition/index.js","node_modules/swiper/core/slide/slideTo.js","node_modules/swiper/core/slide/slideToLoop.js","node_modules/swiper/core/slide/slideNext.js","node_modules/swiper/core/slide/slidePrev.js","node_modules/swiper/core/slide/slideReset.js","node_modules/swiper/core/slide/slideToClosest.js","node_modules/swiper/core/slide/slideToClickedSlide.js","node_modules/swiper/core/slide/index.js","node_modules/swiper/core/loop/loopCreate.js","node_modules/swiper/core/loop/loopFix.js","node_modules/swiper/core/loop/loopDestroy.js","node_modules/swiper/core/loop/index.js","node_modules/swiper/core/grab-cursor/setGrabCursor.js","node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","node_modules/swiper/core/grab-cursor/index.js","node_modules/swiper/core/events/onTouchStart.js","node_modules/swiper/core/events/onTouchMove.js","node_modules/swiper/core/events/onTouchEnd.js","node_modules/swiper/core/events/onResize.js","node_modules/swiper/core/events/onClick.js","node_modules/swiper/core/events/onScroll.js","node_modules/swiper/core/events/index.js","node_modules/swiper/core/breakpoints/setBreakpoint.js","node_modules/swiper/core/breakpoints/getBreakpoint.js","node_modules/swiper/core/breakpoints/index.js","node_modules/swiper/core/classes/addClasses.js","node_modules/swiper/core/classes/removeClasses.js","node_modules/swiper/core/classes/index.js","node_modules/swiper/core/images/loadImage.js","node_modules/swiper/core/images/preloadImages.js","node_modules/swiper/core/images/index.js","node_modules/swiper/core/check-overflow/index.js","node_modules/swiper/core/defaults.js","node_modules/swiper/core/moduleExtendParams.js","node_modules/swiper/core/core.js","node_modules/swiper/modules/keyboard/keyboard.js","node_modules/swiper/shared/create-element-if-not-defined.js","node_modules/swiper/shared/classes-to-selector.js","node_modules/swiper/modules/pagination/pagination.js","node_modules/swiper/modules/scrollbar/scrollbar.js","node_modules/swiper/modules/zoom/zoom.js","node_modules/swiper/modules/autoplay/autoplay.js","src/components/carousel/carousel.css?tag=road-carousel&encapsulation=shadow","src/components/carousel/carousel.tsx"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.2\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n return swiper.slideTo(swiper.slides.length - 1, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag'\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n disableDraggable();\n }\n\n on('init', () => {\n init();\n updateSize();\n setTranslate();\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n Object.assign(swiper.scrollbar, {\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY; // Define if we need image drag\n\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n}) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","/*\n * Carousel\n *\n * Index\n * - Container\n * - Bullets\n * - Arrows\n * - Slide\n * - Image\n */\n\n@import \"../../../node_modules/swiper/swiper-bundle.min.css\";\n\n/* CONTAINER\n -------------------- */\n\n:host(.swiper-container) {\n display: block;\n user-select: none;\n position: relative;\n z-index: 1;\n padding: 0;\n margin-right: auto;\n margin-left: auto;\n overflow: hidden;\n list-style: none;\n}\n\n/* BULLETS\n -------------------- */\n\n:host(.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet),\n:host(.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet) {\n margin: 0 0.125rem;\n}\n\n:host(.swiper-container-horizontal > .swiper-pagination-bullets) {\n bottom: 0.5rem;\n}\n\n.swiper-pagination-bullets {\n right: 0;\n display: inline-table;\n width: auto!important;\n padding: 0 0.75rem;\n margin: 0 auto;\n vertical-align: middle;\n background-color: var(--road-overlay-inverse);\n border-radius: 40px;\n}\n\n.swiper-pagination-bullet {\n width: 1.5rem;\n height: 0.25rem;\n vertical-align: middle;\n background: var(--road-overlay);\n border-radius: 0;\n}\n\n.swiper-pagination-bullet-active {\n background: var(--road-on-surface);\n}\n\n:host(.swiper-pagination-progressbar) {\n background: var(--road-grey-70);\n}\n\n:host(.swiper-pagination-progressbar) .swiper-pagination-progressbar-fill {\n background: var(--road-grey-10);\n}\n\n:host(.swiper-scrollbar) {\n background: var(--road-grey-70);\n}\n\n:host(.swiper-scrollbar-drag) {\n background: var(--road-grey-10);\n}\n\n/* ARROWS\n -------------------- */\n\n.swiper-button-prev,\n.swiper-button-next {\n display: none;\n}\n\n@media (min-width: 768px) {\n\n.swiper-button-prev,\n.swiper-button-next {\n display: flex;\n width: 3rem;\n height: 3rem;\n background: var(--road-overlay);\n border: 1px solid var(--road-overlay-inverse);\n border-radius: 3rem;\n }\n\n.swiper-button-prev road-icon,\n.swiper-button-next road-icon{\n color: var(--road-on-overlay);\n }\n}\n\n.swiper-button-prev::after,\n.swiper-button-next::after {\n display: none;\n}\n\n/**\n * Hover state\n */\n\n@media (hover: hover) {\n\n.swiper-button-prev:hover,\n.swiper-button-next:hover {\n background: var(--road-surface);\n }\n\n.swiper-button-prev:hover road-icon,\n.swiper-button-next:hover road-icon {\n color: var(--road-on-surface);\n }\n}\n\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n left: 1rem;\n}\n\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n right: 1rem;\n}\n\n@media (min-width: 768px) {\n\n .swiper-button-prev,\n .swiper-container-rtl .swiper-button-next {\n left: 1.5rem;\n }\n\n .swiper-button-next,\n .swiper-container-rtl .swiper-button-prev {\n right: 1.5rem;\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, Method, Prop, Watch, h } from '@stencil/core';\nimport { navigationChevron } from '../../../icons';\nimport Swiper, {SwiperOptions, Autoplay, Pagination, Scrollbar, Keyboard, Zoom} from \"swiper\"\n\nSwiper.use([Pagination, Scrollbar, Autoplay, Keyboard, Zoom]);\n\n/**\n * @slot - content of the carousel, it should be road-carousel-item elements.\n */\n\n@Component({\n tag: 'road-carousel',\n styleUrl: 'carousel.css',\n shadow: true,\n})\nexport class Carousel {\n private paginationEl?: HTMLElement;\n private swiperReady = false;\n private mutationO?: MutationObserver;\n private readySwiper!: (swiper: Swiper) => void;\n private swiper: Promise<Swiper> = new Promise(resolve => {\n this.readySwiper = resolve;\n });\n private syncSwiper?: Swiper;\n private didInit = false;\n\n @Element() el!: HTMLRoadCarouselElement;\n\n /**\n * Options to pass to the swiper instance.\n * See http://idangero.us/swiper/api/ for valid options\n */\n @Prop() options: any = {}; // SwiperOptions; // TODO\n\n @Watch('options')\n async optionsChanged() {\n if (this.swiperReady) {\n const swiper = await this.getSwiper();\n Object.assign(swiper.params, this.options);\n await this.update();\n }\n }\n\n /**\n * If `true`, show the pagination.\n */\n @Prop() pager = true;\n\n /**\n * If `true`, show arrows.\n */\n @Prop() arrows = false;\n\n /**\n * Emitted after Swiper initialization\n */\n @Event() roadslidesdidload!: EventEmitter<void>;\n\n /**\n * Emitted when the user taps/clicks on the slide's container.\n */\n @Event() roadslidetap!: EventEmitter<void>;\n\n /**\n * Emitted when the user double taps on the slide's container.\n */\n @Event() roadslidedoubletap!: EventEmitter<void>;\n\n /**\n * Emitted before the active slide has changed.\n */\n @Event() roadslidewillchange!: EventEmitter<void>;\n\n /**\n * Emitted after the active slide has changed.\n */\n @Event() roadslidedidchange!: EventEmitter<void>;\n\n /**\n * Emitted when the next slide has started.\n */\n @Event() roadslidenextstart!: EventEmitter<void>;\n\n /**\n * Emitted when the previous slide has started.\n */\n @Event() roadslideprevstart!: EventEmitter<void>;\n\n /**\n * Emitted when the next slide has ended.\n */\n @Event() roadslidenextend!: EventEmitter<void>;\n\n /**\n * Emitted when the previous slide has ended.\n */\n @Event() roadslideprevend!: EventEmitter<void>;\n\n /**\n * Emitted when the slide transition has started.\n */\n @Event() roadslidetransitionstart!: EventEmitter<void>;\n\n /**\n * Emitted when the slide transition has ended.\n */\n @Event() roadslidetransitionend!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is actively being moved.\n */\n @Event() roadslidedrag!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is at its initial position.\n */\n @Event() roadslidereachstart!: EventEmitter<void>;\n\n /**\n * Emitted when the slider is at the last slide.\n */\n @Event() roadslidereachend!: EventEmitter<void>;\n\n /**\n * Emitted when the user first touches the slider.\n */\n @Event() roadslidetouchstart!: EventEmitter<void>;\n\n /**\n * Emitted when the user releases the touch.\n */\n @Event() roadslidetouchend!: EventEmitter<void>;\n\n connectedCallback() {\n // tslint:disable-next-line: strict-type-predicates\n if (typeof MutationObserver !== 'undefined') {\n const mut = this.mutationO = new MutationObserver(() => {\n if (this.swiperReady) {\n this.update();\n }\n });\n mut.observe(this.el, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n componentDidLoad(){\n if (!this.didInit) {\n this.didInit = true;\n this.initSwiper();\n }\n }\n\n disconnectedCallback() {\n if (this.mutationO) {\n this.mutationO.disconnect();\n this.mutationO = undefined;\n }\n\n /**\n * We need to synchronously destroy\n * swiper otherwise it is possible\n * that it will be left in a\n * destroyed state if connectedCallback\n * is called multiple times\n */\n const swiper = this.syncSwiper;\n if (swiper !== undefined) {\n swiper.destroy(true, true);\n this.swiper = new Promise(resolve => {\n this.readySwiper = resolve;\n });\n this.swiperReady = false;\n this.syncSwiper = undefined;\n }\n\n this.didInit = false;\n }\n\n /**\n * Update the underlying slider implementation. Call this if you've added or removed\n * child slides.\n */\n @Method()\n async update() {\n const [swiper] = await Promise.all([\n this.getSwiper(),\n waitForSlides(this.el)\n ]);\n swiper.update();\n }\n\n /**\n * Force swiper to update its height (when autoHeight is enabled) for the duration\n * equal to 'speed' parameter.\n *\n * @param speed The transition duration (in ms).\n */\n @Method()\n async updateAutoHeight(speed?: number) {\n const swiper = await this.getSwiper();\n swiper.updateAutoHeight(speed);\n }\n\n /**\n * Transition to the specified slide.\n *\n * @param index The index of the slide to transition to.\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slideTo(index: number, speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slideTo(index, speed, runCallbacks);\n }\n\n /**\n * Transition to the next slide.\n *\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slideNext(speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slideNext(speed!, runCallbacks!);\n }\n\n /**\n * Transition to the previous slide.\n *\n * @param speed The transition duration (in ms).\n * @param runCallbacks If true, the transition will produce the [Transition/SlideChange][Start/End] transition events.\n */\n @Method()\n async slidePrev(speed?: number, runCallbacks?: boolean) {\n const swiper = await this.getSwiper();\n swiper.slidePrev(speed, runCallbacks);\n }\n\n /**\n * Get the index of the active slide.\n */\n @Method()\n async getActiveIndex(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.activeIndex;\n }\n\n /**\n * Get the index of the previous slide.\n */\n @Method()\n async getPreviousIndex(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.previousIndex;\n }\n\n /**\n * Get the total number of slides.\n */\n @Method()\n async length(): Promise<number> {\n const swiper = await this.getSwiper();\n return swiper.slides.length;\n }\n\n /**\n * Get whether or not the current slide is the last slide.\n */\n @Method()\n async isEnd(): Promise<boolean> {\n const swiper = await this.getSwiper();\n return swiper.isEnd;\n }\n\n /**\n * Get whether or not the current slide is the first slide.\n */\n @Method()\n async isBeginning(): Promise<boolean> {\n const swiper = await this.getSwiper();\n return swiper.isBeginning;\n }\n\n /**\n * Start auto play.\n */\n @Method()\n async startAutoplay() {\n const swiper = await this.getSwiper();\n if (swiper.autoplay) {\n swiper.autoplay.start();\n }\n }\n\n /**\n * Stop auto play.\n */\n @Method()\n async stopAutoplay() {\n const swiper = await this.getSwiper();\n if (swiper.autoplay) {\n swiper.autoplay.stop();\n }\n }\n\n /**\n * Lock or unlock the ability to slide to the next slide.\n *\n * @param lock If `true`, disable swiping to the next slide.\n */\n @Method()\n async lockSwipeToNext(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlideNext = !lock;\n }\n\n /**\n * Lock or unlock the ability to slide to the previous slide.\n *\n * @param lock If `true`, disable swiping to the previous slide.\n */\n @Method()\n async lockSwipeToPrev(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlidePrev = !lock;\n }\n\n /**\n * Lock or unlock the ability to slide to the next or previous slide.\n *\n * @param lock If `true`, disable swiping to the next and previous slide.\n */\n @Method()\n async lockSwipes(lock: boolean) {\n const swiper = await this.getSwiper();\n swiper.allowSlideNext = !lock;\n swiper.allowSlidePrev = !lock;\n swiper.allowTouchMove = !lock;\n }\n\n /**\n * Get the Swiper instance.\n * Use this to access the full Swiper API.\n * See https://idangero.us/swiper/api/ for all API options.\n */\n @Method()\n async getSwiper(): Promise<any> {\n return this.swiper;\n }\n\n private async initSwiper() {\n const finalOptions = this.normalizeOptions();\n\n // init swiper core\n await waitForSlides(this.el);\n // @ts-ignore\n const swiper = new Swiper(this.el, finalOptions);\n this.swiperReady = true;\n this.syncSwiper = swiper;\n this.readySwiper(swiper);\n }\n\n private normalizeOptions(): SwiperOptions {\n // Base options, can be changed\n // TODO Add interface SwiperOptions\n const swiperOptions: SwiperOptions = {\n effect: undefined,\n direction: 'horizontal',\n initialSlide: 0,\n loop: false,\n parallax: false,\n slidesPerView: 1,\n spaceBetween: 0,\n speed: 300,\n grid: {\n rows: 1,\n fill: 'column',\n },\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0,\n slidesOffsetAfter: 0,\n touchEventsTarget: 'container',\n autoplay: false,\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02,\n },\n autoHeight: false,\n setWrapperSize: false,\n zoom: {\n maxRatio: 3,\n minRatio: 1,\n toggle: false,\n },\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n touchStartPreventDefault: false,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchReleaseOnEdges: false,\n resistance: true,\n resistanceRatio: 0.85,\n watchSlidesProgress: false,\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n loopAdditionalSlides: 0,\n noSwiping: true,\n runCallbacksOnInit: true,\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true,\n },\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n fadeEffect: {\n crossFade: false,\n },\n a11y: {\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n },\n };\n\n if (this.pager) {\n swiperOptions.pagination = {\n el: this.paginationEl!,\n type: 'bullets',\n clickable: true,\n hideOnClick: false,\n };\n }\n\n // Keep the event options separate, we dont want users\n // overwriting these\n const eventOptions: SwiperOptions = {\n on: {\n init: () => {\n setTimeout(() => {\n this.roadslidesdidload.emit();\n }, 20);\n },\n // @ts-ignore\n slideChangeTransitionStart: this.roadslidewillchange.emit,\n // @ts-ignore\n slideChangeTransitionEnd: this.roadslidedidchange.emit,\n // @ts-ignore\n slideNextTransitionStart: this.roadslidenextstart.emit,\n // @ts-ignore\n slidePrevTransitionStart: this.roadslideprevstart.emit,\n // @ts-ignore\n slideNextTransitionEnd: this.roadslidenextend.emit,\n // @ts-ignore\n slidePrevTransitionEnd: this.roadslideprevend.emit,\n // @ts-ignore\n transitionStart: this.roadslidetransitionstart.emit,\n // @ts-ignore\n transitionEnd: this.roadslidetransitionend.emit,\n // @ts-ignore\n sliderMove: this.roadslidedrag.emit,\n // @ts-ignore\n reachBeginning: this.roadslidereachstart.emit,\n // @ts-ignore\n reachEnd: this.roadslidereachend.emit,\n // @ts-ignore\n touchStart: this.roadslidetouchstart.emit,\n // @ts-ignore\n touchEnd: this.roadslidetouchend.emit,\n // @ts-ignore\n tap: this.roadslidetap.emit,\n // @ts-ignore\n doubleTap: this.roadslidedoubletap.emit,\n },\n };\n\n const customEvents = (!!this.options && !!this.options.on) ? this.options.on : {};\n\n // merge \"on\" event listeners, while giving our event listeners priority\n const mergedEventOptions = { on: { ...customEvents, ...eventOptions.on } };\n\n // Merge the base, user options, and events together then pas to swiper\n return { ...swiperOptions, ...this.options, ...mergedEventOptions };\n }\n\n render() {\n return (\n <Host class=\"swiper-container\">\n <div class=\"swiper-wrapper\">\n <slot/>\n </div>\n {this.pager && <div class=\"swiper-pagination\" ref={el => this.paginationEl = el}></div>}\n {this.arrows && (\n <div class=\"swiper-button-prev\" onClick={() => this.el.slidePrev()}>\n <road-icon icon={navigationChevron} rotate=\"180\"></road-icon>\n </div>\n )}\n {this.arrows && (\n <div class=\"swiper-button-next\" onClick={() => this.el.slideNext()}>\n <road-icon icon={navigationChevron}></road-icon>\n </div>\n )}\n </Host>\n );\n }\n}\n\nconst waitForSlides = (el: HTMLElement) => {\n return Promise.all(\n Array.from(el.querySelectorAll('road-carousel-item')).map(s => s.componentOnReady())\n );\n};\n"],"mappings":"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"}