vue-awesome-picker.js.map 351 KB
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///vue-awesome-picker.js","webpack:///webpack/bootstrap af70176ca09c0bd50d5c","webpack:///src/lib/vue-awesome-picker.vue","webpack:///./src/lib/data/range.js","webpack:///./src/lib/index.js","webpack:///./src/lib/vue-awesome-picker.vue","webpack:///./src/lib/vue-awesome-picker.vue?cbe8","webpack:///./src/lib/vue-awesome-picker.vue?6f7b","webpack:///./node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/listToStyles.js","webpack:///./node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer.js","webpack:///./node_modules/_better-scroll@1.15.1@better-scroll/dist/bscroll.esm.js","webpack:///./src/lib/data/time.js","webpack:///./src/lib/data/date.js","webpack:///./src/lib/vue-awesome-picker.vue?0a6c"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","_toConsumableArray","arr","Array","isArray","arr2","length","from","__WEBPACK_IMPORTED_MODULE_0_better_scroll__","__WEBPACK_IMPORTED_MODULE_1__data_time_js__","__WEBPACK_IMPORTED_MODULE_2__data_date_js__","props","data","type","default","anchor","String","textTitle","textConfirm","textCancel","colorTitle","colorConfirm","colorCancel","swipeTime","Number","display","dataChange","pickerData","_dataGetter","pickerAnchor","_anchorGetter","wheels","watch","_setPickerData","computed","proxyData","proxyAnchor","dataType","methods","concat","_this","map","item","index","value","indexOf","show","_this2","_updatePickerData","$nextTick","wheelWrapper","$refs","forEach","_createWheel","enable","_wheelToAnchor","_destroyExtraWheels","wheel","hide","disable","_this3","refresh","children","selectedIndex","rotate","on","_cascadePickerChange","newIndex","_getCurrentValue","splice","_updatePickerDataChange","wheelTo","_this4","j","getSelectedIndex","push","_this5","dataLength","destroy","_this6","wheelIndex","arguments","undefined","wheelData","_reloadWheel","slice","_this7","_this8","scroll","querySelector","$set","confirm","some","isInTransition","selectedValues","$emit","cancel","polyfill","unit","__WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__","picker","install","Vue","component","AwesomePicker","window","use","injectStyle","ssrContext","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_220e6364_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__","normalizeComponent","__vue_styles__","Component","content","locals","cssWithMappingToString","useSourceMap","cssMapping","btoa","sourceMapping","toComment","sources","source","sourceRoot","join","sourceMap","unescape","encodeURIComponent","JSON","stringify","list","toString","mediaQuery","alreadyImportedModules","id","addStylesToDom","styles","domStyle","stylesInDom","refs","parts","addStyle","createStyleElement","styleElement","document","createElement","head","appendChild","obj","update","remove","ssrIdKey","isProduction","noop","parentNode","removeChild","isOldIE","styleIndex","singletonCounter","singletonElement","applyToSingletonTag","bind","applyToTag","newObj","css","media","styleSheet","cssText","replaceText","cssNode","createTextNode","childNodes","insertBefore","setAttribute","options","ssrId","firstChild","hasDocument","DEBUG","Error","listToStyles","getElementsByTagName","navigator","test","userAgent","toLowerCase","parentId","_isProduction","_options","newList","mayRemove","textStore","replacement","filter","Boolean","newStyles","part","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","render","staticRenderFns","_compiled","functional","_scopeId","hook","context","$vnode","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","existing","beforeCreate","_injectStyles","h","spliceOne","pop","getNow","performance","now","timing","navigationStart","Date","extend","target","_len","rest","_key","key","isUndef","v","getDistance","x","y","Math","sqrt","prefixStyle","style","vendor","charAt","toUpperCase","substr","addEvent","el","fn","capture","addEventListener","passive","removeEvent","removeEventListener","offset","left","top","offsetLeft","offsetTop","offsetParent","offsetToBody","rect","getBoundingClientRect","pageXOffset","pageYOffset","getRect","SVGElement","width","height","offsetWidth","offsetHeight","preventDefaultException","exceptions","tap","e","eventName","ev","createEvent","initEvent","pageX","pageY","dispatchEvent","click","event","bubbles","cancelable","posSrc","eventSource","changedTouches","screenX","screenY","clientX","clientY","MouseEvent","forwardedTouchEvent","_constructed","dblclick","prepend","before","child","momentum","current","start","time","lowerMargin","upperMargin","wrapperSize","distance","speed","abs","deceleration","itemHeight","swipeBounceTime","duration","rate","destination","_findNearestValidWheel","max","min","round","warn","msg","console","error","assert","condition","createScrollbar","direction","scrollbar","indicator","className","Indicator","scroller","wrapper","wrapperStyle","indicatorStyle","fade","visible","opacity","sizeRatioX","sizeRatioY","maxPosX","maxPosY","interactive","_addDOMEvents","isTombstoneNode","node","classList","contains","InfiniteScroller","createTombstone","fetch","firstAttachedItem","lastAttachedItem","anchorScrollTop","anchorItem","tombstoneHeight","tombstoneWidth","tombstones","tombstonesAnimationHandlers","items","loadedItems","requestInProgress","hasMore","wrapperEl","scrollerEl","onResize","_onResizeHandler","setTimeout","onScroll","BScroll","scrollerStyle","_init","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","TypeError","toConsumableArray","inBrowser","ua","isWeChatDevTools","isAndroid","elementStyle","transformNames","standard","webkit","Moz","O","ms","cssVendor","transform","transition","hasPerspective","hasTouch","hasTransform","hasTransition","transitionTimingFunction","transitionDuration","transitionDelay","transformOrigin","transitionEnd","TOUCH_EVENT","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","DEFAULT_OPTIONS","startX","startY","scrollX","scrollY","freeScroll","directionLockThreshold","eventPassthrough","bounce","bounceTime","momentumLimitTime","momentumLimitDistance","flickLimitTime","flickLimitDistance","resizePolling","probeType","preventDefault","tagName","HWCompositing","useTransition","useTransform","bindToWrapper","disableMouse","disableTouch","observeDOM","autoBlur","snap","pullDownRefresh","pullUpLoad","mouseWheel","stopPropagation","zoom","infinity","ease","swipe","t","swipeBounce","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","interval","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","clearTimeout","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_RIGHT","PROBE_DEBOUNCE","PROBE_REALTIME","handleEvent","_start","_move","_end","_shouldShow","transitionTime","_calculate","updatePosition","hold","fadeTimeout","indicatorHeight","_height","translateZ","indicatorWidth","_width","easing","_removeDOMEvents","point","touches","initiated","moved","lastPointX","lastPointY","startTime","_handleMoveEvents","trigger","deltaX","deltaY","newX","newY","_pos","snapOption","_snapOption$easing","_nearestSnap","directionX","directionY","currentPage","scrollTo","hasVerticalScroll","hasHorizontalScroll","wrapperHeight","clientHeight","scrollerHeight","maxScrollY","wrapperWidth","clientWidth","scrollerWidth","maxScrollX","eventOperation","_handleDOMEvents","DEFAULT_SCROLL_RUNWAY","handler","infiniteScroller","scrollTop","delta","_calculateAnchoredItem","lastScreenItem","end","fill","maybeRequestContent","tombstone","position","attachContent","itemsNeeded","then","addContent","tombstoneLen","_removeTombstones","curPos","_fixScrollPosition","_setupAnimations","resetPosition","stop","_addItem","unusedNodes","_collectUnusedNodes","tombstoneAnimations","_createDOMNodes","_cleanupUnusedNodes","_cacheNodeSize","resetMore","markIndex","itemLen","currentNode","currentData","zIndex","_getTombStone","isTombstone","animation","_i2","_animation","tombstoneNode","tombstoneAnimationsHandler","_i3","_animation2","initialAnchor","ceil","floor","_handleOptions","_events","setScale","_initExtFeatures","_watchTransition","_initDOMObserver","_handleAutoBlur","scale","lastScale","_initSnap","_initScrollbar","_initPullUp","_initPullDown","_initWheel","_initMouseWheel","_initZoom","_initInfinite","me","set","newVal","pointerEvents","pulling","activeElement","blur","MutationObserver","timer","observer","mutations","_shouldNotRefresh","immediateRefresh","deferredRefresh","mutation","config","attributes","childList","subtree","observe","disconnect","_checkDOMUpdate","outsideBoundaries","minScrollX","minScrollY","stopFromTransition","check","destroyed","scrollerRect","newWidth","newHeight","oldWidth","oldHeight","_zoomStart","_zoom","scaled","_zoomEnd","_resize","_transitionEnd","enabled","_onMouseWheel","isWrapperStatic","getComputedStyle","wrapperRect","relativeX","relativeY","_checkWheelAllDisabled","endTime","wrapperOffset","_eventType","button","distX","distY","movingDirectionX","movingDirectionY","directionLocked","_transitionTime","absStartX","absStartY","pointX","pointY","absDistX","absDistY","timestamp","bottom","right","_translate","scrollLeft","documentElement","body","pX","pY","_checkPullDown","_checkClick","flick","momentumX","momentumY","adjustTime","snapSpeed","preventClick","wheelWrapperClass","_offset","_dblclick","dblclickTrigged","lastClickTime","_dblclick$delay","delay","resizeTimeout","_startProbe","probe","pos","getComputedPosition","probeTimer","indicators","_transitionTimingFunction","_options$wheel$rotate","deg","_animate","destX","destY","easingFn","step","destTime","isAnimating","destScale","newScale","startScale","animateTimer","scrollBy","isSilent","_reflow","scrollToElement","offsetX","offsetY","nodeType","wheelItemClass","easeing","roundX","roundY","matrix","split","replace","once","magic","off","apply","count","events","len","eventsCopy","_event","loop","cloneNode","querySelectorAll","pages","stepX","stepY","cx","cy","_checkSnapLoop","initPageX","_loopX","initPageY","_loopY","_goToPage","snapThreshold","threshold","snapThresholdX","snapThresholdY","listenFlick","_children","posX","posY","goToPage","prev","getCurrentPage","wheelDisabledItemClass","currentIndex","cacheIndex","wheelItemsAllDisabled","_options$scrollbar","_options$scrollbar$fa","_options$scrollbar$in","_insertScrollBar","_removeScrollBars","_options$pullDownRefr","_options$pullDownRefr2","_options$pullDownRefr3","finishPullDown","openPullDown","closePullDown","autoPullDownRefresh","_options$pullDownRefr4","_options$pullDownRefr5","_options$pullDownRefr6","pullupWatching","_watchPullUp","_checkToEnd","_options$pullUpLoad$t","finishPullUp","openPullUp","closePullUp","_handleMouseWheelEvent","mouseWheelTimer","mouseWheelEndTimer","firstWheelOpreation","_options$mouseWheel","_options$mouseWheel$s","_options$mouseWheel$i","invert","_options$mouseWheel$e","easeTime","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","detail","needTriggerEnd","_options$zoom","_options$zoom$start","_options$zoom$min","_options$zoom$max","_zoomTo","originX","originY","zoomTo","_offsetToBody","firstFinger","secondFinger","startDistance","_offsetToBody2","_options$zoom2","_options$zoom2$min","_options$zoom2$max","pow","_options$zoom3","_options$zoom3$min","_options$zoom3$max","Version","__WEBPACK_IMPORTED_MODULE_0__range__","range","isLeapYear","getDays","endDay","UNIT_DAY","day","dateAnchor","dateData","yearData","monthData","cascadeMonthData","month","year","date","getFullYear","getMonth","getDate","_vm","_h","$createElement","_c","_self","attrs","directives","rawName","expression","staticClass","_v","color","_t","ref","_l","esExports"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,OAAA,sBAAAH,GACA,gBAAAC,SACAA,QAAA,iBAAAD,IAEAD,EAAA,iBAAAC,KACC,mBAAAK,WAAAC,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAR,OAGA,IAAAC,GAAAQ,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAX,WAUA,OANAM,GAAAE,GAAAI,KAAAX,EAAAD,QAAAC,IAAAD,QAAAO,GAGAN,EAAAU,GAAA,EAGAV,EAAAD,QAvBA,GAAAS,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAf,EAAAgB,EAAAC,GACAV,EAAAW,EAAAlB,EAAAgB,IACAG,OAAAC,eAAApB,EAAAgB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAvB,GACA,GAAAgB,GAAAhB,KAAAwB,WACA,WAA2B,MAAAxB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAM,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDpB,EAAAuB,EAAA,QAGAvB,IAAAwB,EAAA,KDgBM,SAAU9B,EAAQ+B,EAAqBzB,GAE7C,YAIA,SAAS0B,GAAmBC,GAAO,GAAIC,MAAMC,QAAQF,GAAM,CAAE,IAAK,GAAIxB,GAAI,EAAG2B,EAAOF,MAAMD,EAAII,QAAS5B,EAAIwB,EAAII,OAAQ5B,IAAO2B,EAAK3B,GAAKwB,EAAIxB,EAAM,OAAO2B,GAAe,MAAOF,OAAMI,KAAKL,GAHrK,GAAIM,GAA8CjC,EAAoB,IAClEkC,EAA8ClC,EAAoB,IAClEmC,EAA8CnC,EAAoB,GE/B3FyB,GAAA,GACAhB,KAAA,iBACA2B,OACAC,MACAC,KAAAV,MACAW,QAFA,WAGA,WAGAC,QACAF,KAAAV,MACAW,QAFA,WAGA,WAGAD,MACAA,KAAAG,OACAF,QAhCA,UAkCAG,WACAJ,KAAAG,OACAF,QAhCA,IAkCAI,aACAL,KAAAG,OACAF,QAnCA,MAqCAK,YACAN,KAAAG,OACAF,QAtCA,MAwCAM,YACAP,KAAAG,OACAF,QAxCA,WA0CAO,cACAR,KAAAG,OACAF,QA3CA,WA6CAQ,aACAT,KAAAG,OACAF,QA9CA,WAgDAS,WACAV,KAAAW,OACAV,QAAA,OAGAF,KAhDA,WAiDA,OACAa,SAAA,EACAC,YAAA,EACAC,WAAAtD,KAAAuD,cACAC,aAAAxD,KAAAyD,gBACAC,YAGAC,OACApB,KADA,WAEAvC,KAAA4D,mBAGAC,UACAC,UADA,WAEA,MAAA9D,MAAAuD,eAEAQ,YAJA,WAKA,MAAA/D,MAAAyD,iBAEAO,SAPA,WAQA,MAAAlC,OAAAC,QAAA/B,KAAA8D,UAAA,IAxFA,SACA,YA0FAG,SACAV,YADA,WAEA,GAAAhB,GAAA,IACA,QAAAvC,KAAAwC,MACA,IA3FA,OA4FAD,EAAAH,EAAA,OACA,KA5FA,OA6FAG,EAAAF,EAAA,OACA,KAhGA,SAiGA,QACAE,EAAAvC,KAAAuC,KAEA,SAAA2B,OAAAtC,EAAAW,KAEAkB,cAdA,WAcA,GAAAU,GAAAnE,KACA0C,IACA,IAAA1C,KAAA0C,OAAAT,OACAS,EAAA1C,KAAA0C,WAEA,QAAA1C,KAAAwC,MACA,IA1GA,OA2GAE,EAAAL,EAAA,OACA,SACAK,EAAA1C,KAAA0C,OAeA,MAZAA,KAAA0B,IAAA,SAAAC,EAAAhE,GAUA,MARAgE,GAAAC,MACAD,EAAAC,MACAD,EAAAE,MACAJ,EAAAb,YAAAa,EAAAb,WAAAjD,IAAA8D,EAAAb,WAAAjD,GAAAmE,QAAAH,EAAAE,QAAA,EACAJ,EAAAb,WAAAjD,GAAAmE,QAAAH,EAAAE,OAAA,EAEAF,OAIAH,OAAAtC,EAAAc,KAGA+B,KAzCA,WAyCA,GAAAC,GAAA1E,IACAA,MAAAoD,SAAA,GACApD,KAAA0D,OAAAzB,QAAAjC,KAAAqD,YArIA,YAsIArD,KAAAgE,UAAAhE,KAAA2E,oBACA3E,KAAA4E,UAAA,WACA,GAAAC,GAAAH,EAAAI,MAAAD,YACAH,GAAApB,WAAAyB,QAAA,SAAAV,EAAAC,GACAI,EAAAM,aAAAH,EAAAP,GAAAW,WAEAP,EAAAQ,eAAAR,EAAAX,aAEAW,EAAArB,YAAAqB,EAAAS,sBACAT,EAAArB,YAAA,KAGArD,KAAA0D,OAAAqB,QAAA,SAAAK,GACAA,EAAAH,YAKAI,KA9DA,WA+DArF,KAAA0D,OAAAqB,QAAA,SAAAK,GACAA,EAAAE,YAEAtF,KAAAoD,SAAA,GAGA4B,aArEA,SAqEAH,EAAAxE,GAAA,GAAAkF,GAAAvF,IACA,IAAAA,KAAA0D,OAAArD,GAaAL,KAAA0D,OAAArD,GAAAmF,cAbA,CACA,GAAAJ,GAAApF,KAAA0D,OAAArD,GAAA,GAAA8B,GAAA,EAAA0C,EAAAY,SAAApF,IACA+E,OACAM,cAAA,EACAC,OAAA,IAEAzC,UAAAlD,KAAAkD,WAEAlD,MAAAkF,eAAAlF,KAAA+D,aACAqB,EAAAQ,GAAA,uBACAL,EAAAM,qBAAAxF,KAKA,MAAAL,MAAA0D,OAAArD,IAGAwF,qBAxFA,SAwFAxF,GACA,GAnLA,YAmLAL,KAAAgE,SAAA,CAGA,GAAA8B,GAAA9F,KAAA+F,mBAAA1F,GAAAiE,KACAwB,KAAA9F,KAAAwD,aAAAnD,KACAL,KAAAwD,aAAAwC,OAAA3F,EAAA,EAAAyF,GACA9F,KAAAiG,wBAAA5F,EAAA,MAIA6E,eAnGA,SAmGA3C,GACAvC,KAAA0D,OAAAqB,QAAA,SAAAK,EAAA/E,GACA+E,EAAAc,QAAA3D,EAAAlC,IAAA,MAIA0F,iBAzGA,WAyGA,GAAAI,GAAAnG,KACAuE,IAQA,OAPAvE,MAAA0D,OAAAqB,QAAA,SAAAK,EAAA/E,GACA,GAAA+F,GAAAhB,EAAAiB,kBACA9B,GAAA+B,MACAhC,MAAA8B,EACA7B,MAAA4B,EAAA7C,WAAAjD,GAAA+F,OAGA7B,GAGAX,eArHA,WAqHA,GAAA2C,GAAAvG,IACAA,MAAAsD,WAAAtD,KAAAuD,cACAvD,KAAAwD,aAAAxD,KAAAyD,gBACAzD,KAAAoD,SAlNA,WAmNApD,KAAAgE,UACAhE,KAAA2E,oBAEA3E,KAAA4E,UAAA,WACA,GAAAC,GAAA0B,EAAAzB,MAAAD,YACA0B,GAAAjD,WAAAyB,QAAA,SAAAV,EAAAhE,GACAkG,EAAAvB,aAAAH,EAAAxE,KAEAkG,EAAApB,sBACAoB,EAAArB,eAAAqB,EAAAxC,gBAGA/D,KAAAqD,YAAA,GAIA8B,oBAzIA,WA0IA,GAAAqB,GAAAxG,KAAAsD,WAAArB,MACA,IAAAuE,EAAAxG,KAAA0D,OAAAzB,OAAA,CACAjC,KAAA0D,OAAAsC,OAAAQ,GACAzB,QAAA,SAAAK,GACAA,EAAAqB,cAKA9B,kBAnJA,WAmJA,GAAA+B,GAAA1G,KAAA2G,EAAAC,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,IACA5G,MAAAwD,aAAAxD,KAAAyD,eACA,IAAAlB,MAAA2B,OAAAtC,EAAA5B,KAAA8D,YACAzD,EAAA,CAEA,KADAsG,EAAA,EACApE,GACAlC,GAAAsG,GAAA,WACA,GAAAG,KACAvE,GAAAwC,QAAA,SAAAV,GACAyC,EAAAR,KAAAjC,EAAAE,SAEAmC,EAAApD,WAAA0C,OAAA3F,EAAA,EAAAyG,GACAJ,EAAAlD,aAAAnD,GAAA,IAAAsG,EACAD,EAAAlD,aAAAnD,GAAAkC,EAAAN,OAAAyE,EAAAlD,aAAAnD,IAAA,IACAqG,EAAAK,aAAA1G,EAAAyG,MAEAvE,IAAAN,OAAAM,EAAAvC,KAAAwD,aAAAnD,IAAAoF,SAAA,KACApF,GAEAL,MAAAsD,WAAAtD,KAAAsD,WAAA0D,MAAA,EAAA3G,IAEA4F,wBAxKA,WAwKA,GAAAgB,GAAAjH,KAAA2G,EAAAC,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,KACArE,KAAA2B,OAAAtC,EAAA5B,KAAA8D,YACAzD,EAAA,CAEA,KADAsG,EAAA,EACApE,GACAlC,GAAAsG,GAAA,WACA,GAAAG,KACAvE,GAAAwC,QAAA,SAAAV,GACAyC,EAAAR,KAAAjC,EAAAE,SAEA0C,EAAA3D,WAAA0C,OAAA3F,EAAA,EAAAyG,GACAG,EAAAzD,aAAAnD,GAAA,IAAAsG,EACAM,EAAAzD,aAAAnD,GAAAkC,EAAAN,OAAAgF,EAAAzD,aAAAnD,IAAA,IACA4G,EAAAF,aAAA1G,EAAAyG,MAEAvE,IAAAN,OAAAM,EAAAvC,KAAAwD,aAAAnD,IAAAoF,SAAA,KACApF,GAEAL,MAAAsD,WAAAtD,KAAAsD,WAAA0D,MAAA,EAAA3G,IAEA0G,aA5LA,SA4LAzC,EAAA/B,GAAA,GAAA2E,GAAAlH,KACA6E,EAAA7E,KAAA8E,MAAAD,aACAsC,EAAAtC,EAAAY,SAAAnB,GAAA8C,cAAA,iBACAhC,IAAApF,KAAA0D,QAAA1D,KAAA0D,OAAAY,EAUA,OARA6C,IAAA/B,IACApF,KAAAqH,KAAArH,KAAAsD,WAAAgB,EAAA/B,GACAvC,KAAAwD,aAAAc,GAHA,EAIAtE,KAAA4E,UAAA,WACAQ,EAAA8B,EAAAlC,aAAAH,EAAAP,GACAc,EAAAc,QANA,SAYAoB,QA5MA,WAgNA,IAHAtH,KAAA0D,OAAA6D,KAAA,SAAAnC,GACA,MAAAA,GAAAoC,iBAEA,CAGA,GAAAC,GAAAzH,KAAA+F,kBACA/F,MAAA0H,MAhSA,UAgSAD,GACAzH,KAAAqF,SAGAsC,OAxNA,WAyNA3H,KAAA0H,MApSA,UAqSA1H,KAAAqF,WFqGM,SAAUzF,EAAQ+B,EAAqBzB,GAE7C,YG7beyB,GAAA,WAAUR,EAAGX,GAE1B,IAAK,GAFwBoH,GAA6BhB,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,IAAAA,UAAA,GAAXiB,EAAWjB,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAJ,GAClD/E,KACKxB,EAAIc,EAAGd,GAAKG,EAAGH,IAAK,CAC3B,GAAIkE,IAASqD,GAAYvH,EAAI,GAAK,IAAMA,EAAIA,GAAKwH,CACjDhG,GAAIyE,KAAK/B,GAEX,MAAO1C,KHscH,SAAUjC,EAAQ+B,EAAqBzB,GAE7C,YI9cAY,QAAAC,eAAAY,EAAA,cAAA4C,OAAA,OAAAuD,GAAA5H,EAAA,GACM6H,GACJC,QADa,SACJC,GACPA,EAAIC,UAAUC,IAAcxH,KAAMwH,MAGhB,oBAAXC,SAA0BA,OAAOH,KAC1CG,OAAOH,IAAII,IAAIN,GAEFA,aJqdT,SAAUnI,EAAQ+B,EAAqBzB,GAE7C,YKheA,SAAAoI,GAAAC,GACErI,EAAQ,GADV,GAAAsI,GAAAtI,EAAA,GAAAuI,EAAAvI,EAAA,IAGAwI,EAAyBxI,EAAQ,GASjCyI,EAAAL,EAKAM,EAAAF,EACEF,EAAA,EACAC,EAAA,GATF,EAWAE,EAPA,kBAEA,KAUehH,GAAA,EAAAiH,EAAiB,SLye1B,SAAUhJ,EAAQD,EAASO,GMhgBjC,GAAA2I,GAAc3I,EAAQ,EACtB,iBAAA2I,SAA4CjJ,EAAAS,EAASwI,EAAA,MACrDA,EAAAC,SAAAlJ,EAAAD,QAAAkJ,EAAAC,OAEa5I,GAAQ,GAAqF,WAAA2I,GAAA,ONygBpG,SAAUjJ,EAAQD,EAASO,GOhhBjCP,EAAAC,EAAAD,QAA2BO,EAAQ,IAAmE,GAKtGP,EAAA2G,MAAc1G,EAAAS,EAAS,u8EAA68E,MPyhB99E,SAAUT,EAAQD,GQ7exB,QAAAoJ,GAAA1E,EAAA2E,GACA,GAAAH,GAAAxE,EAAA,OACA4E,EAAA5E,EAAA,EACA,KAAA4E,EACA,MAAAJ,EAGA,IAAAG,GAAA,kBAAAE,MAAA,CACA,GAAAC,GAAAC,EAAAH,EAKA,QAAAJ,GAAA3E,OAJA+E,EAAAI,QAAAjF,IAAA,SAAAkF,GACA,uBAAAL,EAAAM,WAAAD,EAAA,SAGApF,QAAAiF,IAAAK,KAAA,MAGA,OAAAX,GAAAW,KAAA,MAIA,QAAAJ,GAAAK,GAKA,yEAHAP,KAAAQ,SAAAC,mBAAAC,KAAAC,UAAAJ,MAGA,MArEA7J,EAAAD,QAAA,SAAAqJ,GACA,GAAAc,KAwCA,OArCAA,GAAAC,SAAA,WACA,MAAA/J,MAAAoE,IAAA,SAAAC,GACA,GAAAwE,GAAAE,EAAA1E,EAAA2E,EACA,OAAA3E,GAAA,GACA,UAAAA,EAAA,OAAmCwE,EAAA,IAEnCA,IAEGW,KAAA,KAIHM,EAAAzJ,EAAA,SAAAJ,EAAA+J,GACA,gBAAA/J,KACAA,IAAA,KAAAA,EAAA,KAEA,QADAgK,MACA5J,EAAA,EAAgBA,EAAAL,KAAAiC,OAAiB5B,IAAA,CACjC,GAAA6J,GAAAlK,KAAAK,GAAA,EACA,iBAAA6J,KACAD,EAAAC,IAAA,GAEA,IAAA7J,EAAA,EAAYA,EAAAJ,EAAAgC,OAAoB5B,IAAA,CAChC,GAAAgE,GAAApE,EAAAI,EAKA,iBAAAgE,GAAA,IAAA4F,EAAA5F,EAAA,MACA2F,IAAA3F,EAAA,GACAA,EAAA,GAAA2F,EACKA,IACL3F,EAAA,OAAAA,EAAA,aAAA2F,EAAA,KAEAF,EAAAxD,KAAAjC,MAIAyF,IRkkBM,SAAUlK,EAAQD,EAASO,GS3hBjC,QAAAiK,GAAAC,GACA,OAAA/J,GAAA,EAAiBA,EAAA+J,EAAAnI,OAAmB5B,IAAA,CACpC,GAAAgE,GAAA+F,EAAA/J,GACAgK,EAAAC,EAAAjG,EAAA6F,GACA,IAAAG,EAAA,CACAA,EAAAE,MACA,QAAAnE,GAAA,EAAqBA,EAAAiE,EAAAG,MAAAvI,OAA2BmE,IAChDiE,EAAAG,MAAApE,GAAA/B,EAAAmG,MAAApE,GAEA,MAAYA,EAAA/B,EAAAmG,MAAAvI,OAAuBmE,IACnCiE,EAAAG,MAAAlE,KAAAmE,EAAApG,EAAAmG,MAAApE,IAEAiE,GAAAG,MAAAvI,OAAAoC,EAAAmG,MAAAvI,SACAoI,EAAAG,MAAAvI,OAAAoC,EAAAmG,MAAAvI,YAEK,CAEL,OADAuI,MACApE,EAAA,EAAqBA,EAAA/B,EAAAmG,MAAAvI,OAAuBmE,IAC5CoE,EAAAlE,KAAAmE,EAAApG,EAAAmG,MAAApE,IAEAkE,GAAAjG,EAAA6F,KAA8BA,GAAA7F,EAAA6F,GAAAK,KAAA,EAAAC,WAK9B,QAAAE,KACA,GAAAC,GAAAC,SAAAC,cAAA,QAGA,OAFAF,GAAAnI,KAAA,WACAsI,EAAAC,YAAAJ,GACAA,EAGA,QAAAF,GAAAO,GACA,GAAAC,GAAAC,EACAP,EAAAC,SAAAxD,cAAA,SAAA+D,EAAA,MAAAH,EAAAd,GAAA,KAEA,IAAAS,EAAA,CACA,GAAAS,EAGA,MAAAC,EAOAV,GAAAW,WAAAC,YAAAZ,GAIA,GAAAa,EAAA,CAEA,GAAAC,GAAAC,GACAf,GAAAgB,MAAAjB,KACAO,EAAAW,EAAAC,KAAA,KAAAlB,EAAAc,GAAA,GACAP,EAAAU,EAAAC,KAAA,KAAAlB,EAAAc,GAAA,OAGAd,GAAAD,IACAO,EAAAa,EAAAD,KAAA,KAAAlB,GACAO,EAAA,WACAP,EAAAW,WAAAC,YAAAZ,GAMA,OAFAM,GAAAD,GAEA,SAAAe,GACA,GAAAA,EAAA,CACA,GAAAA,EAAAC,MAAAhB,EAAAgB,KACAD,EAAAE,QAAAjB,EAAAiB,OACAF,EAAAtC,YAAAuB,EAAAvB,UACA,MAEAwB,GAAAD,EAAAe,OAEAb,MAcA,QAAAU,GAAAjB,EAAArG,EAAA4G,EAAAF,GACA,GAAAgB,GAAAd,EAAA,GAAAF,EAAAgB,GAEA,IAAArB,EAAAuB,WACAvB,EAAAuB,WAAAC,QAAAC,EAAA9H,EAAA0H,OACG,CACH,GAAAK,GAAAzB,SAAA0B,eAAAN,GACAO,EAAA5B,EAAA4B,UACAA,GAAAjI,IAAAqG,EAAAY,YAAAgB,EAAAjI,IACAiI,EAAAtK,OACA0I,EAAA6B,aAAAH,EAAAE,EAAAjI,IAEAqG,EAAAI,YAAAsB,IAKA,QAAAP,GAAAnB,EAAAK,GACA,GAAAgB,GAAAhB,EAAAgB,IACAC,EAAAjB,EAAAiB,MACAxC,EAAAuB,EAAAvB,SAiBA,IAfAwC,GACAtB,EAAA8B,aAAA,QAAAR,GAEAS,EAAAC,OACAhC,EAAA8B,aAAAtB,EAAAH,EAAAd,IAGAT,IAGAuC,GAAA,mBAAAvC,EAAAJ,QAAA,SAEA2C,GAAA,uDAAyD9C,KAAAQ,SAAAC,mBAAAC,KAAAC,UAAAJ,MAAA,OAGzDkB,EAAAuB,WACAvB,EAAAuB,WAAAC,QAAAH,MACG,CACH,KAAArB,EAAAiC,YACAjC,EAAAY,YAAAZ,EAAAiC,WAEAjC,GAAAI,YAAAH,SAAA0B,eAAAN,KArNA,GAAAa,GAAA,mBAAAjC,SAEA,uBAAAkC,gBACAD,EACA,SAAAE,OACA,0JAKA,IAAAC,GAAmB9M,EAAQ,GAe3BoK,KAQAQ,EAAA+B,IAAAjC,SAAAE,MAAAF,SAAAqC,qBAAA,YACAtB,EAAA,KACAD,EAAA,EACAN,GAAA,EACAC,EAAA,aACAqB,EAAA,KACAvB,EAAA,kBAIAK,EAAA,mBAAA0B,YAAA,eAAAC,KAAAD,UAAAE,UAAAC,cAEAzN,GAAAD,QAAA,SAAA2N,EAAAxD,EAAAyD,EAAAC,GACApC,EAAAmC,EAEAb,EAAAc,KAEA,IAAApD,GAAA4C,EAAAM,EAAAxD,EAGA,OAFAK,GAAAC,GAEA,SAAAqD,GAEA,OADAC,MACArN,EAAA,EAAmBA,EAAA+J,EAAAnI,OAAmB5B,IAAA,CACtC,GAAAgE,GAAA+F,EAAA/J,GACAgK,EAAAC,EAAAjG,EAAA6F,GACAG,GAAAE,OACAmD,EAAApH,KAAA+D,GAEAoD,GACArD,EAAA4C,EAAAM,EAAAG,GACAtD,EAAAC,IAEAA,IAEA,QAAA/J,GAAA,EAAmBA,EAAAqN,EAAAzL,OAAsB5B,IAAA,CACzC,GAAAgK,GAAAqD,EAAArN,EACA,QAAAgK,EAAAE,KAAA,CACA,OAAAnE,GAAA,EAAuBA,EAAAiE,EAAAG,MAAAvI,OAA2BmE,IAClDiE,EAAAG,MAAApE,WAEAkE,GAAAD,EAAAH,OAwFA,IAAAkC,GAAA,WACA,GAAAuB,KAEA,iBAAArJ,EAAAsJ,GAEA,MADAD,GAAArJ,GAAAsJ,EACAD,EAAAE,OAAAC,SAAAtE,KAAA,WTwqBM,SAAU5J,EAAQD,GUh1BxBC,EAAAD,QAAA,SAAA2N,EAAAxD,GAGA,OAFAM,MACA2D,KACA1N,EAAA,EAAiBA,EAAAyJ,EAAA7H,OAAiB5B,IAAA,CAClC,GAAAgE,GAAAyF,EAAAzJ,GACA6J,EAAA7F,EAAA,GACA2H,EAAA3H,EAAA,GACA4H,EAAA5H,EAAA,GACAoF,EAAApF,EAAA,GACA2J,GACA9D,GAAAoD,EAAA,IAAAjN,EACA2L,MACAC,QACAxC,YAEAsE,GAAA7D,GAGA6D,EAAA7D,GAAAM,MAAAlE,KAAA0H,GAFA5D,EAAA9D,KAAAyH,EAAA7D,IAAmCA,KAAAM,OAAAwD,KAKnC,MAAA5D,KV41BM,SAAUxK,EAAQD,GW/2BxBC,EAAAD,QAAA,SACAsO,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,GAAAC,GACAC,EAAAP,QAGAzL,QAAAyL,GAAAxL,OACA,YAAAD,GAAA,aAAAA,IACA+L,EAAAN,EACAO,EAAAP,EAAAxL,QAIA,IAAAiK,GAAA,kBAAA8B,GACAA,EAAA9B,QACA8B,CAGAN,KACAxB,EAAA+B,OAAAP,EAAAO,OACA/B,EAAAgC,gBAAAR,EAAAQ,gBACAhC,EAAAiC,WAAA,GAIAR,IACAzB,EAAAkC,YAAA,GAIAP,IACA3B,EAAAmC,SAAAR,EAGA,IAAAS,EA4BA,IA3BAR,GACAQ,EAAA,SAAAC,GAEAA,EACAA,GACA/O,KAAAgP,QAAAhP,KAAAgP,OAAAzG,YACAvI,KAAAiP,QAAAjP,KAAAiP,OAAAD,QAAAhP,KAAAiP,OAAAD,OAAAzG,WAEAwG,GAAA,mBAAAG,uBACAH,EAAAG,qBAGAd,GACAA,EAAA7N,KAAAP,KAAA+O,GAGAA,KAAAI,uBACAJ,EAAAI,sBAAAC,IAAAd,IAKA5B,EAAA2C,aAAAP,GACGV,IACHU,EAAAV,GAGAU,EAAA,CACA,GAAAF,GAAAlC,EAAAkC,WACAU,EAAAV,EACAlC,EAAA+B,OACA/B,EAAA6C,YAEAX,IAQAlC,EAAA8C,cAAAV,EAEApC,EAAA+B,OAAA,SAAAgB,EAAAV,GAEA,MADAD,GAAAvO,KAAAwO,GACAO,EAAAG,EAAAV,KAVArC,EAAA6C,aAAAD,KACApL,OAAAoL,EAAAR,IACAA,GAaA,OACAP,WACA5O,QAAA6O,EACA9B,aX83BM,SAAU9M,EAAQ+B,EAAqBzB,GAE7C;;;;;AY79BA,QAAAwP,GAAA5F,EAAAxF,GACA,KAAQA,EAAA,EAAAwF,EAAA7H,OAAyBqC,IACjCwF,EAAAxF,GAAAwF,EAAAxF,EAAA,EAGAwF,GAAA6F,MAkIA,QAAAC,KACA,MAAAxH,QAAAyH,aAAAzH,OAAAyH,YAAAC,IAAA1H,OAAAyH,YAAAC,MAAA1H,OAAAyH,YAAAE,OAAAC,iBAAA,GAAAC,MAGA,QAAAC,GAAAC,GACA,OAAAC,GAAAxJ,UAAA3E,OAAAoO,EAAAvO,MAAAsO,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAoFA,EAAAF,EAAaE,IACjGD,EAAAC,EAAA,GAAA1J,UAAA0J,EAGA,QAAAjQ,GAAA,EAAiBA,EAAAgQ,EAAApO,OAAiB5B,IAAA,CAClC,GAAAiJ,GAAA+G,EAAAhQ,EACA,QAAAkQ,KAAAjH,GACA6G,EAAAI,GAAAjH,EAAAiH,GAGA,MAAAJ,GAGA,QAAAK,GAAAC,GACA,WAAA5J,KAAA4J,GAAA,OAAAA,EAGA,QAAAC,GAAAC,EAAAC,GACA,MAAAC,MAAAC,KAAAH,IAAAC,KA2BA,QAAAG,GAAAC,GACA,WAAAC,IAIA,aAAAA,EACA,kBAAAD,EACA,gBAEAA,EAGAC,EAAAD,EAAAE,OAAA,GAAAC,cAAAH,EAAAI,OAAA,IAGA,QAAAC,GAAAC,EAAA9O,EAAA+O,EAAAC,GACAF,EAAAG,iBAAAjP,EAAA+O,GAAiCG,SAAA,EAAAF,cAGjC,QAAAG,GAAAL,EAAA9O,EAAA+O,EAAAC,GACAF,EAAAM,oBAAApP,EAAA+O,GAAoCG,SAAA,EAAAF,cAGpC,QAAAK,GAAAP,GAIA,IAHA,GAAAQ,GAAA,EACAC,EAAA,EAEAT,GACAQ,GAAAR,EAAAU,WACAD,GAAAT,EAAAW,UACAX,IAAAY,YAGA,QACAJ,OACAC,OAIA,QAAAI,GAAAb,GACA,GAAAc,GAAAd,EAAAe,uBAEA,QACAP,OAAAM,EAAAN,KAAA1J,OAAAkK,aACAP,MAAAK,EAAAL,IAAA3J,OAAAmK,cAsCA,QAAAC,GAAAlB,GACA,GAAAA,YAAAlJ,QAAAqK,WAAA,CACA,GAAAL,GAAAd,EAAAe,uBACA,QACAN,IAAAK,EAAAL,IACAD,KAAAM,EAAAN,KACAY,MAAAN,EAAAM,MACAC,OAAAP,EAAAO,QAGA,OACAZ,IAAAT,EAAAW,UACAH,KAAAR,EAAAU,WACAU,MAAApB,EAAAsB,YACAD,OAAArB,EAAAuB,cAKA,QAAAC,GAAAxB,EAAAyB,GACA,OAAA1S,KAAA0S,GACA,GAAAA,EAAA1S,GAAA8M,KAAAmE,EAAAjR,IACA,QAGA,UAGA,QAAA2S,GAAAC,EAAAC,GACA,GAAAC,GAAAvI,SAAAwI,YAAA,QACAD,GAAAE,UAAAH,GAAA,MACAC,EAAAG,MAAAL,EAAAK,MACAH,EAAAI,MAAAN,EAAAM,MACAN,EAAA9C,OAAAqD,cAAAL,GAGA,QAAAM,GAAAR,GAgCA,QAAAG,KACAD,EAAAvI,SAAAwI,YAAA,SACAD,EAAAE,UAAAK,EAAAC,EAAAC,GACA1D,EAAAiD,EAAAU,GAlCA,GAAAH,GAAA9M,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,WAEAkN,MAAA,EACA,aAAAb,EAAAzQ,MAAA,gBAAAyQ,EAAAzQ,KACAsR,EAAAb,EACG,aAAAA,EAAAzQ,MAAA,gBAAAyQ,EAAAzQ,OACHsR,EAAAb,EAAAc,eAAA,GAEA,IAAAF,KACAC,KACAD,EAAAG,QAAAF,EAAAE,SAAA,EACAH,EAAAI,QAAAH,EAAAG,SAAA,EACAJ,EAAAK,QAAAJ,EAAAI,SAAA,EACAL,EAAAM,QAAAL,EAAAK,SAAA,EAEA,IAAAhB,OAAA,GACAQ,GAAA,EACAC,GAAA,CACA,uBAAAQ,YACA,IACAjB,EAAA,GAAAiB,YAAAV,EAAAxD,GACAyD,UACAC,cACOC,IACF,MAAAZ,GACLG,QAGAA,IAUAD,GAAAkB,qBAAA,EACAlB,EAAAmB,cAAA,EACArB,EAAA9C,OAAAqD,cAAAL,GAGA,QAAAoB,GAAAtB,GACAQ,EAAAR,EAAA,YAGA,QAAAuB,GAAAlD,EAAAnB,GACAA,EAAAvD,WACA6H,EAAAnD,EAAAnB,EAAAvD,YAEAuD,EAAApF,YAAAuG,GAIA,QAAAmD,GAAAnD,EAAAnB,GACAA,EAAA7E,WAAAkB,aAAA8E,EAAAnB,GAGA,QAAA5E,GAAA+F,EAAAoD,GACApD,EAAA/F,YAAAmJ,GAyiBA,QAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvI,EAAAvF,GACA,GAAA+N,GAAAN,EAAAC,EACAM,EAAAtE,KAAAuE,IAAAF,GAAAJ,EAEAO,EAAA3I,EAAA2I,aACAC,EAAA5I,EAAA4I,WACAC,EAAA7I,EAAA6I,gBACAnQ,EAAAsH,EAAAtH,MACAlC,EAAAwJ,EAAAxJ,UAEAsS,EAAAtS,EACAuS,EAAArQ,EAAA,KAEAsQ,EAAAd,EAAAO,EAAAE,GAAAH,EAAA,OAcA,OAZA9P,IAAAkQ,IACAI,EAAAvO,EAAAwO,uBAAAD,GAAA9E,GAGA8E,EAAAX,GACAW,EAAAT,EAAApE,KAAA+E,IAAAb,EAAAE,EAAA,EAAAF,EAAAE,EAAAQ,EAAAN,GAAAJ,EACAS,EAAAD,GACGG,EAAAV,IACHU,EAAAT,EAAApE,KAAAgF,IAAAb,EAAAC,EAAA,EAAAD,EAAAC,EAAAQ,EAAAN,GAAAH,EACAQ,EAAAD,IAIAG,YAAA7E,KAAAiF,MAAAJ,GACAF,YAMA,QAAAnK,MAiCA,QAAA0K,GAAAC,GACAC,QAAAC,MAAA,mBAAAF,GAGA,QAAAG,GAAAC,EAAAJ,GACA,IAAAI,EACA,SAAArJ,OAAA,aAAAiJ,GA0uCA,QAAAK,GAAAC,GACA,GAAAC,GAAA3L,SAAAC,cAAA,OACA2L,EAAA5L,SAAAC,cAAA,MAoBA,OAlBA0L,GAAAvF,MAAA7E,QAAA,oDACAqK,EAAAxF,MAAA7E,QAAA,+HAEAqK,EAAAC,UAAA,oBAEA,eAAAH,GACAC,EAAAvF,MAAA7E,SAAA,0CACAqK,EAAAxF,MAAA2B,OAAA,OACA4D,EAAAE,UAAA,iCAEAF,EAAAvF,MAAA7E,SAAA,0CACAqK,EAAAxF,MAAA0B,MAAA,OACA6D,EAAAE,UAAA,8BAGAF,EAAAvF,MAAA7E,SAAA,mBACAoK,EAAAxL,YAAAyL,GAEAD,EAGA,QAAAG,GAAAC,EAAAjK,GACA1M,KAAA4W,QAAAlK,EAAA4E,GACAtR,KAAA6W,aAAA7W,KAAA4W,QAAA5F,MACAhR,KAAAwW,UAAAxW,KAAA4W,QAAAnR,SAAA,GACAzF,KAAA8W,eAAA9W,KAAAwW,UAAAxF,MACAhR,KAAA2W,WACA3W,KAAAsW,UAAA5J,EAAA4J,UACA5J,EAAAqK,MACA/W,KAAAgX,QAAA,EACAhX,KAAA6W,aAAAI,QAAA,KAEAjX,KAAAgX,QAAA,EAGAhX,KAAAkX,WAAA,EACAlX,KAAAmX,WAAA,EACAnX,KAAAoX,QAAA,EACApX,KAAAqX,QAAA,EACArX,KAAA2Q,EAAA,EACA3Q,KAAA4Q,EAAA,EAEAlE,EAAA4K,aACAtX,KAAAuX,gBA0tBA,QAAAC,GAAAC,GACA,GAAAA,KAAAC,UACA,MAAAD,GAAAC,UAAAC,SAAA,aAIA,QAAAC,GAAAjB,EAAAjK,GACA,GAAAvI,GAAAnE,IAEAA,MAAA0M,UACAyJ,EAAA,kBAAAnW,MAAA0M,QAAAmL,gBAAA,qEAEA1B,EAAA,kBAAAnW,MAAA0M,QAAAoL,MAAA,0DAEA3B,EAAA,kBAAAnW,MAAA0M,QAAA+B,OAAA,6DAEAzO,KAAA+X,kBAAA,EACA/X,KAAAgY,iBAAA,EAEAhY,KAAAiY,gBAAA,EACAjY,KAAAkY,YACA5T,MAAA,EACAuN,OAAA,GAEA7R,KAAAmY,gBAAA,EACAnY,KAAAoY,eAAA,EACApY,KAAAqY,cACArY,KAAAsY,+BAEAtY,KAAAuY,SACAvY,KAAAwY,YAAA,EACAxY,KAAAyY,mBAAA,EACAzY,KAAA0Y,SAAA,EAEA1Y,KAAA2W,WACA3W,KAAA2Y,UAAA3Y,KAAA2W,SAAAC,QACA5W,KAAA4Y,WAAA5Y,KAAA2W,kBAEA3W,KAAA2W,SAAA/Q,GAAA,oBACAzB,EAAA0U,aAEA7Y,KAAA2W,SAAA/Q,GAAA,qBACAzB,EAAAsC,YAIAzG,KAAA8Y,iBAAAC,WAAA,WACA5U,EAAA0U,WAGA1U,EAAAwS,SAAA/Q,GAAA,oBACAzB,EAAA6U,eA2VA,QAAAC,GAAA3H,EAAA5E,GACA1M,KAAA4W,QAAA,gBAAAtF,GAAA1G,SAAAxD,cAAAkK,KACAtR,KAAA4W,SACAb,EAAA,oCAEA/V,KAAA2W,SAAA3W,KAAA4W,QAAAnR,SAAA,GACAzF,KAAA2W,UACAZ,EAAA,+DAGA/V,KAAAkZ,cAAAlZ,KAAA2W,SAAA3F,MAEAhR,KAAAmZ,MAAAzM,GAp2GA,GAAA0M,GAAA,WACA,QAAAC,GAAAxX,EAAAxB,GACA,GAAAiZ,MACAC,GAAA,EACAC,GAAA,EACAC,MAAA5S,EAEA,KACA,OAAA6S,GAAAC,EAAA9X,EAAA+X,OAAAC,cAA+CN,GAAAG,EAAAC,EAAAG,QAAAC,QAC/CT,EAAAhT,KAAAoT,EAAAnV,QAEAlE,GAAAiZ,EAAArX,SAAA5B,GAH8EkZ,GAAA,IAKzE,MAAAS,GACLR,GAAA,EACAC,EAAAO,EACK,QACL,KACAT,GAAAI,EAAA,QAAAA,EAAA,SACO,QACP,GAAAH,EAAA,KAAAC,IAIA,MAAAH,GAGA,gBAAAzX,EAAAxB,GACA,GAAAyB,MAAAC,QAAAF,GACA,MAAAA,EACK,IAAA+X,OAAAC,WAAA/Y,QAAAe,GACL,MAAAwX,GAAAxX,EAAAxB,EAEA,UAAA4Z,WAAA,4DAiBAC,EAAA,SAAArY,GACA,GAAAC,MAAAC,QAAAF,GAAA,CACA,OAAAxB,GAAA,EAAA2B,EAAAF,MAAAD,EAAAI,QAA6C5B,EAAAwB,EAAAI,OAAgB5B,IAAA2B,EAAA3B,GAAAwB,EAAAxB,EAE7D,OAAA2B,GAEA,MAAAF,OAAAI,KAAAL,IAkEAsY,EAAA,mBAAA/R,QACAgS,EAAAD,GAAAjN,UAAAE,UAAAC,cACAgN,EAAAD,GAAA,iBAAAjN,KAAAiN,GACAE,EAAAF,KAAA5V,QAAA,aA4BA+V,EAAAJ,GAAAvP,SAAAC,cAAA,OAAAmG,MAEAC,EAAA,WACA,IAAAkJ,EACA,QAGA,IAAAK,IACAC,SAAA,YACAC,OAAA,kBACAC,IAAA,eACAC,EAAA,aACAC,GAAA,cAGA,QAAAtK,KAAAiK,GACA,OAAA3T,KAAA0T,EAAAC,EAAAjK,IACA,MAAAA,EAIA,aAmDAuK,EAAA7J,GAAA,aAAAA,EAAA,IAAAA,EAAA5D,cAAA,OAEA0N,EAAAhK,EAAA,aACAiK,EAAAjK,EAAA,cAEAkK,EAAAd,GAAApJ,EAAA,gBAAAwJ,GAEAW,EAAAf,IAAA,gBAAA/R,SAAAiS,GACAc,GAAA,IAAAJ,EACAK,EAAAjB,GAAAa,IAAAT,GAEAvJ,GACA+J,YACAC,aACAK,yBAAAtK,EAAA,4BACAuK,mBAAAvK,EAAA,sBACAwK,gBAAAxK,EAAA,mBACAyK,gBAAAzK,EAAA,mBACA0K,cAAA1K,EAAA,kBAGA2K,EAAA,EAGAC,GACAC,WAAAF,EACAG,UAAAH,EACAI,SAAAJ,EAEAK,UAPA,EAQAC,UARA,EASAC,QATA,GAgHAC,GACAC,OAAA,EACAC,OAAA,EACAC,SAAA,EACAC,SAAA,EACAC,YAAA,EACAC,uBAAA,EACAC,iBAAA,GACAhJ,OAAA,EACAT,KAAA,EAUA0J,QAAA,EACAC,WAAA,IACAhI,UAAA,EACAiI,kBAAA,IACAC,sBAAA,GACA3Z,UAAA,KACAqS,gBAAA,IACAF,aAAA,MACAyH,eAAA,IACAC,mBAAA,IACAC,cAAA,GACAC,UAAA,EACAC,gBAAA,EACApK,yBACAqK,QAAA,0CAEAC,eAAA,EACAC,eAAA,EACAC,cAAA,EACAC,eAAA,EACAC,aAAAtC,EACAuC,cAAAvC,EACAwC,YAAA,EACAC,UAAA,EAWAvY,OAAA,EAmBAwY,MAAA,EAQArH,WAAA,EAQAsH,iBAAA,EAOAC,YAAA,EASAC,YAAA,EACAC,iBAAA,EASAC,MAAA,EAYAC,UAAA,EAOA3J,UAAA,GAyYA4J,GAEAC,OACApN,MAAA,iCACAO,GAAA,SAAA8M,GACA,WAAAA,YAIAC,aACAtN,MAAA,uCACAO,GAAA,SAAA8M,GACA,MAAAA,IAAA,EAAAA,KAIA3B,QACA1L,MAAA,qCACAO,GAAA,SAAA8M,GACA,YAAAA,WA0CAE,EAAA,WACA,MAAApE,GAIA/R,OAAAmW,uBAAAnW,OAAAoW,6BAAApW,OAAAqW,0BAAArW,OAAAsW,wBAEA,SAAAC,GACA,MAAAvW,QAAA2Q,WAAA4F,KAAAC,UAZA,QAYA,IALAvT,KASAwT,EAAA,WACA,MAAA1E,GAIA/R,OAAAyW,sBAAAzW,OAAA0W,4BAAA1W,OAAA2W,yBAAA3W,OAAA4W,uBAAA,SAAA9U,GACA9B,OAAA6W,aAAA/U,IAHAmB,KAOA6T,EAAA,EACAC,GAAA,EACAC,GAAA,EACAC,IAAA,EAEAC,GAAA,EAEAC,GAAA,CAqyCA7I,GAAAnV,UAAAie,YAAA,SAAAvM,GACA,OAAAA,EAAAzQ,MACA,iBACA,gBACAxC,KAAAyf,OAAAxM,EACA,MACA,iBACA,gBACAjT,KAAA0f,MAAAzM,EACA,MACA,gBACA,cACA,kBACA,kBACAjT,KAAA2f,KAAA1M,KAKAyD,EAAAnV,UAAAiE,QAAA,WACAxF,KAAA4f,gBACA5f,KAAA6f,iBACA7f,KAAA8f,aACA9f,KAAA+f,mBAIArJ,EAAAnV,UAAAwV,KAAA,SAAAC,EAAAgJ,GACA,GAAAtb,GAAA1E,IAEA,KAAAggB,GAAAhgB,KAAAgX,QAAA,CAIA,GAAAlC,GAAAkC,EAAA,OAEAA,KAAA,QAEAhX,KAAA6W,aAAA7F,EAAAsK,oBAAAxG,EAAA,KAEAmK,aAAAjf,KAAAigB,aACAjgB,KAAAigB,YAAAlH,WAAA,WACArU,EAAAmS,aAAAI,QAAAD,EACAtS,EAAAsS,YACG,KAGHN,EAAAnV,UAAAwe,eAAA,WACA,gBAAA/f,KAAAsW,UAAA,CACA,GAAA1F,GAAAC,KAAAiF,MAAA9V,KAAAmX,WAAAnX,KAAA2W,SAAA/F,EAEA,IAAAA,EAAA,GACA5Q,KAAA6f,eAAA,IACA,IAAAlN,GAAA9B,KAAA+E,IAAA5V,KAAAkgB,gBAAA,EAAAtP,EA9LA,EA+LA5Q,MAAA8W,eAAAnE,SAAA,KACA/B,EAAA,MACK,IAAAA,EAAA5Q,KAAAqX,QAAA,CACLrX,KAAA6f,eAAA,IACA,IAAAM,GAAAtP,KAAA+E,IAAA5V,KAAAkgB,gBAAA,GAAAtP,EAAA5Q,KAAAqX,SAnMA,EAoMArX,MAAA8W,eAAAnE,OAAAwN,EAAA,KACAvP,EAAA5Q,KAAAqX,QAAArX,KAAAkgB,gBAAAC,MAEAngB,MAAA8W,eAAAnE,OAAA3S,KAAAkgB,gBAAA,IAEAlgB,MAAA4Q,IAEA5Q,KAAA2W,SAAAjK,QAAA4Q,aACAtd,KAAA8W,eAAA9F,EAAA+J,WAAA,cAAAnK,EAAA,MAAA5Q,KAAA2W,SAAAyJ,WAEApgB,KAAA8W,eAAA/E,IAAAnB,EAAA,SAEG,CACH,GAAAD,GAAAE,KAAAiF,MAAA9V,KAAAkX,WAAAlX,KAAA2W,SAAAhG,EAEA,IAAAA,EAAA,GACA3Q,KAAA6f,eAAA,IACA,IAAAnN,GAAA7B,KAAA+E,IAAA5V,KAAAqgB,eAAA,EAAA1P,EArNA,EAsNA3Q,MAAA8W,eAAApE,QAAA,KACA/B,EAAA,MACK,IAAAA,EAAA3Q,KAAAoX,QAAA,CACLpX,KAAA6f,eAAA,IACA,IAAAS,GAAAzP,KAAA+E,IAAA5V,KAAAqgB,eAAA,GAAA1P,EAAA3Q,KAAAoX,SA1NA,EA2NApX,MAAA8W,eAAApE,MAAA4N,EAAA,KACA3P,EAAA3Q,KAAAoX,QAAApX,KAAAqgB,eAAAC,MAEAtgB,MAAA8W,eAAApE,MAAA1S,KAAAqgB,eAAA,IAGArgB,MAAA2Q,IAEA3Q,KAAA2W,SAAAjK,QAAA4Q,aACAtd,KAAA8W,eAAA9F,EAAA+J,WAAA,cAAApK,EAAA,MAAA3Q,KAAA2W,SAAAyJ,WAEApgB,KAAA8W,eAAAhF,KAAAnB,EAAA,OAKA+F,EAAAnV,UAAAse,eAAA,WACA,GAAA/K,GAAAlO,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,IAEA5G,MAAA8W,eAAA9F,EAAAsK,oBAAAxG,EAAA,MAGA4B,EAAAnV,UAAA8Z,yBAAA,SAAAkF,GACAvgB,KAAA8W,eAAA9F,EAAAqK,0BAAAkF,GAGA7J,EAAAnV,UAAAkF,QAAA,WACAzG,KAAAwgB,mBACAxgB,KAAA4W,QAAAtL,WAAAC,YAAAvL,KAAA4W,UAGAF,EAAAnV,UAAAke,OAAA,SAAAxM,GACA,GAAAwN,GAAAxN,EAAAyN,QAAAzN,EAAAyN,QAAA,GAAAzN,CAEAA,GAAAiK,iBACAjK,EAAA+K,kBAEAhe,KAAA6f,iBAEA7f,KAAA2gB,WAAA,EACA3gB,KAAA4gB,OAAA,EACA5gB,KAAA6gB,WAAAJ,EAAAnN,MACAtT,KAAA8gB,WAAAL,EAAAlN,MAEAvT,KAAA+gB,UAAAnR,IAEA5P,KAAAghB,kBAAA3P,GACArR,KAAA2W,SAAAsK,QAAA,sBAGAvK,EAAAnV,UAAAme,MAAA,SAAAzM,GACA,GAAAwN,GAAAxN,EAAAyN,QAAAzN,EAAAyN,QAAA,GAAAzN,CAEAA,GAAAiK,iBACAjK,EAAA+K,kBAEAhe,KAAA4gB,OACA5gB,KAAA2W,SAAAsK,QAAA,eAGAjhB,KAAA4gB,OAAA,CAEA,IAAAM,GAAAT,EAAAnN,MAAAtT,KAAA6gB,UACA7gB,MAAA6gB,WAAAJ,EAAAnN,KAEA,IAAA6N,GAAAV,EAAAlN,MAAAvT,KAAA8gB,UACA9gB,MAAA8gB,WAAAL,EAAAlN,KAEA,IAAA6N,GAAAphB,KAAA2Q,EAAAuQ,EACAG,EAAArhB,KAAA4Q,EAAAuQ,CAEAnhB,MAAAshB,KAAAF,EAAAC,IAGA3K,EAAAnV,UAAAoe,KAAA,SAAA1M,GACA,GAAAjT,KAAA2gB,UAAA,CAGA3gB,KAAA2gB,WAAA,EAEA1N,EAAAiK,iBACAjK,EAAA+K,kBAEAhe,KAAAghB,kBAAArP,EAEA,IAAA4P,GAAAvhB,KAAA2W,SAAAjK,QAAAkR,IACA,IAAA2D,EAAA,CACA,GAAApM,GAAAoM,EAAApM,MACAqM,EAAAD,EAAAhB,OACAA,MAAA1Z,KAAA2a,EAAArD,EAAAzB,OAAA8E,EAEA5D,EAAA5d,KAAA2W,SAAA8K,aAAAzhB,KAAA2W,SAAAhG,EAAA3Q,KAAA2W,SAAA/F,GAEAkE,EAAAK,GAAAtE,KAAA+E,IAAA/E,KAAA+E,IAAA/E,KAAAgF,IAAAhF,KAAAuE,IAAApV,KAAA2W,SAAAhG,EAAAiN,EAAAjN,GAAA,KAAAE,KAAAgF,IAAAhF,KAAAuE,IAAApV,KAAA2W,SAAA/F,EAAAgN,EAAAhN,GAAA,UAEA5Q,MAAA2W,SAAAhG,IAAAiN,EAAAjN,GAAA3Q,KAAA2W,SAAA/F,IAAAgN,EAAAhN,IACA5Q,KAAA2W,SAAA+K,WAAA,EACA1hB,KAAA2W,SAAAgL,WAAA,EACA3hB,KAAA2W,SAAAiL,YAAAhE,EACA5d,KAAA2W,SAAAkL,SAAAjE,EAAAjN,EAAAiN,EAAAhN,EAAAkE,EAAAyL,IAIAvgB,KAAA4gB,OACA5gB,KAAA2W,SAAAsK,QAAA,aACAtQ,EAAA3Q,KAAA2W,SAAAhG,EACAC,EAAA5Q,KAAA2W,SAAA/F,MAKA8F,EAAAnV,UAAA+f,KAAA,SAAA3Q,EAAAC,GACAD,EAAA,EACAA,EAAA,EACGA,EAAA3Q,KAAAoX,UACHzG,EAAA3Q,KAAAoX,SAGAxG,EAAA,EACAA,EAAA,EACGA,EAAA5Q,KAAAqX,UACHzG,EAAA5Q,KAAAqX,SAGA1G,EAAAE,KAAAiF,MAAAnF,EAAA3Q,KAAAkX,YACAtG,EAAAC,KAAAiF,MAAAlF,EAAA5Q,KAAAmX,YAEAnX,KAAA2W,SAAAkL,SAAAlR,EAAAC,GACA5Q,KAAA2W,SAAAsK,QAAA,UACAtQ,EAAA3Q,KAAA2W,SAAAhG,EACAC,EAAA5Q,KAAA2W,SAAA/F,KAIA8F,EAAAnV,UAAAqe,YAAA,WACA,mBAAA5f,KAAAsW,WAAAtW,KAAA2W,SAAAmL,mBAAA,eAAA9hB,KAAAsW,WAAAtW,KAAA2W,SAAAoL,qBACA/hB,KAAA4W,QAAA5F,MAAA5N,QAAA,IACA,IAEApD,KAAA4W,QAAA5F,MAAA5N,QAAA,QACA,IAGAsT,EAAAnV,UAAAue,WAAA,WACA,gBAAA9f,KAAAsW,UAAA,CACA,GAAA0L,GAAAhiB,KAAA4W,QAAAqL,YACAjiB,MAAAkgB,gBAAArP,KAAA+E,IAAA/E,KAAAiF,MAAAkM,KAAAhiB,KAAA2W,SAAAuL,gBAAAF,GAAA,IA7WA,GA8WAhiB,KAAA8W,eAAAnE,OAAA3S,KAAAkgB,gBAAA,KAEAlgB,KAAAqX,QAAA2K,EAAAhiB,KAAAkgB,gBAEAlgB,KAAAmX,WAAAnX,KAAAqX,QAAArX,KAAA2W,SAAAwL,eACG,CACH,GAAAC,GAAApiB,KAAA4W,QAAAyL,WACAriB,MAAAqgB,eAAAxP,KAAA+E,IAAA/E,KAAAiF,MAAAsM,KAAApiB,KAAA2W,SAAA2L,eAAAF,GAAA,IArXA,GAsXApiB,KAAA8W,eAAApE,MAAA1S,KAAAqgB,eAAA,KAEArgB,KAAAoX,QAAAgL,EAAApiB,KAAAqgB,eAEArgB,KAAAkX,WAAAlX,KAAAoX,QAAApX,KAAA2W,SAAA4L,aAIA7L,EAAAnV,UAAAgW,cAAA,WACA,GAAAiL,GAAAnR,CACArR,MAAAyiB,iBAAAD,IAGA9L,EAAAnV,UAAAif,iBAAA,WACA,GAAAgC,GAAA7Q,CACA3R,MAAAyiB,iBAAAD,GACAxiB,KAAAghB,kBAAAwB,IAGA9L,EAAAnV,UAAAyf,kBAAA,SAAAwB,GACAxiB,KAAA2W,SAAAjK,QAAA+Q,cACA+E,EAAApa,OAAA,YAAApI,MAEAA,KAAA2W,SAAAjK,QAAA8Q,cACAgF,EAAApa,OAAA,YAAApI,OAIA0W,EAAAnV,UAAAkhB,iBAAA,SAAAD,GACAxiB,KAAA2W,SAAAjK,QAAA+Q,eACA+E,EAAAxiB,KAAAwW,UAAA,aAAAxW,MACAwiB,EAAApa,OAAA,WAAApI,OAEAA,KAAA2W,SAAAjK,QAAA8Q,eACAgF,EAAAxiB,KAAAwW,UAAA,YAAAxW,MACAwiB,EAAApa,OAAA,UAAApI,OAmbA,IASA0iB,IAAA,GAkEA9K,GAAArW,UAAAkF,QAAA,WACA,GAAA/B,GAAA1E,IAGAif,cAAAjf,KAAA8Y,kBACA9Y,KAAAsY,4BAAAvT,QAAA,SAAA4d,GACA1D,aAAA0D,KAEA3iB,KAAAsY,4BAAA,KACAtY,KAAAuY,MAAAxT,QAAA,SAAAV,GACAA,EAAAoT,OACA/S,EAAAkU,WAAArN,YAAAlH,EAAAoT,MACApT,EAAAoT,KAAA,QAGAzX,KAAA2W,SAAAiM,iBAAA,KACA5iB,KAAA2W,SAAA,KACA3W,KAAA2Y,UAAA,KACA3Y,KAAA4Y,WAAA,KACA5Y,KAAAuY,MAAA,KACAvY,KAAAqY,WAAA,MAGAT,EAAArW,UAAAyX,SAAA,WACA,GAAA6J,IAAA7iB,KAAA2W,SAAA/F,EACAkS,EAAAD,EAAA7iB,KAAAiY,eAEAjY,MAAAkY,WADA,IAAA2K,GAEAve,MAAA,EACAuN,OAAA,GAGA7R,KAAA+iB,uBAAA/iB,KAAAkY,WAAA4K,GAGA9iB,KAAAiY,gBAAA4K,CACA,IAAAG,GAAAhjB,KAAA+iB,uBAAA/iB,KAAAkY,WAAAlY,KAAA2W,SAAAqL,eAEAnN,EAAA7U,KAAAkY,WAAA5T,MACA2e,EAAAD,EAAA1e,KACAwe,GAAA,GACAjO,GApHA,GAqHAoO,GAlHA,KAoHApO,GApHA,GAqHAoO,GAxHA,IA0HAjjB,KAAAkjB,KAAArO,EAAAoO,GACAjjB,KAAAmjB,uBAGAvL,EAAArW,UAAAsX,SAAA,WACA,GAAAuK,GAAApjB,KAAA0M,QAAAmL,iBACAuL,GAAApS,MAAAqS,SAAA,WACArjB,KAAA4Y,WAAA7N,YAAAqY,GACAA,EAAApS,MAAA5N,QAAA,GACApD,KAAAmY,gBAAAiL,EAAAvQ,aACA7S,KAAAoY,eAAAgL,EAAAxQ,YACA5S,KAAA4Y,WAAArN,YAAA6X,EAEA,QAAA/iB,GAAA,EAAiBA,EAAAL,KAAAuY,MAAAtW,OAAuB5B,IACxCL,KAAAuY,MAAAlY,GAAAsS,OAAA3S,KAAAuY,MAAAlY,GAAAqS,MAAA,CAGA1S,MAAAgZ,YAGApB,EAAArW,UAAA2hB,KAAA,SAAArO,EAAAoO,GACAjjB,KAAA+X,kBAAAlH,KAAA+E,IAAA,EAAAf,GACA7U,KAAA0Y,UACAuK,EAAApS,KAAAgF,IAAAoN,EAAAjjB,KAAAuY,MAAAtW,SAEAjC,KAAAgY,iBAAAiL,EACAjjB,KAAAsjB,iBAGA1L,EAAArW,UAAA4hB,oBAAA,WACA,GAAA5d,GAAAvF,IAEA,KAAAA,KAAAyY,mBAAAzY,KAAA0Y,QAAA,CAGA,GAAA6K,GAAAvjB,KAAAgY,iBAAAhY,KAAAwY,WACA+K,IAAA,IAGAvjB,KAAAyY,mBAAA,EACAzY,KAAA0M,QAAAoL,MAAAyL,GAAAC,KAAA,SAAAjL,GAEA,GADAhT,EAAAkT,mBAAA,EACAF,EACAhT,EAAAke,WAAAlL,OACK,CACLhT,EAAAmT,SAAA,CACA,IAAAgL,GAAAne,EAAAoe,oBACAC,EAAA,CACAre,GAAA2S,WAAA5T,OAAAiB,EAAAgT,MAAAtW,QACA2hB,EAAAre,EAAAse,qBACAte,EAAAue,oBAAkCF,GAClCre,EAAAoR,SAAAoN,cAAAxe,EAAAoR,SAAAjK,QAAAiQ,cAEApX,EAAA2S,WAAA5T,OAAAof,EACAE,EAAAre,EAAAse,qBACAte,EAAAue,oBAAkCF,GAClCre,EAAAoR,SAAAqN,OACAze,EAAAoR,SAAAoN,gBACAxe,EAAAyT,kBAMApB,EAAArW,UAAAkiB,WAAA,SAAAlL,GACA,OAAAlY,GAAA,EAAiBA,EAAAkY,EAAAtW,OAAkB5B,IACnCL,KAAAuY,MAAAtW,QAAAjC,KAAAwY,aACAxY,KAAAikB,WAEAjkB,KAAAuY,MAAAvY,KAAAwY,eAAAjW,KAAAgW,EAAAlY,EAEAL,MAAAsjB,gBACAtjB,KAAAmjB,uBAGAvL,EAAArW,UAAA+hB,cAAA,WACA,GAAAY,GAAAlkB,KAAAmkB,sBACAC,EAAApkB,KAAAqkB,gBAAAH,EACAlkB,MAAAskB,oBAAAJ,GACAlkB,KAAAukB,gBACA,IAAAX,GAAA5jB,KAAA6jB,oBACA7jB,MAAA8jB,iBAAAM,EAAAR,IAGAhM,EAAArW,UAAAijB,UAAA,WACAxkB,KAAA0Y,SAAA,GAGAd,EAAArW,UAAAoiB,kBAAA,WAIA,OAHAc,OAAA,GACAf,EAAA,EACAgB,EAAA1kB,KAAAuY,MAAAtW,OACA5B,EAAA,EAAiBA,EAAAqkB,EAAarkB,IAAA,CAC9B,GAAAskB,GAAA3kB,KAAAuY,MAAAlY,GAAAoX,KACAmN,EAAA5kB,KAAAuY,MAAAlY,GAAAkC,IACAoiB,KAAAnN,EAAAmN,IAAAC,QAEA,KAAAH,IACAA,EAAApkB,GAEAskB,GACA3kB,KAAA4Y,WAAArN,YAAAoZ,IAOA,MAHAjB,GAAAgB,EAAAD,EACAzkB,KAAAuY,MAAAvS,OAAAye,GACAzkB,KAAAgY,iBAAAnH,KAAAgF,IAAA7V,KAAAgY,iBAAAhY,KAAAuY,MAAAtW,QACAyhB,GAGA9L,EAAArW,UAAA4iB,oBAAA,WAEA,OADAD,MACA7jB,EAAA,EAAiBA,EAAAL,KAAAuY,MAAAtW,OAAuB5B,IAExC,GAAAA,IAAAL,KAAA+X,kBAAA,CAIA,GAAA4M,GAAA3kB,KAAAuY,MAAAlY,GAAAoX,IACAkN,KACAnN,EAAAmN,IAEA3kB,KAAAqY,WAAA/R,KAAAqe,GACA3kB,KAAAqY,WAAArY,KAAAqY,WAAApW,OAAA,GAAA+O,MAAA5N,QAAA,QAEA8gB,EAAA5d,KAAAqe,IAGA3kB,KAAAuY,MAAAlY,GAAAoX,KAAA,SAbApX,GAAAL,KAAAgY,iBAAA,CAeA,OAAAkM,IAGAtM,EAAArW,UAAA8iB,gBAAA,SAAAH,GAEA,OADAE,MACA/jB,EAAAL,KAAA+X,kBAAsC1X,EAAAL,KAAAgY,iBAA2B3X,IAAA,CACjE,KAAAL,KAAAuY,MAAAtW,QAAA5B,GACAL,KAAAikB,UAEA,IAAAU,GAAA3kB,KAAAuY,MAAAlY,GAAAoX,KACAmN,EAAA5kB,KAAAuY,MAAAlY,GAAAkC,IACA,IAAAoiB,EAAA,CACA,IAAAnN,EAAAmN,KAAAC,EAKA,QAJAD,GAAA3T,MAAA6T,OAAA,EACAT,EAAA/jB,IAAAskB,EAAA3kB,KAAAuY,MAAAlY,GAAA0R,IAAA/R,KAAAiY,iBACAjY,KAAAuY,MAAAlY,GAAAoX,KAAA,KAKA,GAAAA,GAAAmN,EAAA5kB,KAAA0M,QAAA+B,OAAAmW,EAAAV,EAAAvU,OAAA3P,KAAA8kB,eACArN,GAAAzG,MAAAqS,SAAA,WACArjB,KAAAuY,MAAAlY,GAAA0R,KAAA,EACA/R,KAAA4Y,WAAA7N,YAAA0M,GACAzX,KAAAuY,MAAAlY,GAAAoX,OAEA,MAAA2M,IAGAxM,EAAArW,UAAA+iB,oBAAA,SAAAJ,GACA,KAAAA,EAAAjiB,QACAjC,KAAA4Y,WAAArN,YAAA2Y,EAAAvU,QAIAiI,EAAArW,UAAAgjB,eAAA,WACA,OAAAlkB,GAAAL,KAAA+X,kBAAsC1X,EAAAL,KAAAgY,iBAA2B3X,IAAA,CACjE,GAAAgE,GAAArE,KAAAuY,MAAAlY,EAEA,IAAAgE,EAAA9B,OAAA8B,EAAAsO,OAAA,CACA,GAAAoS,GAAAvN,EAAAnT,EAAAoT,KACApT,GAAAsO,OAAAoS,EAAA/kB,KAAAmY,gBAAA9T,EAAAoT,KAAA5E,aACAxO,EAAAqO,MAAAqS,EAAA/kB,KAAAoY,eAAA/T,EAAAoT,KAAA7E,eAKAgF,EAAArW,UAAAsiB,mBAAA,WACA7jB,KAAAiY,gBAAA,CACA,QAAA0B,GAAA,EAAkBA,EAAA3Z,KAAAkY,WAAA5T,MAA4BqV,IAC9C3Z,KAAAiY,iBAAAjY,KAAAuY,MAAAoB,GAAAhH,QAAA3S,KAAAmY,eAEAnY,MAAAiY,iBAAAjY,KAAAkY,WAAArG,MAKA,KAFA,GAAA+R,GAAA5jB,KAAAiY,gBAAAjY,KAAAkY,WAAArG,OACAxR,EAAAL,KAAAkY,WAAA5T,MACAjE,EAAAL,KAAA+X,mBACA6L,GAAA5jB,KAAAuY,MAAAlY,EAAA,GAAAsS,QAAA3S,KAAAmY,gBACA9X,GAGA,OAAAujB,IAGAhM,EAAArW,UAAAuiB,iBAAA,SAAAM,EAAAR,GACA,GAAAzd,GAAAnG,IAEA,QAAAK,KAAA+jB,GAAA,CACA,GAAAY,GAAAZ,EAAA/jB,EACAL,MAAAuY,MAAAlY,GAAAoX,KAAAzG,QAAA+J,WAAA,eAAA/a,KAAAiY,gBAAA+M,EAAA,iBAAAhlB,KAAAoY,eAAApY,KAAAuY,MAAAlY,GAAAqS,MAAA,KAAA1S,KAAAmY,gBAAAnY,KAAAuY,MAAAlY,GAAAsS,OAAA,IAGA3S,KAAAuY,MAAAlY,GAAAoX,KAAAxF,UACA+S,EAAA,GAAA/S,UACAjS,KAAAuY,MAAAlY,GAAAoX,KAAAzG,QAAAgK,YAAAF,EAAA,kBAGA,OAAAmK,GAAAjlB,KAAA+X,kBAAwCkN,EAAAjlB,KAAAgY,iBAA6BiN,IAAA,CACrE,GAAAC,GAAAd,EAAAa,EACA,IAAAC,EAAA,CACA,GAAAC,GAAAD,EAAA,EACAC,GAAAnU,QAAAgK,YAAAF,EAAA,iCACAqK,EAAAnU,QAAA+J,WAAA,cAAA6I,EAAA,aAAA5jB,KAAAuY,MAAA0M,GAAAvS,MAAA1S,KAAAoY,eAAA,KAAApY,KAAAuY,MAAA0M,GAAAtS,OAAA3S,KAAAmY,gBAAA,IACAgN,EAAAnU,MAAAiG,QAAA,EAEA2M,IAAA5jB,KAAAuY,MAAA0M,GAAAlT,MACAmT,IACAllB,KAAAuY,MAAA0M,GAAAxN,KAAAzG,QAAAgK,YAAA,IAEAhb,KAAAuY,MAAA0M,GAAAxN,KAAAzG,QAAA+J,WAAA,cAAA6I,EAAA,OAEA5jB,KAAAuY,MAAA0M,GAAAlT,IAAA6R,EACAA,GAAA5jB,KAAAuY,MAAA0M,GAAAtS,QAAA3S,KAAAmY,gBAGAnY,KAAA2W,SAAAwL,aAAAyB,EAAA5jB,KAAA2W,SAAAqL,eAAAhiB,KAAA0Y,QAAAgK,GAAA,GAEA,IAAA0C,GAAArM,WAAA,WACA,OAAAsM,KAAAjB,GAAA,CACA,GAAAkB,GAAAlB,EAAAiB,EACAC,GAAA,GAAAtU,MAAA5N,QAAA,OAEA+C,EAAAkS,WAAA/R,KAAAgf,EAAA,MA9VA,IAkWAtlB,MAAAsY,4BAAAhS,KAAA8e,IAGAxN,EAAArW,UAAAujB,cAAA,WACA,GAAA1B,GAAApjB,KAAAqY,WAAA1I,KACA,OAAAyT,IACAA,EAAApS,MAAA5N,QAAA,GACAggB,EAAApS,MAAAiG,QAAA,EACAmM,EAAApS,QAAA+J,WAAA,GACAqI,EAAApS,QAAAgK,YAAA,GACAoI,GAEApjB,KAAA0M,QAAAmL,mBAGAD,EAAArW,UAAA0iB,SAAA,WACAjkB,KAAAuY,MAAAjS,MACA/D,KAAA,KACAkV,KAAA,KACA9E,OAAA,EACAD,MAAA,EACAX,IAAA,KAIA6F,EAAArW,UAAAwhB,uBAAA,SAAAwC,EAAAzC,GACA,OAAAA,EACA,MAAAyC,EAEA,IAAAllB,GAAAklB,EAAAjhB,MACA+T,EAAA,CAGA,KADAyK,GAAAyC,EAAA1T,QACA,GACA,KAAAiR,EAAA,GAAAziB,EAAA,GAAAL,KAAAuY,MAAAlY,EAAA,GAAAsS,QACAmQ,GAAA9iB,KAAAuY,MAAAlY,EAAA,GAAAsS,OACAtS,GAEAgY,GAAAxH,KAAA+E,KAAAvV,EAAAwQ,KAAA2U,KAAA3U,KAAAgF,IAAAiN,EAAA,GAAA9iB,KAAAmY,sBACG,CACH,KAAA2K,EAAA,GAAAziB,EAAAL,KAAAuY,MAAAtW,QAAAjC,KAAAuY,MAAAlY,GAAAsS,QAAA3S,KAAAuY,MAAAlY,GAAAsS,OAAAmQ,GACAA,GAAA9iB,KAAAuY,MAAAlY,GAAAsS,OACAtS,KAEAA,GAAAL,KAAAuY,MAAAtW,SAAAjC,KAAAuY,MAAAlY,GAAAsS,UACA0F,EAAAxH,KAAA4U,MAAA5U,KAAA+E,IAAAkN,EAAA,GAAA9iB,KAAAmY,kBAMA,MAHA9X,IAAAgY,EACAyK,GAAAzK,EAAArY,KAAAmY,iBAGA7T,MAAAjE,EACAwR,OAAAiR,IAr2FA,SAAA7J,GACAA,EAAA1X,UAAA4X,MAAA,SAAAzM,GACA1M,KAAA0lB,eAAAhZ,GAGA1M,KAAA2lB,WAEA3lB,KAAA2Q,EAAA,EACA3Q,KAAA4Q,EAAA,EACA5Q,KAAA0hB,WAAA,EACA1hB,KAAA2hB,WAAA,EAEA3hB,KAAA4lB,SAAA,GAEA5lB,KAAAuX,gBAEAvX,KAAA6lB,mBAEA7lB,KAAA8lB,mBAEA9lB,KAAA0M,QAAAgR,YACA1d,KAAA+lB,mBAGA/lB,KAAA0M,QAAAiR,UACA3d,KAAAgmB,kBAGAhmB,KAAAwF,UAEAxF,KAAA0M,QAAAkR,MACA5d,KAAA6hB,SAAA7hB,KAAA0M,QAAAyP,OAAAnc,KAAA0M,QAAA0P,QAGApc,KAAAiF,UAGAgU,EAAA1X,UAAAqkB,SAAA,SAAAK,GACAjmB,KAAAkmB,UAAA1V,EAAAxQ,KAAAimB,SAAAjmB,KAAAimB,MACAjmB,KAAAimB,SAGAhN,EAAA1X,UAAAmkB,eAAA,SAAAhZ,GACA1M,KAAA0M,QAAAwD,KAA4BgM,EAAAxP,GAE5B1M,KAAAogB,WAAApgB,KAAA0M,QAAA0Q,eAAAnC,EAAA,oBAEAjb,KAAA0M,QAAA2Q,cAAArd,KAAA0M,QAAA2Q,eAAAjC,EACApb,KAAA0M,QAAA4Q,aAAAtd,KAAA0M,QAAA4Q,cAAAnC,EAEAnb,KAAA0M,QAAAwQ,gBAAAld,KAAA0M,QAAA+P,kBAAAzc,KAAA0M,QAAAwQ,eAGAld,KAAA0M,QAAA2P,QAAA,eAAArc,KAAA0M,QAAA+P,kBAAAzc,KAAA0M,QAAA2P,QACArc,KAAA0M,QAAA4P,QAAA,aAAAtc,KAAA0M,QAAA+P,kBAAAzc,KAAA0M,QAAA4P,QAGAtc,KAAA0M,QAAA6P,WAAAvc,KAAA0M,QAAA6P,aAAAvc,KAAA0M,QAAA+P,iBACAzc,KAAA0M,QAAA8P,uBAAAxc,KAAA0M,QAAA+P,iBAAA,EAAAzc,KAAA0M,QAAA8P,wBAEA,IAAAxc,KAAA0M,QAAAsG,MACAhT,KAAA0M,QAAAsG,IAAA,QAIAiG,EAAA1X,UAAAgW,cAAA,WACA,GAAAiL,GAAAnR,CACArR,MAAAyiB,iBAAAD,IAGAvJ,EAAA1X,UAAAif,iBAAA,WACA,GAAAgC,GAAA7Q,CACA3R,MAAAyiB,iBAAAD,IAGAvJ,EAAA1X,UAAAkhB,iBAAA,SAAAD,GACA,GAAArS,GAAAnQ,KAAA0M,QAAA6Q,cAAAvd,KAAA4W,QAAAxO,MACAoa,GAAApa,OAAA,oBAAApI,MACAwiB,EAAApa,OAAA,SAAApI,MAEAA,KAAA0M,QAAA+G,OACA+O,EAAAxiB,KAAA4W,QAAA,QAAA5W,MAAA,GAGAA,KAAA0M,QAAA8Q,eACAgF,EAAAxiB,KAAA4W,QAAA,YAAA5W,MACAwiB,EAAArS,EAAA,YAAAnQ,MACAwiB,EAAArS,EAAA,cAAAnQ,MACAwiB,EAAArS,EAAA,UAAAnQ,OAGAkb,IAAAlb,KAAA0M,QAAA+Q,eACA+E,EAAAxiB,KAAA4W,QAAA,aAAA5W,MACAwiB,EAAArS,EAAA,YAAAnQ,MACAwiB,EAAArS,EAAA,cAAAnQ,MACAwiB,EAAArS,EAAA,WAAAnQ,OAGAwiB,EAAAxiB,KAAA2W,SAAA3F,EAAAyK,cAAAzb,OAGAiZ,EAAA1X,UAAAskB,iBAAA,WACA7lB,KAAA0M,QAAAkR,MACA5d,KAAAmmB,YAEAnmB,KAAA0M,QAAA6J,WACAvW,KAAAomB,iBAEApmB,KAAA0M,QAAAoR,YACA9d,KAAAqmB,cAEArmB,KAAA0M,QAAAmR,iBACA7d,KAAAsmB,gBAEAtmB,KAAA0M,QAAAtH,OACApF,KAAAumB,aAEAvmB,KAAA0M,QAAAqR,YACA/d,KAAAwmB,kBAEAxmB,KAAA0M,QAAAuR,MACAje,KAAAymB,YAEAzmB,KAAA0M,QAAAwR,UACAle,KAAA0mB,iBAIAzN,EAAA1X,UAAAukB,iBAAA,WACA,qBAAAhlB,QAAAC,eAAA,CAGA,GAAA4lB,GAAA3mB,KACAwH,GAAA,EACA+I,EAAAvQ,KAAA0M,QAAA2Q,cAAA,8BACAvc,QAAAC,eAAAf,KAAAuQ,GACArP,IAAA,WACA,MAAAsG,IAEAof,IAAA,SAAAC,GACArf,EAAAqf,CAIA,QAFAvV,GAAAqV,EAAAhQ,SAAAlR,SAAAxD,OAAA0kB,EAAAhQ,SAAAlR,UAAAkhB,EAAAhQ,UACAmQ,EAAAtf,IAAAmf,EAAAI,QAAA,cACA1mB,EAAA,EAAuBA,EAAAiR,EAAArP,OAAe5B,IACtCiR,EAAAjR,GAAA2Q,MAAA8V,qBAMA7N,EAAA1X,UAAAykB,gBAAA,WACAhmB,KAAA4F,GAAA,yBACA,GAAAohB,GAAApc,SAAAoc,eACAA,GAAA,UAAAA,EAAA7J,SAAA,aAAA6J,EAAA7J,SACA6J,EAAAC,UAKAhO,EAAA1X,UAAAwkB,iBAAA,WACA,GAAA5hB,GAAAnE,IAEA,uBAAAknB,kBAAA,CACA,GAAAC,OAAA,GACAC,EAAA,GAAAF,kBAAA,SAAAG,GAEA,IAAAljB,EAAAmjB,oBAAA,CAKA,OAFAC,IAAA,EACAC,GAAA,EACAnnB,EAAA,EAAuBA,EAAAgnB,EAAAplB,OAAsB5B,IAAA,CAC7C,GAAAonB,GAAAJ,EAAAhnB,EACA,mBAAAonB,EAAAjlB,KAAA,CACA+kB,GAAA,CACA,OAEA,GAAAE,EAAAtX,SAAAhM,EAAAwS,SAAA,CACA6Q,GAAA,CACA,QAIAD,EACApjB,EAAAqB,UACSgiB,IAETvI,aAAAkI,GACAA,EAAApO,WAAA,WACA5U,EAAAmjB,qBACAnjB,EAAAqB,WAEW,QAGXkiB,GACAC,YAAA,EACAC,WAAA,EACAC,SAAA,EAEAT,GAAAU,QAAA9nB,KAAA2W,SAAA+Q,GAEA1nB,KAAA4F,GAAA,qBACAwhB,EAAAW,mBAGA/nB,MAAAgoB,mBAIA/O,EAAA1X,UAAA+lB,kBAAA,WACA,GAAAW,GAAAjoB,KAAA2Q,EAAA3Q,KAAAkoB,YAAAloB,KAAA2Q,EAAA3Q,KAAAuiB,YAAAviB,KAAA4Q,EAAA5Q,KAAAmoB,YAAAnoB,KAAA4Q,EAAA5Q,KAAAmiB,UAEA,OAAAniB,MAAAwH,gBAAAxH,KAAAooB,oBAAAH,GAGAhP,EAAA1X,UAAAymB,gBAAA,WAKA,QAAAK,KACA,IAAAroB,KAAAsoB,UAAA,CAGAC,EAAA/V,EAAAxS,KAAA2W,SACA,IAAA6R,GAAAD,EAAA7V,MACA+V,EAAAF,EAAA5V,MAEA+V,KAAAF,GAAAG,IAAAF,GACAzoB,KAAAwF,UAEAkjB,EAAAF,EACAG,EAAAF,EAEA3O,EAAAvZ,KAAAP,OAGA,QAAA8Z,KACA,GAAApV,GAAA1E,IAEA+Y,YAAA,WACAsP,EAAA9nB,KAAAmE,IACO,KA1BP,GAAA6jB,GAAA/V,EAAAxS,KAAA2W,UACA+R,EAAAH,EAAA7V,MACAiW,EAAAJ,EAAA5V,MA2BAmH,GAAAvZ,KAAAP,OAGAiZ,EAAA1X,UAAAie,YAAA,SAAAvM,GACA,OAAAA,EAAAzQ,MACA,iBACA,gBACAxC,KAAAyf,OAAAxM,GACAjT,KAAA0M,QAAAuR,MAAAhL,EAAAyN,SAAAzN,EAAAyN,QAAAze,OAAA,GACAjC,KAAA4oB,WAAA3V,EAEA,MACA,iBACA,gBACAjT,KAAA0M,QAAAuR,MAAAhL,EAAAyN,SAAAzN,EAAAyN,QAAAze,OAAA,EACAjC,KAAA6oB,MAAA5V,GAEAjT,KAAA0f,MAAAzM,EAEA,MACA,gBACA,cACA,kBACA,kBACAjT,KAAA8oB,OACA9oB,KAAA+oB,SAAA9V,GAEAjT,KAAA2f,KAAA1M,EAEA,MACA,yBACA,aACAjT,KAAAgpB,SACA,MACA,qBACA,0BACA,qBACA,sBACAhpB,KAAAipB,eAAAhW,EACA,MACA,aACAjT,KAAAkpB,UAAAjW,EAAAqB,eACAxB,EAAAG,EAAA9C,OAAAnQ,KAAA0M,QAAAoG,2BACAG,EAAAiK,iBACAjK,EAAA+K,mBAGA,MACA,aACA,qBACA,iBACAhe,KAAAmpB,cAAAlW,KAKAgG,EAAA1X,UAAAiE,QAAA,WACA,GAAA4jB,GAAA,WAAAhhB,OAAAihB,iBAAArpB,KAAA4W,QAAA,MAAAyM,SACAiG,EAAA9W,EAAAxS,KAAA4W,QACA5W,MAAAoiB,aAAAkH,EAAA5W,MACA1S,KAAAgiB,cAAAsH,EAAA3W,MAEA,IAAA4V,GAAA/V,EAAAxS,KAAA2W,SACA3W,MAAAsiB,cAAAzR,KAAAiF,MAAAyS,EAAA7V,MAAA1S,KAAAimB,OACAjmB,KAAAkiB,eAAArR,KAAAiF,MAAAyS,EAAA5V,OAAA3S,KAAAimB,OAEAjmB,KAAAupB,UAAAhB,EAAAzW,KACA9R,KAAAwpB,UAAAjB,EAAAxW,IAEAqX,IACAppB,KAAAupB,WAAAD,EAAAxX,KACA9R,KAAAwpB,WAAAF,EAAAvX,KAGA/R,KAAAkoB,WAAA,EACAloB,KAAAmoB,WAAA,CAEA,IAAA/iB,GAAApF,KAAA0M,QAAAtH,KACAA,IACApF,KAAAuY,MAAAvY,KAAA2W,SAAAlR,SAEAzF,KAAAypB,yBACAzpB,KAAA0M,QAAA4I,WAAAtV,KAAAsV,WAAAtV,KAAAuY,MAAAtW,OAAAjC,KAAAkiB,eAAAliB,KAAAuY,MAAAtW,OAAA,MACA4E,KAAA7G,KAAA0F,gBACA1F,KAAA0F,cAAAN,EAAAM,eAAA,GAEA1F,KAAA0M,QAAA0P,QAAApc,KAAA0F,cAAA1F,KAAAsV,WAEAtV,KAAAuiB,WAAA,EACAviB,KAAAmiB,YAAAniB,KAAAsV,YAAAtV,KAAAuY,MAAAtW,OAAA,KAEAjC,KAAAuiB,WAAAviB,KAAAoiB,aAAApiB,KAAAsiB,cACAtiB,KAAA0M,QAAAwR,WACAle,KAAAmiB,WAAAniB,KAAAgiB,cAAAhiB,KAAAkiB,gBAEAliB,KAAAuiB,WAAA,GACAviB,KAAAuiB,YAAAviB,KAAAupB,UACAvpB,KAAAkoB,YAAAloB,KAAAupB,WACOvpB,KAAAimB,MAAA,IACPjmB,KAAAuiB,WAAAviB,KAAAuiB,WAAA,EAAAviB,KAAAupB,UACAvpB,KAAAkoB,WAAAloB,KAAAuiB,YAEAviB,KAAAmiB,WAAA,GACAniB,KAAAmiB,YAAAniB,KAAAwpB,UACAxpB,KAAAmoB,YAAAnoB,KAAAwpB,WACOxpB,KAAAimB,MAAA,IACPjmB,KAAAmiB,WAAAniB,KAAAmiB,WAAA,EAAAniB,KAAAwpB,UACAxpB,KAAAmoB,WAAAnoB,KAAAmiB,aAIAniB,KAAA+hB,oBAAA/hB,KAAA0M,QAAA2P,SAAArc,KAAAuiB,WAAAviB,KAAAkoB,WACAloB,KAAA8hB,kBAAA9hB,KAAA0M,QAAA4P,SAAAtc,KAAAmiB,WAAAniB,KAAAmoB,WAEAnoB,KAAA+hB,sBACA/hB,KAAAuiB,WAAAviB,KAAAkoB,WACAloB,KAAAsiB,cAAAtiB,KAAAoiB,cAGApiB,KAAA8hB,oBACA9hB,KAAAmiB,WAAAniB,KAAAmoB,WACAnoB,KAAAkiB,eAAAliB,KAAAgiB,eAGAhiB,KAAA0pB,QAAA,EACA1pB,KAAA0hB,WAAA,EACA1hB,KAAA2hB,WAAA,EACA3hB,KAAA2pB,cAAA9X,EAAA7R,KAAA4W,SAEA5W,KAAAihB,QAAA,YAEAjhB,KAAA8oB,QAAA9oB,KAAA+jB,iBAGA9K,EAAA1X,UAAA0D,OAAA,WACAjF,KAAAkpB,SAAA,GAGAjQ,EAAA1X,UAAA+D,QAAA,WACAtF,KAAAkpB,SAAA,IAs/EAjQ,GA54EA,SAAAA,GACAA,EAAA1X,UAAAke,OAAA,SAAAxM,GACA,GAAA2W,GAAAjO,EAAA1I,EAAAzQ,KACA,KAAAonB,IAAAlO,GACA,IAAAzI,EAAA4W,YAIA7pB,KAAAkpB,SAAAlpB,KAAAsoB,WAAAtoB,KAAA2gB,WAAA3gB,KAAA2gB,YAAAiJ,GAAA,CAGA5pB,KAAA2gB,UAAAiJ,EAEA5pB,KAAA0M,QAAAwQ,iBAAApK,EAAAG,EAAA9C,OAAAnQ,KAAA0M,QAAAoG,0BACAG,EAAAiK,iBAEAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,kBAGAhe,KAAA4gB,OAAA,EACA5gB,KAAA8pB,MAAA,EACA9pB,KAAA+pB,MAAA,EACA/pB,KAAA0hB,WAAA,EACA1hB,KAAA2hB,WAAA,EACA3hB,KAAAgqB,iBAAA,EACAhqB,KAAAiqB,iBAAA,EACAjqB,KAAAkqB,gBAAA,EAEAlqB,KAAAmqB,kBACAnqB,KAAA+gB,UAAAnR,IAEA5P,KAAA0M,QAAAtH,QACApF,KAAAmQ,OAAA8C,EAAA9C,QAGAnQ,KAAAgkB,MAEA,IAAAvD,GAAAxN,EAAAyN,QAAAzN,EAAAyN,QAAA,GAAAzN,CAEAjT,MAAAmc,OAAAnc,KAAA2Q,EACA3Q,KAAAoc,OAAApc,KAAA4Q,EACA5Q,KAAAoqB,UAAApqB,KAAA2Q,EACA3Q,KAAAqqB,UAAArqB,KAAA4Q,EACA5Q,KAAAsqB,OAAA7J,EAAAnN,MACAtT,KAAAuqB,OAAA9J,EAAAlN,MAEAvT,KAAAihB,QAAA,uBAGAhI,EAAA1X,UAAAme,MAAA,SAAAzM,GACA,GAAAjT,KAAAkpB,UAAAlpB,KAAAsoB,WAAA3M,EAAA1I,EAAAzQ,QAAAxC,KAAA2gB,UAAA,CAIA3gB,KAAA0M,QAAAwQ,gBACAjK,EAAAiK,iBAEAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,iBAGA,IAAAyC,GAAAxN,EAAAyN,QAAAzN,EAAAyN,QAAA,GAAAzN,EACAiO,EAAAT,EAAAnN,MAAAtT,KAAAsqB,OACAnJ,EAAAV,EAAAlN,MAAAvT,KAAAuqB,MAEAvqB,MAAAsqB,OAAA7J,EAAAnN,MACAtT,KAAAuqB,OAAA9J,EAAAlN,MAEAvT,KAAA8pB,OAAA5I,EACAlhB,KAAA+pB,OAAA5I,CAEA,IAAAqJ,GAAA3Z,KAAAuE,IAAApV,KAAA8pB,OACAW,EAAA5Z,KAAAuE,IAAApV,KAAA+pB,OAEAW,EAAA9a,GAGA,MAAA8a,EAAA1qB,KAAA0pB,QAAA1pB,KAAA0M,QAAAkQ,oBAAA5c,KAAA4gB,OAAA6J,EAAAzqB,KAAA0M,QAAAmQ,uBAAA2N,EAAAxqB,KAAA0M,QAAAmQ,uBAAA,CAeA,GAVA7c,KAAAkqB,iBAAAlqB,KAAA0M,QAAA6P,aACAiO,EAAAC,EAAAzqB,KAAA0M,QAAA8P,uBACAxc,KAAAkqB,gBAAA,IACOO,GAAAD,EAAAxqB,KAAA0M,QAAA8P,uBACPxc,KAAAkqB,gBAAA,IAEAlqB,KAAAkqB,gBAAA,KAIA,MAAAlqB,KAAAkqB,gBAAA,CACA,gBAAAlqB,KAAA0M,QAAA+P,iBACAxJ,EAAAiK,qBACO,mBAAAld,KAAA0M,QAAA+P,iBAEP,YADAzc,KAAA2gB,WAAA,EAGAQ,GAAA,MACK,UAAAnhB,KAAAkqB,gBAAA,CACL,kBAAAlqB,KAAA0M,QAAA+P,iBACAxJ,EAAAiK,qBACO,iBAAAld,KAAA0M,QAAA+P,iBAEP,YADAzc,KAAA2gB,WAAA,EAGAO,GAAA,EAGAA,EAAAlhB,KAAA+hB,oBAAAb,EAAA,EACAC,EAAAnhB,KAAA8hB,kBAAAX,EAAA,EACAnhB,KAAAgqB,iBAAA9I,EAAA,EAAA7B,GAAA6B,EAAA,EAAA9B,GAAA,EACApf,KAAAiqB,iBAAA9I,EAAA,EAAAhC,EAAAgC,EAAA,EAAAjC,EAAA,CAEA,IAAAkC,GAAAphB,KAAA2Q,EAAAuQ,EACAG,EAAArhB,KAAA4Q,EAAAuQ,EAEApP,GAAA,EACA4Y,GAAA,EACA7Y,GAAA,EACA8Y,GAAA,EAEAlO,EAAA1c,KAAA0M,QAAAgQ,QACA,IAAAA,IACA3K,MAAAlL,KAAA6V,EAAA3K,KAAA2K,EAAA3K,IACA4Y,MAAA9jB,KAAA6V,EAAAiO,QAAAjO,EAAAiO,OACA7Y,MAAAjL,KAAA6V,EAAA5K,MAAA4K,EAAA5K,KACA8Y,MAAA/jB,KAAA6V,EAAAkO,OAAAlO,EAAAkO,QAEAxJ,EAAAphB,KAAAkoB,YAAA9G,EAAAphB,KAAAuiB,cAEAnB,EADAA,EAAAphB,KAAAkoB,YAAApW,GAAAsP,EAAAphB,KAAAuiB,YAAAqI,EACA5qB,KAAA2Q,EAAAuQ,EAAA,EAEAE,EAAAphB,KAAAkoB,WAAAloB,KAAAkoB,WAAAloB,KAAAuiB,aAGAlB,EAAArhB,KAAAmoB,YAAA9G,EAAArhB,KAAAmiB,cAEAd,EADAA,EAAArhB,KAAAmoB,YAAApW,GAAAsP,EAAArhB,KAAAmiB,YAAAwI,EACA3qB,KAAA4Q,EAAAuQ,EAAA,EAEAE,EAAArhB,KAAAmoB,WAAAnoB,KAAAmoB,WAAAnoB,KAAAmiB,YAIAniB,KAAA4gB,QACA5gB,KAAA4gB,OAAA,EACA5gB,KAAAihB,QAAA,gBAGAjhB,KAAA6qB,WAAAzJ,EAAAC,GAEAqJ,EAAA1qB,KAAA+gB,UAAA/gB,KAAA0M,QAAAkQ,oBACA5c,KAAA+gB,UAAA2J,EACA1qB,KAAAmc,OAAAnc,KAAA2Q,EACA3Q,KAAAoc,OAAApc,KAAA4Q,EAEA5Q,KAAA0M,QAAAuQ,YAAAqC,IACAtf,KAAAihB,QAAA,UACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,KAKA5Q,KAAA0M,QAAAuQ,UAAAqC,IACAtf,KAAAihB,QAAA,UACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,GAIA,IAAAka,GAAAlgB,SAAAmgB,gBAAAD,YAAA1iB,OAAAkK,aAAA1H,SAAAogB,KAAAF,WACAjI,EAAAjY,SAAAmgB,gBAAAlI,WAAAza,OAAAmK,aAAA3H,SAAAogB,KAAAnI,UAEAoI,EAAAjrB,KAAAsqB,OAAAQ,EACAI,EAAAlrB,KAAAuqB,OAAA1H,GAEAoI,EAAArgB,SAAAmgB,gBAAA1I,YAAAriB,KAAA0M,QAAAmQ,uBAAAoO,EAAAjrB,KAAA0M,QAAAmQ,uBAAAqO,EAAAlrB,KAAA0M,QAAAmQ,uBAAAqO,EAAAtgB,SAAAmgB,gBAAA9I,aAAAjiB,KAAA0M,QAAAmQ,wBACA7c,KAAA2f,KAAA1M,MAIAgG,EAAA1X,UAAAoe,KAAA,SAAA1M,GACA,GAAAjT,KAAAkpB,UAAAlpB,KAAAsoB,WAAA3M,EAAA1I,EAAAzQ,QAAAxC,KAAA2gB,UAAA,CAGA3gB,KAAA2gB,WAAA,EAEA3gB,KAAA0M,QAAAwQ,iBAAApK,EAAAG,EAAA9C,OAAAnQ,KAAA0M,QAAAoG,0BACAG,EAAAiK,iBAEAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,kBAGAhe,KAAAihB,QAAA,YACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,IAGA5Q,KAAAwH,gBAAA,CAGA,IAAA4Z,GAAAvQ,KAAAiF,MAAA9V,KAAA2Q,GACA0Q,EAAAxQ,KAAAiF,MAAA9V,KAAA4Q,GAEAsQ,EAAAE,EAAAphB,KAAAoqB,UACAjJ,EAAAE,EAAArhB,KAAAqqB,SAKA,IAJArqB,KAAA0hB,WAAAR,EAAA,EAAA7B,GAAA6B,EAAA,EAAA9B,GAAA,EACApf,KAAA2hB,WAAAR,EAAA,EAAAhC,EAAAgC,EAAA,EAAAjC,EAAA,GAGAlf,KAAA0M,QAAAmR,kBAAA7d,KAAAmrB,iBAAA,CAKA,GAAAnrB,KAAAorB,YAAAnY,GAEA,WADAjT,MAAAihB,QAAA,eAKA,KAAAjhB,KAAA+jB,cAAA/jB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,QAAA,CAIA1c,KAAA6qB,WAAAzJ,EAAAC,GAEArhB,KAAA0pB,QAAA9Z,GACA,IAAA4F,GAAAxV,KAAA0pB,QAAA1pB,KAAA+gB,UACAyJ,EAAA3Z,KAAAuE,IAAAgM,EAAAphB,KAAAmc,QACAsO,EAAA5Z,KAAAuE,IAAAiM,EAAArhB,KAAAoc,OAGA,IAAApc,KAAA2lB,QAAA0F,OAAA7V,EAAAxV,KAAA0M,QAAAoQ,gBAAA0N,EAAAxqB,KAAA0M,QAAAqQ,oBAAA0N,EAAAzqB,KAAA0M,QAAAqQ,mBAEA,WADA/c,MAAAihB,QAAA,QAIA,IAAAnM,GAAA,CAEA,IAAA9U,KAAA0M,QAAAiI,UAAAa,EAAAxV,KAAA0M,QAAAkQ,oBAAA6N,EAAAzqB,KAAA0M,QAAAmQ,uBAAA2N,EAAAxqB,KAAA0M,QAAAmQ,uBAAA,CACA,GAAA9K,IAAA,EACA4Y,GAAA,EACA7Y,GAAA,EACA8Y,GAAA,EACAlO,EAAA1c,KAAA0M,QAAAgQ,QACA,IAAAA,IACA3K,MAAAlL,KAAA6V,EAAA3K,KAAA2K,EAAA3K,IACA4Y,MAAA9jB,KAAA6V,EAAAiO,QAAAjO,EAAAiO,OACA7Y,MAAAjL,KAAA6V,EAAA5K,MAAA4K,EAAA5K,KACA8Y,MAAA/jB,KAAA6V,EAAAkO,OAAAlO,EAAAkO,MAEA,IAAAxI,GAAApiB,KAAA0hB,aAAArC,IAAAvN,GAAA9R,KAAA0hB,aAAAtC,IAAAwL,EAAA5qB,KAAAoiB,aAAA,EACAJ,EAAAhiB,KAAA2hB,aAAAxC,GAAApN,GAAA/R,KAAA2hB,aAAAzC,GAAAyL,EAAA3qB,KAAAgiB,cAAA,EACAsJ,EAAAtrB,KAAA+hB,oBAAApN,EAAA3U,KAAA2Q,EAAA3Q,KAAAmc,OAAA3G,EAAAxV,KAAAuiB,WAAAviB,KAAAkoB,WAAA9F,EAAApiB,KAAA0M,QAAA1M,OAAgK0V,YAAA0L,EAAA5L,SAAA,GAChK+V,EAAAvrB,KAAA8hB,kBAAAnN,EAAA3U,KAAA4Q,EAAA5Q,KAAAoc,OAAA5G,EAAAxV,KAAAmiB,WAAAniB,KAAAmoB,WAAAnG,EAAAhiB,KAAA0M,QAAA1M,OAA+J0V,YAAA2L,EAAA7L,SAAA,EAC/J4L,GAAAkK,EAAA5V,YACA2L,EAAAkK,EAAA7V,YACAZ,EAAAjE,KAAA+E,IAAA0V,EAAA9V,SAAA+V,EAAA/V,UACAxV,KAAAwH,gBAAA,MAEAxH,MAAA0M,QAAAtH,QACAic,EAAArhB,KAAA2V,uBAAA0L,GAAAzQ,EACAkE,EAAA9U,KAAA0M,QAAAtH,MAAAomB,YAAA,IAIA,IAAAjL,GAAApC,EAAAC,KACA,IAAApe,KAAA0M,QAAAkR,KAAA,CACA,GAAAA,GAAA5d,KAAAyhB,aAAAL,EAAAC,EACArhB,MAAA4hB,YAAAhE,EACA9I,EAAA9U,KAAA0M,QAAA+e,WAAA5a,KAAA+E,IAAA/E,KAAA+E,IAAA/E,KAAAgF,IAAAhF,KAAAuE,IAAAgM,EAAAxD,EAAAjN,GAAA,KAAAE,KAAAgF,IAAAhF,KAAAuE,IAAAiM,EAAAzD,EAAAhN,GAAA,WACAwQ,EAAAxD,EAAAjN,EACA0Q,EAAAzD,EAAAhN,EAEA5Q,KAAA0hB,WAAA,EACA1hB,KAAA2hB,WAAA,EACApB,EAAAvgB,KAAA0M,QAAAkR,KAAA2C,QAAApC,EAAAzB,OAGA,GAAA0E,IAAAphB,KAAA2Q,GAAA0Q,IAAArhB,KAAA4Q,EAMA,OAJAwQ,EAAAphB,KAAAkoB,YAAA9G,EAAAphB,KAAAuiB,YAAAlB,EAAArhB,KAAAmoB,YAAA9G,EAAArhB,KAAAmiB,cACA5B,EAAApC,EAAAG,iBAEAte,MAAA6hB,SAAAT,EAAAC,EAAAvM,EAAAyL,EAIAvgB,MAAA0M,QAAAtH,QACApF,KAAA0F,cAAA1F,KAAA2V,uBAAA3V,KAAA4Q,GAAAtM,OAGAtE,KAAAihB,QAAA,aACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,QAIAqI,EAAA1X,UAAA6pB,YAAA,SAAAnY,GAEA,GAAAyY,GAAA1rB,KAAAooB,qBAAApoB,KAAA+mB,OAIA,IAHA/mB,KAAAooB,oBAAA,GAGApoB,KAAA4gB,MAAA,CACA,GAAA5gB,KAAA0M,QAAAtH,MAAA,CACA,GAAApF,KAAAmQ,QAAAnQ,KAAAmQ,OAAAsG,YAAAzW,KAAA0M,QAAAtH,MAAAumB,kBAAA,CACA,GAAArnB,GAAAtE,KAAA2V,uBAAA3V,KAAA4Q,GAAAtM,MACAsnB,EAAA/a,KAAAiF,OAAA9V,KAAAuqB,OAAApY,EAAAnS,KAAA4W,SAAA7E,IAAA/R,KAAAgiB,cAAA,GAAAhiB,KAAAsV,WACAtV,MAAAmQ,OAAAnQ,KAAAuY,MAAAjU,EAAAsnB,GAEA,GAAA7Z,GAAAF,EAAA7R,KAAAmQ,QAAA4B,IACAD,EAAAD,EAAA7R,KAAAmQ,QAAA2B,IAQA,OAPAC,IAAA/R,KAAA2pB,cAAA5X,IACAA,GAAAlB,KAAAiF,MAAA9V,KAAAmQ,OAAA0C,aAAA,EAAA7S,KAAA4W,QAAA/D,aAAA,MACAf,GAAA9R,KAAA2pB,cAAA7X,KACAA,GAAAjB,KAAAiF,MAAA9V,KAAAmQ,OAAAyC,YAAA,EAAA5S,KAAA4W,QAAAhE,YAAA,MAEAb,EAAA/R,KAAA2V,uBAAA5D,GAAAnB,EACA5Q,KAAA6hB,SAAA/P,EAAAC,EAAA/R,KAAA0M,QAAAtH,MAAAomB,YAAA,IAAArN,EAAAC,QACA,EAEA,IAAAsN,EAAA,CACA,GAAAG,GAAA7rB,KAAA0M,QAAA6H,SACAuX,GAAA,CACA,IAAAD,GAAA7rB,KAAA+rB,cAAA,CACA,GAAAC,GAAAH,EAAAI,MACAA,MAAAplB,KAAAmlB,EAAA,IAAAA,CAEApc,KAAA5P,KAAA+rB,cAAAE,IACAH,GAAA,EACAvX,EAAAtB,IAWA,MARAjT,MAAA0M,QAAAsG,KACAA,EAAAC,EAAAjT,KAAA0M,QAAAsG,KAGAhT,KAAA0M,QAAA+G,QAAAX,EAAAG,EAAA9C,OAAAnQ,KAAA0M,QAAAoG,0BACAW,EAAAR,GAEAjT,KAAA+rB,cAAAD,EAAA,KAAAlc,KACA,EAEA,SAGA,UAGAqJ,EAAA1X,UAAAynB,QAAA,WACA,GAAA7kB,GAAAnE,IAEAA,MAAAkpB,UAIA5O,IACAta,KAAA4W,QAAAiM,UAAA,GAEA5D,aAAAjf,KAAAksB,eACAlsB,KAAAksB,cAAAnT,WAAA,WACA5U,EAAAqB,WACKxF,KAAA0M,QAAAsQ,iBAGL/D,EAAA1X,UAAA4qB,YAAA,WAMA,QAAAC,KACA,GAAAC,GAAA1F,EAAA2F,qBAEA,IADA3F,EAAA1F,QAAA,SAAAoL,IACA1F,EAAAnf,eAEA,WADAmf,GAAA1F,QAAA,YAAAoL,EAGA1F,GAAA4F,WAAAhO,EAAA6N,GAZAvN,EAAA7e,KAAAusB,YACAvsB,KAAAusB,WAAAhO,EAAA6N,EAEA,IAAAzF,GAAA3mB,MAaAiZ,EAAA1X,UAAA4oB,gBAAA,WACA,GAAArV,GAAAlO,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,IAIA,IAFA5G,KAAAkZ,cAAAlI,EAAAsK,oBAAAxG,EAAA,KAEA9U,KAAA0M,QAAAtH,MACA,OAAA/E,GAAA,EAAqBA,EAAAL,KAAAuY,MAAAtW,OAAuB5B,IAC5CL,KAAAuY,MAAAlY,GAAA2Q,QAAAsK,oBAAAxG,EAAA,IAIA,IAAA9U,KAAAwsB,WACA,OAAA7S,GAAA,EAAsBA,EAAA3Z,KAAAwsB,WAAAvqB,OAA6B0X,IACnD3Z,KAAAwsB,WAAA7S,GAAAkG,eAAA/K,IAKAmE,EAAA1X,UAAAkrB,0BAAA,SAAAlM,GAGA,GAFAvgB,KAAAkZ,cAAAlI,EAAAqK,0BAAAkF,EAEAvgB,KAAA0M,QAAAtH,MACA,OAAA/E,GAAA,EAAqBA,EAAAL,KAAAuY,MAAAtW,OAAuB5B,IAC5CL,KAAAuY,MAAAlY,GAAA2Q,QAAAqK,0BAAAkF,CAIA,IAAAvgB,KAAAwsB,WACA,OAAAvH,GAAA,EAAuBA,EAAAjlB,KAAAwsB,WAAAvqB,OAA8BgjB,IACrDjlB,KAAAwsB,WAAAvH,GAAA5J,yBAAAkF,IAKAtH,EAAA1X,UAAA0nB,eAAA,SAAAhW,GACAA,EAAA9C,SAAAnQ,KAAA2W,UAAA3W,KAAAwH,iBAIAxH,KAAAmqB,oBACAnqB,KAAA+mB,SAAA/mB,KAAAiqB,mBAAA/K,KACAlf,KAAA+jB,cAAA/jB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,UACA1c,KAAAwH,gBAAA,EACAxH,KAAA0M,QAAAuQ,YAAAsC,IACAvf,KAAAihB,QAAA,aACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,OAMAqI,EAAA1X,UAAAspB,WAAA,SAAAla,EAAAC,EAAAqV,GAcA,GAbA9P,GAAA3F,EAAAG,KAAAH,EAAAI,GAAA,0CACAJ,EAAAyV,KACAA,EAAAjmB,KAAAimB,OAEAjmB,KAAA0M,QAAA4Q,aACAtd,KAAAkZ,cAAAlI,EAAA+J,WAAA,aAAApK,EAAA,MAAAC,EAAA,aAAAqV,EAAA,IAAAjmB,KAAAogB,YAEAzP,EAAAE,KAAAiF,MAAAnF,GACAC,EAAAC,KAAAiF,MAAAlF,GACA5Q,KAAAkZ,cAAApH,KAAAnB,EAAA,KACA3Q,KAAAkZ,cAAAnH,IAAAnB,EAAA,MAGA5Q,KAAA0M,QAAAtH,MAIA,OAHAsnB,GAAA1sB,KAAA0M,QAAAtH,MAAAO,OACAA,MAAAkB,KAAA6lB,EAAA,GAAAA,EAEArsB,EAAA,EAAqBA,EAAAL,KAAAuY,MAAAtW,OAAuB5B,IAAA,CAC5C,GAAAssB,GAAAhnB,GAAAiL,EAAA5Q,KAAAsV,WAAAjV,EACAL,MAAAuY,MAAAlY,GAAA2Q,QAAA+J,WAAA,WAAA4R,EAAA,OAQA,GAJA3sB,KAAA2Q,IACA3Q,KAAA4Q,IACA5Q,KAAA4lB,SAAAK,GAEAjmB,KAAAwsB,WACA,OAAAnH,GAAA,EAAuBA,EAAArlB,KAAAwsB,WAAAvqB,OAA8BojB,IACrDrlB,KAAAwsB,WAAAnH,GAAAtF,kBAKA9G,EAAA1X,UAAAqrB,SAAA,SAAAC,EAAAC,EAAAtX,EAAAuX,GASA,QAAAC,KACA,GAAAld,GAAAF,GAEA,IAAAE,GAAAmd,EAeA,MAdAtG,GAAAuG,aAAA,EACAvG,EAAAkE,WAAAgC,EAAAC,EAAAK,GAEAxG,EAAA1F,QAAA,UACAtQ,EAAAgW,EAAAhW,EACAC,EAAA+V,EAAA/V,SAGA+V,EAAAI,SAAAJ,EAAA5C,cAAA4C,EAAAja,QAAAiQ,aACAgK,EAAA1F,QAAA,aACAtQ,EAAAgW,EAAAhW,EACAC,EAAA+V,EAAA/V,IAKAd,MAAAiR,GAAAvL,CACA,IAAA+K,GAAAwM,EAAAjd,GACAsR,GAAAyL,EAAA1Q,GAAAoE,EAAApE,EACAkF,GAAAyL,EAAA1Q,GAAAmE,EAAAnE,EACAgR,GAAAD,EAAAE,GAAA9M,EAAA8M,CAEA1G,GAAAkE,WAAAzJ,EAAAC,EAAA+L,GAEAzG,EAAAuG,cACAvG,EAAA2G,aAAA/O,EAAAyO,IAGArG,EAAAja,QAAAuQ,YAAAsC,IACAoH,EAAA1F,QAAA,UACAtQ,EAAAgW,EAAAhW,EACAC,EAAA+V,EAAA/V,IA3CA,GAAA+V,GAAA3mB,KACAmc,EAAAnc,KAAA2Q,EACAyL,EAAApc,KAAA4Q,EACAyc,EAAArtB,KAAAkmB,UACAiH,EAAAntB,KAAAimB,MACAlF,EAAAnR,IACAqd,EAAAlM,EAAAvL,CA0CAxV,MAAAktB,aAAA,EACArO,EAAA7e,KAAAstB,cACAN,KAGA/T,EAAA1X,UAAAgsB,SAAA,SAAA5c,EAAAC,GACA,GAAAkE,GAAAlO,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,KACA2Z,EAAA3Z,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAAuX,EAAAzB,MAEA/L,GAAA3Q,KAAA2Q,IACAC,EAAA5Q,KAAA4Q,IAEA5Q,KAAA6hB,SAAAlR,EAAAC,EAAAkE,EAAAyL,IAGAtH,EAAA1X,UAAAsgB,SAAA,SAAAlR,EAAAC,GACA,GAAAkE,GAAAlO,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,KACA2Z,EAAA3Z,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAAuX,EAAAzB,OACA8Q,EAAA5mB,UAAA,EAOA,IALA5G,KAAA0M,QAAAtH,QACAwL,EAAA5Q,KAAA2V,uBAAA/E,MAEA5Q,KAAAwH,eAAAxH,KAAA0M,QAAA2Q,eAAAvI,EAAA,IAAA9U,KAAA2Q,OAAA3Q,KAAA4Q,QAEAkE,GAAA9U,KAAA0M,QAAA2Q,cAAA,CAQA,GAPArd,KAAAysB,0BAAAlM,EAAAvP,OACAhR,KAAAmqB,gBAAArV,GACA9U,KAAA6qB,WAAAla,EAAAC,GAEAkE,GAAA9U,KAAA0M,QAAAuQ,YAAAsC,IACAvf,KAAAmsB,eAEArX,IAAA0Y,EAAA,CAEA,GAAAxtB,KAAA0M,QAAAuR,KAAA,MACAje,MAAAihB,QAAA,UACAtQ,IACAC,MAGA5Q,KAAAytB,QAAA7iB,SAAAogB,KAAAnY,aACA7S,KAAA+jB,cAAA/jB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,SACA1c,KAAAihB,QAAA,aACAtQ,IACAC,MAKA5Q,KAAA0M,QAAAtH,QACApF,KAAA0F,cAAA1F,KAAA2V,uBAAA/E,GAAAtM,WAGAtE,MAAA4sB,SAAAjc,EAAAC,EAAAkE,EAAAyL,EAAAhP,KAIA0H,EAAA1X,UAAAmsB,gBAAA,SAAApc,EAAAwD,EAAA6Y,EAAAC,EAAArN,GACA,GAAAjP,IAGAA,IAAAuc,SAAAvc,EAAAtR,KAAA2W,SAAAvP,cAAAkK,IAEAtR,KAAA0M,QAAAtH,OAAAkM,EAAAoG,UAAAC,SAAA3X,KAAA0M,QAAAtH,MAAA0oB,iBAAA,CAIA,GAAAzB,GAAAxa,EAAAP,EACA+a,GAAAva,MAAA9R,KAAA2pB,cAAA7X,KACAua,EAAAta,KAAA/R,KAAA2pB,cAAA5X,KAGA,IAAA4b,IACAA,EAAA9c,KAAAiF,MAAAxE,EAAAsB,YAAA,EAAA5S,KAAA4W,QAAAhE,YAAA,KAEA,IAAAgb,IACAA,EAAA/c,KAAAiF,MAAAxE,EAAAuB,aAAA,EAAA7S,KAAA4W,QAAA/D,aAAA,IAGAwZ,EAAAva,MAAA6b,GAAA,EACAtB,EAAAta,KAAA6b,GAAA,EACAvB,EAAAva,KAAAua,EAAAva,KAAA9R,KAAAkoB,WAAAloB,KAAAkoB,WAAAmE,EAAAva,KAAA9R,KAAAuiB,WAAAviB,KAAAuiB,WAAA8J,EAAAva,KACAua,EAAAta,IAAAsa,EAAAta,IAAA/R,KAAAmoB,WAAAnoB,KAAAmoB,WAAAkE,EAAAta,IAAA/R,KAAAmiB,WAAAniB,KAAAmiB,WAAAkK,EAAAta,IAEA/R,KAAA0M,QAAAtH,QACAinB,EAAAta,IAAA/R,KAAA2V,uBAAA0W,EAAAta,KAAAnB,GAGA5Q,KAAA6hB,SAAAwK,EAAAva,KAAAua,EAAAta,IAAA+C,EAAAyL,KAGAtH,EAAA1X,UAAAwiB,cAAA,WACA,GAAAjP,GAAAlO,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,KACAmnB,EAAAnnB,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAAuX,EAAAzB,OAEA/L,EAAA3Q,KAAA2Q,EACAqd,EAAAnd,KAAAiF,MAAAnF,IACA3Q,KAAA+hB,qBAAAiM,EAAAhuB,KAAAkoB,WACAvX,EAAA3Q,KAAAkoB,WACK8F,EAAAhuB,KAAAuiB,aACL5R,EAAA3Q,KAAAuiB,WAGA,IAAA3R,GAAA5Q,KAAA4Q,EACAqd,EAAApd,KAAAiF,MAAAlF,EAOA,QANA5Q,KAAA8hB,mBAAAmM,EAAAjuB,KAAAmoB,WACAvX,EAAA5Q,KAAAmoB,WACK8F,EAAAjuB,KAAAmiB,aACLvR,EAAA5Q,KAAAmiB,aAGAxR,IAAA3Q,KAAA2Q,GAAAC,IAAA5Q,KAAA4Q,KAIA5Q,KAAA6hB,SAAAlR,EAAAC,EAAAkE,EAAAiZ,IAEA,IAGA9U,EAAA1X,UAAA+qB,oBAAA,WACA,GAAA4B,GAAA9lB,OAAAihB,iBAAArpB,KAAA2W,SAAA,MACAhG,MAAA,GACAC,MAAA,EAWA,OATA5Q,MAAA0M,QAAA4Q,cACA4Q,IAAAld,EAAA+J,WAAAoT,MAAA,QAAAA,MAAA,MACAxd,IAAAud,EAAA,KAAAA,EAAA,IACAtd,IAAAsd,EAAA,KAAAA,EAAA,MAEAvd,GAAAud,EAAApc,KAAAsc,QAAA,eACAxd,GAAAsd,EAAAnc,IAAAqc,QAAA,iBAIAzd,IACAC,MAIAqI,EAAA1X,UAAAyiB,KAAA,WACA,GAAAhkB,KAAA0M,QAAA2Q,eAAArd,KAAAwH,eAAA,CACAxH,KAAAwH,gBAAA,EACAqX,EAAA7e,KAAAusB,WACA,IAAAF,GAAArsB,KAAAssB,qBACAtsB,MAAA6qB,WAAAwB,EAAA1b,EAAA0b,EAAAzb,GACA5Q,KAAA0M,QAAAtH,MACApF,KAAAmQ,OAAAnQ,KAAAuY,MAAAvY,KAAA2V,uBAAA0W,EAAAzb,GAAAtM,OAEAtE,KAAAihB,QAAA,aACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,IAGA5Q,KAAAooB,oBAAA,OACKpoB,KAAA0M,QAAA2Q,eAAArd,KAAAktB,cACLltB,KAAAktB,aAAA,EACArO,EAAA7e,KAAAstB,cACAttB,KAAAihB,QAAA,aACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,IAEA5Q,KAAAooB,oBAAA,IAIAnP,EAAA1X,UAAAkF,QAAA,WACAzG,KAAAsoB,WAAA,EACAtoB,KAAAihB,QAAA,WAEApC,EADA7e,KAAA0M,QAAA2Q,cACArd,KAAAusB,WAEAvsB,KAAAstB,cAEAttB,KAAAwgB,mBAEAxgB,KAAA2lB,aAgtDA1M,GA5yGA,SAAAA,GACAA,EAAA1X,UAAAqE,GAAA,SAAApD,EAAA+O,GACA,GAAAxC,GAAAnI,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAA5G,IAEAA,MAAA2lB,QAAAnjB,KACAxC,KAAA2lB,QAAAnjB,OAGAxC,KAAA2lB,QAAAnjB,GAAA8D,MAAAiL,EAAAxC,KAGAkK,EAAA1X,UAAA8sB,KAAA,SAAA7rB,EAAA+O,GAGA,QAAA+c,KACAtuB,KAAAuuB,IAAA/rB,EAAA8rB,GAEA/c,EAAAid,MAAAzf,EAAAnI,WALA,GAAAmI,GAAAnI,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,GAAA5G,IAQAsuB,GAAA/c,KAEAvR,KAAA4F,GAAApD,EAAA8rB,IAGArV,EAAA1X,UAAAgtB,IAAA,SAAA/rB,EAAA+O,GACA,GAAAoU,GAAA3lB,KAAA2lB,QAAAnjB,EACA,IAAAmjB,EAKA,IADA,GAAA8I,GAAA9I,EAAA1jB,OACAwsB,MACA9I,EAAA8I,GAAA,KAAAld,GAAAoU,EAAA8I,GAAA,IAAA9I,EAAA8I,GAAA,GAAAld,SACA7B,EAAAiW,EAAA8I,IAKAxV,EAAA1X,UAAA0f,QAAA,SAAAze,GACA,GAAAksB,GAAA1uB,KAAA2lB,QAAAnjB,EACA,IAAAksB,EAMA,OAFAC,GAAAD,EAAAzsB,OACA2sB,KAAA1qB,OAAAgW,EAAAwU,IACAruB,EAAA,EAAmBA,EAAAsuB,EAAStuB,IAAA,CAC5B,GAAAqT,GAAAkb,EAAAvuB,GAEAwuB,EAAAzV,EAAA1F,EAAA,GACAnC,EAAAsd,EAAA,GACA9f,EAAA8f,EAAA,EAEAtd,IACAA,EAAAid,MAAAzf,KAAA/H,MAAAzG,KAAAqG,UAAA,OAsvGAqS,GA7sDA,SAAAA,GACAA,EAAA1X,UAAA4kB,UAAA,WACA,GAAAhiB,GAAAnE,IAEAA,MAAA4hB,cACA,IAAAhE,GAAA5d,KAAA0M,QAAAkR,IAEA,IAAAA,EAAAkR,KAAA,CACA,GAAArpB,GAAAzF,KAAA2W,SAAAlR,QACAA,GAAAxD,OAAA,GACAuS,EAAA/O,IAAAxD,OAAA,GAAA8sB,WAAA,GAAA/uB,KAAA2W,UACA3W,KAAA2W,SAAA5L,YAAAtF,EAAA,GAAAspB,WAAA,KAGAnR,EAAAkR,MAAA,EAIA,GAAAxd,GAAAsM,EAAAtM,EACA,iBAAAA,KACAA,EAAAtR,KAAA2W,SAAAqY,iBAAA1d,IAGAtR,KAAA4F,GAAA,qBAGA,GAFAzB,EAAA8qB,SAEA9qB,EAAAie,cAAAje,EAAA6d,eAAA7d,EAAAme,eAAAne,EAAA+d,eAAA,CAIA,GAAAgN,GAAAtR,EAAAsR,OAAA/qB,EAAAie,aACA+M,EAAAvR,EAAAuR,OAAAhrB,EAAA6d,cAEArR,EAAA,EACAC,MAAA,GACAwe,MAAA,GACAC,MAAA,GACAhvB,EAAA,EACAC,MAAA,GACAE,EAAA,EACAW,MAAA,GACAiR,MAAA,EACA,IAAAd,EA8BA,IAHAhR,EAAAgR,EAAArP,OACAd,GAAA,EAEcd,EAAAC,EAAOD,IACrB+R,EAAAI,EAAAlB,EAAAjR,KACA,IAAAA,GAAA+R,EAAAN,MAAAU,EAAAlB,EAAAjR,EAAA,IAAAyR,QACAtR,EAAA,EACAW,KAGAgD,EAAA8qB,MAAAzuB,KACA2D,EAAA8qB,MAAAzuB,OAGAmQ,EAAAE,KAAA+E,KAAAxD,EAAAN,KAAA3N,EAAAoe,YACA3R,EAAAC,KAAA+E,KAAAxD,EAAAL,IAAA5N,EAAAge,YACAiN,EAAAze,EAAAE,KAAAiF,MAAA1D,EAAAM,MAAA,GACA2c,EAAAze,EAAAC,KAAAiF,MAAA1D,EAAAO,OAAA,GAEAxO,EAAA8qB,MAAAzuB,GAAAW,IACAwP,IACAC,IACA8B,MAAAN,EAAAM,MACAC,OAAAP,EAAAO,OACAyc,KACAC,MAGA1e,EAAAxM,EAAAoe,YACA/hB,QApDA,KAHA4uB,EAAAve,KAAAiF,MAAAoZ,EAAA,GACAG,EAAAxe,KAAAiF,MAAAqZ,EAAA,GAEAxe,GAAAxM,EAAAme,eAAA,CAKA,IAJAne,EAAA8qB,MAAA5uB,MACAC,EAAA,EACAsQ,EAAA,EAEAA,GAAAzM,EAAA+d,gBACA/d,EAAA8qB,MAAA5uB,GAAAC,IACAqQ,EAAAE,KAAA+E,IAAAjF,EAAAxM,EAAAoe,YACA3R,EAAAC,KAAA+E,IAAAhF,EAAAzM,EAAAge,YACAzP,MAAAwc,EACAvc,OAAAwc,EACAC,GAAAze,EAAAye,EACAC,GAAAze,EAAAye,GAGAze,GAAAue,EACA7uB,GAGAqQ,IAAAue,EACA7uB,IAqCA8D,EAAAmrB,gBAEA,IAAAC,GAAA3R,EAAA4R,OAAA,IACAC,EAAA7R,EAAA8R,OAAA,GACAvrB,GAAAwrB,UAAAxrB,EAAAyd,YAAAtO,OAAAic,EAAAprB,EAAAyd,YAAArO,OAAAkc,EAAA,MAAA5oB,IAAA,EAGA,IAAA+oB,GAAAhS,EAAAiS,SACAD,GAAA,MACAzrB,EAAA2rB,eAAAF,EACAzrB,EAAA4rB,eAAAH,IAEAzrB,EAAA2rB,eAAAjf,KAAAiF,MAAA3R,EAAA8qB,MAAA9qB,EAAAyd,YAAAtO,OAAAnP,EAAAyd,YAAArO,OAAAb,MAAAkd,GACAzrB,EAAA4rB,eAAAlf,KAAAiF,MAAA3R,EAAA8qB,MAAA9qB,EAAAyd,YAAAtO,OAAAnP,EAAAyd,YAAArO,OAAAZ,OAAAid,OAIA5vB,KAAA4F,GAAA,uBACAgY,EAAAkR,OACAlR,EAAA4R,QACA,IAAArrB,EAAAyd,YAAAtO,OACAnP,EAAAwrB,UAAAxrB,EAAA8qB,MAAAhtB,OAAA,EAAAkC,EAAAyd,YAAArO,MAAA,MAAA1M,IAAA,GAEA1C,EAAAyd,YAAAtO,QAAAnP,EAAA8qB,MAAAhtB,OAAA,GACAkC,EAAAwrB,UAAA,EAAAxrB,EAAAyd,YAAArO,MAAA,MAAA1M,IAAA,KAGA,IAAA1C,EAAAyd,YAAArO,OACApP,EAAAwrB,UAAAxrB,EAAAyd,YAAAtO,MAAAnP,EAAA8qB,MAAA,GAAAhtB,OAAA,QAAA4E,IAAA,GAEA1C,EAAAyd,YAAArO,QAAApP,EAAA8qB,MAAA,GAAAhtB,OAAA,GACAkC,EAAAwrB,UAAAxrB,EAAAyd,YAAAtO,MAAA,QAAAzM,IAAA,QAMA,IAAA+W,EAAAoS,aACAhwB,KAAA4F,GAAA,mBACA,GAAAkP,GAAA8I,EAAAzI,OAAAtE,KAAA+E,IAAA/E,KAAA+E,IAAA/E,KAAAgF,IAAAhF,KAAAuE,IAAAjR,EAAAwM,EAAAxM,EAAAgY,QAAA,KAAAtL,KAAAgF,IAAAhF,KAAAuE,IAAAjR,EAAAyM,EAAAzM,EAAAiY,QAAA,UAEAjY,GAAAwrB,UAAAxrB,EAAAyd,YAAAtO,MAAAnP,EAAAud,WAAAvd,EAAAyd,YAAArO,MAAApP,EAAAwd,WAAA7M,KAIA9U,KAAA4F,GAAA,qBACA,GAAAgY,EAAAkR,KAAA,CACA,GAAAmB,GAAA9rB,EAAAwS,SAAAlR,QACAwqB,GAAAhuB,OAAA,IACAsJ,EAAApH,EAAAwS,SAAAsZ,IAAAhuB,OAAA,IACAsJ,EAAApH,EAAAwS,SAAAsZ,EAAA,SAMAhX,EAAA1X,UAAA+tB,eAAA,WACA,GAAA1R,GAAA5d,KAAA0M,QAAAkR,IAEAA,GAAAkR,MAAA9uB,KAAAivB,OAAAjvB,KAAAivB,MAAAhtB,SAIAjC,KAAAivB,MAAAhtB,OAAA,IACA2b,EAAA4R,QAAA,GAEAxvB,KAAAivB,MAAA,IAAAjvB,KAAAivB,MAAA,GAAAhtB,OAAA,IACA2b,EAAA8R,QAAA,GAEA9R,EAAA4R,QAAA5R,EAAA8R,QACA3Z,EAAA,2DAIAkD,EAAA1X,UAAAkgB,aAAA,SAAA9Q,EAAAC,GACA,IAAA5Q,KAAAivB,MAAAhtB,OACA,OAAc0O,EAAA,EAAAC,EAAA,EAAA0C,MAAA,EAAAC,MAAA,EAGd,IAAAlT,GAAA,CAEA,IAAAwQ,KAAAuE,IAAAzE,EAAA3Q,KAAAoqB,YAAApqB,KAAA8vB,gBAAAjf,KAAAuE,IAAAxE,EAAA5Q,KAAAqqB,YAAArqB,KAAA+vB,eACA,MAAA/vB,MAAA4hB,WAGAjR,GAAA3Q,KAAAkoB,WACAvX,EAAA3Q,KAAAkoB,WACKvX,EAAA3Q,KAAAuiB,aACL5R,EAAA3Q,KAAAuiB,YAGA3R,EAAA5Q,KAAAmoB,WACAvX,EAAA5Q,KAAAmoB,WACKvX,EAAA5Q,KAAAmiB,aACLvR,EAAA5Q,KAAAmiB,WAIA,KADA,GAAA7hB,GAAAN,KAAAivB,MAAAhtB,OACU5B,EAAAC,EAAOD,IACjB,GAAAsQ,GAAA3Q,KAAAivB,MAAA5uB,GAAA,GAAA+uB,GAAA,CACAze,EAAA3Q,KAAAivB,MAAA5uB,GAAA,GAAAsQ,CACA,OAIArQ,EAAAN,KAAAivB,MAAA5uB,GAAA4B,MAGA,KADA,GAAAzB,GAAA,EACUA,EAAAF,EAAOE,IACjB,GAAAoQ,GAAA5Q,KAAAivB,MAAA,GAAAzuB,GAAA6uB,GAAA,CACAze,EAAA5Q,KAAAivB,MAAA,GAAAzuB,GAAAoQ,CACA,OA4BA,MAxBAvQ,KAAAL,KAAA4hB,YAAAtO,QACAjT,GAAAL,KAAA0hB,WAEArhB,EAAA,EACAA,EAAA,EACOA,GAAAL,KAAAivB,MAAAhtB,SACP5B,EAAAL,KAAAivB,MAAAhtB,OAAA,GAGA0O,EAAA3Q,KAAAivB,MAAA5uB,GAAA,GAAAsQ,GAGAnQ,IAAAR,KAAA4hB,YAAArO,QACA/S,GAAAR,KAAA2hB,WAEAnhB,EAAA,EACAA,EAAA,EACOA,GAAAR,KAAAivB,MAAA,GAAAhtB,SACPzB,EAAAR,KAAAivB,MAAA,GAAAhtB,OAAA,GAGA2O,EAAA5Q,KAAAivB,MAAA,GAAAzuB,GAAAoQ,IAIAD,IACAC,IACA0C,MAAAjT,EACAkT,MAAA/S,IAIAyY,EAAA1X,UAAAouB,UAAA,SAAAhf,GACA,GAAAC,GAAAhK,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,KACAkO,EAAAlO,UAAA,GACA2Z,EAAA3Z,UAAA,GACA4mB,EAAA5mB,UAAA,GAEAgX,EAAA5d,KAAA0M,QAAAkR,IAEA,IAAAA,GAAA5d,KAAAivB,OAAAjvB,KAAAivB,MAAAhtB,SAIAse,KAAA3C,EAAA2C,QAAApC,EAAAzB,OAEA/L,GAAA3Q,KAAAivB,MAAAhtB,OACA0O,EAAA3Q,KAAAivB,MAAAhtB,OAAA,EACK0O,EAAA,IACLA,EAAA,GAGA3Q,KAAAivB,MAAAte,IAAA,CAIAC,GAAA5Q,KAAAivB,MAAAte,GAAA1O,OACA2O,EAAA5Q,KAAAivB,MAAAte,GAAA1O,OAAA,EACK2O,EAAA,IACLA,EAAA,EAGA,IAAAsf,GAAAlwB,KAAAivB,MAAAte,GAAAC,GAAAD,EACAwf,EAAAnwB,KAAAivB,MAAAte,GAAAC,IAEAkE,OAAAjO,KAAAiO,EAAA8I,EAAAzI,OAAAtE,KAAA+E,IAAA/E,KAAA+E,IAAA/E,KAAAgF,IAAAhF,KAAAuE,IAAA8a,EAAAlwB,KAAA2Q,GAAA,KAAAE,KAAAgF,IAAAhF,KAAAuE,IAAA+a,EAAAnwB,KAAA4Q,GAAA,WAAAkE,EAEA9U,KAAA4hB,aACAjR,EAAAuf,EACAtf,EAAAuf,EACA7c,MAAA3C,EACA4C,MAAA3C,GAEA5Q,KAAA6hB,SAAAqO,EAAAC,EAAArb,EAAAyL,EAAAiN,KAGAvU,EAAA1X,UAAA6uB,SAAA,SAAAzf,EAAAC,EAAAkE,EAAAyL,GACA,GAAA3C,GAAA5d,KAAA0M,QAAAkR,IACA,IAAAA,GAAA5d,KAAAivB,OAAAjvB,KAAAivB,MAAAhtB,OAAA,CAIA,GAAA2b,EAAAkR,KAAA,CACA,GAAAH,OAAA,EACA/Q,GAAA4R,QACAb,EAAA3uB,KAAAivB,MAAAhtB,OAAA,EACA0O,GAAAge,EACAhe,EAAAge,EAAA,EACShe,EAAA,IACTA,EAAA,GAEAA,GAAA,IAEAge,EAAA3uB,KAAAivB,MAAA,GAAAhtB,OAAA,EACA2O,GAAA+d,EACA/d,EAAA+d,EAAA,EACS/d,EAAA,IACTA,EAAA,GAEAA,GAAA,GAGA5Q,KAAA2vB,UAAAhf,EAAAC,EAAAkE,EAAAyL,KAGAtH,EAAA1X,UAAAuY,KAAA,SAAAhF,EAAAyL,GAEA,GADAvgB,KAAA0M,QAAAkR,KACA,CAIA,GAAAjN,GAAA3Q,KAAA4hB,YAAAtO,MACA1C,EAAA5Q,KAAA4hB,YAAArO,KAEA5C,KACAA,GAAA3Q,KAAAivB,MAAAhtB,QAAAjC,KAAA8hB,oBACAnR,EAAA,EACAC,KAGA5Q,KAAA2vB,UAAAhf,EAAAC,EAAAkE,EAAAyL,KAGAtH,EAAA1X,UAAA8uB,KAAA,SAAAvb,EAAAyL,GAEA,GADAvgB,KAAA0M,QAAAkR,KACA,CAIA,GAAAjN,GAAA3Q,KAAA4hB,YAAAtO,MACA1C,EAAA5Q,KAAA4hB,YAAArO,KAEA5C,KACAA,EAAA,GAAA3Q,KAAA8hB,oBACAnR,EAAA,EACAC,KAGA5Q,KAAA2vB,UAAAhf,EAAAC,EAAAkE,EAAAyL,KAGAtH,EAAA1X,UAAA+uB,eAAA,WACA,GAAA1S,GAAA5d,KAAA0M,QAAAkR,IACA,OAAAA,GAIAA,EAAAkR,KAEAlR,EAAA4R,OACAtf,KAA+BlQ,KAAA4hB,aAC/BtO,MAAAtT,KAAA4hB,YAAAtO,MAAA,IAGApD,KAA+BlQ,KAAA4hB,aAC/BrO,MAAAvT,KAAA4hB,YAAArO,MAAA,IAKAvT,KAAA4hB,YAhBA,OAo2CA3I,GAh1CA,SAAAA,GACAA,EAAA1X,UAAA2E,QAAA,WACA,GAAA5B,GAAAsC,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,GAAAA,UAAA,IAEA,IAAA5G,KAAA0M,QAAAtH,MAAA,CACA,GAAAwL,IAAAtM,EAAAtE,KAAAsV,UACAtV,MAAA6hB,SAAA,EAAAjR,KAIAqI,EAAA1X,UAAA8E,iBAAA,WACA,MAAArG,MAAA0M,QAAAtH,OAAApF,KAAA0F,eAGAuT,EAAA1X,UAAAglB,WAAA,WACA,GAAAnhB,GAAApF,KAAA0M,QAAAtH,KACAA,GAAAumB,oBACAvmB,EAAAumB,kBAAA,gBAEAvmB,EAAA0oB,iBACA1oB,EAAA0oB,eAAA,cAEA1oB,EAAAmrB,yBACAnrB,EAAAmrB,uBAAA,2BAEA1pB,KAAAzB,EAAAM,gBACAN,EAAAM,cAAA,IAIAuT,EAAA1X,UAAAoU,uBAAA,SAAA/E,GACAA,IAAA,IAAAA,EAAA5Q,KAAAmiB,WAAAniB,KAAAmiB,WAAAvR,CASA,KARA,GAAAxL,GAAApF,KAAA0M,QAAAtH,MACAorB,EAAA3f,KAAAuE,IAAAvE,KAAAiF,OAAAlF,EAAA5Q,KAAAsV,aACAmb,EAAAD,EACAjY,EAAAvY,KAAAuY,MAKAiY,GAAA,IACA,IAAAjY,EAAAiY,GAAA/Z,UAAAjS,QAAAY,EAAAmrB,yBAGAC,GAGA,IAAAA,EAAA,EAEA,IADAA,EAAAC,EACAD,GAAAjY,EAAAtW,OAAA,IACA,IAAAsW,EAAAiY,GAAA/Z,UAAAjS,QAAAY,EAAAmrB,yBAGAC,GASA,OAJAA,KAAAjY,EAAAtW,SACAuuB,EAAAC,IAIAnsB,MAAAtE,KAAA0wB,uBAAA,EAAAF,EACA5f,GAAA4f,EAAAxwB,KAAAsV,aAIA2D,EAAA1X,UAAAkoB,uBAAA,WACA,GAAArkB,GAAApF,KAAA0M,QAAAtH,MACAmT,EAAAvY,KAAAuY,KACAvY,MAAA0wB,uBAAA,CACA,QAAArwB,GAAA,EAAmBA,EAAAkY,EAAAtW,OAAkB5B,IACrC,QAAAkY,EAAAlY,GAAAoW,UAAAjS,QAAAY,EAAAmrB,wBAAA,CACAvwB,KAAA0wB,uBAAA,CACA,UAswCAzX,GA9vCA,SAAAA,GACAA,EAAA1X,UAAA6kB,eAAA,WACA,GAAAjiB,GAAAnE,KAEA2wB,EAAA3wB,KAAA0M,QAAA6J,UACAqa,EAAAD,EAAA5Z,KACAA,MAAAlQ,KAAA+pB,KACAC,EAAAF,EAAArZ,YACAA,MAAAzQ,KAAAgqB,IAEA7wB,MAAAwsB,aACA,IAAAhW,OAAA,EAEAxW,MAAA0M,QAAA2P,UACA7F,GACAlF,GAAA+E,EAAA,cACAC,UAAA,aACAS,OACAO,eAEAtX,KAAA8wB,iBAAAta,EAAAlF,IAEAtR,KAAAwsB,WAAAlmB,KAAA,GAAAoQ,GAAA1W,KAAAwW,KAGAxW,KAAA0M,QAAA4P,UACA9F,GACAlF,GAAA+E,EAAA,YACAC,UAAA,WACAS,OACAO,eAEAtX,KAAA8wB,iBAAAta,EAAAlF,IACAtR,KAAAwsB,WAAAlmB,KAAA,GAAAoQ,GAAA1W,KAAAwW,KAGAxW,KAAA4F,GAAA,qBACA,OAAAvF,GAAA,EAAqBA,EAAA8D,EAAAqoB,WAAAvqB,OAA6B5B,IAClD8D,EAAAqoB,WAAAnsB,GAAAmF,YAIAuR,IACA/W,KAAA4F,GAAA,uBACA,OAAAvF,GAAA,EAAuBA,EAAA8D,EAAAqoB,WAAAvqB,OAA6B5B,IACpD8D,EAAAqoB,WAAAnsB,GAAA0W,SAIA/W,KAAA4F,GAAA,0BACA,OAAAvF,GAAA,EAAuBA,EAAA8D,EAAAqoB,WAAAvqB,OAA6B5B,IACpD8D,EAAAqoB,WAAAnsB,GAAA0W,SAIA/W,KAAA4F,GAAA,yBACA,OAAAvF,GAAA,EAAuBA,EAAA8D,EAAAqoB,WAAAvqB,OAA6B5B,IACpD8D,EAAAqoB,WAAAnsB,GAAA0W,MAAA,KAIA/W,KAAA4F,GAAA,+BACA,OAAAvF,GAAA,EAAuBA,EAAA8D,EAAAqoB,WAAAvqB,OAA6B5B,IACpD8D,EAAAqoB,WAAAnsB,GAAA0W,MAAA,SAKA/W,KAAA4F,GAAA,qBACAzB,EAAA4sB,uBAIA9X,EAAA1X,UAAAuvB,iBAAA,SAAAva,GACAvW,KAAA4W,QAAA7L,YAAAwL,IAGA0C,EAAA1X,UAAAwvB,kBAAA,WACA,OAAA1wB,GAAA,EAAmBA,EAAAL,KAAAwsB,WAAAvqB,OAA4B5B,IAC/CL,KAAAwsB,WAAAnsB,GAAAoG,YAgrCAwS,GAp2BA,SAAAA,GACAA,EAAA1X,UAAA+kB,cAAA,WAEAtmB,KAAA0M,QAAAuQ,UAAAsC,IAGAtG,EAAA1X,UAAA4pB,eAAA,WACA,GAAA6F,GAAAhxB,KAAA0M,QAAAmR,gBACAoT,EAAAD,EAAAnB,UACAA,MAAAhpB,KAAAoqB,EAAA,GAAAA,EACAC,EAAAF,EAAAhN,KACAA,MAAAnd,KAAAqqB,EAAA,GAAAA,CAIA,SAAAlxB,KAAA2hB,aAAAxC,GAAAnf,KAAA4Q,EAAAif,KAIA7vB,KAAA+mB,UACA/mB,KAAA+mB,SAAA,EACA/mB,KAAAihB,QAAA,gBAEAjhB,KAAA6hB,SAAA7hB,KAAA2Q,EAAAqT,EAAAhkB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,QAEA1c,KAAA+mB,UAGA9N,EAAA1X,UAAA4vB,eAAA,WACAnxB,KAAA+mB,SAAA,EACA/mB,KAAA+jB,cAAA/jB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,SAGAzD,EAAA1X,UAAA6vB,aAAA,WACA,GAAA1J,KAAA9gB,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,KAAAA,UAAA,EAEA5G,MAAA0M,QAAAmR,gBAAA6J,EACA1nB,KAAAsmB,iBAGArN,EAAA1X,UAAA8vB,cAAA,WACArxB,KAAA0M,QAAAmR,iBAAA,GAGA5E,EAAA1X,UAAA+vB,oBAAA,WACA,GAAAC,GAAAvxB,KAAA0M,QAAAmR,gBACA2T,EAAAD,EAAA1B,UACAA,MAAAhpB,KAAA2qB,EAAA,GAAAA,EACAC,EAAAF,EAAAvN,KACAA,MAAAnd,KAAA4qB,EAAA,GAAAA,CAGAzxB,MAAA+mB,UAGA/mB,KAAA+mB,SAAA,EAEA/mB,KAAA6hB,SAAA7hB,KAAA2Q,EAAAkf,GACA7vB,KAAAihB,QAAA,eACAjhB,KAAA6hB,SAAA7hB,KAAA2Q,EAAAqT,EAAAhkB,KAAA0M,QAAAiQ,WAAAwB,EAAAzB,WA0yBAzD,GAtyBA,SAAAA,GACAA,EAAA1X,UAAA8kB,YAAA,WAEArmB,KAAA0M,QAAAuQ,UAAAsC,GAEAvf,KAAA0xB,gBAAA,EACA1xB,KAAA2xB,gBAGA1Y,EAAA1X,UAAAowB,aAAA,WACA3xB,KAAA0xB,iBAGA1xB,KAAA0xB,gBAAA,EACA1xB,KAAA4F,GAAA,SAAA5F,KAAA4xB,eAGA3Y,EAAA1X,UAAAqwB,YAAA,SAAAvF,GACA,GAAAloB,GAAAnE,KAEA6xB,EAAA7xB,KAAA0M,QAAAoR,WAAA+R,UACAA,MAAAhpB,KAAAgrB,EAAA,EAAAA,CAEA7xB,MAAAiqB,mBAAA/K,GAAAmN,EAAAzb,GAAA5Q,KAAAmiB,WAAA0N,IAEA7vB,KAAAquB,KAAA,uBACAlqB,EAAAutB,gBAAA,IAEA1xB,KAAAihB,QAAA,aACAjhB,KAAAuuB,IAAA,SAAAvuB,KAAA4xB,eAIA3Y,EAAA1X,UAAAuwB,aAAA,WACA,GAAAptB,GAAA1E,IAEAA,MAAA0xB,eACA1xB,KAAAquB,KAAA,uBACA3pB,EAAAitB,iBAGA3xB,KAAA2xB,gBAIA1Y,EAAA1X,UAAAwwB,WAAA,WACA,GAAArK,KAAA9gB,UAAA3E,OAAA,OAAA4E,KAAAD,UAAA,KAAAA,UAAA,EAEA5G,MAAA0M,QAAAoR,WAAA4J,EACA1nB,KAAAqmB,eAGApN,EAAA1X,UAAAywB,YAAA,WACAhyB,KAAA0M,QAAAoR,YAAA,EACA9d,KAAA0xB,iBAGA1xB,KAAA0xB,gBAAA,EACA1xB,KAAAuuB,IAAA,SAAAvuB,KAAA4xB,gBA6uBA3Y,GAzuBA,SAAAA,GACAA,EAAA1X,UAAAilB,gBAAA,WACA,GAAAriB,GAAAnE,IAEAA,MAAAiyB,uBAAA5gB,GAEArR,KAAA4F,GAAA,qBACAqZ,aAAA9a,EAAA+tB,iBACAjT,aAAA9a,EAAAguB,oBACAhuB,EAAA8tB,uBAAAtgB,KAGA3R,KAAAoyB,qBAAA,GAGAnZ,EAAA1X,UAAA0wB,uBAAA,SAAAzP,GACAA,EAAAxiB,KAAA4W,QAAA,QAAA5W,MACAwiB,EAAAxiB,KAAA4W,QAAA,aAAA5W,MACAwiB,EAAAxiB,KAAA4W,QAAA,iBAAA5W,OAGAiZ,EAAA1X,UAAA4nB,cAAA,SAAAlW,GACA,GAAAvO,GAAA1E,IAEA,IAAAA,KAAAkpB,QAAA,CAGAjW,EAAAiK,iBAEAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,kBAGAhe,KAAAoyB,qBACApyB,KAAAihB,QAAA,eAEAjhB,KAAAoyB,qBAAA,CAEA,IAAAC,GAAAryB,KAAA0M,QAAAqR,WACAuU,EAAAD,EAAAld,MACAA,MAAAtO,KAAAyrB,EAAA,GAAAA,EACAC,EAAAF,EAAAG,OACAA,MAAA3rB,KAAA0rB,KACAE,EAAAJ,EAAAK,SACAA,MAAA7rB,KAAA4rB,EAAA,IAAAA,CAGAxT,cAAAjf,KAAAkyB,iBACAlyB,KAAAkyB,gBAAAnZ,WAAA,WACArU,EAAAgI,QAAAkR,MAAA8U,GACAhuB,EAAAuc,QAAA,aACAtQ,EAAAjM,EAAAiM,EACAC,EAAAlM,EAAAkM,IAGAlM,EAAA0tB,qBAAA,GACK,IAEL,IAAAO,OAAA,GACAC,MAAA,EAEA,YACA,cAAA3f,GACA,IAAAA,EAAA4f,WACAF,GAAA1f,EAAAiO,OAAA/L,EACAyd,GAAA3f,EAAAkO,OAAAhM,IAEAwd,GAAA1f,EAAAiO,OACA0R,GAAA3f,EAAAkO,OAEA,MACA,oBAAAlO,GACA0f,EAAA1f,EAAA0f,YAAA,IAAAxd,EACAyd,EAAA3f,EAAA2f,YAAA,IAAAzd,CACA,MACA,mBAAAlC,GACA0f,EAAAC,EAAA3f,EAAA6f,WAAA,IAAA3d,CACA,MACA,eAAAlC,GACA0f,EAAAC,GAAA3f,EAAA8f,OAAA,EAAA5d,CACA,MACA,SACA,OAGA,GAAAmB,GAAAkc,GAAA,GACAG,IAAArc,EACAsc,GAAAtc,EAEAtW,KAAA8hB,oBACA6Q,EAAAC,EACAA,EAAA,EAGA,IAAAxR,OAAA,GACAC,MAAA,EACA,IAAArhB,KAAA0M,QAAAkR,KAiBA,MAhBAwD,GAAAphB,KAAA4hB,YAAAtO,MACA+N,EAAArhB,KAAA4hB,YAAArO,MAEAof,EAAA,EACAvR,IACOuR,EAAA,GACPvR,IAGAwR,EAAA,EACAvR,IACOuR,EAAA,GACPvR,QAGArhB,MAAA2vB,UAAAvO,EAAAC,EAIAD,GAAAphB,KAAA2Q,EAAAE,KAAAiF,MAAA9V,KAAA+hB,oBAAA4Q,EAAA,GACAtR,EAAArhB,KAAA4Q,EAAAC,KAAAiF,MAAA9V,KAAA8hB,kBAAA8Q,EAAA,GAEA5yB,KAAAgqB,iBAAAhqB,KAAA0hB,WAAAiR,EAAA,KAAAA,EAAA,MACA3yB,KAAAiqB,iBAAAjqB,KAAA2hB,WAAAiR,EAAA,KAAAA,EAAA,MAEAxR,EAAAphB,KAAAkoB,WACA9G,EAAAphB,KAAAkoB,WACK9G,EAAAphB,KAAAuiB,aACLnB,EAAAphB,KAAAuiB,YAGAlB,EAAArhB,KAAAmoB,WACA9G,EAAArhB,KAAAmoB,WACK9G,EAAArhB,KAAAmiB,aACLd,EAAArhB,KAAAmiB,WAGA,IAAA6Q,GAAAhzB,KAAA4Q,IAAAyQ,CACArhB,MAAA6hB,SAAAT,EAAAC,EAAAqR,EAAAvU,EAAAC,OACApe,KAAAihB,QAAA,UACAtQ,EAAA3Q,KAAA2Q,EACAC,EAAA5Q,KAAA4Q,IAEAqO,aAAAjf,KAAAmyB,oBACAa,IACAhzB,KAAAmyB,mBAAApZ,WAAA,WACArU,EAAAuc,QAAA,aACAtQ,EAAAjM,EAAAiM,EACAC,EAAAlM,EAAAkM,KAEO8hB,OAulBPzZ,GAllBA,SAAAA,GACAA,EAAA1X,UAAAklB,UAAA,WACA,GAAAwM,GAAAjzB,KAAA0M,QAAAuR,KACAiV,EAAAD,EAAApe,MACAA,MAAAhO,KAAAqsB,EAAA,EAAAA,EACAC,EAAAF,EAAApd,IACAA,MAAAhP,KAAAssB,EAAA,EAAAA,EACAC,EAAAH,EAAArd,IACAA,MAAA/O,KAAAusB,EAAA,EAAAA,CAEApzB,MAAAimB,MAAApV,KAAAgF,IAAAhF,KAAA+E,IAAAf,EAAAgB,GAAAD,GACA5V,KAAA4lB,SAAA5lB,KAAAimB,OACAjmB,KAAAkZ,cAAAlI,EAAAwK,iBAAA,OAGAvC,EAAA1X,UAAA8xB,QAAA,SAAApN,EAAAqN,EAAAC,EAAAlG,GACArtB,KAAA8oB,QAAA,CAEA,IAAA5C,GAAAD,GAAAoH,GAAArtB,KAAAimB,MACAjmB,MAAA4lB,SAAAK,GAEAjmB,KAAAwF,SAEA,IAAA4b,GAAAvQ,KAAAiF,MAAA9V,KAAAmc,QAAAmX,EAAAtzB,KAAAupB,YAAArD,EAAA,IACA7E,EAAAxQ,KAAAiF,MAAA9V,KAAAoc,QAAAmX,EAAAvzB,KAAAwpB,YAAAtD,EAAA,GAEA9E,GAAAphB,KAAAkoB,WACA9G,EAAAphB,KAAAkoB,WACK9G,EAAAphB,KAAAuiB,aACLnB,EAAAphB,KAAAuiB,YAGAlB,EAAArhB,KAAAmoB,WACA9G,EAAArhB,KAAAmoB,WACK9G,EAAArhB,KAAAmiB,aACLd,EAAArhB,KAAAmiB,YAGAniB,KAAA2Q,IAAAyQ,GAAAphB,KAAA4Q,IAAAyQ,GACArhB,KAAA6hB,SAAAT,EAAAC,EAAArhB,KAAA0M,QAAAiQ,YAGA3c,KAAA8oB,QAAA,GAGA7P,EAAA1X,UAAAiyB,OAAA,SAAAvN,EAAAtV,EAAAC,GACA,GAAA6iB,GAAAthB,EAAAnS,KAAA4W,SACA9E,EAAA2hB,EAAA3hB,KACAC,EAAA0hB,EAAA1hB,IAEAuhB,EAAA3iB,EAAAmB,EAAA9R,KAAA2Q,EACA4iB,EAAA3iB,EAAAmB,EAAA/R,KAAA4Q,CACA5Q,MAAAqzB,QAAApN,EAAAqN,EAAAC,IAGAta,EAAA1X,UAAAqnB,WAAA,SAAA3V,GACA,GAAAygB,GAAAzgB,EAAAyN,QAAA,GACAiT,EAAA1gB,EAAAyN,QAAA,GACAQ,EAAArQ,KAAAuE,IAAAse,EAAApgB,MAAAqgB,EAAArgB,OACA6N,EAAAtQ,KAAAuE,IAAAse,EAAAngB,MAAAogB,EAAApgB,MAEAvT,MAAA4zB,cAAAljB,EAAAwQ,EAAAC,GACAnhB,KAAAqtB,WAAArtB,KAAAimB,KAEA,IAAA4N,GAAA1hB,EAAAnS,KAAA4W,SACA9E,EAAA+hB,EAAA/hB,KACAC,EAAA8hB,EAAA9hB,GAEA/R,MAAAszB,QAAAziB,KAAAuE,IAAAse,EAAApgB,MAAAqgB,EAAArgB,OAAA,EAAAxB,EAAA9R,KAAA2Q,EACA3Q,KAAAuzB,QAAA1iB,KAAAuE,IAAAse,EAAAngB,MAAAogB,EAAApgB,OAAA,EAAAxB,EAAA/R,KAAA4Q,EAEA5Q,KAAAihB,QAAA,cAGAhI,EAAA1X,UAAAsnB,MAAA,SAAA5V,GACA,GAAAjT,KAAAkpB,UAAAlpB,KAAAsoB,WAAA3M,EAAA1I,EAAAzQ,QAAAxC,KAAA2gB,UAAA,CAIA3gB,KAAA0M,QAAAwQ,gBACAjK,EAAAiK,iBAGAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,iBAGA,IAAA0V,GAAAzgB,EAAAyN,QAAA,GACAiT,EAAA1gB,EAAAyN,QAAA,GACAQ,EAAArQ,KAAAuE,IAAAse,EAAApgB,MAAAqgB,EAAArgB,OACA6N,EAAAtQ,KAAAuE,IAAAse,EAAAngB,MAAAogB,EAAApgB,OACA2B,EAAAxE,EAAAwQ,EAAAC,GACA8E,EAAA/Q,EAAAlV,KAAA4zB,cAAA5zB,KAAAqtB,UAEArtB,MAAA8oB,QAAA,CAEA,IAAAgL,GAAA9zB,KAAA0M,QAAAuR,KACA8V,EAAAD,EAAAje,IACAA,MAAAhP,KAAAktB,EAAA,EAAAA,EACAC,EAAAF,EAAAle,IACAA,MAAA/O,KAAAmtB,EAAA,EAAAA,CAGA/N,GAAApQ,EACAoQ,EAAA,GAAApQ,EAAAhF,KAAAojB,IAAA,EAAAhO,EAAApQ,GACKoQ,EAAArQ,IACLqQ,EAAA,EAAArQ,EAAA/E,KAAAojB,IAAA,GAAAre,EAAAqQ,GAGA,IAAAC,GAAAD,EAAAjmB,KAAAqtB,WAEA1c,EAAA3Q,KAAAmc,QAAAnc,KAAAszB,QAAAtzB,KAAAupB,YAAArD,EAAA,GACAtV,EAAA5Q,KAAAoc,QAAApc,KAAAuzB,QAAAvzB,KAAAwpB,YAAAtD,EAAA,EAEAlmB,MAAA4lB,SAAAK,GAEAjmB,KAAA6hB,SAAAlR,EAAAC,EAAA,KAGAqI,EAAA1X,UAAAwnB,SAAA,SAAA9V,GACA,GAAAjT,KAAAkpB,UAAAlpB,KAAAsoB,WAAA3M,EAAA1I,EAAAzQ,QAAAxC,KAAA2gB,UAAA,CAIA3gB,KAAA0M,QAAAwQ,gBACAjK,EAAAiK,iBAGAld,KAAA0M,QAAAsR,iBACA/K,EAAA+K,kBAGAhe,KAAAwH,gBAAA,EACAxH,KAAAktB,aAAA,EACAltB,KAAA2gB,UAAA,CAEA,IAAAuT,GAAAl0B,KAAA0M,QAAAuR,KACAkW,EAAAD,EAAAre,IACAA,MAAAhP,KAAAstB,EAAA,EAAAA,EACAC,EAAAF,EAAAte,IACAA,MAAA/O,KAAAutB,EAAA,EAAAA,EAGAnO,EAAAjmB,KAAAimB,MAAArQ,IAAA5V,KAAAimB,MAAApQ,IAAA7V,KAAAimB,KAEAjmB,MAAAqzB,QAAApN,EAAAjmB,KAAAszB,QAAAtzB,KAAAuzB,QAAAvzB,KAAAqtB,YAEArtB,KAAAihB,QAAA,cAgcAhI,GA9aA,SAAAA,GACAA,EAAA1X,UAAAmlB,cAAA,WACA1mB,KAAA0M,QAAAuQ,UAAA,EACAjd,KAAAmiB,YAAAO,GACA1iB,KAAA4iB,iBAAA,GAAAhL,GAAA5X,UAAA0M,QAAAwR,YA2aAjF,GAEAA,EAAAob,QAAA,SAEe1yB,EAAA,KZ0+BT,SAAU/B,EAAQ+B,EAAqBzB,GAE7C,Yah3IA,IAAAo0B,GAAAp0B,EAAA,EAEeyB,GAAA,GAAC4yB,YAAM,EAAG,IAAI,EAAM,KAAMA,YAAM,EAAG,IAAI,EAAM,KAAMA,YAAM,EAAG,IAAI,EAAM,Obs3I/E,SAAU30B,EAAQ+B,EAAqBzB,GAE7C,Ycj3IA,SAASs0B,GAAY5jB,GACnB,MAAQA,GAAI,GAAM,IAAOA,EAAI,KAAQ,GAAKA,EAAI,KAAQ,GAGxD,QAAS6jB,GAAS7jB,EAAGpQ,GACnBoQ,EAAIzN,OAAOyN,GACXpQ,EAAI2C,OAAO3C,EACX,IAAIk0B,GAAS,IACb,QAAQl0B,GACN,IAAK,GACHk0B,EAASF,EAAW5jB,GAAK,GAAK,EAAI,MACpC,KAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,IAAK,IACH8jB,EAAS,EAAI,MACf,KAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,IACL,QACEA,EAAS,GAGb,MADaH,aAAM,EAAGG,GAAQ,EAAOC,GACzBvwB,IAAI,SAACwwB,GACf,OAASrwB,MAAOqwB,KArCpB10B,EAAAQ,EAAAiB,EAAA,qBAAAkzB,KAAA30B,EAAAQ,EAAAiB,EAAA,qBAAAmzB,IAAA,IAAAR,GAAAp0B,EAAA,GAOMy0B,EAAW,IAkCXI,EAAWR,YAvCE,KACF,MAsC4B,EApC3B,KAqCZS,EAAYT,YAAM,EAAG,IAAI,EApCZ,KAsCbU,EAAmBD,EAAU5wB,IAAI,SAAC8wB,GACtC,OACE3wB,MAAO2wB,EACPzvB,eAIEqvB,EAAWC,EAAS3wB,IAAI,SAAC+wB,GAC7B,GAAM9wB,IACJE,MAAO4wB,EACP1vB,SAAUwvB,EAAiBjuB,QAK7B,OAHA3C,GAAKoB,SAASV,QAAQ,SAACmwB,GACrBA,EAAMzvB,SAAWgvB,EAAQU,EAAKnuB,MAAM,GAAI,GAAIkuB,EAAM3wB,MAAMyC,MAAM,GAAI,MAE7D3C,IAGH+wB,EAAO,GAAInlB,MACX4kB,IACFtwB,MAAU6wB,EAAKC,cA3DD,MA4Dd9wB,MAAU6wB,EAAKE,WAAa,EA3Db,MA4Df/wB,SAAU6wB,EAAKG,UAAYZ,Kdi4IzB,SAAU/0B,EAAQ+B,EAAqBzB,GAE7C,Yer8IA,IAAAuO,GAAA,WAA0B,GAAA+mB,GAAAx1B,KAAay1B,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,CAAwB,OAAAE,GAAA,OAAAA,EAAA,cAAkCE,OAAOl1B,KAAA,UAAeg1B,EAAA,OAAYG,aAAan1B,KAAA,OAAAo1B,QAAA,SAAAxxB,MAAAixB,EAAA,QAAAQ,WAAA,YAAsEC,YAAA,OAAArwB,IAAyB6N,MAAA+hB,EAAAnwB,UAAkBmwB,EAAAU,GAAA,KAAAP,EAAA,cAAiCE,OAAOl1B,KAAA,WAAgBg1B,EAAA,OAAYG,aAAan1B,KAAA,OAAAo1B,QAAA,SAAAxxB,MAAAixB,EAAA,QAAAQ,WAAA,YAAsEC,YAAA,WAAuBN,EAAA,OAAYM,YAAA,iBAA2BN,EAAA,QAAaM,YAAA,YAAAjlB,OAAgCmlB,MAAAX,EAAAvyB,aAAyB2C,IAAM6N,MAAA+hB,EAAA7tB,UAAoB6tB,EAAAU,GAAAV,EAAA9b,GAAA8b,EAAA1yB,eAAA0yB,EAAAU,GAAA,KAAAP,EAAA,QAA0DM,YAAA,YAAAjlB,OAAgCmlB,MAAAX,EAAAxyB,cAA0B4C,IAAM6N,MAAA+hB,EAAAluB,WAAqBkuB,EAAAU,GAAAV,EAAA9b,GAAA8b,EAAA3yB,gBAAA2yB,EAAAU,GAAA,KAAAV,EAAAY,GAAA,eAAAZ,EAAAU,GAAA,KAAAP,EAAA,OAA4FM,YAAA,iBAA2BN,EAAA,OAAYM,YAAA,oBAA8BT,EAAAU,GAAA,KAAAP,EAAA,OAAwBM,YAAA,uBAAiCT,EAAAU,GAAA,KAAAP,EAAA,OAAwBU,IAAA,eAAAJ,YAAA,wBAAsDT,EAAAc,GAAAd,EAAA,oBAAApwB,EAAAd,GAA+C,MAAAqxB,GAAA,OAAiBplB,IAAAjM,EAAA2xB,YAAA,iBAAqCN,EAAA,MAAWM,YAAA,gBAA2BT,EAAAc,GAAA,WAAAjyB,EAAAC,GAAqC,MAAAqxB,GAAA,MAAgBplB,IAAAjM,EAAA2xB,YAAA,eAAmCT,EAAAU,GAAAV,EAAA9b,GAAArV,QAAyB,OAAO,cAC1wCqK,KACA6nB,GAAiB9nB,SAAAC,kBACF/M,GAAA","file":"vue-awesome-picker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueAwesomePicker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueAwesomePicker\"] = factory();\n\telse\n\t\troot[\"VueAwesomePicker\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueAwesomePicker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueAwesomePicker\"] = factory();\n\telse\n\t\troot[\"VueAwesomePicker\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_better_scroll__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__data_time_js__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__data_date_js__ = __webpack_require__(12);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar DATA_NORMAL = 'normal';\nvar DATA_CASCADE = 'cascade';\n\nvar TYPE_NORMAL = 'normal';\nvar TYPE_TIME = 'time';\nvar TYPE_DATE = 'date';\n\nvar TEXT_TITLE = '';\nvar TEXT_CONFIRM = '确定';\nvar TEXT_CANCEL = '取消';\n\nvar COLOR_TITLE = '#000000';\nvar COLOR_CONFIRM = '#42b983';\nvar COLOR_CANCEL = '#999999';\n\nvar EVENT_CONFIRM = 'confirm';\nvar EVENT_CANCEL = 'cancel';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  name: 'awesome-picker',\n  props: {\n    data: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    anchor: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    type: {\n      type: String,\n      default: TYPE_NORMAL\n    },\n    textTitle: {\n      type: String,\n      default: TEXT_TITLE\n    },\n    textConfirm: {\n      type: String,\n      default: TEXT_CONFIRM\n    },\n    textCancel: {\n      type: String,\n      default: TEXT_CANCEL\n    },\n    colorTitle: {\n      type: String,\n      default: COLOR_TITLE\n    },\n    colorConfirm: {\n      type: String,\n      default: COLOR_CONFIRM\n    },\n    colorCancel: {\n      type: String,\n      default: COLOR_CANCEL\n    },\n    swipeTime: {\n      type: Number,\n      default: 1800\n    }\n  },\n  data: function data() {\n    return {\n      display: false,\n      dataChange: false,\n      pickerData: this._dataGetter(),\n      pickerAnchor: this._anchorGetter(),\n      wheels: []\n    };\n  },\n\n  watch: {\n    data: function data() {\n      this._setPickerData();\n    }\n  },\n  computed: {\n    proxyData: function proxyData() {\n      return this._dataGetter();\n    },\n    proxyAnchor: function proxyAnchor() {\n      return this._anchorGetter();\n    },\n    dataType: function dataType() {\n      return !Array.isArray(this.proxyData[0]) ? DATA_CASCADE : DATA_NORMAL;\n    }\n  },\n  methods: {\n    _dataGetter: function _dataGetter() {\n      var data = null;\n      switch (this.type) {\n        case TYPE_TIME:\n          data = __WEBPACK_IMPORTED_MODULE_1__data_time_js__[\"a\" /* default */];break;\n        case TYPE_DATE:\n          data = __WEBPACK_IMPORTED_MODULE_2__data_date_js__[\"b\" /* dateData */];break;\n        case TYPE_NORMAL:\n        default:\n          data = this.data;break;\n      }\n      return [].concat(_toConsumableArray(data));\n    },\n    _anchorGetter: function _anchorGetter() {\n      var _this = this;\n\n      var anchor = [];\n      if (this.anchor.length) {\n        anchor = this.anchor;\n      } else {\n        switch (this.type) {\n          case TYPE_DATE:\n            anchor = __WEBPACK_IMPORTED_MODULE_2__data_date_js__[\"a\" /* dateAnchor */];break;\n          default:\n            anchor = this.anchor;break;\n        }\n      }\n      anchor = anchor.map(function (item, i) {\n        var index = 0;\n        if (item.index) {\n          index = item.index;\n        } else if (item.value) {\n          index = _this.pickerData && _this.pickerData[i] && _this.pickerData[i].indexOf(item.value) > -1 ? _this.pickerData[i].indexOf(item.value) : 0;\n        } else {\n          index = item;\n        }\n        return index;\n      });\n      return [].concat(_toConsumableArray(anchor));\n    },\n    show: function show() {\n      var _this2 = this;\n\n      this.display = true;\n      if (!this.wheels.length || this.dataChange) {\n        this.dataType === DATA_CASCADE && this._updatePickerData();\n        this.$nextTick(function () {\n          var wheelWrapper = _this2.$refs.wheelWrapper;\n          _this2.pickerData.forEach(function (item, index) {\n            _this2._createWheel(wheelWrapper, index).enable();\n          });\n          _this2._wheelToAnchor(_this2.proxyAnchor);\n\n          _this2.dataChange && _this2._destroyExtraWheels();\n          _this2.dataChange = false;\n        });\n      } else {\n        this.wheels.forEach(function (wheel) {\n          wheel.enable();\n        });\n      }\n    },\n    hide: function hide() {\n      this.wheels.forEach(function (wheel) {\n        wheel.disable();\n      });\n      this.display = false;\n    },\n    _createWheel: function _createWheel(wheelWrapper, i) {\n      var _this3 = this;\n\n      if (!this.wheels[i]) {\n        var wheel = this.wheels[i] = new __WEBPACK_IMPORTED_MODULE_0_better_scroll__[\"a\" /* default */](wheelWrapper.children[i], {\n          wheel: {\n            selectedIndex: 0,\n            rotate: 25\n          },\n          swipeTime: this.swipeTime\n        });\n        this._wheelToAnchor(this.proxyAnchor);\n        wheel.on('scrollEnd', function () {\n          _this3._cascadePickerChange(i);\n        });\n      } else {\n        this.wheels[i].refresh();\n      }\n      return this.wheels[i];\n    },\n    _cascadePickerChange: function _cascadePickerChange(i) {\n      if (this.dataType !== DATA_CASCADE) {\n        return;\n      }\n      var newIndex = this._getCurrentValue()[i].index;\n      if (newIndex !== this.pickerAnchor[i]) {\n        this.pickerAnchor.splice(i, 1, newIndex);\n        this._updatePickerDataChange(i + 1);\n      }\n    },\n    _wheelToAnchor: function _wheelToAnchor(data) {\n      this.wheels.forEach(function (wheel, i) {\n        wheel.wheelTo(data[i] || 0);\n      });\n    },\n    _getCurrentValue: function _getCurrentValue() {\n      var _this4 = this;\n\n      var value = [];\n      this.wheels.forEach(function (wheel, i) {\n        var j = wheel.getSelectedIndex();\n        value.push({\n          index: j,\n          value: _this4.pickerData[i][j]\n        });\n      });\n      return value;\n    },\n    _setPickerData: function _setPickerData() {\n      var _this5 = this;\n\n      this.pickerData = this._dataGetter();\n      this.pickerAnchor = this._anchorGetter();\n      if (this.display) {\n        if (this.dataType == DATA_CASCADE) {\n          this._updatePickerData();\n        }\n        this.$nextTick(function () {\n          var wheelWrapper = _this5.$refs.wheelWrapper;\n          _this5.pickerData.forEach(function (item, i) {\n            _this5._createWheel(wheelWrapper, i);\n          });\n          _this5._destroyExtraWheels();\n          _this5._wheelToAnchor(_this5.proxyAnchor);\n        });\n      } else {\n        this.dataChange = true;\n      }\n    },\n    _destroyExtraWheels: function _destroyExtraWheels() {\n      var dataLength = this.pickerData.length;\n      if (dataLength < this.wheels.length) {\n        var extraWheels = this.wheels.splice(dataLength);\n        extraWheels.forEach(function (wheel) {\n          wheel.destroy();\n        });\n      }\n    },\n    _updatePickerData: function _updatePickerData() {\n      var _this6 = this;\n\n      var wheelIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      this.pickerAnchor = this._anchorGetter();\n      var data = [].concat(_toConsumableArray(this.proxyData));\n      var i = 0;\n      wheelIndex = 0;\n      while (data) {\n        if (i >= wheelIndex) {\n          (function () {\n            var wheelData = [];\n            data.forEach(function (item) {\n              wheelData.push(item.value);\n            });\n            _this6.pickerData.splice(i, 1, wheelData);\n            _this6.pickerAnchor[i] = wheelIndex === 0 ? _this6.pickerAnchor[i] < data.length ? _this6.pickerAnchor[i] || 0 : 0 : _this6._reloadWheel(i, wheelData);\n          })();\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null;\n        i++;\n      }\n      this.pickerData = this.pickerData.slice(0, i);\n    },\n    _updatePickerDataChange: function _updatePickerDataChange() {\n      var _this7 = this;\n\n      var wheelIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      var data = [].concat(_toConsumableArray(this.proxyData));\n      var i = 0;\n      wheelIndex = 0;\n      while (data) {\n        if (i >= wheelIndex) {\n          (function () {\n            var wheelData = [];\n            data.forEach(function (item) {\n              wheelData.push(item.value);\n            });\n            _this7.pickerData.splice(i, 1, wheelData);\n            _this7.pickerAnchor[i] = wheelIndex === 0 ? _this7.pickerAnchor[i] < data.length ? _this7.pickerAnchor[i] || 0 : 0 : _this7._reloadWheel(i, wheelData);\n          })();\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null;\n        i++;\n      }\n      this.pickerData = this.pickerData.slice(0, i);\n    },\n    _reloadWheel: function _reloadWheel(index, data) {\n      var _this8 = this;\n\n      var wheelWrapper = this.$refs.wheelWrapper;\n      var scroll = wheelWrapper.children[index].querySelector('.wheel-scroll');\n      var wheel = this.wheels ? this.wheels[index] : false;\n      var dist = 0;\n      if (scroll && wheel) {\n        this.$set(this.pickerData, index, data);\n        this.pickerAnchor[index] = dist;\n        this.$nextTick(function () {\n          wheel = _this8._createWheel(wheelWrapper, index);\n          wheel.wheelTo(dist);\n        });\n      }\n      return dist;\n    },\n    confirm: function confirm() {\n      var isInTransition = this.wheels.some(function (wheel) {\n        return wheel.isInTransition;\n      });\n      if (isInTransition) {\n        return;\n      }\n      var selectedValues = this._getCurrentValue();\n      this.$emit(EVENT_CONFIRM, selectedValues);\n      this.hide();\n    },\n    cancel: function cancel() {\n      this.$emit(EVENT_CANCEL);\n      this.hide();\n    }\n  }\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (n, m) {\n  var polyfill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var unit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n\n  var arr = [];\n  for (var i = n; i <= m; i++) {\n    var value = (polyfill && i < 10 ? '0' + i : i) + unit;\n    arr.push(value);\n  }\n  return arr;\n});\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__ = __webpack_require__(3);\n\nvar picker = {\n  install: function install(Vue) {\n    Vue.component(__WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__[\"a\" /* default */].name, __WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__[\"a\" /* default */]);\n  }\n};\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(picker);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (picker);\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__ = __webpack_require__(0);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_220e6364_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__ = __webpack_require__(13);\nfunction injectStyle (ssrContext) {\n  __webpack_require__(4)\n}\nvar normalizeComponent = __webpack_require__(9)\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-220e6364\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__[\"a\" /* default */],\n  __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_220e6364_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__[\"a\" /* default */],\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(5);\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar update = __webpack_require__(7)(\"67476e7c\", content, true, {});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(6)(false);\n// imports\n\n\n// module\nexports.push([module.i, \".fade-enter[data-v-220e6364],.fade-leave-to[data-v-220e6364]{opacity:0}.fade-enter-active[data-v-220e6364],.fade-leave-active[data-v-220e6364]{transition:all .3s ease}.slide-enter[data-v-220e6364],.slide-leave-to[data-v-220e6364]{opacity:.5;transform:translate3d(0,270px,0)}.slide-enter-active[data-v-220e6364],.slide-leave-active[data-v-220e6364]{transition:all .3s ease}.mask[data-v-220e6364]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:rgba(0,0,0,.2)}.picker[data-v-220e6364]{position:fixed;left:0;right:0;bottom:0;height:270px;z-index:10000;background:#fff}.picker-title[data-v-220e6364]{position:relative;height:44px;color:#333}.picker-title[data-v-220e6364]:after{content:\\\"\\\";display:block;border-bottom:1px solid #ebebeb;left:0;right:0;transform:scaleY(.5)}.picker-title span[data-v-220e6364]{position:absolute;height:44px;line-height:44px;padding:0 12px;font-size:14px}.picker-title .pt-cancel[data-v-220e6364]{left:0;color:#999}.picker-title .pt-submit[data-v-220e6364]{right:0;color:#42b983}.picker-title h4[data-v-220e6364]{margin:0;font-size:16px;font-weight:400;height:44px;line-height:44px;text-align:center}.picker-panel[data-v-220e6364]{position:relative;height:226px;padding:24px 12px;box-sizing:border-box}.picker-panel .picker-mask-bottom[data-v-220e6364],.picker-panel .picker-mask-top[data-v-220e6364]{position:absolute;left:0;right:0;height:72px;background:#fff;transform:translateZ(0);z-index:1;pointer-events:none}.picker-panel .picker-mask-top[data-v-220e6364]{top:24px;background:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-top[data-v-220e6364]:after{content:\\\"\\\";display:block;position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-panel .picker-mask-bottom[data-v-220e6364]{bottom:24px;background:linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-bottom[data-v-220e6364]:before{content:\\\"\\\";display:block;position:absolute;left:0;right:0;top:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-wheel-wrapper[data-v-220e6364]{display:flex;align-items:stretch;height:100%}.picker-wheel-wrapper .picker-wheel[data-v-220e6364]{flex:1;overflow:hidden}.picker-wheel-wrapper .wheel-scroll[data-v-220e6364]{margin-top:72px}.picker-wheel-wrapper .wheel-scroll .wheel-item[data-v-220e6364]{height:34px;line-height:34px;font-size:17px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\nvar listToStyles = __webpack_require__(8)\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nmodule.exports = function (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nmodule.exports = function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n  rawScriptExports,\n  compiledTemplate,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier /* server only */\n) {\n  var esModule\n  var scriptExports = rawScriptExports = rawScriptExports || {}\n\n  // ES6 modules interop\n  var type = typeof rawScriptExports.default\n  if (type === 'object' || type === 'function') {\n    esModule = rawScriptExports\n    scriptExports = rawScriptExports.default\n  }\n\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (compiledTemplate) {\n    options.render = compiledTemplate.render\n    options.staticRenderFns = compiledTemplate.staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = injectStyles\n  }\n\n  if (hook) {\n    var functional = options.functional\n    var existing = functional\n      ? options.render\n      : options.beforeCreate\n\n    if (!functional) {\n      // inject component registration as beforeCreate hook\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    } else {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return existing(h, context)\n      }\n    }\n  }\n\n  return {\n    esModule: esModule,\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/*!\n * better-normal-scroll v1.15.1\n * (c) 2016-2019 ustbhuangyi\n * Released under the MIT License.\n */\n// As of V8 6.6, depending on the size of the array, this is anywhere\n// between 1.5-10x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++) {\n    list[index] = list[index + 1];\n  }\n\n  list.pop();\n}\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nfunction eventMixin(BScroll) {\n  BScroll.prototype.on = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    if (!this._events[type]) {\n      this._events[type] = [];\n    }\n\n    this._events[type].push([fn, context]);\n  };\n\n  BScroll.prototype.once = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    function magic() {\n      this.off(type, magic);\n\n      fn.apply(context, arguments);\n    }\n    // To expose the corresponding function method in order to execute the off method\n    magic.fn = fn;\n\n    this.on(type, magic);\n  };\n\n  BScroll.prototype.off = function (type, fn) {\n    var _events = this._events[type];\n    if (!_events) {\n      return;\n    }\n\n    var count = _events.length;\n    while (count--) {\n      if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {\n        spliceOne(_events, count);\n      }\n    }\n  };\n\n  BScroll.prototype.trigger = function (type) {\n    var events = this._events[type];\n    if (!events) {\n      return;\n    }\n\n    var len = events.length;\n    var eventsCopy = [].concat(toConsumableArray(events));\n    for (var i = 0; i < len; i++) {\n      var event = eventsCopy[i];\n\n      var _event = slicedToArray(event, 2),\n          fn = _event[0],\n          context = _event[1];\n\n      if (fn) {\n        fn.apply(context, [].slice.call(arguments, 1));\n      }\n    }\n  };\n}\n\n// ssr support\nvar inBrowser = typeof window !== 'undefined';\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\nvar isWeChatDevTools = ua && /wechatdevtools/.test(ua);\nvar isAndroid = ua && ua.indexOf('android') > 0;\n\nfunction getNow() {\n  return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();\n}\n\nfunction extend(target) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  for (var i = 0; i < rest.length; i++) {\n    var source = rest[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\n\nfunction isUndef(v) {\n  return v === undefined || v === null;\n}\n\nfunction getDistance(x, y) {\n  return Math.sqrt(x * x + y * y);\n}\n\nvar elementStyle = inBrowser && document.createElement('div').style;\n\nvar vendor = function () {\n  if (!inBrowser) {\n    return false;\n  }\n  // first pick up standard to fix #743\n  var transformNames = {\n    standard: 'transform',\n    webkit: 'webkitTransform',\n    Moz: 'MozTransform',\n    O: 'OTransform',\n    ms: 'msTransform'\n  };\n\n  for (var key in transformNames) {\n    if (elementStyle[transformNames[key]] !== undefined) {\n      return key;\n    }\n  }\n\n  return false;\n}();\n\nfunction prefixStyle(style) {\n  if (vendor === false) {\n    return false;\n  }\n\n  if (vendor === 'standard') {\n    if (style === 'transitionEnd') {\n      return 'transitionend';\n    }\n    return style;\n  }\n\n  return vendor + style.charAt(0).toUpperCase() + style.substr(1);\n}\n\nfunction addEvent(el, type, fn, capture) {\n  el.addEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction removeEvent(el, type, fn, capture) {\n  el.removeEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction offset(el) {\n  var left = 0;\n  var top = 0;\n\n  while (el) {\n    left -= el.offsetLeft;\n    top -= el.offsetTop;\n    el = el.offsetParent;\n  }\n\n  return {\n    left: left,\n    top: top\n  };\n}\n\nfunction offsetToBody(el) {\n  var rect = el.getBoundingClientRect();\n\n  return {\n    left: -(rect.left + window.pageXOffset),\n    top: -(rect.top + window.pageYOffset)\n  };\n}\n\nvar cssVendor = vendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\n\nvar transform = prefixStyle('transform');\nvar transition = prefixStyle('transition');\n\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\n// fix issue #361\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\nvar hasTransform = transform !== false;\nvar hasTransition = inBrowser && transition in elementStyle;\n\nvar style = {\n  transform: transform,\n  transition: transition,\n  transitionTimingFunction: prefixStyle('transitionTimingFunction'),\n  transitionDuration: prefixStyle('transitionDuration'),\n  transitionDelay: prefixStyle('transitionDelay'),\n  transformOrigin: prefixStyle('transformOrigin'),\n  transitionEnd: prefixStyle('transitionEnd')\n};\n\nvar TOUCH_EVENT = 1;\nvar MOUSE_EVENT = 2;\n\nvar eventType = {\n  touchstart: TOUCH_EVENT,\n  touchmove: TOUCH_EVENT,\n  touchend: TOUCH_EVENT,\n\n  mousedown: MOUSE_EVENT,\n  mousemove: MOUSE_EVENT,\n  mouseup: MOUSE_EVENT\n};\n\nfunction getRect(el) {\n  if (el instanceof window.SVGElement) {\n    var rect = el.getBoundingClientRect();\n    return {\n      top: rect.top,\n      left: rect.left,\n      width: rect.width,\n      height: rect.height\n    };\n  } else {\n    return {\n      top: el.offsetTop,\n      left: el.offsetLeft,\n      width: el.offsetWidth,\n      height: el.offsetHeight\n    };\n  }\n}\n\nfunction preventDefaultException(el, exceptions) {\n  for (var i in exceptions) {\n    if (exceptions[i].test(el[i])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction tap(e, eventName) {\n  var ev = document.createEvent('Event');\n  ev.initEvent(eventName, true, true);\n  ev.pageX = e.pageX;\n  ev.pageY = e.pageY;\n  e.target.dispatchEvent(ev);\n}\n\nfunction click(e) {\n  var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';\n\n  var eventSource = void 0;\n  if (e.type === 'mouseup' || e.type === 'mousecancel') {\n    eventSource = e;\n  } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n    eventSource = e.changedTouches[0];\n  }\n  var posSrc = {};\n  if (eventSource) {\n    posSrc.screenX = eventSource.screenX || 0;\n    posSrc.screenY = eventSource.screenY || 0;\n    posSrc.clientX = eventSource.clientX || 0;\n    posSrc.clientY = eventSource.clientY || 0;\n  }\n  var ev = void 0;\n  var bubbles = true;\n  var cancelable = true;\n  if (typeof MouseEvent !== 'undefined') {\n    try {\n      ev = new MouseEvent(event, extend({\n        bubbles: bubbles,\n        cancelable: cancelable\n      }, posSrc));\n    } catch (e) {\n      createEvent();\n    }\n  } else {\n    createEvent();\n  }\n\n  function createEvent() {\n    ev = document.createEvent('Event');\n    ev.initEvent(event, bubbles, cancelable);\n    extend(ev, posSrc);\n  }\n\n  // forwardedTouchEvent set to true in case of the conflict with fastclick\n  ev.forwardedTouchEvent = true;\n  ev._constructed = true;\n  e.target.dispatchEvent(ev);\n}\n\nfunction dblclick(e) {\n  click(e, 'dblclick');\n}\n\nfunction prepend(el, target) {\n  if (target.firstChild) {\n    before(el, target.firstChild);\n  } else {\n    target.appendChild(el);\n  }\n}\n\nfunction before(el, target) {\n  target.parentNode.insertBefore(el, target);\n}\n\nfunction removeChild(el, child) {\n  el.removeChild(child);\n}\n\nvar DEFAULT_OPTIONS = {\n  startX: 0,\n  startY: 0,\n  scrollX: false,\n  scrollY: true,\n  freeScroll: false,\n  directionLockThreshold: 5,\n  eventPassthrough: '',\n  click: false,\n  tap: false,\n  /**\n   * support any side\n   * bounce: {\n   *   top: true,\n   *   bottom: true,\n   *   left: true,\n   *   right: true\n   * }\n   */\n  bounce: true,\n  bounceTime: 800,\n  momentum: true,\n  momentumLimitTime: 300,\n  momentumLimitDistance: 15,\n  swipeTime: 2500,\n  swipeBounceTime: 500,\n  deceleration: 0.0015,\n  flickLimitTime: 200,\n  flickLimitDistance: 100,\n  resizePolling: 60,\n  probeType: 0,\n  preventDefault: true,\n  preventDefaultException: {\n    tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/\n  },\n  HWCompositing: true,\n  useTransition: true,\n  useTransform: true,\n  bindToWrapper: false,\n  disableMouse: hasTouch,\n  disableTouch: !hasTouch,\n  observeDOM: true,\n  autoBlur: true,\n  /**\n   * for picker\n   * wheel: {\n   *   selectedIndex: 0,\n   *   rotate: 25,\n   *   adjustTime: 400\n   *   wheelWrapperClass: 'wheel-scroll',\n   *   wheelItemClass: 'wheel-item'\n   * }\n   */\n  wheel: false,\n  /**\n   * for slide\n   * snap: {\n   *   loop: false,\n   *   el: domEl,\n   *   threshold: 0.1,\n   *   stepX: 100,\n   *   stepY: 100,\n   *   speed: 400,\n   *   easing: {\n   *     style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n   *     fn: function (t) {\n   *       return t * (2 - t)\n   *     }\n   *   }\n   *   listenFlick: true\n   * }\n   */\n  snap: false,\n  /**\n   * for scrollbar\n   * scrollbar: {\n   *   fade: true,\n   *   interactive: false\n   * }\n   */\n  scrollbar: false,\n  /**\n   * for pull down and refresh\n   * pullDownRefresh: {\n   *   threshold: 50,\n   *   stop: 20\n   * }\n   */\n  pullDownRefresh: false,\n  /**\n   * for pull up and load\n   * pullUpLoad: {\n   *   threshold: 50\n   * }\n   */\n  pullUpLoad: false,\n  /**\n   * for mouse wheel\n   * mouseWheel: {\n   *   speed: 20,\n   *   invert: false,\n   *   easeTime: 300\n   * }\n   */\n  mouseWheel: false,\n  stopPropagation: false,\n  /**\n   * for zoom\n   * zoom: {\n   *   start: 1,\n   *   min: 1,\n   *   max: 4\n   * }\n   */\n  zoom: false,\n  /**\n   * for infinity\n   * infinity: {\n   *   render(item, div) {\n   *   },\n   *   createTombstone() {\n   *   },\n   *   fetch(count) {\n   *   }\n   * }\n   */\n  infinity: false,\n  /**\n   * for double click\n   * dblclick: {\n   *   delay: 300\n   * }\n   */\n  dblclick: false\n};\n\nfunction initMixin(BScroll) {\n  BScroll.prototype._init = function (options) {\n    this._handleOptions(options);\n\n    // init private custom events\n    this._events = {};\n\n    this.x = 0;\n    this.y = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n\n    this.setScale(1);\n\n    this._addDOMEvents();\n\n    this._initExtFeatures();\n\n    this._watchTransition();\n\n    if (this.options.observeDOM) {\n      this._initDOMObserver();\n    }\n\n    if (this.options.autoBlur) {\n      this._handleAutoBlur();\n    }\n\n    this.refresh();\n\n    if (!this.options.snap) {\n      this.scrollTo(this.options.startX, this.options.startY);\n    }\n\n    this.enable();\n  };\n\n  BScroll.prototype.setScale = function (scale) {\n    this.lastScale = isUndef(this.scale) ? scale : this.scale;\n    this.scale = scale;\n  };\n\n  BScroll.prototype._handleOptions = function (options) {\n    this.options = extend({}, DEFAULT_OPTIONS, options);\n\n    this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';\n\n    this.options.useTransition = this.options.useTransition && hasTransition;\n    this.options.useTransform = this.options.useTransform && hasTransform;\n\n    this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n    // If you want eventPassthrough I have to lock one of the axes\n    this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;\n    this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;\n\n    // With eventPassthrough we also need lockDirection mechanism\n    this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n    this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n    if (this.options.tap === true) {\n      this.options.tap = 'tap';\n    }\n  };\n\n  BScroll.prototype._addDOMEvents = function () {\n    var eventOperation = addEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._removeDOMEvents = function () {\n    var eventOperation = removeEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._handleDOMEvents = function (eventOperation) {\n    var target = this.options.bindToWrapper ? this.wrapper : window;\n    eventOperation(window, 'orientationchange', this);\n    eventOperation(window, 'resize', this);\n\n    if (this.options.click) {\n      eventOperation(this.wrapper, 'click', this, true);\n    }\n\n    if (!this.options.disableMouse) {\n      eventOperation(this.wrapper, 'mousedown', this);\n      eventOperation(target, 'mousemove', this);\n      eventOperation(target, 'mousecancel', this);\n      eventOperation(target, 'mouseup', this);\n    }\n\n    if (hasTouch && !this.options.disableTouch) {\n      eventOperation(this.wrapper, 'touchstart', this);\n      eventOperation(target, 'touchmove', this);\n      eventOperation(target, 'touchcancel', this);\n      eventOperation(target, 'touchend', this);\n    }\n\n    eventOperation(this.scroller, style.transitionEnd, this);\n  };\n\n  BScroll.prototype._initExtFeatures = function () {\n    if (this.options.snap) {\n      this._initSnap();\n    }\n    if (this.options.scrollbar) {\n      this._initScrollbar();\n    }\n    if (this.options.pullUpLoad) {\n      this._initPullUp();\n    }\n    if (this.options.pullDownRefresh) {\n      this._initPullDown();\n    }\n    if (this.options.wheel) {\n      this._initWheel();\n    }\n    if (this.options.mouseWheel) {\n      this._initMouseWheel();\n    }\n    if (this.options.zoom) {\n      this._initZoom();\n    }\n    if (this.options.infinity) {\n      this._initInfinite();\n    }\n  };\n\n  BScroll.prototype._watchTransition = function () {\n    if (typeof Object.defineProperty !== 'function') {\n      return;\n    }\n    var me = this;\n    var isInTransition = false;\n    var key = this.options.useTransition ? 'isInTransition' : 'isAnimating';\n    Object.defineProperty(this, key, {\n      get: function get() {\n        return isInTransition;\n      },\n      set: function set(newVal) {\n        isInTransition = newVal;\n        // fix issue #359\n        var el = me.scroller.children.length ? me.scroller.children : [me.scroller];\n        var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';\n        for (var i = 0; i < el.length; i++) {\n          el[i].style.pointerEvents = pointerEvents;\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._handleAutoBlur = function () {\n    this.on('scrollStart', function () {\n      var activeElement = document.activeElement;\n      if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n        activeElement.blur();\n      }\n    });\n  };\n\n  BScroll.prototype._initDOMObserver = function () {\n    var _this = this;\n\n    if (typeof MutationObserver !== 'undefined') {\n      var timer = void 0;\n      var observer = new MutationObserver(function (mutations) {\n        // don't do any refresh during the transition, or outside of the boundaries\n        if (_this._shouldNotRefresh()) {\n          return;\n        }\n        var immediateRefresh = false;\n        var deferredRefresh = false;\n        for (var i = 0; i < mutations.length; i++) {\n          var mutation = mutations[i];\n          if (mutation.type !== 'attributes') {\n            immediateRefresh = true;\n            break;\n          } else {\n            if (mutation.target !== _this.scroller) {\n              deferredRefresh = true;\n              break;\n            }\n          }\n        }\n        if (immediateRefresh) {\n          _this.refresh();\n        } else if (deferredRefresh) {\n          // attributes changes too often\n          clearTimeout(timer);\n          timer = setTimeout(function () {\n            if (!_this._shouldNotRefresh()) {\n              _this.refresh();\n            }\n          }, 60);\n        }\n      });\n      var config = {\n        attributes: true,\n        childList: true,\n        subtree: true\n      };\n      observer.observe(this.scroller, config);\n\n      this.on('destroy', function () {\n        observer.disconnect();\n      });\n    } else {\n      this._checkDOMUpdate();\n    }\n  };\n\n  BScroll.prototype._shouldNotRefresh = function () {\n    var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;\n\n    return this.isInTransition || this.stopFromTransition || outsideBoundaries;\n  };\n\n  BScroll.prototype._checkDOMUpdate = function () {\n    var scrollerRect = getRect(this.scroller);\n    var oldWidth = scrollerRect.width;\n    var oldHeight = scrollerRect.height;\n\n    function check() {\n      if (this.destroyed) {\n        return;\n      }\n      scrollerRect = getRect(this.scroller);\n      var newWidth = scrollerRect.width;\n      var newHeight = scrollerRect.height;\n\n      if (oldWidth !== newWidth || oldHeight !== newHeight) {\n        this.refresh();\n      }\n      oldWidth = newWidth;\n      oldHeight = newHeight;\n\n      next.call(this);\n    }\n\n    function next() {\n      var _this2 = this;\n\n      setTimeout(function () {\n        check.call(_this2);\n      }, 1000);\n    }\n\n    next.call(this);\n  };\n\n  BScroll.prototype.handleEvent = function (e) {\n    switch (e.type) {\n      case 'touchstart':\n      case 'mousedown':\n        this._start(e);\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoomStart(e);\n        }\n        break;\n      case 'touchmove':\n      case 'mousemove':\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoom(e);\n        } else {\n          this._move(e);\n        }\n        break;\n      case 'touchend':\n      case 'mouseup':\n      case 'touchcancel':\n      case 'mousecancel':\n        if (this.scaled) {\n          this._zoomEnd(e);\n        } else {\n          this._end(e);\n        }\n        break;\n      case 'orientationchange':\n      case 'resize':\n        this._resize();\n        break;\n      case 'transitionend':\n      case 'webkitTransitionEnd':\n      case 'oTransitionEnd':\n      case 'MSTransitionEnd':\n        this._transitionEnd(e);\n        break;\n      case 'click':\n        if (this.enabled && !e._constructed) {\n          if (!preventDefaultException(e.target, this.options.preventDefaultException)) {\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        }\n        break;\n      case 'wheel':\n      case 'DOMMouseScroll':\n      case 'mousewheel':\n        this._onMouseWheel(e);\n        break;\n    }\n  };\n\n  BScroll.prototype.refresh = function () {\n    var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\n    var wrapperRect = getRect(this.wrapper);\n    this.wrapperWidth = wrapperRect.width;\n    this.wrapperHeight = wrapperRect.height;\n\n    var scrollerRect = getRect(this.scroller);\n    this.scrollerWidth = Math.round(scrollerRect.width * this.scale);\n    this.scrollerHeight = Math.round(scrollerRect.height * this.scale);\n\n    this.relativeX = scrollerRect.left;\n    this.relativeY = scrollerRect.top;\n\n    if (isWrapperStatic) {\n      this.relativeX -= wrapperRect.left;\n      this.relativeY -= wrapperRect.top;\n    }\n\n    this.minScrollX = 0;\n    this.minScrollY = 0;\n\n    var wheel = this.options.wheel;\n    if (wheel) {\n      this.items = this.scroller.children;\n      // check whether there are all disable items or not when refresh\n      this._checkWheelAllDisabled();\n      this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;\n      if (this.selectedIndex === undefined) {\n        this.selectedIndex = wheel.selectedIndex || 0;\n      }\n      this.options.startY = -this.selectedIndex * this.itemHeight;\n\n      this.maxScrollX = 0;\n      this.maxScrollY = -this.itemHeight * (this.items.length - 1);\n    } else {\n      this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n      if (!this.options.infinity) {\n        this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n      }\n      if (this.maxScrollX < 0) {\n        this.maxScrollX -= this.relativeX;\n        this.minScrollX = -this.relativeX;\n      } else if (this.scale > 1) {\n        this.maxScrollX = this.maxScrollX / 2 - this.relativeX;\n        this.minScrollX = this.maxScrollX;\n      }\n      if (this.maxScrollY < 0) {\n        this.maxScrollY -= this.relativeY;\n        this.minScrollY = -this.relativeY;\n      } else if (this.scale > 1) {\n        this.maxScrollY = this.maxScrollY / 2 - this.relativeY;\n        this.minScrollY = this.maxScrollY;\n      }\n    }\n\n    this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;\n    this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;\n\n    if (!this.hasHorizontalScroll) {\n      this.maxScrollX = this.minScrollX;\n      this.scrollerWidth = this.wrapperWidth;\n    }\n\n    if (!this.hasVerticalScroll) {\n      this.maxScrollY = this.minScrollY;\n      this.scrollerHeight = this.wrapperHeight;\n    }\n\n    this.endTime = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.wrapperOffset = offset(this.wrapper);\n\n    this.trigger('refresh');\n\n    !this.scaled && this.resetPosition();\n  };\n\n  BScroll.prototype.enable = function () {\n    this.enabled = true;\n  };\n\n  BScroll.prototype.disable = function () {\n    this.enabled = false;\n  };\n}\n\nvar ease = {\n  // easeOutQuint\n  swipe: {\n    style: 'cubic-bezier(0.23, 1, 0.32, 1)',\n    fn: function fn(t) {\n      return 1 + --t * t * t * t * t;\n    }\n  },\n  // easeOutQuard\n  swipeBounce: {\n    style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n    fn: function fn(t) {\n      return t * (2 - t);\n    }\n  },\n  // easeOutQuart\n  bounce: {\n    style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n    fn: function fn(t) {\n      return 1 - --t * t * t * t;\n    }\n  }\n};\n\nfunction momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options, scroll) {\n  var distance = current - start;\n  var speed = Math.abs(distance) / time;\n\n  var deceleration = options.deceleration,\n      itemHeight = options.itemHeight,\n      swipeBounceTime = options.swipeBounceTime,\n      wheel = options.wheel,\n      swipeTime = options.swipeTime;\n\n  var duration = swipeTime;\n  var rate = wheel ? 4 : 15;\n\n  var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);\n\n  if (wheel && itemHeight) {\n    destination = scroll._findNearestValidWheel(destination).y;\n  }\n\n  if (destination < lowerMargin) {\n    destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;\n    duration = swipeBounceTime;\n  } else if (destination > upperMargin) {\n    destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;\n    duration = swipeBounceTime;\n  }\n\n  return {\n    destination: Math.round(destination),\n    duration: duration\n  };\n}\n\nvar DEFAULT_INTERVAL = 100 / 60;\n\nfunction noop() {}\n\nvar requestAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||\n  // if all else fails, use setTimeout\n  function (callback) {\n    return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.\n  };\n}();\n\nvar cancelAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n    window.clearTimeout(id);\n  };\n}();\n\nvar DIRECTION_UP = 1;\nvar DIRECTION_DOWN = -1;\nvar DIRECTION_LEFT = 1;\nvar DIRECTION_RIGHT = -1;\n\nvar PROBE_DEBOUNCE = 1;\n\nvar PROBE_REALTIME = 3;\n\nfunction warn(msg) {\n  console.error('[BScroll warn]: ' + msg);\n}\n\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error('[BScroll] ' + msg);\n  }\n}\n\nfunction coreMixin(BScroll) {\n  BScroll.prototype._start = function (e) {\n    var _eventType = eventType[e.type];\n    if (_eventType !== TOUCH_EVENT) {\n      if (e.button !== 0) {\n        return;\n      }\n    }\n    if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {\n      return;\n    }\n    this.initiated = _eventType;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.moved = false;\n    this.distX = 0;\n    this.distY = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.movingDirectionX = 0;\n    this.movingDirectionY = 0;\n    this.directionLocked = 0;\n\n    this._transitionTime();\n    this.startTime = getNow();\n\n    if (this.options.wheel) {\n      this.target = e.target;\n    }\n\n    this.stop();\n\n    var point = e.touches ? e.touches[0] : e;\n\n    this.startX = this.x;\n    this.startY = this.y;\n    this.absStartX = this.x;\n    this.absStartY = this.y;\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.trigger('beforeScrollStart');\n  };\n\n  BScroll.prototype._move = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var point = e.touches ? e.touches[0] : e;\n    var deltaX = point.pageX - this.pointX;\n    var deltaY = point.pageY - this.pointY;\n\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.distX += deltaX;\n    this.distY += deltaY;\n\n    var absDistX = Math.abs(this.distX);\n    var absDistY = Math.abs(this.distY);\n\n    var timestamp = getNow();\n\n    // We need to move at least momentumLimitDistance pixels for the scrolling to initiate\n    if (timestamp - this.endTime > this.options.momentumLimitTime && !this.moved && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {\n      return;\n    }\n\n    // If you are scrolling in one direction lock the other\n    if (!this.directionLocked && !this.options.freeScroll) {\n      if (absDistX > absDistY + this.options.directionLockThreshold) {\n        this.directionLocked = 'h'; // lock horizontally\n      } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n        this.directionLocked = 'v'; // lock vertically\n      } else {\n        this.directionLocked = 'n'; // no lock\n      }\n    }\n\n    if (this.directionLocked === 'h') {\n      if (this.options.eventPassthrough === 'vertical') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'horizontal') {\n        this.initiated = false;\n        return;\n      }\n      deltaY = 0;\n    } else if (this.directionLocked === 'v') {\n      if (this.options.eventPassthrough === 'horizontal') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'vertical') {\n        this.initiated = false;\n        return;\n      }\n      deltaX = 0;\n    }\n\n    deltaX = this.hasHorizontalScroll ? deltaX : 0;\n    deltaY = this.hasVerticalScroll ? deltaY : 0;\n    this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    var newX = this.x + deltaX;\n    var newY = this.y + deltaY;\n\n    var top = false;\n    var bottom = false;\n    var left = false;\n    var right = false;\n    // Slow down or stop if outside of the boundaries\n    var bounce = this.options.bounce;\n    if (bounce !== false) {\n      top = bounce.top === undefined ? true : bounce.top;\n      bottom = bounce.bottom === undefined ? true : bounce.bottom;\n      left = bounce.left === undefined ? true : bounce.left;\n      right = bounce.right === undefined ? true : bounce.right;\n    }\n    if (newX > this.minScrollX || newX < this.maxScrollX) {\n      if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {\n        newX = this.x + deltaX / 3;\n      } else {\n        newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;\n      }\n    }\n    if (newY > this.minScrollY || newY < this.maxScrollY) {\n      if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {\n        newY = this.y + deltaY / 3;\n      } else {\n        newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;\n      }\n    }\n\n    if (!this.moved) {\n      this.moved = true;\n      this.trigger('scrollStart');\n    }\n\n    this._translate(newX, newY);\n\n    if (timestamp - this.startTime > this.options.momentumLimitTime) {\n      this.startTime = timestamp;\n      this.startX = this.x;\n      this.startY = this.y;\n\n      if (this.options.probeType === PROBE_DEBOUNCE) {\n        this.trigger('scroll', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n\n    if (this.options.probeType > PROBE_DEBOUNCE) {\n      this.trigger('scroll', {\n        x: this.x,\n        y: this.y\n      });\n    }\n\n    var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;\n    var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n\n    var pX = this.pointX - scrollLeft;\n    var pY = this.pointY - scrollTop;\n\n    if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {\n      this._end(e);\n    }\n  };\n\n  BScroll.prototype._end = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n    this.initiated = false;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.trigger('touchEnd', {\n      x: this.x,\n      y: this.y\n    });\n\n    this.isInTransition = false;\n\n    // ensures that the last position is rounded\n    var newX = Math.round(this.x);\n    var newY = Math.round(this.y);\n\n    var deltaX = newX - this.absStartX;\n    var deltaY = newY - this.absStartY;\n    this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    // if configure pull down refresh, check it first\n    if (this.options.pullDownRefresh && this._checkPullDown()) {\n      return;\n    }\n\n    // check if it is a click operation\n    if (this._checkClick(e)) {\n      this.trigger('scrollCancel');\n      return;\n    }\n\n    // reset if we are outside of the boundaries\n    if (this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      return;\n    }\n\n    this._translate(newX, newY);\n\n    this.endTime = getNow();\n    var duration = this.endTime - this.startTime;\n    var absDistX = Math.abs(newX - this.startX);\n    var absDistY = Math.abs(newY - this.startY);\n\n    // flick\n    if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {\n      this.trigger('flick');\n      return;\n    }\n\n    var time = 0;\n    // start momentum animation if needed\n    if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {\n      var top = false;\n      var bottom = false;\n      var left = false;\n      var right = false;\n      var bounce = this.options.bounce;\n      if (bounce !== false) {\n        top = bounce.top === undefined ? true : bounce.top;\n        bottom = bounce.bottom === undefined ? true : bounce.bottom;\n        left = bounce.left === undefined ? true : bounce.left;\n        right = bounce.right === undefined ? true : bounce.right;\n      }\n      var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;\n      var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;\n      var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options, this) : { destination: newX, duration: 0 };\n      var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options, this) : { destination: newY, duration: 0 };\n      newX = momentumX.destination;\n      newY = momentumY.destination;\n      time = Math.max(momentumX.duration, momentumY.duration);\n      this.isInTransition = true;\n    } else {\n      if (this.options.wheel) {\n        newY = this._findNearestValidWheel(newY).y;\n        time = this.options.wheel.adjustTime || 400;\n      }\n    }\n\n    var easing = ease.swipe;\n    if (this.options.snap) {\n      var snap = this._nearestSnap(newX, newY);\n      this.currentPage = snap;\n      time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n      newX = snap.x;\n      newY = snap.y;\n\n      this.directionX = 0;\n      this.directionY = 0;\n      easing = this.options.snap.easing || ease.bounce;\n    }\n\n    if (newX !== this.x || newY !== this.y) {\n      // change easing function when scroller goes out of the boundaries\n      if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {\n        easing = ease.swipeBounce;\n      }\n      this.scrollTo(newX, newY, time, easing);\n      return;\n    }\n\n    if (this.options.wheel) {\n      this.selectedIndex = this._findNearestValidWheel(this.y).index;\n    }\n\n    this.trigger('scrollEnd', {\n      x: this.x,\n      y: this.y\n    });\n  };\n\n  BScroll.prototype._checkClick = function (e) {\n    // when in the process of pulling down, it should not prevent click\n    var preventClick = this.stopFromTransition && !this.pulling;\n    this.stopFromTransition = false;\n\n    // we scrolled less than 15 pixels\n    if (!this.moved) {\n      if (this.options.wheel) {\n        if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {\n          var index = this._findNearestValidWheel(this.y).index;\n          var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);\n          this.target = this.items[index + _offset];\n        }\n        var top = offset(this.target).top;\n        var left = offset(this.target).left;\n        top -= this.wrapperOffset.top;\n        top -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0;\n        left -= this.wrapperOffset.left;\n        left -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0;\n\n        top = this._findNearestValidWheel(top).y;\n        this.scrollTo(left, top, this.options.wheel.adjustTime || 400, ease.swipe);\n        return true;\n      } else {\n        if (!preventClick) {\n          var _dblclick = this.options.dblclick;\n          var dblclickTrigged = false;\n          if (_dblclick && this.lastClickTime) {\n            var _dblclick$delay = _dblclick.delay,\n                delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;\n\n            if (getNow() - this.lastClickTime < delay) {\n              dblclickTrigged = true;\n              dblclick(e);\n            }\n          }\n          if (this.options.tap) {\n            tap(e, this.options.tap);\n          }\n\n          if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n            click(e);\n          }\n          this.lastClickTime = dblclickTrigged ? null : getNow();\n          return true;\n        }\n        return false;\n      }\n    }\n    return false;\n  };\n\n  BScroll.prototype._resize = function () {\n    var _this = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    // fix a scroll problem under Android condition\n    if (isAndroid) {\n      this.wrapper.scrollTop = 0;\n    }\n    clearTimeout(this.resizeTimeout);\n    this.resizeTimeout = setTimeout(function () {\n      _this.refresh();\n    }, this.options.resizePolling);\n  };\n\n  BScroll.prototype._startProbe = function () {\n    cancelAnimationFrame(this.probeTimer);\n    this.probeTimer = requestAnimationFrame(probe);\n\n    var me = this;\n\n    function probe() {\n      var pos = me.getComputedPosition();\n      me.trigger('scroll', pos);\n      if (!me.isInTransition) {\n        me.trigger('scrollEnd', pos);\n        return;\n      }\n      me.probeTimer = requestAnimationFrame(probe);\n    }\n  };\n\n  BScroll.prototype._transitionTime = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    this.scrollerStyle[style.transitionDuration] = time + 'ms';\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionDuration] = time + 'ms';\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i = 0; _i < this.indicators.length; _i++) {\n        this.indicators[_i].transitionTime(time);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionTimingFunction = function (easing) {\n    this.scrollerStyle[style.transitionTimingFunction] = easing;\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionTimingFunction] = easing;\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {\n        this.indicators[_i2].transitionTimingFunction(easing);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionEnd = function (e) {\n    if (e.target !== this.scroller || !this.isInTransition) {\n      return;\n    }\n\n    this._transitionTime();\n    var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;\n    if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      this.isInTransition = false;\n      if (this.options.probeType !== PROBE_REALTIME) {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n  };\n\n  BScroll.prototype._translate = function (x, y, scale) {\n    assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');\n    if (isUndef(scale)) {\n      scale = this.scale;\n    }\n    if (this.options.useTransform) {\n      this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;\n    } else {\n      x = Math.round(x);\n      y = Math.round(y);\n      this.scrollerStyle.left = x + 'px';\n      this.scrollerStyle.top = y + 'px';\n    }\n\n    if (this.options.wheel) {\n      var _options$wheel$rotate = this.options.wheel.rotate,\n          rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;\n\n      for (var i = 0; i < this.items.length; i++) {\n        var deg = rotate * (y / this.itemHeight + i);\n        this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';\n      }\n    }\n\n    this.x = x;\n    this.y = y;\n    this.setScale(scale);\n\n    if (this.indicators) {\n      for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {\n        this.indicators[_i3].updatePosition();\n      }\n    }\n  };\n\n  BScroll.prototype._animate = function (destX, destY, duration, easingFn) {\n    var me = this;\n    var startX = this.x;\n    var startY = this.y;\n    var startScale = this.lastScale;\n    var destScale = this.scale;\n    var startTime = getNow();\n    var destTime = startTime + duration;\n\n    function step() {\n      var now = getNow();\n\n      if (now >= destTime) {\n        me.isAnimating = false;\n        me._translate(destX, destY, destScale);\n\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n\n        if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {\n          me.trigger('scrollEnd', {\n            x: me.x,\n            y: me.y\n          });\n        }\n        return;\n      }\n      now = (now - startTime) / duration;\n      var easing = easingFn(now);\n      var newX = (destX - startX) * easing + startX;\n      var newY = (destY - startY) * easing + startY;\n      var newScale = (destScale - startScale) * easing + startScale;\n\n      me._translate(newX, newY, newScale);\n\n      if (me.isAnimating) {\n        me.animateTimer = requestAnimationFrame(step);\n      }\n\n      if (me.options.probeType === PROBE_REALTIME) {\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n      }\n    }\n\n    this.isAnimating = true;\n    cancelAnimationFrame(this.animateTimer);\n    step();\n  };\n\n  BScroll.prototype.scrollBy = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n\n    x = this.x + x;\n    y = this.y + y;\n\n    this.scrollTo(x, y, time, easing);\n  };\n\n  BScroll.prototype.scrollTo = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n    var isSilent = arguments[4];\n\n    if (this.options.wheel) {\n      y = this._findNearestValidWheel(y).y;\n    }\n    this.isInTransition = this.options.useTransition && time > 0 && (this.x !== x || this.y !== y);\n\n    if (!time || this.options.useTransition) {\n      this._transitionTimingFunction(easing.style);\n      this._transitionTime(time);\n      this._translate(x, y);\n\n      if (time && this.options.probeType === PROBE_REALTIME) {\n        this._startProbe();\n      }\n      if (!time && !isSilent) {\n        // don't trigger resetPosition when zoom feature is open, fix #748\n        if (this.options.zoom) return;\n        this.trigger('scroll', {\n          x: x,\n          y: y\n        });\n        // force reflow to put everything in position\n        this._reflow = document.body.offsetHeight;\n        if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\n          this.trigger('scrollEnd', {\n            x: x,\n            y: y\n          });\n        }\n      }\n\n      if (this.options.wheel) {\n        this.selectedIndex = this._findNearestValidWheel(y).index;\n      }\n    } else {\n      this._animate(x, y, time, easing.fn);\n    }\n  };\n\n  BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\n    if (!el) {\n      return;\n    }\n    el = el.nodeType ? el : this.scroller.querySelector(el);\n\n    if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {\n      return;\n    }\n\n    var pos = offset(el);\n    pos.left -= this.wrapperOffset.left;\n    pos.top -= this.wrapperOffset.top;\n\n    // if offsetX/Y are true we center the element to the screen\n    if (offsetX === true) {\n      offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n    }\n    if (offsetY === true) {\n      offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n    }\n\n    pos.left -= offsetX || 0;\n    pos.top -= offsetY || 0;\n    pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n    pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n    if (this.options.wheel) {\n      pos.top = this._findNearestValidWheel(pos.top).y;\n    }\n\n    this.scrollTo(pos.left, pos.top, time, easing);\n  };\n\n  BScroll.prototype.resetPosition = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;\n\n    var x = this.x;\n    var roundX = Math.round(x);\n    if (!this.hasHorizontalScroll || roundX > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (roundX < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    var y = this.y;\n    var roundY = Math.round(y);\n    if (!this.hasVerticalScroll || roundY > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (roundY < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    if (x === this.x && y === this.y) {\n      return false;\n    }\n\n    this.scrollTo(x, y, time, easeing);\n\n    return true;\n  };\n\n  BScroll.prototype.getComputedPosition = function () {\n    var matrix = window.getComputedStyle(this.scroller, null);\n    var x = void 0;\n    var y = void 0;\n\n    if (this.options.useTransform) {\n      matrix = matrix[style.transform].split(')')[0].split(', ');\n      x = +(matrix[12] || matrix[4]);\n      y = +(matrix[13] || matrix[5]);\n    } else {\n      x = +matrix.left.replace(/[^-\\d.]/g, '');\n      y = +matrix.top.replace(/[^-\\d.]/g, '');\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  };\n\n  BScroll.prototype.stop = function () {\n    if (this.options.useTransition && this.isInTransition) {\n      this.isInTransition = false;\n      cancelAnimationFrame(this.probeTimer);\n      var pos = this.getComputedPosition();\n      this._translate(pos.x, pos.y);\n      if (this.options.wheel) {\n        this.target = this.items[this._findNearestValidWheel(pos.y).index];\n      } else {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n      this.stopFromTransition = true;\n    } else if (!this.options.useTransition && this.isAnimating) {\n      this.isAnimating = false;\n      cancelAnimationFrame(this.animateTimer);\n      this.trigger('scrollEnd', {\n        x: this.x,\n        y: this.y\n      });\n      this.stopFromTransition = true;\n    }\n  };\n\n  BScroll.prototype.destroy = function () {\n    this.destroyed = true;\n    this.trigger('destroy');\n    if (this.options.useTransition) {\n      cancelAnimationFrame(this.probeTimer);\n    } else {\n      cancelAnimationFrame(this.animateTimer);\n    }\n    this._removeDOMEvents();\n    // remove custom events\n    this._events = {};\n  };\n}\n\nfunction snapMixin(BScroll) {\n  BScroll.prototype._initSnap = function () {\n    var _this = this;\n\n    this.currentPage = {};\n    var snap = this.options.snap;\n\n    if (snap.loop) {\n      var children = this.scroller.children;\n      if (children.length > 1) {\n        prepend(children[children.length - 1].cloneNode(true), this.scroller);\n        this.scroller.appendChild(children[1].cloneNode(true));\n      } else {\n        // Loop does not make any sense if there is only one child.\n        snap.loop = false;\n      }\n    }\n\n    var el = snap.el;\n    if (typeof el === 'string') {\n      el = this.scroller.querySelectorAll(el);\n    }\n\n    this.on('refresh', function () {\n      _this.pages = [];\n\n      if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {\n        return;\n      }\n\n      var stepX = snap.stepX || _this.wrapperWidth;\n      var stepY = snap.stepY || _this.wrapperHeight;\n\n      var x = 0;\n      var y = void 0;\n      var cx = void 0;\n      var cy = void 0;\n      var i = 0;\n      var l = void 0;\n      var m = 0;\n      var n = void 0;\n      var rect = void 0;\n      if (!el) {\n        cx = Math.round(stepX / 2);\n        cy = Math.round(stepY / 2);\n\n        while (x > -_this.scrollerWidth) {\n          _this.pages[i] = [];\n          l = 0;\n          y = 0;\n\n          while (y > -_this.scrollerHeight) {\n            _this.pages[i][l] = {\n              x: Math.max(x, _this.maxScrollX),\n              y: Math.max(y, _this.maxScrollY),\n              width: stepX,\n              height: stepY,\n              cx: x - cx,\n              cy: y - cy\n            };\n\n            y -= stepY;\n            l++;\n          }\n\n          x -= stepX;\n          i++;\n        }\n      } else {\n        l = el.length;\n        n = -1;\n\n        for (; i < l; i++) {\n          rect = getRect(el[i]);\n          if (i === 0 || rect.left <= getRect(el[i - 1]).left) {\n            m = 0;\n            n++;\n          }\n\n          if (!_this.pages[m]) {\n            _this.pages[m] = [];\n          }\n\n          x = Math.max(-rect.left, _this.maxScrollX);\n          y = Math.max(-rect.top, _this.maxScrollY);\n          cx = x - Math.round(rect.width / 2);\n          cy = y - Math.round(rect.height / 2);\n\n          _this.pages[m][n] = {\n            x: x,\n            y: y,\n            width: rect.width,\n            height: rect.height,\n            cx: cx,\n            cy: cy\n          };\n\n          if (x > _this.maxScrollX) {\n            m++;\n          }\n        }\n      }\n\n      _this._checkSnapLoop();\n\n      var initPageX = snap._loopX ? 1 : 0;\n      var initPageY = snap._loopY ? 1 : 0;\n      _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0, undefined, true);\n\n      // Update snap threshold if needed.\n      var snapThreshold = snap.threshold;\n      if (snapThreshold % 1 === 0) {\n        _this.snapThresholdX = snapThreshold;\n        _this.snapThresholdY = snapThreshold;\n      } else {\n        _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);\n        _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);\n      }\n    });\n\n    this.on('scrollEnd', function () {\n      if (snap.loop) {\n        if (snap._loopX) {\n          if (_this.currentPage.pageX === 0) {\n            _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0, undefined, true);\n          }\n          if (_this.currentPage.pageX === _this.pages.length - 1) {\n            _this._goToPage(1, _this.currentPage.pageY, 0, undefined, true);\n          }\n        } else {\n          if (_this.currentPage.pageY === 0) {\n            _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0, undefined, true);\n          }\n          if (_this.currentPage.pageY === _this.pages[0].length - 1) {\n            _this._goToPage(_this.currentPage.pageX, 1, 0, undefined, true);\n          }\n        }\n      }\n    });\n\n    if (snap.listenFlick !== false) {\n      this.on('flick', function () {\n        var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);\n\n        _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);\n      });\n    }\n\n    this.on('destroy', function () {\n      if (snap.loop) {\n        var _children = _this.scroller.children;\n        if (_children.length > 2) {\n          removeChild(_this.scroller, _children[_children.length - 1]);\n          removeChild(_this.scroller, _children[0]);\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._checkSnapLoop = function () {\n    var snap = this.options.snap;\n\n    if (!snap.loop || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (this.pages.length > 1) {\n      snap._loopX = true;\n    }\n    if (this.pages[0] && this.pages[0].length > 1) {\n      snap._loopY = true;\n    }\n    if (snap._loopX && snap._loopY) {\n      warn('Loop does not support two direction at the same time.');\n    }\n  };\n\n  BScroll.prototype._nearestSnap = function (x, y) {\n    if (!this.pages.length) {\n      return { x: 0, y: 0, pageX: 0, pageY: 0 };\n    }\n\n    var i = 0;\n    // Check if we exceeded the snap threshold\n    if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {\n      return this.currentPage;\n    }\n\n    if (x > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (x < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    if (y > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (y < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    var l = this.pages.length;\n    for (; i < l; i++) {\n      if (x >= this.pages[i][0].cx) {\n        x = this.pages[i][0].x;\n        break;\n      }\n    }\n\n    l = this.pages[i].length;\n\n    var m = 0;\n    for (; m < l; m++) {\n      if (y >= this.pages[0][m].cy) {\n        y = this.pages[0][m].y;\n        break;\n      }\n    }\n\n    if (i === this.currentPage.pageX) {\n      i += this.directionX;\n\n      if (i < 0) {\n        i = 0;\n      } else if (i >= this.pages.length) {\n        i = this.pages.length - 1;\n      }\n\n      x = this.pages[i][0].x;\n    }\n\n    if (m === this.currentPage.pageY) {\n      m += this.directionY;\n\n      if (m < 0) {\n        m = 0;\n      } else if (m >= this.pages[0].length) {\n        m = this.pages[0].length - 1;\n      }\n\n      y = this.pages[0][m].y;\n    }\n\n    return {\n      x: x,\n      y: y,\n      pageX: i,\n      pageY: m\n    };\n  };\n\n  BScroll.prototype._goToPage = function (x) {\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var time = arguments[2];\n    var easing = arguments[3];\n    var isSilent = arguments[4];\n\n    var snap = this.options.snap;\n\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    easing = easing || snap.easing || ease.bounce;\n\n    if (x >= this.pages.length) {\n      x = this.pages.length - 1;\n    } else if (x < 0) {\n      x = 0;\n    }\n\n    if (!this.pages[x]) {\n      return;\n    }\n\n    if (y >= this.pages[x].length) {\n      y = this.pages[x].length - 1;\n    } else if (y < 0) {\n      y = 0;\n    }\n\n    var posX = this.pages[x][y].x;\n    var posY = this.pages[x][y].y;\n\n    time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n\n    this.currentPage = {\n      x: posX,\n      y: posY,\n      pageX: x,\n      pageY: y\n    };\n    this.scrollTo(posX, posY, time, easing, isSilent);\n  };\n\n  BScroll.prototype.goToPage = function (x, y, time, easing) {\n    var snap = this.options.snap;\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (snap.loop) {\n      var len = void 0;\n      if (snap._loopX) {\n        len = this.pages.length - 2;\n        if (x >= len) {\n          x = len - 1;\n        } else if (x < 0) {\n          x = 0;\n        }\n        x += 1;\n      } else {\n        len = this.pages[0].length - 2;\n        if (y >= len) {\n          y = len - 1;\n        } else if (y < 0) {\n          y = 0;\n        }\n        y += 1;\n      }\n    }\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.next = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x++;\n    if (x >= this.pages.length && this.hasVerticalScroll) {\n      x = 0;\n      y++;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.prev = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x--;\n    if (x < 0 && this.hasVerticalScroll) {\n      x = 0;\n      y--;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.getCurrentPage = function () {\n    var snap = this.options.snap;\n    if (!snap) {\n      return null;\n    }\n\n    if (snap.loop) {\n      var currentPage = void 0;\n      if (snap._loopX) {\n        currentPage = extend({}, this.currentPage, {\n          pageX: this.currentPage.pageX - 1\n        });\n      } else {\n        currentPage = extend({}, this.currentPage, {\n          pageY: this.currentPage.pageY - 1\n        });\n      }\n      return currentPage;\n    }\n    return this.currentPage;\n  };\n}\n\nfunction wheelMixin(BScroll) {\n  BScroll.prototype.wheelTo = function () {\n    var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    if (this.options.wheel) {\n      var y = -index * this.itemHeight;\n      this.scrollTo(0, y);\n    }\n  };\n\n  BScroll.prototype.getSelectedIndex = function () {\n    return this.options.wheel && this.selectedIndex;\n  };\n\n  BScroll.prototype._initWheel = function () {\n    var wheel = this.options.wheel;\n    if (!wheel.wheelWrapperClass) {\n      wheel.wheelWrapperClass = 'wheel-scroll';\n    }\n    if (!wheel.wheelItemClass) {\n      wheel.wheelItemClass = 'wheel-item';\n    }\n    if (!wheel.wheelDisabledItemClass) {\n      wheel.wheelDisabledItemClass = 'wheel-disabled-item';\n    }\n    if (wheel.selectedIndex === undefined) {\n      wheel.selectedIndex = 0;\n    }\n  };\n\n  BScroll.prototype._findNearestValidWheel = function (y) {\n    y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\n    var wheel = this.options.wheel;\n    var currentIndex = Math.abs(Math.round(-y / this.itemHeight));\n    var cacheIndex = currentIndex;\n    var items = this.items;\n    // Impersonation web native select\n    // first, check whether there is a enable item whose index is smaller than currentIndex\n    // then, check whether there is a enable item whose index is bigger than currentIndex\n    // otherwise, there are all disabled items, just keep currentIndex unchange\n    while (currentIndex >= 0) {\n      if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        break;\n      }\n      currentIndex--;\n    }\n\n    if (currentIndex < 0) {\n      currentIndex = cacheIndex;\n      while (currentIndex <= items.length - 1) {\n        if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n          break;\n        }\n        currentIndex++;\n      }\n    }\n\n    // keep it unchange when all the items are disabled\n    if (currentIndex === items.length) {\n      currentIndex = cacheIndex;\n    }\n    // when all the items are disabled, this.selectedIndex should always be -1\n    return {\n      index: this.wheelItemsAllDisabled ? -1 : currentIndex,\n      y: -currentIndex * this.itemHeight\n    };\n  };\n\n  BScroll.prototype._checkWheelAllDisabled = function () {\n    var wheel = this.options.wheel;\n    var items = this.items;\n    this.wheelItemsAllDisabled = true;\n    for (var i = 0; i < items.length; i++) {\n      if (items[i].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        this.wheelItemsAllDisabled = false;\n        break;\n      }\n    }\n  };\n}\n\nvar INDICATOR_MIN_LEN = 8;\n\nfunction scrollbarMixin(BScroll) {\n  BScroll.prototype._initScrollbar = function () {\n    var _this = this;\n\n    var _options$scrollbar = this.options.scrollbar,\n        _options$scrollbar$fa = _options$scrollbar.fade,\n        fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,\n        _options$scrollbar$in = _options$scrollbar.interactive,\n        interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;\n\n    this.indicators = [];\n    var indicator = void 0;\n\n    if (this.options.scrollX) {\n      indicator = {\n        el: createScrollbar('horizontal'),\n        direction: 'horizontal',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    if (this.options.scrollY) {\n      indicator = {\n        el: createScrollbar('vertical'),\n        direction: 'vertical',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    this.on('refresh', function () {\n      for (var i = 0; i < _this.indicators.length; i++) {\n        _this.indicators[i].refresh();\n      }\n    });\n\n    if (fade) {\n      this.on('scrollEnd', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollCancel', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true);\n        }\n      });\n\n      this.on('beforeScrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true, true);\n        }\n      });\n    }\n\n    this.on('destroy', function () {\n      _this._removeScrollBars();\n    });\n  };\n\n  BScroll.prototype._insertScrollBar = function (scrollbar) {\n    this.wrapper.appendChild(scrollbar);\n  };\n\n  BScroll.prototype._removeScrollBars = function () {\n    for (var i = 0; i < this.indicators.length; i++) {\n      this.indicators[i].destroy();\n    }\n  };\n}\n\nfunction createScrollbar(direction) {\n  var scrollbar = document.createElement('div');\n  var indicator = document.createElement('div');\n\n  scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';\n  indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';\n\n  indicator.className = 'bscroll-indicator';\n\n  if (direction === 'horizontal') {\n    scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n    indicator.style.height = '100%';\n    scrollbar.className = 'bscroll-horizontal-scrollbar';\n  } else {\n    scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n    indicator.style.width = '100%';\n    scrollbar.className = 'bscroll-vertical-scrollbar';\n  }\n\n  scrollbar.style.cssText += ';overflow:hidden';\n  scrollbar.appendChild(indicator);\n\n  return scrollbar;\n}\n\nfunction Indicator(scroller, options) {\n  this.wrapper = options.el;\n  this.wrapperStyle = this.wrapper.style;\n  this.indicator = this.wrapper.children[0];\n  this.indicatorStyle = this.indicator.style;\n  this.scroller = scroller;\n  this.direction = options.direction;\n  if (options.fade) {\n    this.visible = 0;\n    this.wrapperStyle.opacity = '0';\n  } else {\n    this.visible = 1;\n  }\n\n  this.sizeRatioX = 1;\n  this.sizeRatioY = 1;\n  this.maxPosX = 0;\n  this.maxPosY = 0;\n  this.x = 0;\n  this.y = 0;\n\n  if (options.interactive) {\n    this._addDOMEvents();\n  }\n}\n\nIndicator.prototype.handleEvent = function (e) {\n  switch (e.type) {\n    case 'touchstart':\n    case 'mousedown':\n      this._start(e);\n      break;\n    case 'touchmove':\n    case 'mousemove':\n      this._move(e);\n      break;\n    case 'touchend':\n    case 'mouseup':\n    case 'touchcancel':\n    case 'mousecancel':\n      this._end(e);\n      break;\n  }\n};\n\nIndicator.prototype.refresh = function () {\n  if (this._shouldShow()) {\n    this.transitionTime();\n    this._calculate();\n    this.updatePosition();\n  }\n};\n\nIndicator.prototype.fade = function (visible, hold) {\n  var _this2 = this;\n\n  if (hold && !this.visible) {\n    return;\n  }\n\n  var time = visible ? 250 : 500;\n\n  visible = visible ? '1' : '0';\n\n  this.wrapperStyle[style.transitionDuration] = time + 'ms';\n\n  clearTimeout(this.fadeTimeout);\n  this.fadeTimeout = setTimeout(function () {\n    _this2.wrapperStyle.opacity = visible;\n    _this2.visible = +visible;\n  }, 0);\n};\n\nIndicator.prototype.updatePosition = function () {\n  if (this.direction === 'vertical') {\n    var y = Math.round(this.sizeRatioY * this.scroller.y);\n\n    if (y < 0) {\n      this.transitionTime(500);\n      var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = height + 'px';\n      y = 0;\n    } else if (y > this.maxPosY) {\n      this.transitionTime(500);\n      var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = _height + 'px';\n      y = this.maxPosY + this.indicatorHeight - _height;\n    } else {\n      this.indicatorStyle.height = this.indicatorHeight + 'px';\n    }\n    this.y = y;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.top = y + 'px';\n    }\n  } else {\n    var x = Math.round(this.sizeRatioX * this.scroller.x);\n\n    if (x < 0) {\n      this.transitionTime(500);\n      var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = width + 'px';\n      x = 0;\n    } else if (x > this.maxPosX) {\n      this.transitionTime(500);\n      var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = _width + 'px';\n      x = this.maxPosX + this.indicatorWidth - _width;\n    } else {\n      this.indicatorStyle.width = this.indicatorWidth + 'px';\n    }\n\n    this.x = x;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.left = x + 'px';\n    }\n  }\n};\n\nIndicator.prototype.transitionTime = function () {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n  this.indicatorStyle[style.transitionDuration] = time + 'ms';\n};\n\nIndicator.prototype.transitionTimingFunction = function (easing) {\n  this.indicatorStyle[style.transitionTimingFunction] = easing;\n};\n\nIndicator.prototype.destroy = function () {\n  this._removeDOMEvents();\n  this.wrapper.parentNode.removeChild(this.wrapper);\n};\n\nIndicator.prototype._start = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this.transitionTime();\n\n  this.initiated = true;\n  this.moved = false;\n  this.lastPointX = point.pageX;\n  this.lastPointY = point.pageY;\n\n  this.startTime = getNow();\n\n  this._handleMoveEvents(addEvent);\n  this.scroller.trigger('beforeScrollStart');\n};\n\nIndicator.prototype._move = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  if (!this.moved) {\n    this.scroller.trigger('scrollStart');\n  }\n\n  this.moved = true;\n\n  var deltaX = point.pageX - this.lastPointX;\n  this.lastPointX = point.pageX;\n\n  var deltaY = point.pageY - this.lastPointY;\n  this.lastPointY = point.pageY;\n\n  var newX = this.x + deltaX;\n  var newY = this.y + deltaY;\n\n  this._pos(newX, newY);\n};\n\nIndicator.prototype._end = function (e) {\n  if (!this.initiated) {\n    return;\n  }\n  this.initiated = false;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this._handleMoveEvents(removeEvent);\n\n  var snapOption = this.scroller.options.snap;\n  if (snapOption) {\n    var speed = snapOption.speed,\n        _snapOption$easing = snapOption.easing,\n        easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;\n\n    var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n    var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n    if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {\n      this.scroller.directionX = 0;\n      this.scroller.directionY = 0;\n      this.scroller.currentPage = snap;\n      this.scroller.scrollTo(snap.x, snap.y, time, easing);\n    }\n  }\n\n  if (this.moved) {\n    this.scroller.trigger('scrollEnd', {\n      x: this.scroller.x,\n      y: this.scroller.y\n    });\n  }\n};\n\nIndicator.prototype._pos = function (x, y) {\n  if (x < 0) {\n    x = 0;\n  } else if (x > this.maxPosX) {\n    x = this.maxPosX;\n  }\n\n  if (y < 0) {\n    y = 0;\n  } else if (y > this.maxPosY) {\n    y = this.maxPosY;\n  }\n\n  x = Math.round(x / this.sizeRatioX);\n  y = Math.round(y / this.sizeRatioY);\n\n  this.scroller.scrollTo(x, y);\n  this.scroller.trigger('scroll', {\n    x: this.scroller.x,\n    y: this.scroller.y\n  });\n};\n\nIndicator.prototype._shouldShow = function () {\n  if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {\n    this.wrapper.style.display = '';\n    return true;\n  }\n  this.wrapper.style.display = 'none';\n  return false;\n};\n\nIndicator.prototype._calculate = function () {\n  if (this.direction === 'vertical') {\n    var wrapperHeight = this.wrapper.clientHeight;\n    this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.height = this.indicatorHeight + 'px';\n\n    this.maxPosY = wrapperHeight - this.indicatorHeight;\n\n    this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;\n  } else {\n    var wrapperWidth = this.wrapper.clientWidth;\n    this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.width = this.indicatorWidth + 'px';\n\n    this.maxPosX = wrapperWidth - this.indicatorWidth;\n\n    this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;\n  }\n};\n\nIndicator.prototype._addDOMEvents = function () {\n  var eventOperation = addEvent;\n  this._handleDOMEvents(eventOperation);\n};\n\nIndicator.prototype._removeDOMEvents = function () {\n  var eventOperation = removeEvent;\n  this._handleDOMEvents(eventOperation);\n  this._handleMoveEvents(eventOperation);\n};\n\nIndicator.prototype._handleMoveEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(window, 'touchmove', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(window, 'mousemove', this);\n  }\n};\n\nIndicator.prototype._handleDOMEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(this.indicator, 'touchstart', this);\n    eventOperation(window, 'touchend', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(this.indicator, 'mousedown', this);\n    eventOperation(window, 'mouseup', this);\n  }\n};\n\nfunction pullDownMixin(BScroll) {\n  BScroll.prototype._initPullDown = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n  };\n\n  BScroll.prototype._checkPullDown = function () {\n    var _options$pullDownRefr = this.options.pullDownRefresh,\n        _options$pullDownRefr2 = _options$pullDownRefr.threshold,\n        threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,\n        _options$pullDownRefr3 = _options$pullDownRefr.stop,\n        stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;\n\n    // check if a real pull down action\n\n    if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {\n      return false;\n    }\n\n    if (!this.pulling) {\n      this.pulling = true;\n      this.trigger('pullingDown');\n    }\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n\n    return this.pulling;\n  };\n\n  BScroll.prototype.finishPullDown = function () {\n    this.pulling = false;\n    this.resetPosition(this.options.bounceTime, ease.bounce);\n  };\n\n  BScroll.prototype.openPullDown = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullDownRefresh = config;\n    this._initPullDown();\n  };\n\n  BScroll.prototype.closePullDown = function () {\n    this.options.pullDownRefresh = false;\n  };\n\n  BScroll.prototype.autoPullDownRefresh = function () {\n    var _options$pullDownRefr4 = this.options.pullDownRefresh,\n        _options$pullDownRefr5 = _options$pullDownRefr4.threshold,\n        threshold = _options$pullDownRefr5 === undefined ? 90 : _options$pullDownRefr5,\n        _options$pullDownRefr6 = _options$pullDownRefr4.stop,\n        stop = _options$pullDownRefr6 === undefined ? 40 : _options$pullDownRefr6;\n\n\n    if (this.pulling) {\n      return;\n    }\n    this.pulling = true;\n\n    this.scrollTo(this.x, threshold);\n    this.trigger('pullingDown');\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n  };\n}\n\nfunction pullUpMixin(BScroll) {\n  BScroll.prototype._initPullUp = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n\n    this.pullupWatching = false;\n    this._watchPullUp();\n  };\n\n  BScroll.prototype._watchPullUp = function () {\n    if (this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = true;\n    this.on('scroll', this._checkToEnd);\n  };\n\n  BScroll.prototype._checkToEnd = function (pos) {\n    var _this = this;\n\n    var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,\n        threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;\n\n    if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {\n      // reset pullupWatching status after scroll end.\n      this.once('scrollEnd', function () {\n        _this.pullupWatching = false;\n      });\n      this.trigger('pullingUp');\n      this.off('scroll', this._checkToEnd);\n    }\n  };\n\n  BScroll.prototype.finishPullUp = function () {\n    var _this2 = this;\n\n    if (this.pullupWatching) {\n      this.once('scrollEnd', function () {\n        _this2._watchPullUp();\n      });\n    } else {\n      this._watchPullUp();\n    }\n  };\n\n  BScroll.prototype.openPullUp = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullUpLoad = config;\n    this._initPullUp();\n  };\n\n  BScroll.prototype.closePullUp = function () {\n    this.options.pullUpLoad = false;\n    if (!this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = false;\n    this.off('scroll', this._checkToEnd);\n  };\n}\n\nfunction mouseWheelMixin(BScroll) {\n  BScroll.prototype._initMouseWheel = function () {\n    var _this = this;\n\n    this._handleMouseWheelEvent(addEvent);\n\n    this.on('destroy', function () {\n      clearTimeout(_this.mouseWheelTimer);\n      clearTimeout(_this.mouseWheelEndTimer);\n      _this._handleMouseWheelEvent(removeEvent);\n    });\n\n    this.firstWheelOpreation = true;\n  };\n\n  BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {\n    eventOperation(this.wrapper, 'wheel', this);\n    eventOperation(this.wrapper, 'mousewheel', this);\n    eventOperation(this.wrapper, 'DOMMouseScroll', this);\n  };\n\n  BScroll.prototype._onMouseWheel = function (e) {\n    var _this2 = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    e.preventDefault();\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    if (this.firstWheelOpreation) {\n      this.trigger('scrollStart');\n    }\n    this.firstWheelOpreation = false;\n\n    var _options$mouseWheel = this.options.mouseWheel,\n        _options$mouseWheel$s = _options$mouseWheel.speed,\n        speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,\n        _options$mouseWheel$i = _options$mouseWheel.invert,\n        invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,\n        _options$mouseWheel$e = _options$mouseWheel.easeTime,\n        easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;\n\n\n    clearTimeout(this.mouseWheelTimer);\n    this.mouseWheelTimer = setTimeout(function () {\n      if (!_this2.options.snap && !easeTime) {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }\n      _this2.firstWheelOpreation = true;\n    }, 400);\n\n    var wheelDeltaX = void 0;\n    var wheelDeltaY = void 0;\n\n    switch (true) {\n      case 'deltaX' in e:\n        if (e.deltaMode === 1) {\n          wheelDeltaX = -e.deltaX * speed;\n          wheelDeltaY = -e.deltaY * speed;\n        } else {\n          wheelDeltaX = -e.deltaX;\n          wheelDeltaY = -e.deltaY;\n        }\n        break;\n      case 'wheelDeltaX' in e:\n        wheelDeltaX = e.wheelDeltaX / 120 * speed;\n        wheelDeltaY = e.wheelDeltaY / 120 * speed;\n        break;\n      case 'wheelDelta' in e:\n        wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;\n        break;\n      case 'detail' in e:\n        wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;\n        break;\n      default:\n        return;\n    }\n\n    var direction = invert ? -1 : 1;\n    wheelDeltaX *= direction;\n    wheelDeltaY *= direction;\n\n    if (!this.hasVerticalScroll) {\n      wheelDeltaX = wheelDeltaY;\n      wheelDeltaY = 0;\n    }\n\n    var newX = void 0;\n    var newY = void 0;\n    if (this.options.snap) {\n      newX = this.currentPage.pageX;\n      newY = this.currentPage.pageY;\n\n      if (wheelDeltaX > 0) {\n        newX--;\n      } else if (wheelDeltaX < 0) {\n        newX++;\n      }\n\n      if (wheelDeltaY > 0) {\n        newY--;\n      } else if (wheelDeltaY < 0) {\n        newY++;\n      }\n\n      this._goToPage(newX, newY);\n      return;\n    }\n\n    newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n    newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n    this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n    this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    var needTriggerEnd = this.y === newY;\n    this.scrollTo(newX, newY, easeTime, ease.swipe);\n    this.trigger('scroll', {\n      x: this.x,\n      y: this.y\n    });\n    clearTimeout(this.mouseWheelEndTimer);\n    if (needTriggerEnd) {\n      this.mouseWheelEndTimer = setTimeout(function () {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }, easeTime);\n    }\n  };\n}\n\nfunction zoomMixin(BScroll) {\n  BScroll.prototype._initZoom = function () {\n    var _options$zoom = this.options.zoom,\n        _options$zoom$start = _options$zoom.start,\n        start = _options$zoom$start === undefined ? 1 : _options$zoom$start,\n        _options$zoom$min = _options$zoom.min,\n        min = _options$zoom$min === undefined ? 1 : _options$zoom$min,\n        _options$zoom$max = _options$zoom.max,\n        max = _options$zoom$max === undefined ? 4 : _options$zoom$max;\n\n    this.scale = Math.min(Math.max(start, min), max);\n    this.setScale(this.scale);\n    this.scrollerStyle[style.transformOrigin] = '0 0';\n  };\n\n  BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {\n    this.scaled = true;\n\n    var lastScale = scale / (startScale || this.scale);\n    this.setScale(scale);\n\n    this.refresh();\n\n    var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));\n    var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    if (this.x !== newX || this.y !== newY) {\n      this.scrollTo(newX, newY, this.options.bounceTime);\n    }\n\n    this.scaled = false;\n  };\n\n  BScroll.prototype.zoomTo = function (scale, x, y) {\n    var _offsetToBody = offsetToBody(this.wrapper),\n        left = _offsetToBody.left,\n        top = _offsetToBody.top;\n\n    var originX = x + left - this.x;\n    var originY = y + top - this.y;\n    this._zoomTo(scale, originX, originY);\n  };\n\n  BScroll.prototype._zoomStart = function (e) {\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n\n    this.startDistance = getDistance(deltaX, deltaY);\n    this.startScale = this.scale;\n\n    var _offsetToBody2 = offsetToBody(this.wrapper),\n        left = _offsetToBody2.left,\n        top = _offsetToBody2.top;\n\n    this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;\n    this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;\n\n    this.trigger('zoomStart');\n  };\n\n  BScroll.prototype._zoom = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n    var distance = getDistance(deltaX, deltaY);\n    var scale = distance / this.startDistance * this.startScale;\n\n    this.scaled = true;\n\n    var _options$zoom2 = this.options.zoom,\n        _options$zoom2$min = _options$zoom2.min,\n        min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,\n        _options$zoom2$max = _options$zoom2.max,\n        max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;\n\n\n    if (scale < min) {\n      scale = 0.5 * min * Math.pow(2.0, scale / min);\n    } else if (scale > max) {\n      scale = 2.0 * max * Math.pow(0.5, max / scale);\n    }\n\n    var lastScale = scale / this.startScale;\n\n    var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);\n    var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);\n\n    this.setScale(scale);\n\n    this.scrollTo(x, y, 0);\n  };\n\n  BScroll.prototype._zoomEnd = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.isInTransition = false;\n    this.isAnimating = false;\n    this.initiated = 0;\n\n    var _options$zoom3 = this.options.zoom,\n        _options$zoom3$min = _options$zoom3.min,\n        min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,\n        _options$zoom3$max = _options$zoom3.max,\n        max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;\n\n\n    var scale = this.scale > max ? max : this.scale < min ? min : this.scale;\n\n    this._zoomTo(scale, this.originX, this.originY, this.startScale);\n\n    this.trigger('zoomEnd');\n  };\n}\n\n// import { ease } from '../util/ease'\n\n// Number of items to instantiate beyond current view in the scroll direction.\nvar RUNWAY_ITEMS = 30;\n\n// Number of items to instantiate beyond current view in the opposite direction.\nvar RUNWAY_ITEMS_OPPOSITE = 10;\n\n// The animation interval (in ms) for fading in content from tombstones.\nvar ANIMATION_DURATION_MS = 200;\n\n// The number of pixels of default additional length to allow scrolling to.\nvar DEFAULT_SCROLL_RUNWAY = 2000;\n\nfunction infiniteMixin(BScroll) {\n  BScroll.prototype._initInfinite = function () {\n    this.options.probeType = 3;\n    this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;\n    this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);\n  };\n}\n\nfunction isTombstoneNode(node) {\n  if (node && node.classList) {\n    return node.classList.contains('tombstone');\n  }\n}\n\nfunction InfiniteScroller(scroller, options) {\n  var _this = this;\n\n  this.options = options;\n  assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');\n\n  assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');\n\n  assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');\n\n  this.firstAttachedItem = 0;\n  this.lastAttachedItem = 0;\n\n  this.anchorScrollTop = 0;\n  this.anchorItem = {\n    index: 0,\n    offset: 0\n  };\n  this.tombstoneHeight = 0;\n  this.tombstoneWidth = 0;\n  this.tombstones = [];\n  this.tombstonesAnimationHandlers = [];\n\n  this.items = [];\n  this.loadedItems = 0;\n  this.requestInProgress = false;\n  this.hasMore = true;\n\n  this.scroller = scroller;\n  this.wrapperEl = this.scroller.wrapper;\n  this.scrollerEl = this.scroller.scroller;\n\n  this.scroller.on('resize', function () {\n    _this.onResize();\n  });\n  this.scroller.on('destroy', function () {\n    _this.destroy();\n  });\n\n  // wait scroll core init\n  this._onResizeHandler = setTimeout(function () {\n    _this.onResize();\n\n    // must wait tombstoneHeight has size\n    _this.scroller.on('scroll', function () {\n      _this.onScroll();\n    });\n  });\n}\n\nInfiniteScroller.prototype.destroy = function () {\n  var _this2 = this;\n\n  // In extreme scene, destroy is triggered before _onResizeHandler\n  clearTimeout(this._onResizeHandler);\n  this.tombstonesAnimationHandlers.forEach(function (handler) {\n    clearTimeout(handler);\n  });\n  this.tombstonesAnimationHandlers = null;\n  this.items.forEach(function (item) {\n    if (item.node) {\n      _this2.scrollerEl.removeChild(item.node);\n      item.node = null;\n    }\n  });\n  this.scroller.infiniteScroller = null;\n  this.scroller = null;\n  this.wrapperEl = null;\n  this.scrollerEl = null;\n  this.items = null;\n  this.tombstones = null;\n};\n\nInfiniteScroller.prototype.onScroll = function () {\n  var scrollTop = -this.scroller.y;\n  var delta = scrollTop - this.anchorScrollTop;\n  if (scrollTop === 0) {\n    this.anchorItem = {\n      index: 0,\n      offset: 0\n    };\n  } else {\n    this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);\n  }\n\n  this.anchorScrollTop = scrollTop;\n  var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight);\n\n  var start = this.anchorItem.index;\n  var end = lastScreenItem.index;\n  if (delta < 0) {\n    start -= RUNWAY_ITEMS;\n    end += RUNWAY_ITEMS_OPPOSITE;\n  } else {\n    start -= RUNWAY_ITEMS_OPPOSITE;\n    end += RUNWAY_ITEMS;\n  }\n  this.fill(start, end);\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.onResize = function () {\n  var tombstone = this.options.createTombstone();\n  tombstone.style.position = 'absolute';\n  this.scrollerEl.appendChild(tombstone);\n  tombstone.style.display = '';\n  this.tombstoneHeight = tombstone.offsetHeight;\n  this.tombstoneWidth = tombstone.offsetWidth;\n  this.scrollerEl.removeChild(tombstone);\n\n  for (var i = 0; i < this.items.length; i++) {\n    this.items[i].height = this.items[i].width = 0;\n  }\n\n  this.onScroll();\n};\n\nInfiniteScroller.prototype.fill = function (start, end) {\n  this.firstAttachedItem = Math.max(0, start);\n  if (!this.hasMore) {\n    end = Math.min(end, this.items.length);\n  }\n  this.lastAttachedItem = end;\n  this.attachContent();\n};\n\nInfiniteScroller.prototype.maybeRequestContent = function () {\n  var _this3 = this;\n\n  if (this.requestInProgress || !this.hasMore) {\n    return;\n  }\n  var itemsNeeded = this.lastAttachedItem - this.loadedItems;\n  if (itemsNeeded <= 0) {\n    return;\n  }\n  this.requestInProgress = true;\n  this.options.fetch(itemsNeeded).then(function (items) {\n    _this3.requestInProgress = false;\n    if (items) {\n      _this3.addContent(items);\n    } else {\n      _this3.hasMore = false;\n      var tombstoneLen = _this3._removeTombstones();\n      var curPos = 0;\n      if (_this3.anchorItem.index <= _this3.items.length) {\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.resetPosition(_this3.scroller.options.bounceTime);\n      } else {\n        _this3.anchorItem.index -= tombstoneLen;\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.stop();\n        _this3.scroller.resetPosition();\n        _this3.onScroll();\n      }\n    }\n  });\n};\n\nInfiniteScroller.prototype.addContent = function (items) {\n  for (var i = 0; i < items.length; i++) {\n    if (this.items.length <= this.loadedItems) {\n      this._addItem();\n    }\n    this.items[this.loadedItems++].data = items[i];\n  }\n  this.attachContent();\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.attachContent = function () {\n  var unusedNodes = this._collectUnusedNodes();\n  var tombstoneAnimations = this._createDOMNodes(unusedNodes);\n  this._cleanupUnusedNodes(unusedNodes);\n  this._cacheNodeSize();\n  var curPos = this._fixScrollPosition();\n  this._setupAnimations(tombstoneAnimations, curPos);\n};\n\nInfiniteScroller.prototype.resetMore = function () {\n  this.hasMore = true;\n};\n\nInfiniteScroller.prototype._removeTombstones = function () {\n  var markIndex = void 0;\n  var tombstoneLen = 0;\n  var itemLen = this.items.length;\n  for (var i = 0; i < itemLen; i++) {\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {\n      // 0 should be excluded\n      if (markIndex === void 0) {\n        markIndex = i;\n      }\n      if (currentNode) {\n        this.scrollerEl.removeChild(currentNode);\n      }\n    }\n  }\n  tombstoneLen = itemLen - markIndex;\n  this.items.splice(markIndex);\n  this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);\n  return tombstoneLen;\n};\n\nInfiniteScroller.prototype._collectUnusedNodes = function () {\n  var unusedNodes = [];\n  for (var i = 0; i < this.items.length; i++) {\n    // Skip the items which should be visible.\n    if (i === this.firstAttachedItem) {\n      i = this.lastAttachedItem - 1;\n      continue;\n    }\n    var currentNode = this.items[i].node;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode)) {\n        // Cache tombstones for reuse\n        this.tombstones.push(currentNode);\n        this.tombstones[this.tombstones.length - 1].style.display = 'none';\n      } else {\n        unusedNodes.push(currentNode);\n      }\n    }\n    this.items[i].node = null;\n  }\n  return unusedNodes;\n};\n\nInfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {\n  var tombstoneAnimations = {};\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    while (this.items.length <= i) {\n      this._addItem();\n    }\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode) && currentData) {\n        currentNode.style.zIndex = 1;\n        tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];\n        this.items[i].node = null;\n      } else {\n        continue;\n      }\n    }\n    var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();\n    node.style.position = 'absolute';\n    this.items[i].top = -1;\n    this.scrollerEl.appendChild(node);\n    this.items[i].node = node;\n  }\n  return tombstoneAnimations;\n};\n\nInfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {\n  while (unusedNodes.length) {\n    this.scrollerEl.removeChild(unusedNodes.pop());\n  }\n};\n\nInfiniteScroller.prototype._cacheNodeSize = function () {\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    var item = this.items[i];\n    // Only cache the height if we have the real contents, not a placeholder.\n    if (item.data && !item.height) {\n      var isTombstone = isTombstoneNode(item.node);\n      item.height = isTombstone ? this.tombstoneHeight : item.node.offsetHeight;\n      item.width = isTombstone ? this.tombstoneWidth : item.node.offsetWidth;\n    }\n  }\n};\n\nInfiniteScroller.prototype._fixScrollPosition = function () {\n  this.anchorScrollTop = 0;\n  for (var _i = 0; _i < this.anchorItem.index; _i++) {\n    this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;\n  }\n  this.anchorScrollTop += this.anchorItem.offset;\n\n  // Position all nodes.\n  var curPos = this.anchorScrollTop - this.anchorItem.offset;\n  var i = this.anchorItem.index;\n  while (i > this.firstAttachedItem) {\n    curPos -= this.items[i - 1].height || this.tombstoneHeight;\n    i--;\n  }\n\n  return curPos;\n};\n\nInfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {\n  var _this4 = this;\n\n  for (var i in tombstoneAnimations) {\n    var animation = tombstoneAnimations[i];\n    this.items[i].node.style[style.transform] = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';\n    // Call offsetTop on the nodes to be animated to force them to apply current transforms.\n    /* eslint-disable no-unused-expressions */\n    this.items[i].node.offsetTop;\n    animation[0].offsetTop;\n    this.items[i].node.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms';\n  }\n\n  for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {\n    var _animation = tombstoneAnimations[_i2];\n    if (_animation) {\n      var tombstoneNode = _animation[0];\n      tombstoneNode.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';\n      tombstoneNode.style[style.transform] = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';\n      tombstoneNode.style.opacity = 0;\n    }\n    if (curPos !== this.items[_i2].top) {\n      if (!_animation) {\n        this.items[_i2].node.style[style.transition] = '';\n      }\n      this.items[_i2].node.style[style.transform] = 'translateY(' + curPos + 'px)';\n    }\n    this.items[_i2].top = curPos;\n    curPos += this.items[_i2].height || this.tombstoneHeight;\n  }\n\n  this.scroller.maxScrollY = -(curPos - this.scroller.wrapperHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));\n\n  var tombstoneAnimationsHandler = setTimeout(function () {\n    for (var _i3 in tombstoneAnimations) {\n      var _animation2 = tombstoneAnimations[_i3];\n      _animation2[0].style.display = 'none';\n      // Tombstone can be recycled now.\n      _this4.tombstones.push(_animation2[0]);\n    }\n  }, ANIMATION_DURATION_MS);\n\n  this.tombstonesAnimationHandlers.push(tombstoneAnimationsHandler);\n};\n\nInfiniteScroller.prototype._getTombStone = function () {\n  var tombstone = this.tombstones.pop();\n  if (tombstone) {\n    tombstone.style.display = '';\n    tombstone.style.opacity = 1;\n    tombstone.style[style.transform] = '';\n    tombstone.style[style.transition] = '';\n    return tombstone;\n  }\n  return this.options.createTombstone();\n};\n\nInfiniteScroller.prototype._addItem = function () {\n  this.items.push({\n    data: null,\n    node: null,\n    height: 0,\n    width: 0,\n    top: 0\n  });\n};\n\nInfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {\n  if (delta === 0) {\n    return initialAnchor;\n  }\n  var i = initialAnchor.index;\n  var tombstones = 0;\n\n  delta += initialAnchor.offset;\n  if (delta < 0) {\n    while (delta < 0 && i > 0 && this.items[i - 1].height) {\n      delta += this.items[i - 1].height;\n      i--;\n    }\n    tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));\n  } else {\n    while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {\n      delta -= this.items[i].height;\n      i++;\n    }\n    if (i >= this.items.length || !this.items[i].height) {\n      tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);\n    }\n  }\n  i += tombstones;\n  delta -= tombstones * this.tombstoneHeight;\n\n  return {\n    index: i,\n    offset: delta\n  };\n};\n\nfunction BScroll(el, options) {\n  this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;\n  if (!this.wrapper) {\n    warn('Can not resolve the wrapper DOM.');\n  }\n  this.scroller = this.wrapper.children[0];\n  if (!this.scroller) {\n    warn('The wrapper need at least one child element to be scroller.');\n  }\n  // cache style for better performance\n  this.scrollerStyle = this.scroller.style;\n\n  this._init(options);\n}\n\ninitMixin(BScroll);\ncoreMixin(BScroll);\neventMixin(BScroll);\nsnapMixin(BScroll);\nwheelMixin(BScroll);\nscrollbarMixin(BScroll);\npullDownMixin(BScroll);\npullUpMixin(BScroll);\nmouseWheelMixin(BScroll);\nzoomMixin(BScroll);\ninfiniteMixin(BScroll);\n\nBScroll.Version = '1.15.1';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BScroll);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__range__ = __webpack_require__(1);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ([Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 23, true, '点'), Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 59, true, '分'), Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 59, true, '秒')]);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return dateAnchor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return dateData; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__range__ = __webpack_require__(1);\n\n\nvar START_YEAR = 1900;\nvar END_YEAR = 2100;\n\nvar UNIT_YEAR = '年';\nvar UNIT_MONTH = '月';\nvar UNIT_DAY = '日';\n\nfunction isLeapYear(y) {\n  return y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0);\n};\n\nfunction getDays(y, m) {\n  y = Number(y);\n  m = Number(m);\n  var endDay = null;\n  switch (m) {\n    case 2:\n      endDay = isLeapYear(y) ? 29 : 28;break;\n    case 1:\n    case 3:\n    case 5:\n    case 7:\n    case 8:\n    case 10:\n    case 12:\n      endDay = 31;break;\n    case 4:\n    case 6:\n    case 9:\n    case 11:\n    default:\n      endDay = 30;break;\n  }\n  var days = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(1, endDay, false, UNIT_DAY);\n  return days.map(function (day) {\n    return { value: day };\n  });\n};\n\nvar yearData = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(START_YEAR, END_YEAR, false, UNIT_YEAR);\nvar monthData = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(1, 12, false, UNIT_MONTH);\n\nvar cascadeMonthData = monthData.map(function (month) {\n  return {\n    value: month,\n    children: []\n  };\n});\n\nvar dateData = yearData.map(function (year) {\n  var item = {\n    value: year,\n    children: cascadeMonthData.slice()\n  };\n  item.children.forEach(function (month) {\n    month.children = getDays(year.slice(0, -1), month.value.slice(0, -1));\n  });\n  return item;\n});\n\nvar date = new Date();\nvar dateAnchor = [{ value: '' + date.getFullYear() + UNIT_YEAR }, { value: '' + (date.getMonth() + 1) + UNIT_MONTH }, { value: '' + date.getDate() + UNIT_DAY }];\n\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":_vm.hide}})]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"slide\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"picker\"},[_c('div',{staticClass:\"picker-title\"},[_c('span',{staticClass:\"pt-cancel\",style:({ color: _vm.colorCancel }),on:{\"click\":_vm.cancel}},[_vm._v(_vm._s(_vm.textCancel))]),_vm._v(\" \"),_c('span',{staticClass:\"pt-submit\",style:({ color: _vm.colorConfirm }),on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.textConfirm))]),_vm._v(\" \"),_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"picker-panel\"},[_c('div',{staticClass:\"picker-mask-top\"}),_vm._v(\" \"),_c('div',{staticClass:\"picker-mask-bottom\"}),_vm._v(\" \"),_c('div',{ref:\"wheelWrapper\",staticClass:\"picker-wheel-wrapper\"},_vm._l((_vm.pickerData),function(wheel,index){return _c('div',{key:index,staticClass:\"picker-wheel\"},[_c('ul',{staticClass:\"wheel-scroll\"},_vm._l((wheel),function(item,index){return _c('li',{key:index,staticClass:\"wheel-item\"},[_vm._v(_vm._s(item))])}),0)])}),0)])])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// vue-awesome-picker.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap af70176ca09c0bd50d5c","<template>\n  <div>\n    <transition name=\"fade\">\n      <div class=\"mask\" v-show=\"display\" @click=\"hide\"></div>\n    </transition>\n    <transition name=\"slide\">\n      <div class=\"picker\" v-show=\"display\">\n      <div class=\"picker-title\">\n        <span class=\"pt-cancel\" @click=\"cancel\" :style=\"{ color: colorCancel }\">{{textCancel}}</span>\n        <span class=\"pt-submit\" @click=\"confirm\" :style=\"{ color: colorConfirm }\">{{textConfirm}}</span>\n\t\t<slot></slot>\n      </div>\n      <div class=\"picker-panel\">\n        <div class=\"picker-mask-top\"></div>\n        <div class=\"picker-mask-bottom\"></div>\n        <div class=\"picker-wheel-wrapper\" ref=\"wheelWrapper\">\n          <div class=\"picker-wheel\" v-for=\"(wheel, index) in pickerData\" :key=\"index\">\n            <ul class=\"wheel-scroll\">\n              <li class=\"wheel-item\" v-for=\"(item, index) in wheel\" :key=\"index\">{{item}}</li>\n            </ul>\n          </div>\n        </div>\n      </div>\n    </div>\n    </transition>\n  </div>\n</template>\n\n<script>\nimport BScroll from 'better-scroll'\nimport timeData from './data/time.js'\nimport { dateData, dateAnchor } from './data/date.js'\n\nconst DATA_NORMAL = 'normal'\nconst DATA_CASCADE = 'cascade'\n\nconst TYPE_NORMAL = 'normal'\nconst TYPE_TIME = 'time'\nconst TYPE_DATE = 'date'\n\nconst TEXT_TITLE = ''\nconst TEXT_CONFIRM = '确定'\nconst TEXT_CANCEL = '取消'\n\nconst COLOR_TITLE = '#000000'\nconst COLOR_CONFIRM = '#42b983'\nconst COLOR_CANCEL = '#999999'\n\nconst EVENT_CONFIRM = 'confirm'\nconst EVENT_CANCEL = 'cancel'\n\nexport default {\n  name: 'awesome-picker',\n  props: {\n    data: {\n      type: Array,\n      default () {\n        return []\n      }\n    },\n    anchor: {\n      type: Array,\n      default () {\n        return []\n      }\n    },\n    type: {\n      type: String,\n      default: TYPE_NORMAL\n    },\n    textTitle: {\n      type: String,\n      default: TEXT_TITLE\n    },\n    textConfirm: {\n      type: String,\n      default: TEXT_CONFIRM\n    },\n    textCancel: {\n      type: String,\n      default: TEXT_CANCEL\n    },\n    colorTitle: {\n      type: String,\n      default: COLOR_TITLE\n    },\n    colorConfirm: {\n      type: String,\n      default: COLOR_CONFIRM\n    },\n    colorCancel: {\n      type: String,\n      default: COLOR_CANCEL\n    },\n    swipeTime: {\n      type: Number,\n      default: 1800\n    }\n  },\n  data () {\n    return {\n      display: false,\n      dataChange: false,\n      pickerData: this._dataGetter(),\n      pickerAnchor: this._anchorGetter(),\n      wheels: []\n    }\n  },\n  watch: {\n    data () {\n      this._setPickerData()\n    }\n  },\n  computed: {\n    proxyData () {\n      return this._dataGetter()\n    },\n    proxyAnchor () {\n      return this._anchorGetter()\n    },\n    dataType () {\n      return !Array.isArray(this.proxyData[0]) ? DATA_CASCADE : DATA_NORMAL\n    }\n  },\n  methods: {\n    _dataGetter () {\n      let data = null\n      switch (this.type) {\n        case TYPE_TIME:\n          data = timeData; break\n        case TYPE_DATE:\n          data = dateData; break\n        case TYPE_NORMAL:\n        default:\n          data = this.data; break\n      }\n      return [...data]\n    },\n    _anchorGetter () {\n      let anchor = []\n      if (this.anchor.length) {\n        anchor = this.anchor\n      } else {\n        switch (this.type) {\n          case TYPE_DATE:\n            anchor = dateAnchor; break\n          default:\n            anchor = this.anchor; break\n        }\n      }\n      anchor = anchor.map((item, i) => {\n        let index = 0\n        if (item.index) {\n          index = item.index\n        } else if (item.value) {\n          index = this.pickerData && this.pickerData[i] && this.pickerData[i].indexOf(item.value) > -1\n            ? this.pickerData[i].indexOf(item.value) : 0\n        } else {\n          index = item\n        }\n        return index\n      })\n      return [...anchor]\n    },\n\n    show () {\n      this.display = true\n      if (!this.wheels.length || this.dataChange) {\n        this.dataType === DATA_CASCADE && this._updatePickerData()\n        this.$nextTick(() => {\n          const wheelWrapper = this.$refs.wheelWrapper\n          this.pickerData.forEach((item, index) => {\n            this._createWheel(wheelWrapper, index).enable()\n          })\n          this._wheelToAnchor(this.proxyAnchor)\n\n          this.dataChange && this._destroyExtraWheels()\n          this.dataChange = false\n        })\n      } else {\n        this.wheels.forEach((wheel) => {\n          wheel.enable()\n        })\n      }\n    },\n\n    hide () {\n      this.wheels.forEach((wheel) => {\n        wheel.disable()\n      })\n      this.display = false\n    },\n\n    _createWheel (wheelWrapper, i) {\n      if (!this.wheels[i]) {\n        const wheel = this.wheels[i] = new BScroll(wheelWrapper.children[i], {\n          wheel: {\n            selectedIndex: 0,\n            rotate: 25\n          },\n          swipeTime: this.swipeTime\n        })\n\t\tthis._wheelToAnchor(this.proxyAnchor)\n        wheel.on('scrollEnd', () => {\n          this._cascadePickerChange(i)\n        })\n      } else {\n        this.wheels[i].refresh()\n      }\n      return this.wheels[i]\n    },\n\n    _cascadePickerChange (i) {\n      if (this.dataType !== DATA_CASCADE) {\n        return\n      }\n      const newIndex = this._getCurrentValue()[i].index\n      if (newIndex !== this.pickerAnchor[i]) {\n        this.pickerAnchor.splice(i, 1, newIndex)\n        this._updatePickerDataChange(i + 1)\n      }\n    },\n\n    _wheelToAnchor (data) {\n      this.wheels.forEach((wheel, i) => {\n        wheel.wheelTo(data[i] || 0)\n      })\n    },\n\n    _getCurrentValue () {\n      const value = []\n      this.wheels.forEach((wheel, i) => {\n        const j = wheel.getSelectedIndex()\n        value.push({\n          index: j,\n          value: this.pickerData[i][j]\n        })\n      })\n      return value\n    },\n\n    _setPickerData () {\n      this.pickerData = this._dataGetter()\n      this.pickerAnchor = this._anchorGetter()\n      if (this.display) {\n\t\tif(this.dataType==DATA_CASCADE){\n\t\t\tthis._updatePickerData()\n\t\t  }\n        this.$nextTick(() => {\n          const wheelWrapper = this.$refs.wheelWrapper\n          this.pickerData.forEach((item, i) => {\n            this._createWheel(wheelWrapper, i)\n          })\n\t\t  this._destroyExtraWheels()\n          this._wheelToAnchor(this.proxyAnchor)\n        })\n      } else {\n        this.dataChange = true\n      }\n    },\n\n    _destroyExtraWheels () {\n      const dataLength = this.pickerData.length\n      if (dataLength < this.wheels.length) {\n        const extraWheels = this.wheels.splice(dataLength)\n        extraWheels.forEach((wheel) => {\n          wheel.destroy()\n        })\n      }\n    },\n\n    _updatePickerData (wheelIndex = 0) {\n\t  this.pickerAnchor = this._anchorGetter()\n      let data = [...this.proxyData]\n      let i = 0\n\t  wheelIndex=0\n      while (data) {\n        if (i >= wheelIndex) {\n          let wheelData = []\n          data.forEach((item) => {\n            wheelData.push(item.value)\n          })\n          this.pickerData.splice(i, 1, wheelData)\n          this.pickerAnchor[i] = wheelIndex === 0\n            ? (this.pickerAnchor[i] < data.length ? this.pickerAnchor[i] || 0 : 0)\n            : this._reloadWheel(i, wheelData)\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null\n        i++\n      }\n      this.pickerData = this.pickerData.slice(0, i)\n    },\n_updatePickerDataChange (wheelIndex = 0) {\n      let data = [...this.proxyData]\n      let i = 0\n\t  wheelIndex=0\n      while (data) {\n        if (i >= wheelIndex) {\n          let wheelData = []\n          data.forEach((item) => {\n            wheelData.push(item.value)\n          })\n          this.pickerData.splice(i, 1, wheelData)\n          this.pickerAnchor[i] = wheelIndex === 0\n            ? (this.pickerAnchor[i] < data.length ? this.pickerAnchor[i] || 0 : 0)\n            : this._reloadWheel(i, wheelData)\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null\n        i++\n      }\n      this.pickerData = this.pickerData.slice(0, i)\n    },\n    _reloadWheel (index, data) {\n      const wheelWrapper = this.$refs.wheelWrapper\n      let scroll = wheelWrapper.children[index].querySelector('.wheel-scroll')\n      let wheel = this.wheels ? this.wheels[index] : false\n      let dist = 0\n      if (scroll && wheel) {\n        this.$set(this.pickerData, index, data)\n        this.pickerAnchor[index] = dist\n        this.$nextTick(() => {\n          wheel = this._createWheel(wheelWrapper, index)\n          wheel.wheelTo(dist)\n        })\n      }\n      return dist\n    },\n\n    confirm () {\n      const isInTransition = this.wheels.some((wheel) => {\n        return wheel.isInTransition\n      })\n      if (isInTransition) {\n        return\n      }\n      const selectedValues = this._getCurrentValue()\n      this.$emit(EVENT_CONFIRM, selectedValues)\n      this.hide()\n    },\n\n    cancel () {\n      this.$emit(EVENT_CANCEL)\n      this.hide()\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n  /* fade */\n  .fade-enter, .fade-leave-to {\n    opacity: 0;\n  }\n\n  .fade-enter-active, .fade-leave-active {\n    transition: all .3s ease;\n  }\n\n  /* slide */\n  .slide-enter, .slide-leave-to {\n    opacity: 0.5;\n    transform: translate3d(0, 270px, 0)\n  }\n\n  .slide-enter-active, .slide-leave-active {\n    transition: all .3s ease;\n  }\n\n  .mask {\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999;\n    background: rgba(0,0,0,.2);\n  }\n\n  .picker {\n    position: fixed;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    height: 270px;\n    z-index: 10000;\n    background: #fff;\n  }\n\n  .picker-title {\n    position: relative;\n    height: 44px;\n    color: #333;\n\n    &:after {\n      content: '';\n      display: block;\n      border-bottom: 1px solid #ebebeb;\n      left: 0;\n      right: 0;\n      transform: scaleY(.5);\n    }\n\n    span {\n      position: absolute;\n      height: 44px;\n      line-height: 44px;\n      padding: 0 12px;\n      font-size: 14px;\n    }\n\n    .pt-cancel {\n      left: 0;\n      color: #999;\n    }\n\n    .pt-submit {\n      right: 0;\n      color: #42b983;\n    }\n\n    h4 {\n      margin: 0;\n      font-size: 16px;\n      font-weight: normal;\n      height: 44px;\n      line-height: 44px;\n      text-align: center;\n    }\n  }\n\n  .picker-panel {\n    position: relative;\n    height: 226px;\n    padding: 24px 12px;\n    box-sizing: border-box;\n\n    .picker-mask-top, .picker-mask-bottom {\n      position: absolute;\n      left: 0;\n      right: 0;\n      height: 72px;\n      background: #fff;\n      transform: translateZ(0);\n      z-index: 1;\n      pointer-events: none;\n    }\n\n    .picker-mask-top {\n      top: 24px;\n      background: linear-gradient(to bottom, rgba(255,255,255,.9), rgba(255,255,255,.5));\n\n      &:after {\n        content: '';\n        display: block;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        border-bottom: 1px solid #ebebeb;\n        transform: scaleY(.5);\n      }\n    }\n\n    .picker-mask-bottom {\n      bottom: 24px;\n      background: linear-gradient(to top, rgba(255,255,255,.9), rgba(255,255,255,.5));\n\n      &:before {\n        content: '';\n        display: block;\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 0;\n        border-bottom: 1px solid #ebebeb;\n        transform: scaleY(.5);\n      }\n    }\n  }\n\n  .picker-wheel-wrapper {\n    display: flex;\n    align-items: stretch;\n    height: 100%;\n\n    .picker-wheel {\n      flex: 1;\n      overflow: hidden;\n    }\n\n    .wheel-scroll {\n      margin-top: 72px;\n\n      .wheel-item {\n        height: 34px;\n        line-height: 34px;\n        font-size: 17px;\n        text-align: center;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        color: #333;\n      }\n    }\n  }\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/lib/vue-awesome-picker.vue","export default function (n, m, polyfill = false, unit = '') {\n  let arr = []\n  for (let i = n; i <= m; i++) {\n    let value = (polyfill && i < 10 ? '0' + i : i) + unit\n    arr.push(value)\n  }\n  return arr\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/range.js","import AwesomePicker from './vue-awesome-picker.vue'\nconst picker = {\n  install (Vue) {\n    Vue.component(AwesomePicker.name, AwesomePicker)\n  }\n}\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(picker)\n}\nexport default picker\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/index.js","function injectStyle (ssrContext) {\n  require(\"!!vue-style-loader!css-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-220e6364\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=styles&index=0!./vue-awesome-picker.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=script&index=0!./vue-awesome-picker.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=script&index=0!./vue-awesome-picker.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-220e6364\\\",\\\"hasScoped\\\":true,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=template&index=0!./vue-awesome-picker.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-220e6364\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/lib/vue-awesome-picker.vue\n// module id = 3\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/_css-loader@0.28.11@css-loader/index.js!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler/index.js?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-220e6364\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./vue-awesome-picker.vue\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar update = require(\"!../../node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js\")(\"67476e7c\", content, true, {});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader!./node_modules/_css-loader@0.28.11@css-loader!./node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler?{\"vue\":true,\"id\":\"data-v-220e6364\",\"scoped\":true,\"hasInlineConfig\":false}!./node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 4\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".fade-enter[data-v-220e6364],.fade-leave-to[data-v-220e6364]{opacity:0}.fade-enter-active[data-v-220e6364],.fade-leave-active[data-v-220e6364]{transition:all .3s ease}.slide-enter[data-v-220e6364],.slide-leave-to[data-v-220e6364]{opacity:.5;transform:translate3d(0,270px,0)}.slide-enter-active[data-v-220e6364],.slide-leave-active[data-v-220e6364]{transition:all .3s ease}.mask[data-v-220e6364]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:rgba(0,0,0,.2)}.picker[data-v-220e6364]{position:fixed;left:0;right:0;bottom:0;height:270px;z-index:10000;background:#fff}.picker-title[data-v-220e6364]{position:relative;height:44px;color:#333}.picker-title[data-v-220e6364]:after{content:\\\"\\\";display:block;border-bottom:1px solid #ebebeb;left:0;right:0;transform:scaleY(.5)}.picker-title span[data-v-220e6364]{position:absolute;height:44px;line-height:44px;padding:0 12px;font-size:14px}.picker-title .pt-cancel[data-v-220e6364]{left:0;color:#999}.picker-title .pt-submit[data-v-220e6364]{right:0;color:#42b983}.picker-title h4[data-v-220e6364]{margin:0;font-size:16px;font-weight:400;height:44px;line-height:44px;text-align:center}.picker-panel[data-v-220e6364]{position:relative;height:226px;padding:24px 12px;box-sizing:border-box}.picker-panel .picker-mask-bottom[data-v-220e6364],.picker-panel .picker-mask-top[data-v-220e6364]{position:absolute;left:0;right:0;height:72px;background:#fff;transform:translateZ(0);z-index:1;pointer-events:none}.picker-panel .picker-mask-top[data-v-220e6364]{top:24px;background:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-top[data-v-220e6364]:after{content:\\\"\\\";display:block;position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-panel .picker-mask-bottom[data-v-220e6364]{bottom:24px;background:linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-bottom[data-v-220e6364]:before{content:\\\"\\\";display:block;position:absolute;left:0;right:0;top:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-wheel-wrapper[data-v-220e6364]{display:flex;align-items:stretch;height:100%}.picker-wheel-wrapper .picker-wheel[data-v-220e6364]{flex:1;overflow:hidden}.picker-wheel-wrapper .wheel-scroll[data-v-220e6364]{margin-top:72px}.picker-wheel-wrapper .wheel-scroll .wheel-item[data-v-220e6364]{height:34px;line-height:34px;font-size:17px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_css-loader@0.28.11@css-loader!./node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler?{\"vue\":true,\"id\":\"data-v-220e6364\",\"scoped\":true,\"hasInlineConfig\":false}!./node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 5\n// module chunks = 0","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js\n// module id = 6\n// module chunks = 0","/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\nvar listToStyles = require('./listToStyles')\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nmodule.exports = function (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js\n// module id = 7\n// module chunks = 0","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nmodule.exports = function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/listToStyles.js\n// module id = 8\n// module chunks = 0","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n  rawScriptExports,\n  compiledTemplate,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier /* server only */\n) {\n  var esModule\n  var scriptExports = rawScriptExports = rawScriptExports || {}\n\n  // ES6 modules interop\n  var type = typeof rawScriptExports.default\n  if (type === 'object' || type === 'function') {\n    esModule = rawScriptExports\n    scriptExports = rawScriptExports.default\n  }\n\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (compiledTemplate) {\n    options.render = compiledTemplate.render\n    options.staticRenderFns = compiledTemplate.staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = injectStyles\n  }\n\n  if (hook) {\n    var functional = options.functional\n    var existing = functional\n      ? options.render\n      : options.beforeCreate\n\n    if (!functional) {\n      // inject component registration as beforeCreate hook\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    } else {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return existing(h, context)\n      }\n    }\n  }\n\n  return {\n    esModule: esModule,\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer.js\n// module id = 9\n// module chunks = 0","/*!\n * better-normal-scroll v1.15.1\n * (c) 2016-2019 ustbhuangyi\n * Released under the MIT License.\n */\n// As of V8 6.6, depending on the size of the array, this is anywhere\n// between 1.5-10x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++) {\n    list[index] = list[index + 1];\n  }\n\n  list.pop();\n}\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nfunction eventMixin(BScroll) {\n  BScroll.prototype.on = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    if (!this._events[type]) {\n      this._events[type] = [];\n    }\n\n    this._events[type].push([fn, context]);\n  };\n\n  BScroll.prototype.once = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    function magic() {\n      this.off(type, magic);\n\n      fn.apply(context, arguments);\n    }\n    // To expose the corresponding function method in order to execute the off method\n    magic.fn = fn;\n\n    this.on(type, magic);\n  };\n\n  BScroll.prototype.off = function (type, fn) {\n    var _events = this._events[type];\n    if (!_events) {\n      return;\n    }\n\n    var count = _events.length;\n    while (count--) {\n      if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {\n        spliceOne(_events, count);\n      }\n    }\n  };\n\n  BScroll.prototype.trigger = function (type) {\n    var events = this._events[type];\n    if (!events) {\n      return;\n    }\n\n    var len = events.length;\n    var eventsCopy = [].concat(toConsumableArray(events));\n    for (var i = 0; i < len; i++) {\n      var event = eventsCopy[i];\n\n      var _event = slicedToArray(event, 2),\n          fn = _event[0],\n          context = _event[1];\n\n      if (fn) {\n        fn.apply(context, [].slice.call(arguments, 1));\n      }\n    }\n  };\n}\n\n// ssr support\nvar inBrowser = typeof window !== 'undefined';\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\nvar isWeChatDevTools = ua && /wechatdevtools/.test(ua);\nvar isAndroid = ua && ua.indexOf('android') > 0;\n\nfunction getNow() {\n  return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();\n}\n\nfunction extend(target) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  for (var i = 0; i < rest.length; i++) {\n    var source = rest[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\n\nfunction isUndef(v) {\n  return v === undefined || v === null;\n}\n\nfunction getDistance(x, y) {\n  return Math.sqrt(x * x + y * y);\n}\n\nvar elementStyle = inBrowser && document.createElement('div').style;\n\nvar vendor = function () {\n  if (!inBrowser) {\n    return false;\n  }\n  // first pick up standard to fix #743\n  var transformNames = {\n    standard: 'transform',\n    webkit: 'webkitTransform',\n    Moz: 'MozTransform',\n    O: 'OTransform',\n    ms: 'msTransform'\n  };\n\n  for (var key in transformNames) {\n    if (elementStyle[transformNames[key]] !== undefined) {\n      return key;\n    }\n  }\n\n  return false;\n}();\n\nfunction prefixStyle(style) {\n  if (vendor === false) {\n    return false;\n  }\n\n  if (vendor === 'standard') {\n    if (style === 'transitionEnd') {\n      return 'transitionend';\n    }\n    return style;\n  }\n\n  return vendor + style.charAt(0).toUpperCase() + style.substr(1);\n}\n\nfunction addEvent(el, type, fn, capture) {\n  el.addEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction removeEvent(el, type, fn, capture) {\n  el.removeEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction offset(el) {\n  var left = 0;\n  var top = 0;\n\n  while (el) {\n    left -= el.offsetLeft;\n    top -= el.offsetTop;\n    el = el.offsetParent;\n  }\n\n  return {\n    left: left,\n    top: top\n  };\n}\n\nfunction offsetToBody(el) {\n  var rect = el.getBoundingClientRect();\n\n  return {\n    left: -(rect.left + window.pageXOffset),\n    top: -(rect.top + window.pageYOffset)\n  };\n}\n\nvar cssVendor = vendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\n\nvar transform = prefixStyle('transform');\nvar transition = prefixStyle('transition');\n\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\n// fix issue #361\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\nvar hasTransform = transform !== false;\nvar hasTransition = inBrowser && transition in elementStyle;\n\nvar style = {\n  transform: transform,\n  transition: transition,\n  transitionTimingFunction: prefixStyle('transitionTimingFunction'),\n  transitionDuration: prefixStyle('transitionDuration'),\n  transitionDelay: prefixStyle('transitionDelay'),\n  transformOrigin: prefixStyle('transformOrigin'),\n  transitionEnd: prefixStyle('transitionEnd')\n};\n\nvar TOUCH_EVENT = 1;\nvar MOUSE_EVENT = 2;\n\nvar eventType = {\n  touchstart: TOUCH_EVENT,\n  touchmove: TOUCH_EVENT,\n  touchend: TOUCH_EVENT,\n\n  mousedown: MOUSE_EVENT,\n  mousemove: MOUSE_EVENT,\n  mouseup: MOUSE_EVENT\n};\n\nfunction getRect(el) {\n  if (el instanceof window.SVGElement) {\n    var rect = el.getBoundingClientRect();\n    return {\n      top: rect.top,\n      left: rect.left,\n      width: rect.width,\n      height: rect.height\n    };\n  } else {\n    return {\n      top: el.offsetTop,\n      left: el.offsetLeft,\n      width: el.offsetWidth,\n      height: el.offsetHeight\n    };\n  }\n}\n\nfunction preventDefaultException(el, exceptions) {\n  for (var i in exceptions) {\n    if (exceptions[i].test(el[i])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction tap(e, eventName) {\n  var ev = document.createEvent('Event');\n  ev.initEvent(eventName, true, true);\n  ev.pageX = e.pageX;\n  ev.pageY = e.pageY;\n  e.target.dispatchEvent(ev);\n}\n\nfunction click(e) {\n  var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';\n\n  var eventSource = void 0;\n  if (e.type === 'mouseup' || e.type === 'mousecancel') {\n    eventSource = e;\n  } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n    eventSource = e.changedTouches[0];\n  }\n  var posSrc = {};\n  if (eventSource) {\n    posSrc.screenX = eventSource.screenX || 0;\n    posSrc.screenY = eventSource.screenY || 0;\n    posSrc.clientX = eventSource.clientX || 0;\n    posSrc.clientY = eventSource.clientY || 0;\n  }\n  var ev = void 0;\n  var bubbles = true;\n  var cancelable = true;\n  if (typeof MouseEvent !== 'undefined') {\n    try {\n      ev = new MouseEvent(event, extend({\n        bubbles: bubbles,\n        cancelable: cancelable\n      }, posSrc));\n    } catch (e) {\n      createEvent();\n    }\n  } else {\n    createEvent();\n  }\n\n  function createEvent() {\n    ev = document.createEvent('Event');\n    ev.initEvent(event, bubbles, cancelable);\n    extend(ev, posSrc);\n  }\n\n  // forwardedTouchEvent set to true in case of the conflict with fastclick\n  ev.forwardedTouchEvent = true;\n  ev._constructed = true;\n  e.target.dispatchEvent(ev);\n}\n\nfunction dblclick(e) {\n  click(e, 'dblclick');\n}\n\nfunction prepend(el, target) {\n  if (target.firstChild) {\n    before(el, target.firstChild);\n  } else {\n    target.appendChild(el);\n  }\n}\n\nfunction before(el, target) {\n  target.parentNode.insertBefore(el, target);\n}\n\nfunction removeChild(el, child) {\n  el.removeChild(child);\n}\n\nvar DEFAULT_OPTIONS = {\n  startX: 0,\n  startY: 0,\n  scrollX: false,\n  scrollY: true,\n  freeScroll: false,\n  directionLockThreshold: 5,\n  eventPassthrough: '',\n  click: false,\n  tap: false,\n  /**\n   * support any side\n   * bounce: {\n   *   top: true,\n   *   bottom: true,\n   *   left: true,\n   *   right: true\n   * }\n   */\n  bounce: true,\n  bounceTime: 800,\n  momentum: true,\n  momentumLimitTime: 300,\n  momentumLimitDistance: 15,\n  swipeTime: 2500,\n  swipeBounceTime: 500,\n  deceleration: 0.0015,\n  flickLimitTime: 200,\n  flickLimitDistance: 100,\n  resizePolling: 60,\n  probeType: 0,\n  preventDefault: true,\n  preventDefaultException: {\n    tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/\n  },\n  HWCompositing: true,\n  useTransition: true,\n  useTransform: true,\n  bindToWrapper: false,\n  disableMouse: hasTouch,\n  disableTouch: !hasTouch,\n  observeDOM: true,\n  autoBlur: true,\n  /**\n   * for picker\n   * wheel: {\n   *   selectedIndex: 0,\n   *   rotate: 25,\n   *   adjustTime: 400\n   *   wheelWrapperClass: 'wheel-scroll',\n   *   wheelItemClass: 'wheel-item'\n   * }\n   */\n  wheel: false,\n  /**\n   * for slide\n   * snap: {\n   *   loop: false,\n   *   el: domEl,\n   *   threshold: 0.1,\n   *   stepX: 100,\n   *   stepY: 100,\n   *   speed: 400,\n   *   easing: {\n   *     style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n   *     fn: function (t) {\n   *       return t * (2 - t)\n   *     }\n   *   }\n   *   listenFlick: true\n   * }\n   */\n  snap: false,\n  /**\n   * for scrollbar\n   * scrollbar: {\n   *   fade: true,\n   *   interactive: false\n   * }\n   */\n  scrollbar: false,\n  /**\n   * for pull down and refresh\n   * pullDownRefresh: {\n   *   threshold: 50,\n   *   stop: 20\n   * }\n   */\n  pullDownRefresh: false,\n  /**\n   * for pull up and load\n   * pullUpLoad: {\n   *   threshold: 50\n   * }\n   */\n  pullUpLoad: false,\n  /**\n   * for mouse wheel\n   * mouseWheel: {\n   *   speed: 20,\n   *   invert: false,\n   *   easeTime: 300\n   * }\n   */\n  mouseWheel: false,\n  stopPropagation: false,\n  /**\n   * for zoom\n   * zoom: {\n   *   start: 1,\n   *   min: 1,\n   *   max: 4\n   * }\n   */\n  zoom: false,\n  /**\n   * for infinity\n   * infinity: {\n   *   render(item, div) {\n   *   },\n   *   createTombstone() {\n   *   },\n   *   fetch(count) {\n   *   }\n   * }\n   */\n  infinity: false,\n  /**\n   * for double click\n   * dblclick: {\n   *   delay: 300\n   * }\n   */\n  dblclick: false\n};\n\nfunction initMixin(BScroll) {\n  BScroll.prototype._init = function (options) {\n    this._handleOptions(options);\n\n    // init private custom events\n    this._events = {};\n\n    this.x = 0;\n    this.y = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n\n    this.setScale(1);\n\n    this._addDOMEvents();\n\n    this._initExtFeatures();\n\n    this._watchTransition();\n\n    if (this.options.observeDOM) {\n      this._initDOMObserver();\n    }\n\n    if (this.options.autoBlur) {\n      this._handleAutoBlur();\n    }\n\n    this.refresh();\n\n    if (!this.options.snap) {\n      this.scrollTo(this.options.startX, this.options.startY);\n    }\n\n    this.enable();\n  };\n\n  BScroll.prototype.setScale = function (scale) {\n    this.lastScale = isUndef(this.scale) ? scale : this.scale;\n    this.scale = scale;\n  };\n\n  BScroll.prototype._handleOptions = function (options) {\n    this.options = extend({}, DEFAULT_OPTIONS, options);\n\n    this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';\n\n    this.options.useTransition = this.options.useTransition && hasTransition;\n    this.options.useTransform = this.options.useTransform && hasTransform;\n\n    this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n    // If you want eventPassthrough I have to lock one of the axes\n    this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;\n    this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;\n\n    // With eventPassthrough we also need lockDirection mechanism\n    this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n    this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n    if (this.options.tap === true) {\n      this.options.tap = 'tap';\n    }\n  };\n\n  BScroll.prototype._addDOMEvents = function () {\n    var eventOperation = addEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._removeDOMEvents = function () {\n    var eventOperation = removeEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._handleDOMEvents = function (eventOperation) {\n    var target = this.options.bindToWrapper ? this.wrapper : window;\n    eventOperation(window, 'orientationchange', this);\n    eventOperation(window, 'resize', this);\n\n    if (this.options.click) {\n      eventOperation(this.wrapper, 'click', this, true);\n    }\n\n    if (!this.options.disableMouse) {\n      eventOperation(this.wrapper, 'mousedown', this);\n      eventOperation(target, 'mousemove', this);\n      eventOperation(target, 'mousecancel', this);\n      eventOperation(target, 'mouseup', this);\n    }\n\n    if (hasTouch && !this.options.disableTouch) {\n      eventOperation(this.wrapper, 'touchstart', this);\n      eventOperation(target, 'touchmove', this);\n      eventOperation(target, 'touchcancel', this);\n      eventOperation(target, 'touchend', this);\n    }\n\n    eventOperation(this.scroller, style.transitionEnd, this);\n  };\n\n  BScroll.prototype._initExtFeatures = function () {\n    if (this.options.snap) {\n      this._initSnap();\n    }\n    if (this.options.scrollbar) {\n      this._initScrollbar();\n    }\n    if (this.options.pullUpLoad) {\n      this._initPullUp();\n    }\n    if (this.options.pullDownRefresh) {\n      this._initPullDown();\n    }\n    if (this.options.wheel) {\n      this._initWheel();\n    }\n    if (this.options.mouseWheel) {\n      this._initMouseWheel();\n    }\n    if (this.options.zoom) {\n      this._initZoom();\n    }\n    if (this.options.infinity) {\n      this._initInfinite();\n    }\n  };\n\n  BScroll.prototype._watchTransition = function () {\n    if (typeof Object.defineProperty !== 'function') {\n      return;\n    }\n    var me = this;\n    var isInTransition = false;\n    var key = this.options.useTransition ? 'isInTransition' : 'isAnimating';\n    Object.defineProperty(this, key, {\n      get: function get() {\n        return isInTransition;\n      },\n      set: function set(newVal) {\n        isInTransition = newVal;\n        // fix issue #359\n        var el = me.scroller.children.length ? me.scroller.children : [me.scroller];\n        var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';\n        for (var i = 0; i < el.length; i++) {\n          el[i].style.pointerEvents = pointerEvents;\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._handleAutoBlur = function () {\n    this.on('scrollStart', function () {\n      var activeElement = document.activeElement;\n      if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n        activeElement.blur();\n      }\n    });\n  };\n\n  BScroll.prototype._initDOMObserver = function () {\n    var _this = this;\n\n    if (typeof MutationObserver !== 'undefined') {\n      var timer = void 0;\n      var observer = new MutationObserver(function (mutations) {\n        // don't do any refresh during the transition, or outside of the boundaries\n        if (_this._shouldNotRefresh()) {\n          return;\n        }\n        var immediateRefresh = false;\n        var deferredRefresh = false;\n        for (var i = 0; i < mutations.length; i++) {\n          var mutation = mutations[i];\n          if (mutation.type !== 'attributes') {\n            immediateRefresh = true;\n            break;\n          } else {\n            if (mutation.target !== _this.scroller) {\n              deferredRefresh = true;\n              break;\n            }\n          }\n        }\n        if (immediateRefresh) {\n          _this.refresh();\n        } else if (deferredRefresh) {\n          // attributes changes too often\n          clearTimeout(timer);\n          timer = setTimeout(function () {\n            if (!_this._shouldNotRefresh()) {\n              _this.refresh();\n            }\n          }, 60);\n        }\n      });\n      var config = {\n        attributes: true,\n        childList: true,\n        subtree: true\n      };\n      observer.observe(this.scroller, config);\n\n      this.on('destroy', function () {\n        observer.disconnect();\n      });\n    } else {\n      this._checkDOMUpdate();\n    }\n  };\n\n  BScroll.prototype._shouldNotRefresh = function () {\n    var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;\n\n    return this.isInTransition || this.stopFromTransition || outsideBoundaries;\n  };\n\n  BScroll.prototype._checkDOMUpdate = function () {\n    var scrollerRect = getRect(this.scroller);\n    var oldWidth = scrollerRect.width;\n    var oldHeight = scrollerRect.height;\n\n    function check() {\n      if (this.destroyed) {\n        return;\n      }\n      scrollerRect = getRect(this.scroller);\n      var newWidth = scrollerRect.width;\n      var newHeight = scrollerRect.height;\n\n      if (oldWidth !== newWidth || oldHeight !== newHeight) {\n        this.refresh();\n      }\n      oldWidth = newWidth;\n      oldHeight = newHeight;\n\n      next.call(this);\n    }\n\n    function next() {\n      var _this2 = this;\n\n      setTimeout(function () {\n        check.call(_this2);\n      }, 1000);\n    }\n\n    next.call(this);\n  };\n\n  BScroll.prototype.handleEvent = function (e) {\n    switch (e.type) {\n      case 'touchstart':\n      case 'mousedown':\n        this._start(e);\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoomStart(e);\n        }\n        break;\n      case 'touchmove':\n      case 'mousemove':\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoom(e);\n        } else {\n          this._move(e);\n        }\n        break;\n      case 'touchend':\n      case 'mouseup':\n      case 'touchcancel':\n      case 'mousecancel':\n        if (this.scaled) {\n          this._zoomEnd(e);\n        } else {\n          this._end(e);\n        }\n        break;\n      case 'orientationchange':\n      case 'resize':\n        this._resize();\n        break;\n      case 'transitionend':\n      case 'webkitTransitionEnd':\n      case 'oTransitionEnd':\n      case 'MSTransitionEnd':\n        this._transitionEnd(e);\n        break;\n      case 'click':\n        if (this.enabled && !e._constructed) {\n          if (!preventDefaultException(e.target, this.options.preventDefaultException)) {\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        }\n        break;\n      case 'wheel':\n      case 'DOMMouseScroll':\n      case 'mousewheel':\n        this._onMouseWheel(e);\n        break;\n    }\n  };\n\n  BScroll.prototype.refresh = function () {\n    var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\n    var wrapperRect = getRect(this.wrapper);\n    this.wrapperWidth = wrapperRect.width;\n    this.wrapperHeight = wrapperRect.height;\n\n    var scrollerRect = getRect(this.scroller);\n    this.scrollerWidth = Math.round(scrollerRect.width * this.scale);\n    this.scrollerHeight = Math.round(scrollerRect.height * this.scale);\n\n    this.relativeX = scrollerRect.left;\n    this.relativeY = scrollerRect.top;\n\n    if (isWrapperStatic) {\n      this.relativeX -= wrapperRect.left;\n      this.relativeY -= wrapperRect.top;\n    }\n\n    this.minScrollX = 0;\n    this.minScrollY = 0;\n\n    var wheel = this.options.wheel;\n    if (wheel) {\n      this.items = this.scroller.children;\n      // check whether there are all disable items or not when refresh\n      this._checkWheelAllDisabled();\n      this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;\n      if (this.selectedIndex === undefined) {\n        this.selectedIndex = wheel.selectedIndex || 0;\n      }\n      this.options.startY = -this.selectedIndex * this.itemHeight;\n\n      this.maxScrollX = 0;\n      this.maxScrollY = -this.itemHeight * (this.items.length - 1);\n    } else {\n      this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n      if (!this.options.infinity) {\n        this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n      }\n      if (this.maxScrollX < 0) {\n        this.maxScrollX -= this.relativeX;\n        this.minScrollX = -this.relativeX;\n      } else if (this.scale > 1) {\n        this.maxScrollX = this.maxScrollX / 2 - this.relativeX;\n        this.minScrollX = this.maxScrollX;\n      }\n      if (this.maxScrollY < 0) {\n        this.maxScrollY -= this.relativeY;\n        this.minScrollY = -this.relativeY;\n      } else if (this.scale > 1) {\n        this.maxScrollY = this.maxScrollY / 2 - this.relativeY;\n        this.minScrollY = this.maxScrollY;\n      }\n    }\n\n    this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;\n    this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;\n\n    if (!this.hasHorizontalScroll) {\n      this.maxScrollX = this.minScrollX;\n      this.scrollerWidth = this.wrapperWidth;\n    }\n\n    if (!this.hasVerticalScroll) {\n      this.maxScrollY = this.minScrollY;\n      this.scrollerHeight = this.wrapperHeight;\n    }\n\n    this.endTime = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.wrapperOffset = offset(this.wrapper);\n\n    this.trigger('refresh');\n\n    !this.scaled && this.resetPosition();\n  };\n\n  BScroll.prototype.enable = function () {\n    this.enabled = true;\n  };\n\n  BScroll.prototype.disable = function () {\n    this.enabled = false;\n  };\n}\n\nvar ease = {\n  // easeOutQuint\n  swipe: {\n    style: 'cubic-bezier(0.23, 1, 0.32, 1)',\n    fn: function fn(t) {\n      return 1 + --t * t * t * t * t;\n    }\n  },\n  // easeOutQuard\n  swipeBounce: {\n    style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n    fn: function fn(t) {\n      return t * (2 - t);\n    }\n  },\n  // easeOutQuart\n  bounce: {\n    style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n    fn: function fn(t) {\n      return 1 - --t * t * t * t;\n    }\n  }\n};\n\nfunction momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options, scroll) {\n  var distance = current - start;\n  var speed = Math.abs(distance) / time;\n\n  var deceleration = options.deceleration,\n      itemHeight = options.itemHeight,\n      swipeBounceTime = options.swipeBounceTime,\n      wheel = options.wheel,\n      swipeTime = options.swipeTime;\n\n  var duration = swipeTime;\n  var rate = wheel ? 4 : 15;\n\n  var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);\n\n  if (wheel && itemHeight) {\n    destination = scroll._findNearestValidWheel(destination).y;\n  }\n\n  if (destination < lowerMargin) {\n    destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;\n    duration = swipeBounceTime;\n  } else if (destination > upperMargin) {\n    destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;\n    duration = swipeBounceTime;\n  }\n\n  return {\n    destination: Math.round(destination),\n    duration: duration\n  };\n}\n\nvar DEFAULT_INTERVAL = 100 / 60;\n\nfunction noop() {}\n\nvar requestAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||\n  // if all else fails, use setTimeout\n  function (callback) {\n    return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.\n  };\n}();\n\nvar cancelAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n    window.clearTimeout(id);\n  };\n}();\n\nvar DIRECTION_UP = 1;\nvar DIRECTION_DOWN = -1;\nvar DIRECTION_LEFT = 1;\nvar DIRECTION_RIGHT = -1;\n\nvar PROBE_DEBOUNCE = 1;\n\nvar PROBE_REALTIME = 3;\n\nfunction warn(msg) {\n  console.error('[BScroll warn]: ' + msg);\n}\n\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error('[BScroll] ' + msg);\n  }\n}\n\nfunction coreMixin(BScroll) {\n  BScroll.prototype._start = function (e) {\n    var _eventType = eventType[e.type];\n    if (_eventType !== TOUCH_EVENT) {\n      if (e.button !== 0) {\n        return;\n      }\n    }\n    if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {\n      return;\n    }\n    this.initiated = _eventType;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.moved = false;\n    this.distX = 0;\n    this.distY = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.movingDirectionX = 0;\n    this.movingDirectionY = 0;\n    this.directionLocked = 0;\n\n    this._transitionTime();\n    this.startTime = getNow();\n\n    if (this.options.wheel) {\n      this.target = e.target;\n    }\n\n    this.stop();\n\n    var point = e.touches ? e.touches[0] : e;\n\n    this.startX = this.x;\n    this.startY = this.y;\n    this.absStartX = this.x;\n    this.absStartY = this.y;\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.trigger('beforeScrollStart');\n  };\n\n  BScroll.prototype._move = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var point = e.touches ? e.touches[0] : e;\n    var deltaX = point.pageX - this.pointX;\n    var deltaY = point.pageY - this.pointY;\n\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.distX += deltaX;\n    this.distY += deltaY;\n\n    var absDistX = Math.abs(this.distX);\n    var absDistY = Math.abs(this.distY);\n\n    var timestamp = getNow();\n\n    // We need to move at least momentumLimitDistance pixels for the scrolling to initiate\n    if (timestamp - this.endTime > this.options.momentumLimitTime && !this.moved && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {\n      return;\n    }\n\n    // If you are scrolling in one direction lock the other\n    if (!this.directionLocked && !this.options.freeScroll) {\n      if (absDistX > absDistY + this.options.directionLockThreshold) {\n        this.directionLocked = 'h'; // lock horizontally\n      } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n        this.directionLocked = 'v'; // lock vertically\n      } else {\n        this.directionLocked = 'n'; // no lock\n      }\n    }\n\n    if (this.directionLocked === 'h') {\n      if (this.options.eventPassthrough === 'vertical') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'horizontal') {\n        this.initiated = false;\n        return;\n      }\n      deltaY = 0;\n    } else if (this.directionLocked === 'v') {\n      if (this.options.eventPassthrough === 'horizontal') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'vertical') {\n        this.initiated = false;\n        return;\n      }\n      deltaX = 0;\n    }\n\n    deltaX = this.hasHorizontalScroll ? deltaX : 0;\n    deltaY = this.hasVerticalScroll ? deltaY : 0;\n    this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    var newX = this.x + deltaX;\n    var newY = this.y + deltaY;\n\n    var top = false;\n    var bottom = false;\n    var left = false;\n    var right = false;\n    // Slow down or stop if outside of the boundaries\n    var bounce = this.options.bounce;\n    if (bounce !== false) {\n      top = bounce.top === undefined ? true : bounce.top;\n      bottom = bounce.bottom === undefined ? true : bounce.bottom;\n      left = bounce.left === undefined ? true : bounce.left;\n      right = bounce.right === undefined ? true : bounce.right;\n    }\n    if (newX > this.minScrollX || newX < this.maxScrollX) {\n      if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {\n        newX = this.x + deltaX / 3;\n      } else {\n        newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;\n      }\n    }\n    if (newY > this.minScrollY || newY < this.maxScrollY) {\n      if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {\n        newY = this.y + deltaY / 3;\n      } else {\n        newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;\n      }\n    }\n\n    if (!this.moved) {\n      this.moved = true;\n      this.trigger('scrollStart');\n    }\n\n    this._translate(newX, newY);\n\n    if (timestamp - this.startTime > this.options.momentumLimitTime) {\n      this.startTime = timestamp;\n      this.startX = this.x;\n      this.startY = this.y;\n\n      if (this.options.probeType === PROBE_DEBOUNCE) {\n        this.trigger('scroll', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n\n    if (this.options.probeType > PROBE_DEBOUNCE) {\n      this.trigger('scroll', {\n        x: this.x,\n        y: this.y\n      });\n    }\n\n    var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;\n    var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n\n    var pX = this.pointX - scrollLeft;\n    var pY = this.pointY - scrollTop;\n\n    if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {\n      this._end(e);\n    }\n  };\n\n  BScroll.prototype._end = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n    this.initiated = false;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.trigger('touchEnd', {\n      x: this.x,\n      y: this.y\n    });\n\n    this.isInTransition = false;\n\n    // ensures that the last position is rounded\n    var newX = Math.round(this.x);\n    var newY = Math.round(this.y);\n\n    var deltaX = newX - this.absStartX;\n    var deltaY = newY - this.absStartY;\n    this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    // if configure pull down refresh, check it first\n    if (this.options.pullDownRefresh && this._checkPullDown()) {\n      return;\n    }\n\n    // check if it is a click operation\n    if (this._checkClick(e)) {\n      this.trigger('scrollCancel');\n      return;\n    }\n\n    // reset if we are outside of the boundaries\n    if (this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      return;\n    }\n\n    this._translate(newX, newY);\n\n    this.endTime = getNow();\n    var duration = this.endTime - this.startTime;\n    var absDistX = Math.abs(newX - this.startX);\n    var absDistY = Math.abs(newY - this.startY);\n\n    // flick\n    if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {\n      this.trigger('flick');\n      return;\n    }\n\n    var time = 0;\n    // start momentum animation if needed\n    if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {\n      var top = false;\n      var bottom = false;\n      var left = false;\n      var right = false;\n      var bounce = this.options.bounce;\n      if (bounce !== false) {\n        top = bounce.top === undefined ? true : bounce.top;\n        bottom = bounce.bottom === undefined ? true : bounce.bottom;\n        left = bounce.left === undefined ? true : bounce.left;\n        right = bounce.right === undefined ? true : bounce.right;\n      }\n      var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;\n      var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;\n      var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options, this) : { destination: newX, duration: 0 };\n      var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options, this) : { destination: newY, duration: 0 };\n      newX = momentumX.destination;\n      newY = momentumY.destination;\n      time = Math.max(momentumX.duration, momentumY.duration);\n      this.isInTransition = true;\n    } else {\n      if (this.options.wheel) {\n        newY = this._findNearestValidWheel(newY).y;\n        time = this.options.wheel.adjustTime || 400;\n      }\n    }\n\n    var easing = ease.swipe;\n    if (this.options.snap) {\n      var snap = this._nearestSnap(newX, newY);\n      this.currentPage = snap;\n      time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n      newX = snap.x;\n      newY = snap.y;\n\n      this.directionX = 0;\n      this.directionY = 0;\n      easing = this.options.snap.easing || ease.bounce;\n    }\n\n    if (newX !== this.x || newY !== this.y) {\n      // change easing function when scroller goes out of the boundaries\n      if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {\n        easing = ease.swipeBounce;\n      }\n      this.scrollTo(newX, newY, time, easing);\n      return;\n    }\n\n    if (this.options.wheel) {\n      this.selectedIndex = this._findNearestValidWheel(this.y).index;\n    }\n\n    this.trigger('scrollEnd', {\n      x: this.x,\n      y: this.y\n    });\n  };\n\n  BScroll.prototype._checkClick = function (e) {\n    // when in the process of pulling down, it should not prevent click\n    var preventClick = this.stopFromTransition && !this.pulling;\n    this.stopFromTransition = false;\n\n    // we scrolled less than 15 pixels\n    if (!this.moved) {\n      if (this.options.wheel) {\n        if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {\n          var index = this._findNearestValidWheel(this.y).index;\n          var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);\n          this.target = this.items[index + _offset];\n        }\n        var top = offset(this.target).top;\n        var left = offset(this.target).left;\n        top -= this.wrapperOffset.top;\n        top -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0;\n        left -= this.wrapperOffset.left;\n        left -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0;\n\n        top = this._findNearestValidWheel(top).y;\n        this.scrollTo(left, top, this.options.wheel.adjustTime || 400, ease.swipe);\n        return true;\n      } else {\n        if (!preventClick) {\n          var _dblclick = this.options.dblclick;\n          var dblclickTrigged = false;\n          if (_dblclick && this.lastClickTime) {\n            var _dblclick$delay = _dblclick.delay,\n                delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;\n\n            if (getNow() - this.lastClickTime < delay) {\n              dblclickTrigged = true;\n              dblclick(e);\n            }\n          }\n          if (this.options.tap) {\n            tap(e, this.options.tap);\n          }\n\n          if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n            click(e);\n          }\n          this.lastClickTime = dblclickTrigged ? null : getNow();\n          return true;\n        }\n        return false;\n      }\n    }\n    return false;\n  };\n\n  BScroll.prototype._resize = function () {\n    var _this = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    // fix a scroll problem under Android condition\n    if (isAndroid) {\n      this.wrapper.scrollTop = 0;\n    }\n    clearTimeout(this.resizeTimeout);\n    this.resizeTimeout = setTimeout(function () {\n      _this.refresh();\n    }, this.options.resizePolling);\n  };\n\n  BScroll.prototype._startProbe = function () {\n    cancelAnimationFrame(this.probeTimer);\n    this.probeTimer = requestAnimationFrame(probe);\n\n    var me = this;\n\n    function probe() {\n      var pos = me.getComputedPosition();\n      me.trigger('scroll', pos);\n      if (!me.isInTransition) {\n        me.trigger('scrollEnd', pos);\n        return;\n      }\n      me.probeTimer = requestAnimationFrame(probe);\n    }\n  };\n\n  BScroll.prototype._transitionTime = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    this.scrollerStyle[style.transitionDuration] = time + 'ms';\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionDuration] = time + 'ms';\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i = 0; _i < this.indicators.length; _i++) {\n        this.indicators[_i].transitionTime(time);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionTimingFunction = function (easing) {\n    this.scrollerStyle[style.transitionTimingFunction] = easing;\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionTimingFunction] = easing;\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {\n        this.indicators[_i2].transitionTimingFunction(easing);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionEnd = function (e) {\n    if (e.target !== this.scroller || !this.isInTransition) {\n      return;\n    }\n\n    this._transitionTime();\n    var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;\n    if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      this.isInTransition = false;\n      if (this.options.probeType !== PROBE_REALTIME) {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n  };\n\n  BScroll.prototype._translate = function (x, y, scale) {\n    assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');\n    if (isUndef(scale)) {\n      scale = this.scale;\n    }\n    if (this.options.useTransform) {\n      this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;\n    } else {\n      x = Math.round(x);\n      y = Math.round(y);\n      this.scrollerStyle.left = x + 'px';\n      this.scrollerStyle.top = y + 'px';\n    }\n\n    if (this.options.wheel) {\n      var _options$wheel$rotate = this.options.wheel.rotate,\n          rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;\n\n      for (var i = 0; i < this.items.length; i++) {\n        var deg = rotate * (y / this.itemHeight + i);\n        this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';\n      }\n    }\n\n    this.x = x;\n    this.y = y;\n    this.setScale(scale);\n\n    if (this.indicators) {\n      for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {\n        this.indicators[_i3].updatePosition();\n      }\n    }\n  };\n\n  BScroll.prototype._animate = function (destX, destY, duration, easingFn) {\n    var me = this;\n    var startX = this.x;\n    var startY = this.y;\n    var startScale = this.lastScale;\n    var destScale = this.scale;\n    var startTime = getNow();\n    var destTime = startTime + duration;\n\n    function step() {\n      var now = getNow();\n\n      if (now >= destTime) {\n        me.isAnimating = false;\n        me._translate(destX, destY, destScale);\n\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n\n        if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {\n          me.trigger('scrollEnd', {\n            x: me.x,\n            y: me.y\n          });\n        }\n        return;\n      }\n      now = (now - startTime) / duration;\n      var easing = easingFn(now);\n      var newX = (destX - startX) * easing + startX;\n      var newY = (destY - startY) * easing + startY;\n      var newScale = (destScale - startScale) * easing + startScale;\n\n      me._translate(newX, newY, newScale);\n\n      if (me.isAnimating) {\n        me.animateTimer = requestAnimationFrame(step);\n      }\n\n      if (me.options.probeType === PROBE_REALTIME) {\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n      }\n    }\n\n    this.isAnimating = true;\n    cancelAnimationFrame(this.animateTimer);\n    step();\n  };\n\n  BScroll.prototype.scrollBy = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n\n    x = this.x + x;\n    y = this.y + y;\n\n    this.scrollTo(x, y, time, easing);\n  };\n\n  BScroll.prototype.scrollTo = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n    var isSilent = arguments[4];\n\n    if (this.options.wheel) {\n      y = this._findNearestValidWheel(y).y;\n    }\n    this.isInTransition = this.options.useTransition && time > 0 && (this.x !== x || this.y !== y);\n\n    if (!time || this.options.useTransition) {\n      this._transitionTimingFunction(easing.style);\n      this._transitionTime(time);\n      this._translate(x, y);\n\n      if (time && this.options.probeType === PROBE_REALTIME) {\n        this._startProbe();\n      }\n      if (!time && !isSilent) {\n        // don't trigger resetPosition when zoom feature is open, fix #748\n        if (this.options.zoom) return;\n        this.trigger('scroll', {\n          x: x,\n          y: y\n        });\n        // force reflow to put everything in position\n        this._reflow = document.body.offsetHeight;\n        if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\n          this.trigger('scrollEnd', {\n            x: x,\n            y: y\n          });\n        }\n      }\n\n      if (this.options.wheel) {\n        this.selectedIndex = this._findNearestValidWheel(y).index;\n      }\n    } else {\n      this._animate(x, y, time, easing.fn);\n    }\n  };\n\n  BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\n    if (!el) {\n      return;\n    }\n    el = el.nodeType ? el : this.scroller.querySelector(el);\n\n    if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {\n      return;\n    }\n\n    var pos = offset(el);\n    pos.left -= this.wrapperOffset.left;\n    pos.top -= this.wrapperOffset.top;\n\n    // if offsetX/Y are true we center the element to the screen\n    if (offsetX === true) {\n      offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n    }\n    if (offsetY === true) {\n      offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n    }\n\n    pos.left -= offsetX || 0;\n    pos.top -= offsetY || 0;\n    pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n    pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n    if (this.options.wheel) {\n      pos.top = this._findNearestValidWheel(pos.top).y;\n    }\n\n    this.scrollTo(pos.left, pos.top, time, easing);\n  };\n\n  BScroll.prototype.resetPosition = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;\n\n    var x = this.x;\n    var roundX = Math.round(x);\n    if (!this.hasHorizontalScroll || roundX > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (roundX < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    var y = this.y;\n    var roundY = Math.round(y);\n    if (!this.hasVerticalScroll || roundY > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (roundY < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    if (x === this.x && y === this.y) {\n      return false;\n    }\n\n    this.scrollTo(x, y, time, easeing);\n\n    return true;\n  };\n\n  BScroll.prototype.getComputedPosition = function () {\n    var matrix = window.getComputedStyle(this.scroller, null);\n    var x = void 0;\n    var y = void 0;\n\n    if (this.options.useTransform) {\n      matrix = matrix[style.transform].split(')')[0].split(', ');\n      x = +(matrix[12] || matrix[4]);\n      y = +(matrix[13] || matrix[5]);\n    } else {\n      x = +matrix.left.replace(/[^-\\d.]/g, '');\n      y = +matrix.top.replace(/[^-\\d.]/g, '');\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  };\n\n  BScroll.prototype.stop = function () {\n    if (this.options.useTransition && this.isInTransition) {\n      this.isInTransition = false;\n      cancelAnimationFrame(this.probeTimer);\n      var pos = this.getComputedPosition();\n      this._translate(pos.x, pos.y);\n      if (this.options.wheel) {\n        this.target = this.items[this._findNearestValidWheel(pos.y).index];\n      } else {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n      this.stopFromTransition = true;\n    } else if (!this.options.useTransition && this.isAnimating) {\n      this.isAnimating = false;\n      cancelAnimationFrame(this.animateTimer);\n      this.trigger('scrollEnd', {\n        x: this.x,\n        y: this.y\n      });\n      this.stopFromTransition = true;\n    }\n  };\n\n  BScroll.prototype.destroy = function () {\n    this.destroyed = true;\n    this.trigger('destroy');\n    if (this.options.useTransition) {\n      cancelAnimationFrame(this.probeTimer);\n    } else {\n      cancelAnimationFrame(this.animateTimer);\n    }\n    this._removeDOMEvents();\n    // remove custom events\n    this._events = {};\n  };\n}\n\nfunction snapMixin(BScroll) {\n  BScroll.prototype._initSnap = function () {\n    var _this = this;\n\n    this.currentPage = {};\n    var snap = this.options.snap;\n\n    if (snap.loop) {\n      var children = this.scroller.children;\n      if (children.length > 1) {\n        prepend(children[children.length - 1].cloneNode(true), this.scroller);\n        this.scroller.appendChild(children[1].cloneNode(true));\n      } else {\n        // Loop does not make any sense if there is only one child.\n        snap.loop = false;\n      }\n    }\n\n    var el = snap.el;\n    if (typeof el === 'string') {\n      el = this.scroller.querySelectorAll(el);\n    }\n\n    this.on('refresh', function () {\n      _this.pages = [];\n\n      if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {\n        return;\n      }\n\n      var stepX = snap.stepX || _this.wrapperWidth;\n      var stepY = snap.stepY || _this.wrapperHeight;\n\n      var x = 0;\n      var y = void 0;\n      var cx = void 0;\n      var cy = void 0;\n      var i = 0;\n      var l = void 0;\n      var m = 0;\n      var n = void 0;\n      var rect = void 0;\n      if (!el) {\n        cx = Math.round(stepX / 2);\n        cy = Math.round(stepY / 2);\n\n        while (x > -_this.scrollerWidth) {\n          _this.pages[i] = [];\n          l = 0;\n          y = 0;\n\n          while (y > -_this.scrollerHeight) {\n            _this.pages[i][l] = {\n              x: Math.max(x, _this.maxScrollX),\n              y: Math.max(y, _this.maxScrollY),\n              width: stepX,\n              height: stepY,\n              cx: x - cx,\n              cy: y - cy\n            };\n\n            y -= stepY;\n            l++;\n          }\n\n          x -= stepX;\n          i++;\n        }\n      } else {\n        l = el.length;\n        n = -1;\n\n        for (; i < l; i++) {\n          rect = getRect(el[i]);\n          if (i === 0 || rect.left <= getRect(el[i - 1]).left) {\n            m = 0;\n            n++;\n          }\n\n          if (!_this.pages[m]) {\n            _this.pages[m] = [];\n          }\n\n          x = Math.max(-rect.left, _this.maxScrollX);\n          y = Math.max(-rect.top, _this.maxScrollY);\n          cx = x - Math.round(rect.width / 2);\n          cy = y - Math.round(rect.height / 2);\n\n          _this.pages[m][n] = {\n            x: x,\n            y: y,\n            width: rect.width,\n            height: rect.height,\n            cx: cx,\n            cy: cy\n          };\n\n          if (x > _this.maxScrollX) {\n            m++;\n          }\n        }\n      }\n\n      _this._checkSnapLoop();\n\n      var initPageX = snap._loopX ? 1 : 0;\n      var initPageY = snap._loopY ? 1 : 0;\n      _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0, undefined, true);\n\n      // Update snap threshold if needed.\n      var snapThreshold = snap.threshold;\n      if (snapThreshold % 1 === 0) {\n        _this.snapThresholdX = snapThreshold;\n        _this.snapThresholdY = snapThreshold;\n      } else {\n        _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);\n        _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);\n      }\n    });\n\n    this.on('scrollEnd', function () {\n      if (snap.loop) {\n        if (snap._loopX) {\n          if (_this.currentPage.pageX === 0) {\n            _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0, undefined, true);\n          }\n          if (_this.currentPage.pageX === _this.pages.length - 1) {\n            _this._goToPage(1, _this.currentPage.pageY, 0, undefined, true);\n          }\n        } else {\n          if (_this.currentPage.pageY === 0) {\n            _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0, undefined, true);\n          }\n          if (_this.currentPage.pageY === _this.pages[0].length - 1) {\n            _this._goToPage(_this.currentPage.pageX, 1, 0, undefined, true);\n          }\n        }\n      }\n    });\n\n    if (snap.listenFlick !== false) {\n      this.on('flick', function () {\n        var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);\n\n        _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);\n      });\n    }\n\n    this.on('destroy', function () {\n      if (snap.loop) {\n        var _children = _this.scroller.children;\n        if (_children.length > 2) {\n          removeChild(_this.scroller, _children[_children.length - 1]);\n          removeChild(_this.scroller, _children[0]);\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._checkSnapLoop = function () {\n    var snap = this.options.snap;\n\n    if (!snap.loop || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (this.pages.length > 1) {\n      snap._loopX = true;\n    }\n    if (this.pages[0] && this.pages[0].length > 1) {\n      snap._loopY = true;\n    }\n    if (snap._loopX && snap._loopY) {\n      warn('Loop does not support two direction at the same time.');\n    }\n  };\n\n  BScroll.prototype._nearestSnap = function (x, y) {\n    if (!this.pages.length) {\n      return { x: 0, y: 0, pageX: 0, pageY: 0 };\n    }\n\n    var i = 0;\n    // Check if we exceeded the snap threshold\n    if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {\n      return this.currentPage;\n    }\n\n    if (x > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (x < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    if (y > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (y < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    var l = this.pages.length;\n    for (; i < l; i++) {\n      if (x >= this.pages[i][0].cx) {\n        x = this.pages[i][0].x;\n        break;\n      }\n    }\n\n    l = this.pages[i].length;\n\n    var m = 0;\n    for (; m < l; m++) {\n      if (y >= this.pages[0][m].cy) {\n        y = this.pages[0][m].y;\n        break;\n      }\n    }\n\n    if (i === this.currentPage.pageX) {\n      i += this.directionX;\n\n      if (i < 0) {\n        i = 0;\n      } else if (i >= this.pages.length) {\n        i = this.pages.length - 1;\n      }\n\n      x = this.pages[i][0].x;\n    }\n\n    if (m === this.currentPage.pageY) {\n      m += this.directionY;\n\n      if (m < 0) {\n        m = 0;\n      } else if (m >= this.pages[0].length) {\n        m = this.pages[0].length - 1;\n      }\n\n      y = this.pages[0][m].y;\n    }\n\n    return {\n      x: x,\n      y: y,\n      pageX: i,\n      pageY: m\n    };\n  };\n\n  BScroll.prototype._goToPage = function (x) {\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var time = arguments[2];\n    var easing = arguments[3];\n    var isSilent = arguments[4];\n\n    var snap = this.options.snap;\n\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    easing = easing || snap.easing || ease.bounce;\n\n    if (x >= this.pages.length) {\n      x = this.pages.length - 1;\n    } else if (x < 0) {\n      x = 0;\n    }\n\n    if (!this.pages[x]) {\n      return;\n    }\n\n    if (y >= this.pages[x].length) {\n      y = this.pages[x].length - 1;\n    } else if (y < 0) {\n      y = 0;\n    }\n\n    var posX = this.pages[x][y].x;\n    var posY = this.pages[x][y].y;\n\n    time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n\n    this.currentPage = {\n      x: posX,\n      y: posY,\n      pageX: x,\n      pageY: y\n    };\n    this.scrollTo(posX, posY, time, easing, isSilent);\n  };\n\n  BScroll.prototype.goToPage = function (x, y, time, easing) {\n    var snap = this.options.snap;\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (snap.loop) {\n      var len = void 0;\n      if (snap._loopX) {\n        len = this.pages.length - 2;\n        if (x >= len) {\n          x = len - 1;\n        } else if (x < 0) {\n          x = 0;\n        }\n        x += 1;\n      } else {\n        len = this.pages[0].length - 2;\n        if (y >= len) {\n          y = len - 1;\n        } else if (y < 0) {\n          y = 0;\n        }\n        y += 1;\n      }\n    }\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.next = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x++;\n    if (x >= this.pages.length && this.hasVerticalScroll) {\n      x = 0;\n      y++;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.prev = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x--;\n    if (x < 0 && this.hasVerticalScroll) {\n      x = 0;\n      y--;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.getCurrentPage = function () {\n    var snap = this.options.snap;\n    if (!snap) {\n      return null;\n    }\n\n    if (snap.loop) {\n      var currentPage = void 0;\n      if (snap._loopX) {\n        currentPage = extend({}, this.currentPage, {\n          pageX: this.currentPage.pageX - 1\n        });\n      } else {\n        currentPage = extend({}, this.currentPage, {\n          pageY: this.currentPage.pageY - 1\n        });\n      }\n      return currentPage;\n    }\n    return this.currentPage;\n  };\n}\n\nfunction wheelMixin(BScroll) {\n  BScroll.prototype.wheelTo = function () {\n    var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    if (this.options.wheel) {\n      var y = -index * this.itemHeight;\n      this.scrollTo(0, y);\n    }\n  };\n\n  BScroll.prototype.getSelectedIndex = function () {\n    return this.options.wheel && this.selectedIndex;\n  };\n\n  BScroll.prototype._initWheel = function () {\n    var wheel = this.options.wheel;\n    if (!wheel.wheelWrapperClass) {\n      wheel.wheelWrapperClass = 'wheel-scroll';\n    }\n    if (!wheel.wheelItemClass) {\n      wheel.wheelItemClass = 'wheel-item';\n    }\n    if (!wheel.wheelDisabledItemClass) {\n      wheel.wheelDisabledItemClass = 'wheel-disabled-item';\n    }\n    if (wheel.selectedIndex === undefined) {\n      wheel.selectedIndex = 0;\n    }\n  };\n\n  BScroll.prototype._findNearestValidWheel = function (y) {\n    y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\n    var wheel = this.options.wheel;\n    var currentIndex = Math.abs(Math.round(-y / this.itemHeight));\n    var cacheIndex = currentIndex;\n    var items = this.items;\n    // Impersonation web native select\n    // first, check whether there is a enable item whose index is smaller than currentIndex\n    // then, check whether there is a enable item whose index is bigger than currentIndex\n    // otherwise, there are all disabled items, just keep currentIndex unchange\n    while (currentIndex >= 0) {\n      if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        break;\n      }\n      currentIndex--;\n    }\n\n    if (currentIndex < 0) {\n      currentIndex = cacheIndex;\n      while (currentIndex <= items.length - 1) {\n        if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n          break;\n        }\n        currentIndex++;\n      }\n    }\n\n    // keep it unchange when all the items are disabled\n    if (currentIndex === items.length) {\n      currentIndex = cacheIndex;\n    }\n    // when all the items are disabled, this.selectedIndex should always be -1\n    return {\n      index: this.wheelItemsAllDisabled ? -1 : currentIndex,\n      y: -currentIndex * this.itemHeight\n    };\n  };\n\n  BScroll.prototype._checkWheelAllDisabled = function () {\n    var wheel = this.options.wheel;\n    var items = this.items;\n    this.wheelItemsAllDisabled = true;\n    for (var i = 0; i < items.length; i++) {\n      if (items[i].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        this.wheelItemsAllDisabled = false;\n        break;\n      }\n    }\n  };\n}\n\nvar INDICATOR_MIN_LEN = 8;\n\nfunction scrollbarMixin(BScroll) {\n  BScroll.prototype._initScrollbar = function () {\n    var _this = this;\n\n    var _options$scrollbar = this.options.scrollbar,\n        _options$scrollbar$fa = _options$scrollbar.fade,\n        fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,\n        _options$scrollbar$in = _options$scrollbar.interactive,\n        interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;\n\n    this.indicators = [];\n    var indicator = void 0;\n\n    if (this.options.scrollX) {\n      indicator = {\n        el: createScrollbar('horizontal'),\n        direction: 'horizontal',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    if (this.options.scrollY) {\n      indicator = {\n        el: createScrollbar('vertical'),\n        direction: 'vertical',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    this.on('refresh', function () {\n      for (var i = 0; i < _this.indicators.length; i++) {\n        _this.indicators[i].refresh();\n      }\n    });\n\n    if (fade) {\n      this.on('scrollEnd', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollCancel', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true);\n        }\n      });\n\n      this.on('beforeScrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true, true);\n        }\n      });\n    }\n\n    this.on('destroy', function () {\n      _this._removeScrollBars();\n    });\n  };\n\n  BScroll.prototype._insertScrollBar = function (scrollbar) {\n    this.wrapper.appendChild(scrollbar);\n  };\n\n  BScroll.prototype._removeScrollBars = function () {\n    for (var i = 0; i < this.indicators.length; i++) {\n      this.indicators[i].destroy();\n    }\n  };\n}\n\nfunction createScrollbar(direction) {\n  var scrollbar = document.createElement('div');\n  var indicator = document.createElement('div');\n\n  scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';\n  indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';\n\n  indicator.className = 'bscroll-indicator';\n\n  if (direction === 'horizontal') {\n    scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n    indicator.style.height = '100%';\n    scrollbar.className = 'bscroll-horizontal-scrollbar';\n  } else {\n    scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n    indicator.style.width = '100%';\n    scrollbar.className = 'bscroll-vertical-scrollbar';\n  }\n\n  scrollbar.style.cssText += ';overflow:hidden';\n  scrollbar.appendChild(indicator);\n\n  return scrollbar;\n}\n\nfunction Indicator(scroller, options) {\n  this.wrapper = options.el;\n  this.wrapperStyle = this.wrapper.style;\n  this.indicator = this.wrapper.children[0];\n  this.indicatorStyle = this.indicator.style;\n  this.scroller = scroller;\n  this.direction = options.direction;\n  if (options.fade) {\n    this.visible = 0;\n    this.wrapperStyle.opacity = '0';\n  } else {\n    this.visible = 1;\n  }\n\n  this.sizeRatioX = 1;\n  this.sizeRatioY = 1;\n  this.maxPosX = 0;\n  this.maxPosY = 0;\n  this.x = 0;\n  this.y = 0;\n\n  if (options.interactive) {\n    this._addDOMEvents();\n  }\n}\n\nIndicator.prototype.handleEvent = function (e) {\n  switch (e.type) {\n    case 'touchstart':\n    case 'mousedown':\n      this._start(e);\n      break;\n    case 'touchmove':\n    case 'mousemove':\n      this._move(e);\n      break;\n    case 'touchend':\n    case 'mouseup':\n    case 'touchcancel':\n    case 'mousecancel':\n      this._end(e);\n      break;\n  }\n};\n\nIndicator.prototype.refresh = function () {\n  if (this._shouldShow()) {\n    this.transitionTime();\n    this._calculate();\n    this.updatePosition();\n  }\n};\n\nIndicator.prototype.fade = function (visible, hold) {\n  var _this2 = this;\n\n  if (hold && !this.visible) {\n    return;\n  }\n\n  var time = visible ? 250 : 500;\n\n  visible = visible ? '1' : '0';\n\n  this.wrapperStyle[style.transitionDuration] = time + 'ms';\n\n  clearTimeout(this.fadeTimeout);\n  this.fadeTimeout = setTimeout(function () {\n    _this2.wrapperStyle.opacity = visible;\n    _this2.visible = +visible;\n  }, 0);\n};\n\nIndicator.prototype.updatePosition = function () {\n  if (this.direction === 'vertical') {\n    var y = Math.round(this.sizeRatioY * this.scroller.y);\n\n    if (y < 0) {\n      this.transitionTime(500);\n      var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = height + 'px';\n      y = 0;\n    } else if (y > this.maxPosY) {\n      this.transitionTime(500);\n      var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = _height + 'px';\n      y = this.maxPosY + this.indicatorHeight - _height;\n    } else {\n      this.indicatorStyle.height = this.indicatorHeight + 'px';\n    }\n    this.y = y;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.top = y + 'px';\n    }\n  } else {\n    var x = Math.round(this.sizeRatioX * this.scroller.x);\n\n    if (x < 0) {\n      this.transitionTime(500);\n      var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = width + 'px';\n      x = 0;\n    } else if (x > this.maxPosX) {\n      this.transitionTime(500);\n      var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = _width + 'px';\n      x = this.maxPosX + this.indicatorWidth - _width;\n    } else {\n      this.indicatorStyle.width = this.indicatorWidth + 'px';\n    }\n\n    this.x = x;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.left = x + 'px';\n    }\n  }\n};\n\nIndicator.prototype.transitionTime = function () {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n  this.indicatorStyle[style.transitionDuration] = time + 'ms';\n};\n\nIndicator.prototype.transitionTimingFunction = function (easing) {\n  this.indicatorStyle[style.transitionTimingFunction] = easing;\n};\n\nIndicator.prototype.destroy = function () {\n  this._removeDOMEvents();\n  this.wrapper.parentNode.removeChild(this.wrapper);\n};\n\nIndicator.prototype._start = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this.transitionTime();\n\n  this.initiated = true;\n  this.moved = false;\n  this.lastPointX = point.pageX;\n  this.lastPointY = point.pageY;\n\n  this.startTime = getNow();\n\n  this._handleMoveEvents(addEvent);\n  this.scroller.trigger('beforeScrollStart');\n};\n\nIndicator.prototype._move = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  if (!this.moved) {\n    this.scroller.trigger('scrollStart');\n  }\n\n  this.moved = true;\n\n  var deltaX = point.pageX - this.lastPointX;\n  this.lastPointX = point.pageX;\n\n  var deltaY = point.pageY - this.lastPointY;\n  this.lastPointY = point.pageY;\n\n  var newX = this.x + deltaX;\n  var newY = this.y + deltaY;\n\n  this._pos(newX, newY);\n};\n\nIndicator.prototype._end = function (e) {\n  if (!this.initiated) {\n    return;\n  }\n  this.initiated = false;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this._handleMoveEvents(removeEvent);\n\n  var snapOption = this.scroller.options.snap;\n  if (snapOption) {\n    var speed = snapOption.speed,\n        _snapOption$easing = snapOption.easing,\n        easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;\n\n    var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n    var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n    if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {\n      this.scroller.directionX = 0;\n      this.scroller.directionY = 0;\n      this.scroller.currentPage = snap;\n      this.scroller.scrollTo(snap.x, snap.y, time, easing);\n    }\n  }\n\n  if (this.moved) {\n    this.scroller.trigger('scrollEnd', {\n      x: this.scroller.x,\n      y: this.scroller.y\n    });\n  }\n};\n\nIndicator.prototype._pos = function (x, y) {\n  if (x < 0) {\n    x = 0;\n  } else if (x > this.maxPosX) {\n    x = this.maxPosX;\n  }\n\n  if (y < 0) {\n    y = 0;\n  } else if (y > this.maxPosY) {\n    y = this.maxPosY;\n  }\n\n  x = Math.round(x / this.sizeRatioX);\n  y = Math.round(y / this.sizeRatioY);\n\n  this.scroller.scrollTo(x, y);\n  this.scroller.trigger('scroll', {\n    x: this.scroller.x,\n    y: this.scroller.y\n  });\n};\n\nIndicator.prototype._shouldShow = function () {\n  if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {\n    this.wrapper.style.display = '';\n    return true;\n  }\n  this.wrapper.style.display = 'none';\n  return false;\n};\n\nIndicator.prototype._calculate = function () {\n  if (this.direction === 'vertical') {\n    var wrapperHeight = this.wrapper.clientHeight;\n    this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.height = this.indicatorHeight + 'px';\n\n    this.maxPosY = wrapperHeight - this.indicatorHeight;\n\n    this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;\n  } else {\n    var wrapperWidth = this.wrapper.clientWidth;\n    this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.width = this.indicatorWidth + 'px';\n\n    this.maxPosX = wrapperWidth - this.indicatorWidth;\n\n    this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;\n  }\n};\n\nIndicator.prototype._addDOMEvents = function () {\n  var eventOperation = addEvent;\n  this._handleDOMEvents(eventOperation);\n};\n\nIndicator.prototype._removeDOMEvents = function () {\n  var eventOperation = removeEvent;\n  this._handleDOMEvents(eventOperation);\n  this._handleMoveEvents(eventOperation);\n};\n\nIndicator.prototype._handleMoveEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(window, 'touchmove', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(window, 'mousemove', this);\n  }\n};\n\nIndicator.prototype._handleDOMEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(this.indicator, 'touchstart', this);\n    eventOperation(window, 'touchend', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(this.indicator, 'mousedown', this);\n    eventOperation(window, 'mouseup', this);\n  }\n};\n\nfunction pullDownMixin(BScroll) {\n  BScroll.prototype._initPullDown = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n  };\n\n  BScroll.prototype._checkPullDown = function () {\n    var _options$pullDownRefr = this.options.pullDownRefresh,\n        _options$pullDownRefr2 = _options$pullDownRefr.threshold,\n        threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,\n        _options$pullDownRefr3 = _options$pullDownRefr.stop,\n        stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;\n\n    // check if a real pull down action\n\n    if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {\n      return false;\n    }\n\n    if (!this.pulling) {\n      this.pulling = true;\n      this.trigger('pullingDown');\n    }\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n\n    return this.pulling;\n  };\n\n  BScroll.prototype.finishPullDown = function () {\n    this.pulling = false;\n    this.resetPosition(this.options.bounceTime, ease.bounce);\n  };\n\n  BScroll.prototype.openPullDown = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullDownRefresh = config;\n    this._initPullDown();\n  };\n\n  BScroll.prototype.closePullDown = function () {\n    this.options.pullDownRefresh = false;\n  };\n\n  BScroll.prototype.autoPullDownRefresh = function () {\n    var _options$pullDownRefr4 = this.options.pullDownRefresh,\n        _options$pullDownRefr5 = _options$pullDownRefr4.threshold,\n        threshold = _options$pullDownRefr5 === undefined ? 90 : _options$pullDownRefr5,\n        _options$pullDownRefr6 = _options$pullDownRefr4.stop,\n        stop = _options$pullDownRefr6 === undefined ? 40 : _options$pullDownRefr6;\n\n\n    if (this.pulling) {\n      return;\n    }\n    this.pulling = true;\n\n    this.scrollTo(this.x, threshold);\n    this.trigger('pullingDown');\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n  };\n}\n\nfunction pullUpMixin(BScroll) {\n  BScroll.prototype._initPullUp = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n\n    this.pullupWatching = false;\n    this._watchPullUp();\n  };\n\n  BScroll.prototype._watchPullUp = function () {\n    if (this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = true;\n    this.on('scroll', this._checkToEnd);\n  };\n\n  BScroll.prototype._checkToEnd = function (pos) {\n    var _this = this;\n\n    var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,\n        threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;\n\n    if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {\n      // reset pullupWatching status after scroll end.\n      this.once('scrollEnd', function () {\n        _this.pullupWatching = false;\n      });\n      this.trigger('pullingUp');\n      this.off('scroll', this._checkToEnd);\n    }\n  };\n\n  BScroll.prototype.finishPullUp = function () {\n    var _this2 = this;\n\n    if (this.pullupWatching) {\n      this.once('scrollEnd', function () {\n        _this2._watchPullUp();\n      });\n    } else {\n      this._watchPullUp();\n    }\n  };\n\n  BScroll.prototype.openPullUp = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullUpLoad = config;\n    this._initPullUp();\n  };\n\n  BScroll.prototype.closePullUp = function () {\n    this.options.pullUpLoad = false;\n    if (!this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = false;\n    this.off('scroll', this._checkToEnd);\n  };\n}\n\nfunction mouseWheelMixin(BScroll) {\n  BScroll.prototype._initMouseWheel = function () {\n    var _this = this;\n\n    this._handleMouseWheelEvent(addEvent);\n\n    this.on('destroy', function () {\n      clearTimeout(_this.mouseWheelTimer);\n      clearTimeout(_this.mouseWheelEndTimer);\n      _this._handleMouseWheelEvent(removeEvent);\n    });\n\n    this.firstWheelOpreation = true;\n  };\n\n  BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {\n    eventOperation(this.wrapper, 'wheel', this);\n    eventOperation(this.wrapper, 'mousewheel', this);\n    eventOperation(this.wrapper, 'DOMMouseScroll', this);\n  };\n\n  BScroll.prototype._onMouseWheel = function (e) {\n    var _this2 = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    e.preventDefault();\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    if (this.firstWheelOpreation) {\n      this.trigger('scrollStart');\n    }\n    this.firstWheelOpreation = false;\n\n    var _options$mouseWheel = this.options.mouseWheel,\n        _options$mouseWheel$s = _options$mouseWheel.speed,\n        speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,\n        _options$mouseWheel$i = _options$mouseWheel.invert,\n        invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,\n        _options$mouseWheel$e = _options$mouseWheel.easeTime,\n        easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;\n\n\n    clearTimeout(this.mouseWheelTimer);\n    this.mouseWheelTimer = setTimeout(function () {\n      if (!_this2.options.snap && !easeTime) {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }\n      _this2.firstWheelOpreation = true;\n    }, 400);\n\n    var wheelDeltaX = void 0;\n    var wheelDeltaY = void 0;\n\n    switch (true) {\n      case 'deltaX' in e:\n        if (e.deltaMode === 1) {\n          wheelDeltaX = -e.deltaX * speed;\n          wheelDeltaY = -e.deltaY * speed;\n        } else {\n          wheelDeltaX = -e.deltaX;\n          wheelDeltaY = -e.deltaY;\n        }\n        break;\n      case 'wheelDeltaX' in e:\n        wheelDeltaX = e.wheelDeltaX / 120 * speed;\n        wheelDeltaY = e.wheelDeltaY / 120 * speed;\n        break;\n      case 'wheelDelta' in e:\n        wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;\n        break;\n      case 'detail' in e:\n        wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;\n        break;\n      default:\n        return;\n    }\n\n    var direction = invert ? -1 : 1;\n    wheelDeltaX *= direction;\n    wheelDeltaY *= direction;\n\n    if (!this.hasVerticalScroll) {\n      wheelDeltaX = wheelDeltaY;\n      wheelDeltaY = 0;\n    }\n\n    var newX = void 0;\n    var newY = void 0;\n    if (this.options.snap) {\n      newX = this.currentPage.pageX;\n      newY = this.currentPage.pageY;\n\n      if (wheelDeltaX > 0) {\n        newX--;\n      } else if (wheelDeltaX < 0) {\n        newX++;\n      }\n\n      if (wheelDeltaY > 0) {\n        newY--;\n      } else if (wheelDeltaY < 0) {\n        newY++;\n      }\n\n      this._goToPage(newX, newY);\n      return;\n    }\n\n    newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n    newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n    this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n    this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    var needTriggerEnd = this.y === newY;\n    this.scrollTo(newX, newY, easeTime, ease.swipe);\n    this.trigger('scroll', {\n      x: this.x,\n      y: this.y\n    });\n    clearTimeout(this.mouseWheelEndTimer);\n    if (needTriggerEnd) {\n      this.mouseWheelEndTimer = setTimeout(function () {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }, easeTime);\n    }\n  };\n}\n\nfunction zoomMixin(BScroll) {\n  BScroll.prototype._initZoom = function () {\n    var _options$zoom = this.options.zoom,\n        _options$zoom$start = _options$zoom.start,\n        start = _options$zoom$start === undefined ? 1 : _options$zoom$start,\n        _options$zoom$min = _options$zoom.min,\n        min = _options$zoom$min === undefined ? 1 : _options$zoom$min,\n        _options$zoom$max = _options$zoom.max,\n        max = _options$zoom$max === undefined ? 4 : _options$zoom$max;\n\n    this.scale = Math.min(Math.max(start, min), max);\n    this.setScale(this.scale);\n    this.scrollerStyle[style.transformOrigin] = '0 0';\n  };\n\n  BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {\n    this.scaled = true;\n\n    var lastScale = scale / (startScale || this.scale);\n    this.setScale(scale);\n\n    this.refresh();\n\n    var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));\n    var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    if (this.x !== newX || this.y !== newY) {\n      this.scrollTo(newX, newY, this.options.bounceTime);\n    }\n\n    this.scaled = false;\n  };\n\n  BScroll.prototype.zoomTo = function (scale, x, y) {\n    var _offsetToBody = offsetToBody(this.wrapper),\n        left = _offsetToBody.left,\n        top = _offsetToBody.top;\n\n    var originX = x + left - this.x;\n    var originY = y + top - this.y;\n    this._zoomTo(scale, originX, originY);\n  };\n\n  BScroll.prototype._zoomStart = function (e) {\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n\n    this.startDistance = getDistance(deltaX, deltaY);\n    this.startScale = this.scale;\n\n    var _offsetToBody2 = offsetToBody(this.wrapper),\n        left = _offsetToBody2.left,\n        top = _offsetToBody2.top;\n\n    this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;\n    this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;\n\n    this.trigger('zoomStart');\n  };\n\n  BScroll.prototype._zoom = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n    var distance = getDistance(deltaX, deltaY);\n    var scale = distance / this.startDistance * this.startScale;\n\n    this.scaled = true;\n\n    var _options$zoom2 = this.options.zoom,\n        _options$zoom2$min = _options$zoom2.min,\n        min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,\n        _options$zoom2$max = _options$zoom2.max,\n        max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;\n\n\n    if (scale < min) {\n      scale = 0.5 * min * Math.pow(2.0, scale / min);\n    } else if (scale > max) {\n      scale = 2.0 * max * Math.pow(0.5, max / scale);\n    }\n\n    var lastScale = scale / this.startScale;\n\n    var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);\n    var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);\n\n    this.setScale(scale);\n\n    this.scrollTo(x, y, 0);\n  };\n\n  BScroll.prototype._zoomEnd = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.isInTransition = false;\n    this.isAnimating = false;\n    this.initiated = 0;\n\n    var _options$zoom3 = this.options.zoom,\n        _options$zoom3$min = _options$zoom3.min,\n        min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,\n        _options$zoom3$max = _options$zoom3.max,\n        max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;\n\n\n    var scale = this.scale > max ? max : this.scale < min ? min : this.scale;\n\n    this._zoomTo(scale, this.originX, this.originY, this.startScale);\n\n    this.trigger('zoomEnd');\n  };\n}\n\n// import { ease } from '../util/ease'\n\n// Number of items to instantiate beyond current view in the scroll direction.\nvar RUNWAY_ITEMS = 30;\n\n// Number of items to instantiate beyond current view in the opposite direction.\nvar RUNWAY_ITEMS_OPPOSITE = 10;\n\n// The animation interval (in ms) for fading in content from tombstones.\nvar ANIMATION_DURATION_MS = 200;\n\n// The number of pixels of default additional length to allow scrolling to.\nvar DEFAULT_SCROLL_RUNWAY = 2000;\n\nfunction infiniteMixin(BScroll) {\n  BScroll.prototype._initInfinite = function () {\n    this.options.probeType = 3;\n    this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;\n    this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);\n  };\n}\n\nfunction isTombstoneNode(node) {\n  if (node && node.classList) {\n    return node.classList.contains('tombstone');\n  }\n}\n\nfunction InfiniteScroller(scroller, options) {\n  var _this = this;\n\n  this.options = options;\n  assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');\n\n  assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');\n\n  assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');\n\n  this.firstAttachedItem = 0;\n  this.lastAttachedItem = 0;\n\n  this.anchorScrollTop = 0;\n  this.anchorItem = {\n    index: 0,\n    offset: 0\n  };\n  this.tombstoneHeight = 0;\n  this.tombstoneWidth = 0;\n  this.tombstones = [];\n  this.tombstonesAnimationHandlers = [];\n\n  this.items = [];\n  this.loadedItems = 0;\n  this.requestInProgress = false;\n  this.hasMore = true;\n\n  this.scroller = scroller;\n  this.wrapperEl = this.scroller.wrapper;\n  this.scrollerEl = this.scroller.scroller;\n\n  this.scroller.on('resize', function () {\n    _this.onResize();\n  });\n  this.scroller.on('destroy', function () {\n    _this.destroy();\n  });\n\n  // wait scroll core init\n  this._onResizeHandler = setTimeout(function () {\n    _this.onResize();\n\n    // must wait tombstoneHeight has size\n    _this.scroller.on('scroll', function () {\n      _this.onScroll();\n    });\n  });\n}\n\nInfiniteScroller.prototype.destroy = function () {\n  var _this2 = this;\n\n  // In extreme scene, destroy is triggered before _onResizeHandler\n  clearTimeout(this._onResizeHandler);\n  this.tombstonesAnimationHandlers.forEach(function (handler) {\n    clearTimeout(handler);\n  });\n  this.tombstonesAnimationHandlers = null;\n  this.items.forEach(function (item) {\n    if (item.node) {\n      _this2.scrollerEl.removeChild(item.node);\n      item.node = null;\n    }\n  });\n  this.scroller.infiniteScroller = null;\n  this.scroller = null;\n  this.wrapperEl = null;\n  this.scrollerEl = null;\n  this.items = null;\n  this.tombstones = null;\n};\n\nInfiniteScroller.prototype.onScroll = function () {\n  var scrollTop = -this.scroller.y;\n  var delta = scrollTop - this.anchorScrollTop;\n  if (scrollTop === 0) {\n    this.anchorItem = {\n      index: 0,\n      offset: 0\n    };\n  } else {\n    this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);\n  }\n\n  this.anchorScrollTop = scrollTop;\n  var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight);\n\n  var start = this.anchorItem.index;\n  var end = lastScreenItem.index;\n  if (delta < 0) {\n    start -= RUNWAY_ITEMS;\n    end += RUNWAY_ITEMS_OPPOSITE;\n  } else {\n    start -= RUNWAY_ITEMS_OPPOSITE;\n    end += RUNWAY_ITEMS;\n  }\n  this.fill(start, end);\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.onResize = function () {\n  var tombstone = this.options.createTombstone();\n  tombstone.style.position = 'absolute';\n  this.scrollerEl.appendChild(tombstone);\n  tombstone.style.display = '';\n  this.tombstoneHeight = tombstone.offsetHeight;\n  this.tombstoneWidth = tombstone.offsetWidth;\n  this.scrollerEl.removeChild(tombstone);\n\n  for (var i = 0; i < this.items.length; i++) {\n    this.items[i].height = this.items[i].width = 0;\n  }\n\n  this.onScroll();\n};\n\nInfiniteScroller.prototype.fill = function (start, end) {\n  this.firstAttachedItem = Math.max(0, start);\n  if (!this.hasMore) {\n    end = Math.min(end, this.items.length);\n  }\n  this.lastAttachedItem = end;\n  this.attachContent();\n};\n\nInfiniteScroller.prototype.maybeRequestContent = function () {\n  var _this3 = this;\n\n  if (this.requestInProgress || !this.hasMore) {\n    return;\n  }\n  var itemsNeeded = this.lastAttachedItem - this.loadedItems;\n  if (itemsNeeded <= 0) {\n    return;\n  }\n  this.requestInProgress = true;\n  this.options.fetch(itemsNeeded).then(function (items) {\n    _this3.requestInProgress = false;\n    if (items) {\n      _this3.addContent(items);\n    } else {\n      _this3.hasMore = false;\n      var tombstoneLen = _this3._removeTombstones();\n      var curPos = 0;\n      if (_this3.anchorItem.index <= _this3.items.length) {\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.resetPosition(_this3.scroller.options.bounceTime);\n      } else {\n        _this3.anchorItem.index -= tombstoneLen;\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.stop();\n        _this3.scroller.resetPosition();\n        _this3.onScroll();\n      }\n    }\n  });\n};\n\nInfiniteScroller.prototype.addContent = function (items) {\n  for (var i = 0; i < items.length; i++) {\n    if (this.items.length <= this.loadedItems) {\n      this._addItem();\n    }\n    this.items[this.loadedItems++].data = items[i];\n  }\n  this.attachContent();\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.attachContent = function () {\n  var unusedNodes = this._collectUnusedNodes();\n  var tombstoneAnimations = this._createDOMNodes(unusedNodes);\n  this._cleanupUnusedNodes(unusedNodes);\n  this._cacheNodeSize();\n  var curPos = this._fixScrollPosition();\n  this._setupAnimations(tombstoneAnimations, curPos);\n};\n\nInfiniteScroller.prototype.resetMore = function () {\n  this.hasMore = true;\n};\n\nInfiniteScroller.prototype._removeTombstones = function () {\n  var markIndex = void 0;\n  var tombstoneLen = 0;\n  var itemLen = this.items.length;\n  for (var i = 0; i < itemLen; i++) {\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {\n      // 0 should be excluded\n      if (markIndex === void 0) {\n        markIndex = i;\n      }\n      if (currentNode) {\n        this.scrollerEl.removeChild(currentNode);\n      }\n    }\n  }\n  tombstoneLen = itemLen - markIndex;\n  this.items.splice(markIndex);\n  this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);\n  return tombstoneLen;\n};\n\nInfiniteScroller.prototype._collectUnusedNodes = function () {\n  var unusedNodes = [];\n  for (var i = 0; i < this.items.length; i++) {\n    // Skip the items which should be visible.\n    if (i === this.firstAttachedItem) {\n      i = this.lastAttachedItem - 1;\n      continue;\n    }\n    var currentNode = this.items[i].node;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode)) {\n        // Cache tombstones for reuse\n        this.tombstones.push(currentNode);\n        this.tombstones[this.tombstones.length - 1].style.display = 'none';\n      } else {\n        unusedNodes.push(currentNode);\n      }\n    }\n    this.items[i].node = null;\n  }\n  return unusedNodes;\n};\n\nInfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {\n  var tombstoneAnimations = {};\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    while (this.items.length <= i) {\n      this._addItem();\n    }\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode) && currentData) {\n        currentNode.style.zIndex = 1;\n        tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];\n        this.items[i].node = null;\n      } else {\n        continue;\n      }\n    }\n    var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();\n    node.style.position = 'absolute';\n    this.items[i].top = -1;\n    this.scrollerEl.appendChild(node);\n    this.items[i].node = node;\n  }\n  return tombstoneAnimations;\n};\n\nInfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {\n  while (unusedNodes.length) {\n    this.scrollerEl.removeChild(unusedNodes.pop());\n  }\n};\n\nInfiniteScroller.prototype._cacheNodeSize = function () {\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    var item = this.items[i];\n    // Only cache the height if we have the real contents, not a placeholder.\n    if (item.data && !item.height) {\n      var isTombstone = isTombstoneNode(item.node);\n      item.height = isTombstone ? this.tombstoneHeight : item.node.offsetHeight;\n      item.width = isTombstone ? this.tombstoneWidth : item.node.offsetWidth;\n    }\n  }\n};\n\nInfiniteScroller.prototype._fixScrollPosition = function () {\n  this.anchorScrollTop = 0;\n  for (var _i = 0; _i < this.anchorItem.index; _i++) {\n    this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;\n  }\n  this.anchorScrollTop += this.anchorItem.offset;\n\n  // Position all nodes.\n  var curPos = this.anchorScrollTop - this.anchorItem.offset;\n  var i = this.anchorItem.index;\n  while (i > this.firstAttachedItem) {\n    curPos -= this.items[i - 1].height || this.tombstoneHeight;\n    i--;\n  }\n\n  return curPos;\n};\n\nInfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {\n  var _this4 = this;\n\n  for (var i in tombstoneAnimations) {\n    var animation = tombstoneAnimations[i];\n    this.items[i].node.style[style.transform] = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';\n    // Call offsetTop on the nodes to be animated to force them to apply current transforms.\n    /* eslint-disable no-unused-expressions */\n    this.items[i].node.offsetTop;\n    animation[0].offsetTop;\n    this.items[i].node.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms';\n  }\n\n  for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {\n    var _animation = tombstoneAnimations[_i2];\n    if (_animation) {\n      var tombstoneNode = _animation[0];\n      tombstoneNode.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';\n      tombstoneNode.style[style.transform] = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';\n      tombstoneNode.style.opacity = 0;\n    }\n    if (curPos !== this.items[_i2].top) {\n      if (!_animation) {\n        this.items[_i2].node.style[style.transition] = '';\n      }\n      this.items[_i2].node.style[style.transform] = 'translateY(' + curPos + 'px)';\n    }\n    this.items[_i2].top = curPos;\n    curPos += this.items[_i2].height || this.tombstoneHeight;\n  }\n\n  this.scroller.maxScrollY = -(curPos - this.scroller.wrapperHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));\n\n  var tombstoneAnimationsHandler = setTimeout(function () {\n    for (var _i3 in tombstoneAnimations) {\n      var _animation2 = tombstoneAnimations[_i3];\n      _animation2[0].style.display = 'none';\n      // Tombstone can be recycled now.\n      _this4.tombstones.push(_animation2[0]);\n    }\n  }, ANIMATION_DURATION_MS);\n\n  this.tombstonesAnimationHandlers.push(tombstoneAnimationsHandler);\n};\n\nInfiniteScroller.prototype._getTombStone = function () {\n  var tombstone = this.tombstones.pop();\n  if (tombstone) {\n    tombstone.style.display = '';\n    tombstone.style.opacity = 1;\n    tombstone.style[style.transform] = '';\n    tombstone.style[style.transition] = '';\n    return tombstone;\n  }\n  return this.options.createTombstone();\n};\n\nInfiniteScroller.prototype._addItem = function () {\n  this.items.push({\n    data: null,\n    node: null,\n    height: 0,\n    width: 0,\n    top: 0\n  });\n};\n\nInfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {\n  if (delta === 0) {\n    return initialAnchor;\n  }\n  var i = initialAnchor.index;\n  var tombstones = 0;\n\n  delta += initialAnchor.offset;\n  if (delta < 0) {\n    while (delta < 0 && i > 0 && this.items[i - 1].height) {\n      delta += this.items[i - 1].height;\n      i--;\n    }\n    tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));\n  } else {\n    while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {\n      delta -= this.items[i].height;\n      i++;\n    }\n    if (i >= this.items.length || !this.items[i].height) {\n      tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);\n    }\n  }\n  i += tombstones;\n  delta -= tombstones * this.tombstoneHeight;\n\n  return {\n    index: i,\n    offset: delta\n  };\n};\n\nfunction BScroll(el, options) {\n  this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;\n  if (!this.wrapper) {\n    warn('Can not resolve the wrapper DOM.');\n  }\n  this.scroller = this.wrapper.children[0];\n  if (!this.scroller) {\n    warn('The wrapper need at least one child element to be scroller.');\n  }\n  // cache style for better performance\n  this.scrollerStyle = this.scroller.style;\n\n  this._init(options);\n}\n\ninitMixin(BScroll);\ncoreMixin(BScroll);\neventMixin(BScroll);\nsnapMixin(BScroll);\nwheelMixin(BScroll);\nscrollbarMixin(BScroll);\npullDownMixin(BScroll);\npullUpMixin(BScroll);\nmouseWheelMixin(BScroll);\nzoomMixin(BScroll);\ninfiniteMixin(BScroll);\n\nBScroll.Version = '1.15.1';\n\nexport default BScroll;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_better-scroll@1.15.1@better-scroll/dist/bscroll.esm.js\n// module id = 10\n// module chunks = 0","import range from './range'\n\nexport default [range(0, 23, true, '点'), range(0, 59, true, '分'), range(0, 59, true, '秒')]\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/time.js","import range from './range'\n\nconst START_YEAR = 1900\nconst END_YEAR = 2100\n\nconst UNIT_YEAR = '年'\nconst UNIT_MONTH = '月'\nconst UNIT_DAY = '日'\n\nfunction isLeapYear (y) {\n  return (y % 4 === 0) && (y % 100 !== 0 || y % 400 === 0)\n};\n\nfunction getDays (y, m) {\n  y = Number(y)\n  m = Number(m)\n  let endDay = null\n  switch (m) {\n    case 2:\n      endDay = isLeapYear(y) ? 29 : 28; break\n    case 1:\n    case 3:\n    case 5:\n    case 7:\n    case 8:\n    case 10:\n    case 12:\n      endDay = 31; break\n    case 4:\n    case 6:\n    case 9:\n    case 11:\n    default:\n      endDay = 30; break\n  }\n  const days = range(1, endDay, false, UNIT_DAY)\n  return days.map((day) => {\n    return { value: day }\n  })\n};\n\nconst yearData = range(START_YEAR, END_YEAR, false, UNIT_YEAR)\nconst monthData = range(1, 12, false, UNIT_MONTH)\n\nconst cascadeMonthData = monthData.map((month) => {\n  return {\n    value: month,\n    children: []\n  }\n})\n\nconst dateData = yearData.map((year) => {\n  const item = {\n    value: year,\n    children: cascadeMonthData.slice()\n  }\n  item.children.forEach((month) => {\n    month.children = getDays(year.slice(0, -1), month.value.slice(0, -1))\n  })\n  return item\n})\n\nconst date = new Date()\nconst dateAnchor = [\n  { value: `${date.getFullYear()}${UNIT_YEAR}` },\n  { value: `${date.getMonth() + 1}${UNIT_MONTH}` },\n  { value: `${date.getDate()}${UNIT_DAY}` }\n]\n\nexport {\n  dateAnchor,\n  dateData\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/date.js","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":_vm.hide}})]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"slide\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"picker\"},[_c('div',{staticClass:\"picker-title\"},[_c('span',{staticClass:\"pt-cancel\",style:({ color: _vm.colorCancel }),on:{\"click\":_vm.cancel}},[_vm._v(_vm._s(_vm.textCancel))]),_vm._v(\" \"),_c('span',{staticClass:\"pt-submit\",style:({ color: _vm.colorConfirm }),on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.textConfirm))]),_vm._v(\" \"),_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"picker-panel\"},[_c('div',{staticClass:\"picker-mask-top\"}),_vm._v(\" \"),_c('div',{staticClass:\"picker-mask-bottom\"}),_vm._v(\" \"),_c('div',{ref:\"wheelWrapper\",staticClass:\"picker-wheel-wrapper\"},_vm._l((_vm.pickerData),function(wheel,index){return _c('div',{key:index,staticClass:\"picker-wheel\"},[_c('ul',{staticClass:\"wheel-scroll\"},_vm._l((wheel),function(item,index){return _c('li',{key:index,staticClass:\"wheel-item\"},[_vm._v(_vm._s(item))])}),0)])}),0)])])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.3@vue-loader/lib/template-compiler?{\"id\":\"data-v-220e6364\",\"hasScoped\":true,\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=template&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 13\n// module chunks = 0"],"sourceRoot":""}