{"version":3,"sources":["webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionObjectEvents.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionObject.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Inertia.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Mouse.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/Interaction.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/interaction/InteractionKeyboardObject.js"],"names":["__webpack_require__","d","__webpack_exports__","InteractionObjectEventDispatcher","tslib__WEBPACK_IMPORTED_MODULE_0__","_utils_EventDispatcher__WEBPACK_IMPORTED_MODULE_1__","_utils_Disposer__WEBPACK_IMPORTED_MODULE_2__","_super","_this","apply","this","arguments","_domEvents","prototype","_addDOMEvent","type","key","listener","context","callback_1","e","call","target","element","addEventListener","removeEventListener","increment","_dispatchKeyboardEvent","ev","events","isEnabled","dispatchImmediately","event","_on","once","callback","shouldClone","dispatch","info","disposers","disposer","clickable","draggable","trackable","resizable","swipeable","wheelable","hoverable","focusable","push","InteractionObject","_InteractionObjectEvents__WEBPACK_IMPORTED_MODULE_1__","_Base__WEBPACK_IMPORTED_MODULE_2__","_utils_List__WEBPACK_IMPORTED_MODULE_3__","_utils_Dictionary__WEBPACK_IMPORTED_MODULE_4__","_Interaction__WEBPACK_IMPORTED_MODULE_5__","_utils_Type__WEBPACK_IMPORTED_MODULE_6__","eventDisposers","replacedStyles","_clickable","_contextMenuDisabled","_hoverable","_trackable","_draggable","_swipeable","_resizable","_wheelable","_inert","_isHover","_isHoverByTouch","_isDown","_isFocused","_isTouchProtected","_inertiaOptions","inertias","_hitOptions","_hoverOptions","_swipeOptions","_keyboardOptions","_cursorOptions","defaultStyle","property","value","_element","className","_disposers","applyTheme","Object","defineProperty","get","set","isHover","overObjects","moveValue","removeValue","enumerable","configurable","isHoverByTouch","_overPointers","isDown","downObjects","_downPointers","isFocused","focusedObject","undefined","unprepElement","prepElement","processClickable","processContextMenu","processHoverable","processTrackable","processDraggable","processSwipeable","processResizable","processWheelable","_focusable","tabindex","_tabindex","processFocusable","_originalPosition","x","y","_originalScale","_originalAngle","sprite","adapter","copyFrom","source","inertiaOptions","hitOptions","hoverOptions","swipeOptions","keyboardOptions","cursorOptions","contextMenuDisabled","applyCursorOverStyle","setEventDisposer","f","getKey","setKey","dispose","removeKey","interaction","trackedObjects","transformedObjects","unlockWheel","Inertia","_Base__WEBPACK_IMPORTED_MODULE_1__","_Interaction__WEBPACK_IMPORTED_MODULE_2__","_utils_Animation__WEBPACK_IMPORTED_MODULE_3__","_utils_Type__WEBPACK_IMPORTED_MODULE_4__","point","startPoint","animations","handleMove","imev","shift","touch","done","processDragStop","MouseCursorStyle","grab","grabbing","pointer","default","horizontalResize","verticalResize","getInteraction","_utils_List__WEBPACK_IMPORTED_MODULE_2__","_utils_Disposer__WEBPACK_IMPORTED_MODULE_4__","_InteractionObject__WEBPACK_IMPORTED_MODULE_5__","_InteractionKeyboardObject__WEBPACK_IMPORTED_MODULE_6__","_utils_Dictionary__WEBPACK_IMPORTED_MODULE_7__","_Inertia__WEBPACK_IMPORTED_MODULE_8__","_utils_DOM__WEBPACK_IMPORTED_MODULE_9__","_utils_Keyboard__WEBPACK_IMPORTED_MODULE_10__","_System__WEBPACK_IMPORTED_MODULE_11__","_utils_Ease__WEBPACK_IMPORTED_MODULE_12__","_utils_Math__WEBPACK_IMPORTED_MODULE_13__","_utils_Iterator__WEBPACK_IMPORTED_MODULE_14__","_utils_Type__WEBPACK_IMPORTED_MODULE_15__","_utils_Time__WEBPACK_IMPORTED_MODULE_16__","Interaction","_globalEventsAdded","_pointerEvents","pointerdown","pointerup","pointermove","pointercancel","pointerover","pointerout","wheel","_usePointerEventsOnly","_useTouchEventsOnly","_addHoverEvents","_passiveSupported","_delayedEvents","out","pointers","doubleHitTime","hitTolerance","noFocus","touchOutBehavior","touchOutDelay","time","verticalThreshold","horizontalThreshold","speed","accelleration","accellerationDelay","body","document","window","hasOwnProperty","matchMedia","matches","navigator","userAgent","match","createElement","onmousewheel","duration","factor","easing","passiveSupported","fullFF","debug","addGlobalEvents","handleGlobalPointerDown","handleGlobalPointerMove","handleGlobalPointerUp","handleGlobalTouchStart","handleGlobalTouchMove","handleGlobalTouchEnd","handleGlobalKeyDown","handleGlobalKeyUp","io","processTouchable","hasKey","preventDefault","handlePointerOut","handlePointerOver","processMovable","isGlobalElement","isTouchProtected","handleMouseWheel","passive","on","lockWheel","handleFocus","handleBlur","handleFocusBlur","handleTouchDown","handlePointerDown","isPaused","getHitOption","disableType","enableType","isKey","disposerKey","ko","getEventKey","directionY","directionX","getPointer","getPointerPoint","addBreadCrumb","handleGlobalMove","processDelayed","preventTouchAction","defaultPrevented","cancelled","handleGlobalUp","i","changedTouches","length","which","button","resetPointer","handleDown","handleOver","handleOut","deltaX","deltaY","mod","deltaMode","WheelEvent","Error","Math","round","wheelDeltaX","wheelDeltaY","handleWheel","maybePreventDefault","handleHit","now","lastHit","lastHitPointer","soft","overPointers","handleTrack","force","hasDelayedOut","old","behavior","getHoverOption","keepUntil","timeout","setTimeout","clear","delayedEvent","pop","inert","stopInertia","downPointers","applyCursorDownStyle","processDragStart","processResizeStart","backwards","iterator","contains","handleUp","restoreCursorDownStyle","swiped","handleSwipe","moved","handleInertia","processResizeStop","cancelable","target_1","lastEvent","reset","swiping","handleTransform","skipCheck","handleMoveInertia","handleResizeInertia","inertia","ref","getTrailPoint","getInertiaOption","animationOptions","to","animation","start","lastUpEvent","pointer2","point2","startPoint2","pointer1","getIndex","point1","startPoint1","originalPosition","singlePoint","nextPointer","pointer1Moved","dragStartEvents","handleTransformMove","pointer2Moved","handleTransformResize","ctrlKey","pointerMoved","scale","dragTarget","getDragPointer","dragStart","lastDownEvent","dragStop","getPointerId","id","identifier","pointerId","replace","clientX","clientY","isPointerTouch","startTime","track","swipeCanceled","Touch","PointerEvent","pointerType","MouseEvent","timestamp","lockDocument","unlockDocument","restoreAllStyles","lockElement","unlockElement","wheelLockEvent","isLocalElement","svg","cached","getCache","elementFromPoint","local","setCache","el","props","style","setTemporaryStyle","restoreStyle","option","res","getSwipeOption","getKeyboardOption","options","abs","overStyle","downStyle","setGlobalStyle","styles","restoreGlobalStyle","tolerance","minTime","getShift","pointerExists","list","exists","each","item","a","isDisposed","log","text","show","logTouch","TouchEvent","console","uid","err","InteractionKeyboardObject","_Interaction__WEBPACK_IMPORTED_MODULE_0__","_System__WEBPACK_IMPORTED_MODULE_1__","_utils_Array__WEBPACK_IMPORTED_MODULE_2__","_disposed","keyboardEvent","_startedOn","Date","getTime","update","shiftKey","ms","accelleratedMs","accellerationFactor"],"mappings":"kHAAAA,EAAAC,EAAAC,EAAA,sBAAAC,IAAA,IAAAC,EAAAJ,EAAA,QAAAK,EAAAL,EAAA,QAAAM,EAAAN,EAAA,QAUAG,EAAA,SAAAI,GAEA,SAAAJ,IACA,IAAAK,EAAA,OAAAD,KAAAE,MAAAC,KAAAC,YAAAD,KAKA,OADAF,EAAAI,WAAA,GACAJ,EA2FA,OAlGIJ,EAAA,KAAiBD,EAAAI,GAcrBJ,EAAAU,UAAAC,aAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAAV,EAAAE,KACA,IAAAA,KAAAE,WAAAG,GAAA,CACA,IAAAI,EAAA,SAAAC,GACAH,EAAAI,KAAAH,EAAAF,EAAAI,IAEAV,KAAAY,OAAAC,QAAAC,iBAAAT,EAAAI,GAAA,GACAT,KAAAE,WAAAG,GAAA,IAAwCT,EAAA,KAAe,kBACvDE,EAAAI,WAAAG,GACAP,EAAAc,OAAAC,QAAAE,oBAAAV,EAAAI,GAAA,KAGA,OAAAT,KAAAE,WAAAG,GAAAW,aAEAvB,EAAAU,UAAAc,uBAAA,SAAAX,EAAAY,GAEAlB,KAAAY,OAAAO,OAAAC,UAAAd,IACAN,KAAAY,OAAAO,OAAAE,oBAAAf,EAAA,CACAD,KAAAC,EACAM,OAAAZ,KAAAY,OACAU,MAAAJ,KAIAzB,EAAAU,UAAAoB,IAAA,SAAAC,EAAAnB,EAAAoB,EAAAjB,EAAAkB,EAAAC,GACA,IAAAC,EAAA/B,EAAAM,UAAAoB,IAAAZ,KAAAX,KAAAwB,EAAAnB,EAAAoB,EAAAjB,EAAAkB,EAAAC,GACAE,EAAA,CAAAD,EAAAE,UACA,OAAAzB,GACA,UACA,gBACA,iBACA,WACA,SACAL,KAAAY,OAAAmB,WAAA,EACA,MACA,WACA,gBACA,eACA/B,KAAAY,OAAAoB,WAAA,EACA,MACA,YACAhC,KAAAY,OAAAqB,WAAA,EACA,MACA,aACAjC,KAAAY,OAAAsB,WAAA,EACA,MACA,YACA,gBACA,iBACAlC,KAAAY,OAAAuB,WAAA,EACA,MACA,YACA,cACA,gBACA,gBACA,iBACAnC,KAAAY,OAAAwB,WAAA,EACA,MACA,WACA,UACApC,KAAAY,OAAAyB,WAAA,EACA,MACA,YACA,WACA,cACA,eACArC,KAAAY,OAAA0B,WAAA,EACA,MACA,cACAT,EAAAU,KAAAvC,KAAAI,aAAAC,IAAAL,KAAAiB,uBAAAjB,OACA,MACA,YACA6B,EAAAU,KAAAvC,KAAAI,aAAAC,IAAAL,KAAAiB,uBAAAjB,OACA,MACA,eACA6B,EAAAU,KAAAvC,KAAAI,aAAAC,IAAAL,KAAAiB,uBAAAjB,OACA,MACA,YACA6B,EAAAU,KAAAvC,KAAAI,aAAAC,IAAAL,KAAAiB,uBAAAjB,OACA,MAGA,OADA4B,EAAAE,SAAA,IAA4BlC,EAAA,KAAaiC,GACzCD,GAEAnC,EAnGA,CAoGEE,EAAA,2CC9GFL,EAAAC,EAAAC,EAAA,sBAAAgD,IAAA,IAAA9C,EAAAJ,EAAA,QAAAmD,EAAAnD,EAAA,QAAAoD,EAAApD,EAAA,QAAAqD,EAAArD,EAAA,QAAAsD,EAAAtD,EAAA,QAAAuD,EAAAvD,EAAA,QAAAwD,EAAAxD,EAAA,QAkCAkD,EAAA,SAAA3C,GAKA,SAAA2C,EAAA3B,GACA,IAAAf,EAAAD,EAAAc,KAAAX,YAyFA,OArFAF,EAAAqB,OAAA,IAA2BsB,EAAA,KAAgC3C,GAO3DA,EAAAiD,eAAA,IAAmCH,EAAA,KAQnC9C,EAAAkD,eAAA,IAAmCJ,EAAA,KACnC9C,EAAAmD,YAAA,EACAnD,EAAAoD,sBAAA,EACApD,EAAAqD,YAAA,EACArD,EAAAsD,YAAA,EACAtD,EAAAuD,YAAA,EACAvD,EAAAwD,YAAA,EACAxD,EAAAyD,YAAA,EACAzD,EAAA0D,YAAA,EACA1D,EAAA2D,QAAA,EAIA3D,EAAA4D,UAAA,EAIA5D,EAAA6D,iBAAA,EAIA7D,EAAA8D,SAAA,EAIA9D,EAAA+D,YAAA,EAIA/D,EAAAgE,mBAAA,EAIAhE,EAAAiE,gBAAA,IAAoCnB,EAAA,KAMpC9C,EAAAkE,SAAA,IAA6BpB,EAAA,KAI7B9C,EAAAmE,YAAA,GAIAnE,EAAAoE,cAAA,GAIApE,EAAAqE,cAAA,GAIArE,EAAAsE,iBAAA,GAIAtE,EAAAuE,eAAA,CACAC,aAAA,EACAC,SAAA,SACAC,MAAA,aAGA1E,EAAA2E,SAAA5D,EACAf,EAAA4E,UAAA,oBACA5E,EAAA6E,WAAApC,KAAA,IAAkCK,EAAA,KAAkB9C,EAAAkE,WACpDlE,EAAA6E,WAAApC,KAAA,IAAkCK,EAAA,KAAkB9C,EAAAiD,iBACpDjD,EAAA8E,aACA9E,EA+pBA,OA7vBIJ,EAAA,KAAiB8C,EAAA3C,GAgGrBgF,OAAAC,eAAAtC,EAAArC,UAAA,WAIA4E,IAAA,WACA,OAAA/E,KAAA0D,UAOAsB,IAAA,SAAAR,GACAxE,KAAAiF,SAAAT,IACAxE,KAAA0D,SAAAc,EACAA,EACoBK,OAAAhC,EAAA,KAAAgC,GAAcK,YAAAC,UAAAnF,MAGd6E,OAAAhC,EAAA,KAAAgC,GAAcK,YAAAE,YAAApF,QAIlCqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,kBAIA4E,IAAA,WACA,OAAA/E,KAAA2D,iBAOAqB,IAAA,SAAAR,GACAxE,KAAAuF,gBAAAf,IACAxE,KAAA2D,gBAAAa,IAGAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,gBAOA4E,IAAA,WAIA,OAHA/E,KAAAwF,gBACAxF,KAAAwF,cAAA,IAAyC7C,EAAA,MAEzC3C,KAAAwF,eAEAH,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,UAIA4E,IAAA,WACA,OAAA/E,KAAA4D,SAOAoB,IAAA,SAAAR,GACAxE,KAAAyF,QAAAjB,IACAxE,KAAA4D,QAAAY,EACAA,EACoBK,OAAAhC,EAAA,KAAAgC,GAAca,YAAAP,UAAAnF,MAGd6E,OAAAhC,EAAA,KAAAgC,GAAca,YAAAN,YAAApF,QAIlCqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,gBAOA4E,IAAA,WAIA,OAHA/E,KAAA2F,gBACA3F,KAAA2F,cAAA,IAAyChD,EAAA,MAEzC3C,KAAA2F,eAEAN,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAA6D,YAOAmB,IAAA,SAAAR,GACAxE,KAAA4F,WAAApB,IACAxE,KAAA6D,WAAAW,EAEoBK,OAAAhC,EAAA,KAAAgC,GAAcgB,cADlCrB,EACkCxE,UAGA8F,IAIlCT,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,oBAKA4E,IAAA,WACA,OAAA/E,KAAA8D,mBAQAkB,IAAA,SAAAR,GACAxE,KAAA8D,mBAAAU,IACAxE,KAAA8D,kBAAAU,EACAA,EACoBK,OAAAhC,EAAA,KAAAgC,GAAckB,cAAA/F,OAElCA,KAAAgC,WAAAhC,KAAAmC,WAAAnC,KAAAiC,WAAAjC,KAAAkC,YACoB2C,OAAAhC,EAAA,KAAAgC,GAAcmB,YAAAhG,QAIlCqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAiD,YAQA+B,IAAA,SAAAR,GACAxE,KAAAiD,aAAAuB,IACAxE,KAAAiD,WAAAuB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcoB,iBAAAjG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,uBAIA4E,IAAA,WACA,OAAA/E,KAAAkD,sBASA8B,IAAA,SAAAR,GACAxE,KAAAkD,uBAAAsB,IACAxE,KAAAkD,qBAAAsB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcqB,mBAAAlG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAmD,YAOA6B,IAAA,SAAAR,GACAxE,KAAAmD,aAAAqB,IACAxE,KAAAmD,WAAAqB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcsB,iBAAAnG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAoD,YAOA4B,IAAA,SAAAR,GACAxE,KAAAoD,aAAAoB,IACAxE,KAAAoD,WAAAoB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcuB,iBAAApG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAqD,YAOA2B,IAAA,SAAAR,GACAxE,KAAAqD,aAAAmB,IACAxE,KAAAqD,WAAAmB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcwB,iBAAArG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAsD,YAOA0B,IAAA,SAAAR,GACAxE,KAAAsD,aAAAkB,IACAxE,KAAAsD,WAAAkB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAcyB,iBAAAtG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAuD,YAOAyB,IAAA,SAAAR,GACAxE,KAAAuD,aAAAiB,IACAxE,KAAAuD,WAAAiB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAc0B,iBAAAvG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAwD,YAOAwB,IAAA,SAAAR,GACAxE,KAAAwD,aAAAgB,IACAxE,KAAAwD,WAAAgB,EACgBK,OAAAhC,EAAA,KAAAgC,GAAc2B,iBAAAxG,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,SAIA4E,IAAA,WACA,OAAA/E,KAAAyD,QAQAuB,IAAA,SAAAR,GACAxE,KAAAyD,SAAAe,IACAxE,KAAAyD,OAAAe,IAGAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,aAIA4E,IAAA,WACA,OAAA/E,KAAAyG,YAOAzB,IAAA,SAAAR,GACAxE,KAAAyG,aAAAjC,IACAxE,KAAAyG,WAAAjC,EACAxE,KAAAyG,aAAA,GAAAzG,KAAA0G,WACA1G,KAAA2G,UAAA,GAEgB9B,OAAAhC,EAAA,KAAAgC,GAAc+B,iBAAA5G,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,YAIA4E,IAAA,WACA,OAAmBjC,EAAA,KAAqB9C,KAAA2G,WAAA,IAOxC3B,IAAA,SAAAR,GACAxE,KAAA2G,YAAAnC,IACAxE,KAAA2G,UAAAnC,EACAA,GAAA,IACAxE,KAAAsC,WAAA,GAEgBuC,OAAAhC,EAAA,KAAAgC,GAAc+B,iBAAA5G,QAG9BqF,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,WAIA4E,IAAA,WACA,OAAA/E,KAAAyE,UAOAO,IAAA,SAAAnE,GACAb,KAAAyE,SAAA5D,GAEAwE,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,oBAKA4E,IAAA,WACA,OAAA/E,KAAA6G,mBAAA,CAA8CC,EAAA,EAAAC,EAAA,IAQ9C/B,IAAA,SAAAR,GACAxE,KAAA6G,kBAAArC,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,iBAIA4E,IAAA,WACA,OAAmBjC,EAAA,KAAqB9C,KAAAgH,eAAA,IAQxChC,IAAA,SAAAR,GACAxE,KAAAgH,iBAAAxC,IACAxE,KAAAgH,eAAAxC,IAGAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,iBAIA4E,IAAA,WACA,OAAmBjC,EAAA,KAAqB9C,KAAAiH,eAAA,IAQxCjC,IAAA,SAAAR,GACAxE,KAAAiH,iBAAAzC,IACAxE,KAAAiH,eAAAzC,IAGAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,kBAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,iBAAAC,KAAA+D,iBAGA/D,KAAA+D,iBAQAiB,IAAA,SAAAR,GACAxE,KAAA+D,gBAAAS,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,cAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,aAAAC,KAAAiE,aAGAjE,KAAAiE,aAQAe,IAAA,SAAAR,GACAxE,KAAAiE,YAAAO,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,gBAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,eAAAC,KAAAkE,eAGAlE,KAAAkE,eAQAc,IAAA,SAAAR,GACAxE,KAAAkE,cAAAM,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,gBAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,eAAAC,KAAAmE,eAGAnE,KAAAmE,eAQAa,IAAA,SAAAR,GACAxE,KAAAmE,cAAAK,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,mBAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,kBAAAC,KAAAoE,kBAGApE,KAAAoE,kBAQAY,IAAA,SAAAR,GACAxE,KAAAoE,iBAAAI,GAEAa,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAAtC,EAAArC,UAAA,iBAIA4E,IAAA,WACA,OAAA/E,KAAAkH,OACAlH,KAAAkH,OAAAC,QAAApH,MAAA,gBAAAC,KAAAqE,gBAGArE,KAAAqE,gBAQAW,IAAA,SAAAR,GACAxE,KAAAqE,eAAAG,GAEAa,YAAA,EACAC,cAAA,IAQA9C,EAAArC,UAAAiH,SAAA,SAAAC,GACAxH,EAAAM,UAAAiH,SAAAzG,KAAAX,KAAAqH,GACArH,KAAAsH,eAAAD,EAAAC,eACAtH,KAAAuH,WAAAF,EAAAE,WACAvH,KAAAwH,aAAAH,EAAAG,aACAxH,KAAAyH,aAAAJ,EAAAI,aACAzH,KAAA0H,gBAAAL,EAAAK,gBACA1H,KAAA2H,cAAAN,EAAAM,cACA3H,KAAA4H,oBAAAP,EAAAO,oBACQ/C,OAAAhC,EAAA,KAAAgC,GAAcgD,qBAAA7H,OAKtBwC,EAAArC,UAAA2H,iBAAA,SAAAxH,EAAAkE,EAAAuD,GACA,IAAAjG,EAAA9B,KAAA+C,eAAAiF,OAAA1H,GACAkE,EACA,MAAA1C,GACA9B,KAAA+C,eAAAkF,OAAA3H,EAAAyH,KAIA,MAAAjG,IACAA,EAAAoG,UACAlI,KAAA+C,eAAAoF,UAAA7H,KAOAkC,EAAArC,UAAA+H,QAAA,WACArI,EAAAM,UAAA+H,QAAAvH,KAAAX,MAEA,IAAAoI,EAA0BvD,OAAAhC,EAAA,KAAAgC,GAC1BuD,EAAAlD,YAAAE,YAAApF,MACAoI,EAAA1C,YAAAN,YAAApF,MACAoI,EAAAC,eAAAjD,YAAApF,MACAoI,EAAAE,mBAAAlD,YAAApF,MAEAA,KAAAiF,SAAAjF,KAAAoC,WACAgG,EAAAG,cAEAH,EAAAvC,gBAAA7F,OACAoI,EAAAvC,mBAAAC,IAGAtD,EA9vBA,CA+vBEE,EAAA,2CCjyBFpD,EAAAC,EAAAC,EAAA,sBAAAgJ,IAAA,IAAA9I,EAAAJ,EAAA,QAAAmJ,EAAAnJ,EAAA,QAAAoJ,EAAApJ,EAAA,QAAAqJ,EAAArJ,EAAA,QAAAsJ,EAAAtJ,EAAA,QA0BAkJ,EAAA,SAAA3I,GAKA,SAAA2I,EAAAJ,EAAA/H,EAAAwI,EAAAC,GACA,IAAAhJ,EAEAD,EAAAc,KAAAX,YAYA,OARAF,EAAAiJ,WAAA,GACAjJ,EAAA4E,UAAA,UACA5E,EAAAsI,cACAtI,EAAAO,OACAP,EAAA+I,QACA/I,EAAAgJ,aAEAhJ,EAAA6E,WAAApC,KAAA,IAAkCoG,EAAA,KAAiB7I,EAAAiJ,aACnDjJ,EA0FA,OA7GIJ,EAAA,KAAiB8I,EAAA3I,GAqBrBgF,OAAAC,eAAA0D,EAAArI,UAAA,KAMA4E,IAAA,WACA,OAAA/E,KAAA6I,MAAA/B,GASA9B,IAAA,SAAAR,GACgBoE,EAAA,KAAcpE,KAC9BxE,KAAA6I,MAAA/B,EAAAtC,EACAxE,KAAAgJ,eAGA3D,YAAA,EACAC,cAAA,IAEAT,OAAAC,eAAA0D,EAAArI,UAAA,KAMA4E,IAAA,WACA,OAAA/E,KAAA6I,MAAA9B,GASA/B,IAAA,SAAAR,GACgBoE,EAAA,KAAcpE,KAC9BxE,KAAA6I,MAAA9B,EAAAvC,EACAxE,KAAAgJ,eAGA3D,YAAA,EACAC,cAAA,IAKAkD,EAAArI,UAAA6I,WAAA,WAEA,GAAAhJ,KAAAoI,YAAAjH,OAAAC,UAAA,SACA,IAAA6H,EAAA,CACA5I,KAAA,OACAO,OAAAZ,KAAAoI,YACAc,MAAA,CACApC,EAAA9G,KAAA8G,EAAA9G,KAAA8I,WAAAhC,EACAC,EAAA/G,KAAA+G,EAAA/G,KAAA8I,WAAA/B,GAEA+B,WAAA9I,KAAA8I,WACAD,MAAA,CACA/B,EAAA9G,KAAA8G,EACAC,EAAA/G,KAAA+G,GAEAoC,OAAA,GAGAnJ,KAAAoI,YAAAjH,OAAAE,oBAAA,OAAA4H,KAOAT,EAAArI,UAAAiJ,KAAA,WAEApJ,KAAAoI,YAAApE,SAAAmE,UAAAnI,KAAAK,MAEA,SAAAL,KAAAK,MACYwE,OAAA6D,EAAA,KAAA7D,GAAcwE,gBAAArJ,KAAAoI,aAG1BpI,KAAAkI,WAEAM,EA9GA,CA+GEC,EAAA,2CCzIFnJ,EAAAC,EAAAC,EAAA,sBAAA8J,IAOA,IAAAA,EAAA,WACA,SAAAA,KAwDA,OAnDAA,EAAAC,KAAA,EACAhF,SAAA,SACAC,MAAA,QACS,CACTD,SAAA,SACAC,MAAA,QACS,CACTD,SAAA,SACAC,MAAA,iBAKA8E,EAAAE,SAAA,EACAjF,SAAA,SACAC,MAAA,QACS,CACTD,SAAA,SACAC,MAAA,YACS,CACTD,SAAA,SACAC,MAAA,qBAKA8E,EAAAG,QAAA,EACAlF,SAAA,SACAC,MAAA,YAKA8E,EAAAI,QAAA,EACAnF,SAAA,SACAC,MAAA,YAKA8E,EAAAK,iBAAA,EACApF,SAAA,SACAC,MAAA,cAKA8E,EAAAM,eAAA,EACArF,SAAA,SACAC,MAAA,cAEA8E,EAzDA,sCCPAhK,EAAAC,EAAAC,EAAA,sBAAAqK,IAAA,IAAAnK,EAAAJ,EAAA,QAAAmJ,EAAAnJ,EAAA,QAAAwK,EAAAxK,EAAA,QAAAqJ,EAAArJ,EAAA,QAAAyK,EAAAzK,EAAA,QAAA0K,EAAA1K,EAAA,QAAA2K,EAAA3K,EAAA,QAAA4K,EAAA5K,EAAA,QAAA6K,EAAA7K,EAAA,QAAA8K,EAAA9K,EAAA,QAAA+K,EAAA/K,EAAA,QAAAgL,EAAAhL,EAAA,QAAAiL,EAAAjL,EAAA,QAAAkL,EAAAlL,EAAA,QAAAmL,EAAAnL,EAAA,QAAAoL,EAAApL,EAAA,QAAAqL,EAAArL,EAAA,QAoDAsL,EAAA,SAAA/K,GAMA,SAAA+K,IACA,IAAA9K,EAEAD,EAAAc,KAAAX,YAwLA,OApLAF,EAAA+K,oBAAA,EAIA/K,EAAAgL,eAAA,CACAC,YAAA,YACAC,UAAA,UACAC,YAAA,YACAC,cAAA,UACAC,YAAA,YACAC,WAAA,WACAC,MAAA,SAOAvL,EAAAwL,uBAAA,EAIAxL,EAAAyL,qBAAA,EAMAzL,EAAA0L,iBAAA,EAIA1L,EAAA2L,mBAAA,EAIA3L,EAAA4L,eAAA,CAAgCC,IAAA,IAIhC7L,EAAAoF,YAAA,IAAgC4E,EAAA,KAIhChK,EAAA4F,YAAA,IAAgCoE,EAAA,KAIhChK,EAAAuI,eAAA,IAAmCyB,EAAA,KAInChK,EAAAwI,mBAAA,IAAuCwB,EAAA,KAIvChK,EAAA8L,SAAA,IAA6B1B,EAAA,KAQ7BpK,EAAAwH,eAAA,IAAmC4C,EAAA,KAKnCpK,EAAAyH,WAAA,CAEAsE,cAAA,IAEAC,aAAA,GACAC,SAAA,GAMAjM,EAAA0H,aAAA,CACAwE,iBAAA,QACAC,cAAA,KAMAnM,EAAA2H,aAAA,CACAyE,KAAA,IACAC,kBAAA,GACAC,oBAAA,IAMAtM,EAAA4H,gBAAA,CACA2E,MAAA,GACAC,cAAA,IACAC,mBAAA,KAGAzM,EAAA4E,UAAA,cAEA5E,EAAA0M,KAAA1M,EAAA+J,eAAA4C,SAAAD,MACA1M,EAAA6E,WAAApC,KAAAzC,EAAA0M,MAEAE,OAAAC,eAAA,iBAEA7M,EAAAgL,eAAAC,YAAA,cACAjL,EAAAgL,eAAAE,UAAA,YACAlL,EAAAgL,eAAAG,YAAA,cACAnL,EAAAgL,eAAAI,cAAA,gBACApL,EAAAgL,eAAAK,YAAA,cACArL,EAAAgL,eAAAM,WAAA,cAGAsB,OAAAC,eAAA,mBAEA7M,EAAAgL,eAAAC,YAAA,gBACAjL,EAAAgL,eAAAE,UAAA,cACAlL,EAAAgL,eAAAG,YAAA,gBACAnL,EAAAgL,eAAAI,cAAA,cACApL,EAAAgL,eAAAK,YAAA,gBACArL,EAAAgL,eAAAM,WAAA,gBAGA,qBAAAwB,uBAAA,kBAAAC,QAKA,iBAAAH,SACA5M,EAAA0L,iBAAA,EACA1L,EAAAyL,qBAAA,GAGAmB,OAAAI,UAAAC,UAAAC,MAAA,SAEAlN,EAAAwL,uBAAA,EAMAxL,EAAAyL,qBAAA,EASA,YAAAkB,SAAAQ,cAAA,OAEAnN,EAAAgL,eAAAO,MAAA,QAEiBX,EAAA,KAAc+B,SAAAS,gBAE/BpN,EAAAgL,eAAAO,MAAA,cAGAvL,EAAAwH,eAAAW,OAAA,QACAiE,KAAA,IACAiB,SAAA,IACAC,OAAA,EACAC,OAAsB9C,EAAA,OAEtBzK,EAAAwH,eAAAW,OAAA,UACAiE,KAAA,IACAiB,SAAA,IACAC,OAAA,EACAC,OAAsB9C,EAAA,OAGtBzK,EAAA2L,kBAAAb,EAAA0C,iBAEAxN,EAAA8E,aACA9E,EAu2EA,OAviFIJ,EAAA,KAAiBkL,EAAA/K,GA0MrB+K,EAAAzK,UAAAoN,OAAA,WACA,OAAAb,OAAAI,UAAAC,UAAAC,MAAA,aAAAN,OAAAI,UAAAC,UAAAC,MAAA,YAEApC,EAAAzK,UAAAqN,MAAA,aAcA5C,EAAAzK,UAAAsN,gBAAA,WACA,IAAA3N,EAAAE,KACAA,KAAA6K,qBACA7K,KAAAuL,sBACAvL,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAAzM,KAAA8K,eAAAC,YAAA,SAAA7J,GAA2DpB,EAAA4N,wBAAAxM,MAChHlB,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAAzM,KAAA8K,eAAAG,YAAA,SAAA/J,GAA2DpB,EAAA6N,wBAAAzM,MAChHlB,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAAzM,KAAA8K,eAAAE,UAAA,SAAA9J,GAAyDpB,EAAA8N,sBAAA1M,MAC9GlB,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAAzM,KAAA8K,eAAAI,cAAA,SAAAhK,GAA6DpB,EAAA8N,sBAAA1M,GAAA,OAKlHlB,KAAAsL,wBACAtL,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAA,sBAAAvL,GAAwCpB,EAAA+N,uBAAA3M,MAC7FlB,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAA,qBAAAvL,GAAuCpB,EAAAgO,sBAAA5M,MAC5FlB,KAAA2E,WAAApC,KAAqCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAA,oBAAAvL,GAAsCpB,EAAAiO,qBAAA7M,OAE3FlB,KAAA2E,WAAApC,KAAiCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAA,mBAAAvL,GAAqCpB,EAAAkO,oBAAA9M,MACtFlB,KAAA2E,WAAApC,KAAiCsC,OAAAuF,EAAA,KAAAvF,CAAgB4H,SAAA,iBAAAvL,GAAmCpB,EAAAmO,kBAAA/M,MACpFlB,KAAA6K,oBAAA,IASAD,EAAAzK,UAAA8F,iBAAA,SAAAiI,GAEAlO,KAAAmO,iBAAAD,IAQAtD,EAAAzK,UAAA+F,mBAAA,SAAAgI,GACAA,EAAAtG,oBACAsG,EAAAnL,eAAAqL,OAAA,wBACAF,EAAAnL,eAAAkF,OAAA,sBAAgEpD,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,uBAAAH,GAChFA,EAAA2N,oBAKAH,EAAAnL,eAAAqL,OAAA,wBACAF,EAAAnL,eAAAiF,OAAA,uBAAAE,WAUA0C,EAAAzK,UAAAgG,iBAAA,SAAA+H,GACA,IAAApO,EAAAE,KACA,GAAAkO,EAAA7L,WAAA6L,EAAAjM,UAEAjC,KAAAyN,kBAEAzN,KAAA6H,qBAAAqG,IAEAA,EAAAnL,eAAAqL,OAAA,cAAApO,KAAAwL,iBACA0C,EAAAnL,eAAAkF,OAAA,gBAA0D8B,EAAA,KAAa,CACnDlF,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAM,WAAA,SAAA1K,GAA2D,OAAAZ,EAAAwO,iBAAAJ,EAAAxN,KAC3EmE,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAK,YAAA,SAAAzK,GAA4D,OAAAZ,EAAAyO,kBAAAL,EAAAxN,QAGhGwN,EAAAjM,cAIA,CACA,IAAAH,EAAAoM,EAAAnL,eAAAiF,OAAA,aACA,MAAAlG,IACAA,EAAAoG,UACAgG,EAAAnL,eAAAoF,UAAA,cAIAnI,KAAAmO,iBAAAD,IASAtD,EAAAzK,UAAAqO,eAAA,SAAAN,IAEAA,EAAAlM,WAAAkM,EAAA/L,WAAA+L,EAAAjM,WAAAiM,EAAAhM,aAEAlC,KAAAyO,gBAAAP,MAAAQ,kBACA1O,KAAAgG,YAAAkI,GAGAlO,KAAA6H,qBAAAqG,IAGAlO,KAAAmO,iBAAAD,IAQAtD,EAAAzK,UAAAiG,iBAAA,SAAA8H,GACAlO,KAAAmG,iBAAA+H,GACAlO,KAAAwO,eAAAN,GACAA,EAAAjM,UACAjC,KAAAqI,eAAAlD,UAAA+I,GAGAlO,KAAAqI,eAAAjD,YAAA8I,IASAtD,EAAAzK,UAAAkG,iBAAA,SAAA6H,GACAlO,KAAAwO,eAAAN,IAYAtD,EAAAzK,UAAAmG,iBAAA,SAAA4H,GACAlO,KAAAwO,eAAAN,IASAtD,EAAAzK,UAAAoG,iBAAA,SAAA2H,GACAlO,KAAAwO,eAAAN,IASAtD,EAAAzK,UAAAqG,iBAAA,SAAA0H,GACA,IAAApO,EAAAE,KACA,GAAAkO,EAAA9L,UAEA8L,EAAAnL,eAAAqL,OAAA,cACAF,EAAAnL,eAAAkF,OAAA,gBAA0D8B,EAAA,KAAa,CACnDlF,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAO,MAAA,SAAA3K,GAAsD,OAAAZ,EAAA6O,iBAAAT,EAAAxN,MAAwCV,KAAAyL,mBAAA,CAA4BmD,SAAA,IAC9JV,EAAA/M,OAAA0N,GAAA,eAAAnO,GACAwN,EAAA9L,WACAtC,EAAAyI,gBAGA2F,EAAA/M,OAAA0N,GAAA,gBAAAnO,GACAwN,EAAA9L,WACAtC,EAAAgP,qBAMA,CACA,IAAAhN,EAAAoM,EAAAnL,eAAAiF,OAAA,aACA,MAAAlG,IACAA,EAAAoG,UACAgG,EAAAnL,eAAAoF,UAAA,gBAaAyC,EAAAzK,UAAAyG,iBAAA,SAAAsH,GACA,IAAApO,EAAAE,KACA,QAAAkO,EAAA5L,WAAA4L,EAAAxH,UAAA,IAAA1G,KAAAuL,oBACA2C,EAAAnL,eAAAqL,OAAA,cACAF,EAAAnL,eAAAkF,OAAA,gBAA0D8B,EAAA,KAAa,CACnDlF,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,iBAAAH,GAAoC,OAAAZ,EAAAiP,YAAAb,EAAAxN,KACpDmE,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,gBAAAH,GAAmC,OAAAZ,EAAAkP,WAAAd,EAAAxN,KACnDmE,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAC,YAAA,SAAArK,GAA4D,OAAAZ,EAAAmP,gBAAAf,EAAAxN,KAC5EmE,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,sBAAAH,GAAyC,OAAAZ,EAAAmP,gBAAAf,EAAAxN,MAAuCV,KAAAyL,mBAAA,CAA4BmD,SAAA,WAIhJ,CACA,IAAA9M,EAAAoM,EAAAnL,eAAAiF,OAAA,aACA,MAAAlG,IACAA,EAAAoG,UACAgG,EAAAnL,eAAAoF,UAAA,gBAWAyC,EAAAzK,UAAAgO,iBAAA,SAAAD,GACA,IAAApO,EAAAE,KAEA,GAAAkO,EAAAnM,WAAAmM,EAAA7L,WAAA6L,EAAAjM,WAAAiM,EAAAlM,WAAAkM,EAAA/L,WAAA+L,EAAAhM,UAEAlC,KAAAyN,kBAEAS,EAAAnL,eAAAqL,OAAA,eACApO,KAAAuL,qBAAAvL,KAAAsL,sBAMAtL,KAAAuL,oBAGAvL,KAAAsL,uBACA4C,EAAAnL,eAAAkF,OAAA,YAA0DpD,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,sBAAAH,GAAyC,OAAAZ,EAAAoP,gBAAAhB,EAAAxN,MAAuCV,KAAAyL,mBAAA,CAA4BmD,SAAA,KAHtLV,EAAAnL,eAAAkF,OAAA,YAA0DpD,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAC,YAAA,SAAArK,GAA4D,OAAAZ,EAAAqP,kBAAAjB,EAAAxN,MANtIwN,EAAAnL,eAAAkF,OAAA,gBAA8D8B,EAAA,KAAa,CACnDlF,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAAb,KAAA8K,eAAAC,YAAA,SAAArK,GAA4D,OAAAZ,EAAAqP,kBAAAjB,EAAAxN,KAC5EmE,OAAAuF,EAAA,KAAAvF,CAAgBqJ,EAAArN,QAAA,sBAAAH,GAAyC,OAAAZ,EAAAoP,gBAAAhB,EAAAxN,MAAuCV,KAAAyL,mBAAA,CAA4BmD,SAAA,YAWpJ,CACA,IAAA9M,EAAAoM,EAAAnL,eAAAiF,OAAA,aACA,MAAAlG,IACAA,EAAAoG,UACAgG,EAAAnL,eAAAoF,UAAA,gBAiBAyC,EAAAzK,UAAA4O,YAAA,SAAAb,EAAAhN,GACA,GAAAgN,EAAA5L,WAKA,GADA4L,EAAAtI,WAAA,EACAsI,EAAA/M,OAAAC,UAAA,WAA6CkJ,EAAA,KAAM8E,SAAA,CACnD,IAAAnG,EAAA,CACA5I,KAAA,QACAO,OAAAsN,EACA5M,MAAAJ,GAEAgN,EAAA/M,OAAAE,oBAAA,QAAA4H,SAVA/H,EAAAmN,kBAqBAzD,EAAAzK,UAAA8O,gBAAA,SAAAf,EAAAhN,IACA,IAAAgN,EAAA5L,WAAAtC,KAAAqP,aAAAnB,EAAA,YACAA,EAAA/M,OAAAK,KAAA,mBACA0M,EAAA/M,OAAAmO,YAAA,QACgBlF,EAAA,OAChB8D,EAAAhH,QACAgH,EAAAhH,OAAA8H,aAEAd,EAAA/M,OAAAoO,WAAA,WAWA3E,EAAAzK,UAAA6O,WAAA,SAAAd,EAAAhN,GACA,GAAAgN,EAAA5L,WAKA,GADA4L,EAAAtI,WAAA,EACAsI,EAAA/M,OAAAC,UAAA,UAA4CkJ,EAAA,KAAM8E,SAAA,CAClD,IAAAnG,EAAA,CACA5I,KAAA,OACAO,OAAAsN,EACA5M,MAAAJ,GAEAgN,EAAA/M,OAAAE,oBAAA,OAAA4H,SAVA/H,EAAAmN,kBA2BAzD,EAAAzK,UAAA6N,oBAAA,SAAA9M,GACA,GAAAlB,KAAA6F,cACA,GAAgBwE,EAAA,KAAQmF,MAAAtO,EAAA,OAERkJ,EAAA,YAEhB,GAAApK,KAAA6F,cAAA7D,WAAqDqI,EAAA,KAAQmF,MAAAtO,EAAA,+BAE7DA,EAAAmN,iBAEA,IAAAH,EAAAlO,KAAA6F,cAEA4J,EAAA,4BAGA,GAAAvB,EAAAnL,eAAAqL,OAAAqB,GACA,OAGA,IAAAC,EAAA,IAA6BzF,EAAA,KAAyBiE,EAAAhN,GAEtD,OADAgN,EAAAnL,eAAAkF,OAAAwH,EAAAC,GACwBrF,EAAA,KAAQsF,YAAAzO,IAChC,SACAwO,EAAAE,YAAA,EACA,MACA,WACAF,EAAAE,WAAA,EACA,MACA,WACAF,EAAAG,YAAA,EACA,MACA,YACAH,EAAAG,WAAA,EACA,SAWAjF,EAAAzK,UAAA8N,kBAAA,SAAA/M,GACA,IAAAuO,EAAA,4BACA,GAAAzP,KAAA6F,cAAA,CACA,IAAA/D,EAAA9B,KAAA6F,cAAA9C,eAAAiF,OAAAyH,GACA,MAAA3N,IAEAZ,EAAAmN,iBAEAvM,EAAAoG,UACAlI,KAAA6F,cAAA9C,eAAAoF,UAAAsH,MAgBA7E,EAAAzK,UAAAwN,wBAAA,SAAAzM,GAEA,IAAAuI,EAAAzJ,KAAA8P,WAAA5O,GAIA,GAFAuI,EAAAZ,MAAA7I,KAAA+P,gBAAA7O,GAEAlB,KAAAmB,OAAAC,UAAA,WAA+CkJ,EAAA,KAAM8E,SAAA,CACrD,IAAAnG,EAAA,CACA5I,KAAA,QACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,QAAA4H,GAGAjJ,KAAAgQ,cAAAvG,IAAAZ,OAEA7I,KAAAiQ,iBAAAxG,EAAAvI,IAQA0J,EAAAzK,UAAAuN,wBAAA,SAAAxM,GAEAlB,KAAAkQ,iBAEA,IAAAzG,EAAAzJ,KAAA8P,WAAA5O,GAEA,GAAAlB,KAAAmB,OAAAC,UAAA,UAA8CkJ,EAAA,KAAM8E,SAAA,CACpD,IAAAnG,EAAA,CACA5I,KAAA,OACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,OAAA4H,KASA2B,EAAAzK,UAAAgQ,mBAAA,SAAAjP,GACAA,EAAAkP,kBACAlP,EAAAmN,kBASAzD,EAAAzK,UAAAyN,sBAAA,SAAA1M,EAAAmP,QACA,IAAAA,IAAmCA,GAAA,GAEnC,IAAA5G,EAAAzJ,KAAA8P,WAAA5O,GAEA,GAAAlB,KAAAmB,OAAAC,UAAA,QAA4CkJ,EAAA,KAAM8E,SAAA,CAClD,IAAAnG,EAAA,CACA5I,KAAA,KACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,KAAA4H,GAGAjJ,KAAAsQ,eAAA7G,EAAAvI,EAAAmP,IAaAzF,EAAAzK,UAAA2N,sBAAA,SAAA5M,GAEA,QAAAqP,EAAA,EAAuBA,EAAArP,EAAAsP,eAAAC,OAA8BF,IAAA,CAErD,IAAA9G,EAAAzJ,KAAA8P,WAAA5O,EAAAsP,eAAAD,IAIA,GAFA9G,EAAAZ,MAAA7I,KAAA+P,gBAAA7O,EAAAsP,eAAAD,IAEAvQ,KAAAmB,OAAAC,UAAA,WAAmDkJ,EAAA,KAAM8E,SAAA,CACzD,IAAAnG,EAAA,CACA5I,KAAA,QACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,QAAA4H,GAGAjJ,KAAAgQ,cAAAvG,IAAAZ,OAEA7I,KAAAiQ,iBAAAxG,EAAAvI,KASA0J,EAAAzK,UAAA0N,uBAAA,SAAA3M,GAEAlB,KAAAkQ,iBAEA,QAAAK,EAAA,EAAuBA,EAAArP,EAAAsP,eAAAC,OAA8BF,IAAA,CAErD,IAAA9G,EAAAzJ,KAAA8P,WAAA5O,EAAAsP,eAAAD,IAEA,IAAAvQ,KAAAsL,uBAAAtL,KAAAmB,OAAAC,UAAA,UAAiFkJ,EAAA,KAAM8E,SAAA,CACvF,IAAAnG,EAAA,CACA5I,KAAA,OACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,OAAA4H,MAUA2B,EAAAzK,UAAA4N,qBAAA,SAAA7M,GAEA,QAAAqP,EAAA,EAAuBA,EAAArP,EAAAsP,eAAAC,OAA8BF,IAAA,CAErD,IAAA9G,EAAAzJ,KAAA8P,WAAA5O,EAAAsP,eAAAD,IAEA,GAAAvQ,KAAAmB,OAAAC,UAAA,QAAgDkJ,EAAA,KAAM8E,SAAA,CACtD,IAAAnG,EAAA,CACA5I,KAAA,KACAO,OAAAZ,KACAsB,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEAnJ,KAAAmB,OAAAE,oBAAA,KAAA4H,GAGAjJ,KAAAsQ,eAAA7G,EAAAvI,KAiBA0J,EAAAzK,UAAAgP,kBAAA,SAAAjB,EAAAhN,GAQA,IAAAuI,EAAAzJ,KAAA8P,WAAA5O,IAEAuI,EAAAN,OAAA,GAAAjI,EAAAwP,OAAA,GAAAxP,EAAAwP,SAIAjH,EAAAkH,OAAAzP,EAAAwP,MAEA1Q,KAAA4Q,aAAAnH,EAAAvI,GAEAlB,KAAA6Q,WAAA3C,EAAAzE,EAAAvI,KASA0J,EAAAzK,UAAAoO,kBAAA,SAAAL,EAAAhN,GAEA,IAAAuI,EAAAzJ,KAAA8P,WAAA5O,GAEAlB,KAAA8Q,WAAA5C,EAAAzE,EAAAvI,IASA0J,EAAAzK,UAAAmO,iBAAA,SAAAJ,EAAAhN,GAEA,IAAAuI,EAAAzJ,KAAA8P,WAAA5O,GAEAlB,KAAA+Q,UAAA7C,EAAAzE,EAAAvI,IAUA0J,EAAAzK,UAAAwO,iBAAA,SAAAT,EAAAhN,GAEA,IAAAuI,EAAAzJ,KAAA8P,WAAA5O,GAEAuI,EAAAZ,MAAA7I,KAAA+P,gBAAA7O,GAEA,IAAA8P,EAAA,EAAAC,EAAA,EAIAC,EAAA,EAKA,GAJA,GAAAhQ,EAAAiQ,YACAD,EAAA,MAGAhQ,aAAAkQ,YAKA,UAAAC,MAAA,sBAJAL,EAAAM,KAAAC,OAAA,EAAArQ,EAAAsQ,aAAAtQ,EAAA8P,QAAAE,EACAD,EAAAK,KAAAC,OAAA,EAAArQ,EAAAuQ,aAAAvQ,EAAA+P,QAAAC,EAMAlR,KAAA0R,YAAAxD,EAAAzE,EAAAuH,EAAAC,EAAA/P,IAgBA0J,EAAAzK,UAAA+O,gBAAA,SAAAhB,EAAAhN,GAMA,QAAAqP,EAAA,EAAuBA,EAAArP,EAAAsP,eAAAC,OAA8BF,IAAA,CAErD,IAAA9G,EAAAzJ,KAAA8P,WAAA5O,EAAAsP,eAAAD,IACAvQ,KAAA2R,oBAAAzD,EAAAhN,EAAAuI,GAEAzJ,KAAA4Q,aAAAnH,EAAAvI,EAAAsP,eAAAD,IAEAvQ,KAAA6Q,WAAA3C,EAAAzE,EAAAvI,KAiBA0J,EAAAzK,UAAAyR,UAAA,SAAA1D,EAAAzE,EAAAvI,GAEA,IAAA2Q,EAAkBlH,EAAA,OAClB,GAAAuD,EAAA4D,SAAA5D,EAAA4D,SAAAD,EAAA7R,KAAAqP,aAAAnB,EAAA,kBAMA,GAAA2D,EAAA3D,EAAA4D,QAAA,IAEA,OAMA,GAHA5D,EAAA4D,aAAAhM,EACAoI,EAAA6D,oBAAAjM,EAEAoI,EAAA/M,OAAAC,UAAA,eAAqDkJ,EAAA,KAAM8E,SAAA,CAC3D,IAAAnG,EAAA,CACA5I,KAAA,YACAO,OAAAsN,EACArF,MAAAY,EAAAZ,MACAvH,MAAAJ,EACAiI,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,YAAA4H,SAOA,GAFAiF,EAAA4D,QAAAD,EACA3D,EAAA6D,eAAAtI,EACA,IAAAA,EAAAkH,QAEA,GAAAzC,EAAA/M,OAAAC,UAAA,gBAA0DkJ,EAAA,KAAM8E,SAAA,CAChEnG,EAAA,CACA5I,KAAA,aACAO,OAAAsN,EACA5M,MAAAJ,GAEAgN,EAAA/M,OAAAE,oBAAA,aAAA4H,SAIA,GAAAiF,EAAA/M,OAAAC,UAAA,SAAmDkJ,EAAA,KAAM8E,SAAA,CACzDnG,EAAA,CACA5I,KAAA,MACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAM,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,MAAA4H,KAcA2B,EAAAzK,UAAA2Q,WAAA,SAAA5C,EAAAzE,EAAAvI,EAAA8Q,GAEA,QADA,IAAAA,IAA8BA,GAAA,GAC9B9D,EAAA7L,YAIArC,KAAAkQ,iBAEAhC,EAAA+D,aAAA9M,UAAAsE,IAEAyE,EAAAjJ,UAEAiJ,EAAAjJ,SAAA,EACAjF,KAAAkF,YAAAC,UAAA+I,GAIAlO,KAAAkS,YAAAlS,KAAAwM,KAAA/C,EAAAvI,GAAA,GAEAgN,EAAA/M,OAAAC,UAAA,UAAgDkJ,EAAA,KAAM8E,WAAA,CACtD,IAAAnG,EAAA,CACA5I,KAAA,OACAO,OAAAsN,EACA5M,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,OAAA4H,KAkBA2B,EAAAzK,UAAA4Q,UAAA,SAAA7C,EAAAzE,EAAAvI,EAAA8Q,EAAAG,GACA,IAAArS,EAAAE,KAGA,QAFA,IAAAgS,IAA8BA,GAAA,QAC9B,IAAAG,IAA+BA,GAAA,GAC/BjE,EAAA7L,YAIA6L,EAAA+D,aAAA7M,YAAAqE,GAEAyE,EAAAjJ,WAAAiJ,EAAAkE,eAAAD,IAAA,CAEA,GAAAH,GAAA9D,EAAA+D,aAAAxB,OAIA,OAGA,GAAAhH,EAAAN,QAAAgJ,IAAAnS,KAAAqS,IAAA5I,GAAA,CAGA,IAAA6I,EAAAtS,KAAAuS,eAAArE,EAAA,oBACA,YAAAoE,EAYA,OARAtS,KAAA0L,eAAAC,IAAApJ,KAAA,CACAlC,KAAA,MACA6N,KACAzE,UACAnI,MAAAJ,EACAsR,UAAmC7H,EAAA,OAAa,WAEhDuD,EAAAkE,eAAA,GAGA,YAAAE,GAAAtS,KAAAuS,eAAArE,EAAA,iBAWA,YAVAlO,KAAA0L,eAAAC,IAAApJ,KAAA,CACAlC,KAAA,MACA6N,KACAzE,UACAnI,MAAAJ,EACAsR,UAAmC7H,EAAA,OAAa,IAChD8H,QAAAzS,KAAA0S,WAAA,WACA5S,EAAAiR,UAAA7C,EAAAzE,EAAAvI,GAAA,IACyBlB,KAAAuS,eAAArE,EAAA,oBAYzB,GAHAA,EAAAjJ,SAAA,EACAjF,KAAAkF,YAAAE,YAAA8I,GAEAA,EAAA/M,OAAAC,UAAA,SAA+CkJ,EAAA,KAAM8E,SAAA,CACrD,IAAAnG,EAAA,CACA5I,KAAA,MACAO,OAAAsN,EACA5M,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,MAAA4H,GAGAiF,EAAA+D,aAAAU,QACAzE,EAAAkE,eAAA,IAQAxH,EAAAzK,UAAA+P,eAAA,WACA,IAAA0C,EACA,SAEA,GADAA,EAAA5S,KAAA0L,eAAAC,IAAAkH,OACAD,EACA,MAEAA,EAAAH,SACAG,EAAAH,QAAAvK,UAEAlI,KAAA+Q,UAAA6B,EAAA1E,GAAA0E,EAAAnJ,QAAAmJ,EAAAtR,OAAA,QAWAsJ,EAAAzK,UAAA0Q,WAAA,SAAA3C,EAAAzE,EAAAvI,GAgCA,GA9BAlB,KAAA2R,oBAAAzD,EAAAhN,EAAAuI,GAEAyE,EAAA4E,OACA9S,KAAA+S,YAAA7E,GAIAlO,KAAA8Q,WAAA5C,EAAAzE,EAAAvI,GAAA,GAEAgN,EAAA8E,aAAA7N,UAAAsE,GAEAzJ,KAAAiT,qBAAA/E,EAAAzE,GAEAyE,EAAAzI,UAEA,IAAAyI,EAAA5L,WAAAtC,KAAAqP,aAAAnB,EAAA,YAAAlO,KAAA6F,eACgBuE,EAAA,OAGhB8D,EAAAzI,QAAA,EACAzF,KAAA0F,YAAAP,UAAA+I,GAEAA,EAAAlM,WACAhC,KAAAkT,iBAAAhF,EAAAzE,EAAAvI,GAEAgN,EAAAhM,WACAlC,KAAAmT,mBAAAjF,EAAAzE,EAAAvI,IAIAgN,EAAA/M,OAAAC,UAAA,UAA4CkJ,EAAA,KAAM8E,SAAA,CAClD,IAAAnG,EAAA,CACA5I,KAAA,OACAO,OAAAsN,EACA5M,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,OAAA4H,KAUA2B,EAAAzK,UAAAmQ,eAAA,SAAA7G,EAAAvI,EAAAmP,GACA,IAAAvQ,EAAAE,UACA,IAAAqQ,IAAmCA,GAAA,GAE3B5F,EAAA,KAAUzK,KAAA0F,YAAA0N,YAAAC,WAAA,SAAAnF,GAGlBA,KAAA8E,aAAAM,SAAA7J,IACA3J,EAAAyT,SAAArF,EAAAzE,EAAAvI,EAAAmP,MAYAzF,EAAAzK,UAAAoT,SAAA,SAAArF,EAAAzE,EAAAvI,EAAAmP,GAYA,QAXA,IAAAA,IAAmCA,GAAA,GAEnCrQ,KAAAwT,uBAAAtF,EAAAzE,GAEAyE,EAAA8E,aAAA5N,YAAAqE,IAGAA,EAAAN,OAAAnJ,KAAAuL,sBACAvL,KAAA+Q,UAAA7C,EAAAzE,EAAAvI,GAAA,GAGAgN,EAAAzI,OAAA,CAQA,GANA,GAAAyI,EAAA8E,aAAAvC,SAEAvC,EAAAzI,QAAA,EACAzF,KAAA0F,YAAAN,YAAA8I,IAGAA,EAAA/M,OAAAC,UAAA,QAA8CkJ,EAAA,KAAM8E,SAAA,CACpD,IAAAnG,EAAA,CACA5I,KAAA,KACAO,OAAAsN,EACA5M,MAAAJ,EACAuI,UACAN,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,KAAA4H,GAMAoH,IAEAnC,EAAA/L,WAAAnC,KAAAyT,OAAAvF,EAAAzE,GAEAzJ,KAAA0T,YAAAxF,EAAAzE,EAAAvI,IAIAgN,EAAAnM,YAAA/B,KAAA2T,MAAAlK,EAAAzJ,KAAAqP,aAAAnB,EAAA,kBACAlO,KAAA4R,UAAA1D,EAAAzE,EAAAvI,GAGAgN,EAAA4E,OAAA9S,KAAA2T,MAAAlK,EAAAzJ,KAAAqP,aAAAnB,EAAA,iBACAlO,KAAA4T,cAAA1F,EAAAzE,GAEAyE,EAAAlM,WACAhC,KAAAqJ,gBAAA6E,EAAAzE,EAAAvI,GAEAgN,EAAAhM,WACAlC,KAAA6T,kBAAA3F,EAAAzE,EAAAvI,OAaA0J,EAAAzK,UAAAwR,oBAAA,SAAAzD,EAAAhN,EAAAuI,IACYiB,EAAA,KAAcxJ,MAC1BgN,EAAAlM,WAAAkM,EAAA/L,WAAA+L,EAAAjM,WAAAiM,EAAAhM,YACAlC,KAAAyO,gBAAAP,KACA,IAAAhN,EAAA4S,YACA5F,EAAAQ,kBAAAjF,KAAAN,OACAjI,EAAAmN,kBAUAzD,EAAAzK,UAAA8P,iBAAA,SAAAxG,EAAAvI,GACA,IAAApB,EAAAE,KAIA,IAAAyJ,EAAAN,MAAA,CACA,IAAA4K,EAA2B3J,EAAA,KAAgBX,EAAAuK,WAC/BvJ,EAAA,KAAUzK,KAAAkF,YAAAkO,YAAAC,WAAA,SAAAnF,GAEtB,GAAAA,KAAA+D,aAAAqB,SAAA7J,IAAAyE,EAAA7L,UAAA,CAEA,IAAA4R,GAAA,EACA/F,EAAArN,SAAA4I,EAAAuK,WAC6B5J,EAAA,KAAa8D,EAAArN,QAAAkT,KAK1CE,GAAA,GAEAA,GACAnU,EAAAiR,UAAA7C,EAAAzE,EAAAvI,GAAA,MAMQuJ,EAAA,KAAUzK,KAAAsI,mBAAA8K,YAAAC,WAAA,SAAAnF,IAElBA,EAAA8E,aAAAM,SAAA7J,IAEAyE,EAAA/L,WAAArC,EAAAoU,QAAAhG,EAAAzE,KACAyE,EAAAlM,YAAAkM,EAAAhM,WACApC,EAAAqU,gBAAAjG,EAAAhN,KAIQuJ,EAAA,KAAUzK,KAAAqI,eAAA+K,YAAAC,WAAA,SAAAnF,GAElBA,EAAA+D,aAAAqB,SAAA7J,IACA3J,EAAAoS,YAAAhE,EAAAzE,EAAAvI,MAaA0J,EAAAzK,UAAA+R,YAAA,SAAAhE,EAAAzE,EAAAvI,EAAAkT,GAGA,QAFA,IAAAA,IAAmCA,GAAA,IAEnCA,GAAApU,KAAA2T,MAAAlK,EAAA,KAIAyE,EAAA/M,OAAAC,UAAA,WAA6CkJ,EAAA,KAAM8E,SAAA,CACnD,IAAAnG,EAAA,CACA5I,KAAA,QACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAY,UACAN,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,QAAA4H,KAWA2B,EAAAzK,UAAAuT,YAAA,SAAAxF,EAAAzE,EAAAvI,GAGA,GAAAgN,EAAA/M,OAAAC,UAAA,WAA6CkJ,EAAA,KAAM8E,SAAA,CACnD,IAAAnG,EAAA,CACA5I,KAAA,QACAO,OAAAsN,EACA5M,MAAAJ,EACAiI,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,QAAA4H,GAEA,GAAAQ,EAAAX,WAAAhC,EAAA2C,EAAAZ,MAAA/B,GACA,GAAAoH,EAAA/M,OAAAC,UAAA,gBAAsDkJ,EAAA,KAAM8E,SAAA,CAC5DnG,EAAA,CACA5I,KAAA,aACAO,OAAAsN,EACA5M,MAAAJ,EACAiI,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,aAAA4H,SAIA,GAAAiF,EAAA/M,OAAAC,UAAA,eAAqDkJ,EAAA,KAAM8E,SAAA,CAC3DnG,EAAA,CACA5I,KAAA,YACAO,OAAAsN,EACA5M,MAAAJ,EACAiI,MAAAM,EAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,YAAA4H,KAcA2B,EAAAzK,UAAAuR,YAAA,SAAAxD,EAAAzE,EAAAuH,EAAAC,EAAA/P,GACA,IAAAgI,EAAA,CACApC,EAAAkK,EACAjK,EAAAkK,GAGA/C,EAAA/M,OAAAC,UAAA,WAA6CkJ,EAAA,KAAM8E,UACnDlB,EAAA/M,OAAAE,oBAAA,SACAhB,KAAA,QACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAK,UAKA8H,EAAA,EACA9C,EAAA/M,OAAAC,UAAA,eAAqDkJ,EAAA,KAAM8E,UAC3DlB,EAAA/M,OAAAE,oBAAA,aACAhB,KAAA,YACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAK,UAIA8H,EAAA,EACA9C,EAAA/M,OAAAC,UAAA,gBAAsDkJ,EAAA,KAAM8E,UAC5DlB,EAAA/M,OAAAE,oBAAA,cACAhB,KAAA,aACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAK,UAKA+H,EAAA,EACA/C,EAAA/M,OAAAC,UAAA,aAAmDkJ,EAAA,KAAM8E,UACzDlB,EAAA/M,OAAAE,oBAAA,WACAhB,KAAA,UACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAK,UAIA+H,EAAA,GACA/C,EAAA/M,OAAAC,UAAA,eAAqDkJ,EAAA,KAAM8E,UAC3DlB,EAAA/M,OAAAE,oBAAA,aACAhB,KAAA,YACAO,OAAAsN,EACA5M,MAAAJ,EACA2H,MAAAY,EAAAZ,MACAK,WAaA0B,EAAAzK,UAAAyT,cAAA,SAAA1F,EAAAzE,GACAyE,EAAAlM,WAAA,IAAAkM,EAAA8E,aAAAvC,QACAzQ,KAAAqU,kBAAAnG,EAAAzE,GAEAyE,EAAAhM,WAAAgM,EAAA8E,aAAAvC,OAAA,GACAzQ,KAAAsU,oBAAApG,EAAAzE,IAWAmB,EAAAzK,UAAAkU,kBAAA,SAAAnG,EAAAzE,GACA,IAAArB,EAAA8F,EACA7N,EAAA,OACAwI,EAAA,CACA/B,EAAA2C,EAAAZ,MAAA/B,EACAC,EAAA0C,EAAAZ,MAAA9B,GAEA+B,EAAA,CACAhC,EAAA2C,EAAAX,WAAAhC,EACAC,EAAA0C,EAAAX,WAAA/B,GAGAwN,EAAA,IAA0BpK,EAAA,KAAO/B,EAAA/H,EAAAwI,EAAAC,GAEjC0L,EAAAxU,KAAAyU,cAAAhL,EAA8CkB,EAAA,OAAa3K,KAAA0U,iBAAAxG,EAAA,gBAC3D,wBAAAsG,EAAA,CAKA,IAAApH,EAAApN,KAAA0U,iBAAAxG,EAAA,iBACAyG,EAAA,EACAC,GAAAnL,EAAAZ,MAAA/B,GAAA2C,EAAAZ,MAAA/B,EAAA0N,EAAA3L,MAAA/B,GAAAsG,EACA7I,SAAA,KACa,CACbqQ,GAAAnL,EAAAZ,MAAA9B,GAAA0C,EAAAZ,MAAA9B,EAAAyN,EAAA3L,MAAA9B,GAAAqG,EACA7I,SAAA,MAGAsQ,EAAA,IAA4BlM,EAAA,KAAS4L,EAAAI,EAAA3U,KAAA0U,iBAAAxG,EAAA,mBAAAlO,KAAA0U,iBAAAxG,EAAA,kBAAA4G,QACrC9U,KAAA2E,WAAApC,KAAAsS,EAAA1T,OAAA0N,GAAA,0BAAA3N,GACAqT,EAAAnL,UAGA8E,EAAAlK,SAAAiE,OAAA,OAAAsM,QAlBAvU,KAAAqJ,gBAAA6E,EAAAzE,IAAAsL,cA+BAnK,EAAAzK,UAAAmU,oBAAA,SAAApG,EAAAzE,KAWAmB,EAAAzK,UAAAgU,gBAAA,SAAAjG,EAAAhN,GAEA,IAQA8T,EACAC,EACAC,EAVAC,EAAAjH,EAAA8E,aAAAoC,SAAA,GACAC,EAAA,KACAC,EAAA,KACAH,IACAE,EAAAF,EAAAtM,MACAyM,EAAAH,EAAArM,YAOAmM,EAAA,CACAnO,EAAAoH,EAAAqH,iBAAAzO,EACAC,EAAAmH,EAAAqH,iBAAAxO,GAEAmO,EAAAD,EAGA,IADA,IAAAO,GAAA,EACAjF,EAAA,EAAuBA,EAAArC,EAAA8E,aAAAvC,OAA4BF,IAAA,CAEnD,IAAAkF,EAAAvH,EAAA8E,aAAAoC,SAAA7E,GAEA,GAAA+E,EAAAxO,GAAA2O,EAAA3M,WAAAhC,GAAAwO,EAAAvO,GAAA0O,EAAA3M,WAAA/B,EAAA,CAEAyO,GAAA,EAEAR,EAAAS,EACAR,EAAAD,EAAAnM,MACAqM,EAAAF,EAAAlM,WAEA,OAIA,IAAA4M,EAAAP,GAAAnV,KAAA2T,MAAAwB,EAAA,GASA,GAPAjH,EAAAlM,WAAAmT,KAAAQ,iBAAAR,EAAAQ,gBAAAlF,QAAAiF,GACAxH,EAAA/M,OAAAC,UAAA,eAAqDkJ,EAAA,KAAM8E,UAC3DlB,EAAA/M,OAAAE,oBAAA,YAAA8T,EAAAQ,gBAAAzM,SAKAsM,GAAAtH,EAAAlM,UAGAhC,KAAA4V,oBAAA1H,EAAAmH,EAAAC,EAAApU,EAAAwU,EAAAP,EAAAhM,WAEA,CAEA,IAAA0M,EAAAb,GAAAhV,KAAA2T,MAAAqB,EAAA,GACA9G,EAAAlM,WAAAkM,EAAAhM,WAEAlC,KAAA4V,oBAAA1H,EAAAmH,EAAAC,EAAApU,EAAAwU,GAAAG,EAAAV,EAAAhM,OACAnJ,KAAA8V,sBAAA5H,EAAAmH,EAAAC,EAAAL,EAAAC,EAAAhU,EAAAwU,GAAAG,EAAAV,EAAAhM,SAGA+E,EAAAlM,WACAhC,KAAA4V,oBAAA1H,EAAAmH,EAAAC,EAAApU,EAAAwU,EAAAP,EAAAhM,QAEA+E,EAAAhM,WAAAsT,IAAAtU,EAAA6U,SACA/V,KAAA8V,sBAAA5H,EAAAmH,EAAAC,EAAAL,EAAAC,EAAAhU,EAAAwU,GAAAG,EAAAV,EAAAhM,UAeAyB,EAAAzK,UAAAyV,oBAAA,SAAA1H,EAAArF,EAAAC,EAAA5H,EAAA8U,EAAA7M,GACA,GAAA6M,GACA9H,EAAA/M,OAAAC,UAAA,UAAgDkJ,EAAA,KAAM8E,YAAAlB,EAAAQ,mBAAAvF,GAAA,CACtD,IAAAF,EAAA,CACA5I,KAAA,OACAO,OAAAsN,EACA5M,MAAAJ,EACAgI,MAAA,CACApC,EAAA+B,EAAA/B,EAAAgC,EAAAhC,EACAC,EAAA8B,EAAA9B,EAAA+B,EAAA/B,GAEA+B,aACAD,QACAM,SAEA+E,EAAA/M,OAAAE,oBAAA,OAAA4H,KAgBA2B,EAAAzK,UAAA2V,sBAAA,SAAA5H,EAAAmH,EAAAC,EAAAL,EAAAC,EAAAhU,EAAA8U,EAAA7M,GACA,GAAA+E,EAAA/M,OAAAC,UAAA,YAA8CkJ,EAAA,KAAM8E,YAAAlB,EAAAQ,mBAAAvF,GAAA,CACpD,IAAAF,EAAA,CACA5I,KAAA,SACAO,OAAAsN,EACA5M,MAAAJ,EACA+U,MAAuBzL,EAAA,KAAc6K,EAAAC,EAAAL,EAAAC,GACrCI,cACAD,SACAH,cACAD,SACA9L,SAEA+E,EAAA/M,OAAAE,oBAAA,SAAA4H,KAWA2B,EAAAzK,UAAA+S,iBAAA,SAAAhF,EAAAzE,EAAAvI,GAEAlB,KAAAsI,mBAAAnD,UAAA+I,GAEA,IAAAjF,EAAA,CACA5I,KAAA,YACAO,OAAAsN,EACA5M,MAAAJ,EACAiI,QAAAM,KAAAN,OAIAM,IACAA,EAAAyM,WAAAhI,GAQAzE,KAAAkM,gBACAlM,EAAAkM,gBAAApT,KAAA0G,GAGiBqB,EAAA,KAAM8E,UACvBlB,EAAA7M,oBAAA,YAAA4H,IAYA2B,EAAAzK,UAAAkJ,gBAAA,SAAA6E,EAAAzE,EAAAvI,GAcA,GAZAuI,IACAA,EAAAzJ,KAAAmW,eAAAjI,IAGAzE,IACAA,EAAAyM,gBAAApQ,GAGA9F,KAAAsI,mBAAAlD,YAAA8I,KAIAzE,GAAAzJ,KAAA2T,MAAAlK,EAAA,KACAyE,EAAA/M,OAAAC,UAAA,cAAoDkJ,EAAA,KAAM8E,SAAA,CAC1D,IAAAnG,EAAA,CACA5I,KAAA,WACAO,OAAAsN,EACA/E,QAAAM,KAAAN,OAEA+E,EAAA/M,OAAAE,oBAAA,WAAA4H,KAYA2B,EAAAzK,UAAAgT,mBAAA,SAAAjF,EAAAzE,EAAAvI,GAEAlB,KAAAsI,mBAAAnD,UAAA+I,IAUAtD,EAAAzK,UAAA0T,kBAAA,SAAA3F,EAAAzE,EAAAvI,GAEAlB,KAAAsI,mBAAAlD,YAAA8I,IAoBAtD,EAAAzK,UAAAiW,UAAA,SAAAlI,EAAAzE,GACAA,IACAA,EAAAzJ,KAAAmW,eAAAjI,IAEAzE,GACAzJ,KAAA6Q,WAAA3C,EAAAzE,IAAA4M,gBASAzL,EAAAzK,UAAAmW,SAAA,SAAApI,EAAAzE,GACAA,IACAA,EAAAzJ,KAAAmW,eAAAjI,IAEAzE,GACAzJ,KAAAsQ,eAAA7G,IAAAsL,cAWAnK,EAAAzK,UAAAgW,eAAA,SAAAjI,GACA,OAAAA,EAGAA,EAAA8E,aAAAoC,SAAA,GAEApV,KAAAsI,mBAAAmI,OAEAzQ,KAAAmW,eAAAnW,KAAAsI,mBAAA8M,SAAA,SAGA,GAeAxK,EAAAzK,UAAAoW,aAAA,SAAArV,GACA,IAAAsV,EAAA,GAUA,OARAA,EADY9L,EAAA,KAAcxJ,EAAAuV,YAC1B,GAAAvV,EAAAuV,WAEiB/L,EAAA,KAAcxJ,EAAAwV,WAC/B,GAAAxV,EAAAwV,UAGA,IAEAF,EAAAG,QAAA,SAQA/L,EAAAzK,UAAA4P,gBAAA,SAAA7O,GACA,OACA4F,EAAA5F,EAAA0V,QACA7P,EAAA7F,EAAA2V,UAWAjM,EAAAzK,UAAA2P,WAAA,SAAA5O,GAEA,IAIAuI,EAJA+M,EAAAxW,KAAAuW,aAAArV,GAEA2H,EAAA7I,KAAA+P,gBAAA7O,GAgCA,OA7BAlB,KAAA4L,SAAAwC,OAAAoI,IAEA/M,EAAAzJ,KAAA4L,SAAA5D,OAAAwO,GAEA/M,EAAAN,MAAAnJ,KAAA8W,eAAA5V,KAMAuI,EAAA,CACA+M,KAGArN,MAAAnJ,KAAA8W,eAAA5V,GACA4H,WAAAD,EACAkO,UAA6BpM,EAAA,OAC7B9B,QACAmO,MAAA,GACAC,eAAA,EACAtB,gBAAA,IAGA3V,KAAAgQ,cAAAvG,EAAAZ,GAEA7I,KAAA4L,SAAA3D,OAAAuO,EAAA/M,IAGAA,EAAAuK,UAAA9S,EACAuI,GAQAmB,EAAAzK,UAAA2W,eAAA,SAAA5V,GACA,wBAAAgW,OAAAhW,aAAAgW,MACA,SAEA,wBAAAC,cAAAjW,aAAAiW,cAAsFzM,EAAA,KAAcxJ,EAAAkW,aACpG,OAAAlW,EAAAkW,aACA,YACA,UACA,OACA,SACA,YACA,OACA,SACA,QACA,QAAAlW,aAAAmW,iBAGA,GAAiB3M,EAAA,KAAcxJ,EAAAb,OAC/Ba,EAAAb,KAAA2M,MAAA,UACA,SAGA,UAQApC,EAAAzK,UAAAyQ,aAAA,SAAAnH,EAAAvI,GAEA,IAAA2H,EAAA7I,KAAA+P,gBAAA7O,GAEAuI,EAAAsN,UAA4BpM,EAAA,OAC5BlB,EAAAX,WAAA,CAA8BhC,EAAA+B,EAAA/B,EAAAC,EAAA8B,EAAA9B,GAC9B0C,EAAAZ,MAAA,CAAyB/B,EAAA+B,EAAA/B,EAAAC,EAAA8B,EAAA9B,GACzB0C,EAAAuN,MAAA,GACAvN,EAAAwN,eAAA,GAUArM,EAAAzK,UAAA6P,cAAA,SAAAvG,EAAAZ,GACAY,EAAAuN,MAAAzU,KAAA,CACA+U,UAAyB3M,EAAA,OACzB9B,WAQA+B,EAAAzK,UAAAoX,aAAA,WACAvX,KAAAgG,YAAAhG,KAAAwM,OAOA5B,EAAAzK,UAAAqX,eAAA,WACA,GAAAxX,KAAAsI,mBAAAmI,QACAzQ,KAAAyX,iBAAAzX,KAAAwM,OAQA5B,EAAAzK,UAAAuX,YAAA,SAAAxJ,GACAlO,KAAAgG,YAAAkI,IAOAtD,EAAAzK,UAAAwX,cAAA,SAAAzJ,GACAlO,KAAAyX,iBAAAvJ,IAOAtD,EAAAzK,UAAA2O,UAAA,WACApC,OAAA5L,iBAAAd,KAAA8K,eAAAO,MAAArL,KAAA4X,iBAAA5X,KAAAyL,mBAAA,CAA0GmD,SAAA,KAO1GhE,EAAAzK,UAAAoI,YAAA,WACAmE,OAAA3L,oBAAAf,KAAA8K,eAAAO,MAAArL,KAAA4X,iBAWAhN,EAAAzK,UAAA0X,eAAA,SAAApO,EAAAqO,EAAAtB,GACA,IAAAuB,EAAA/X,KAAAgY,SAAA,iBAAAvO,EAAA+M,IACA,GAAY9L,EAAA,KAAcqN,GAC1B,OAAAA,EAEA,IAAAnX,EAAA6L,SAAAwL,iBAAAxO,EAAAZ,MAAA/B,EAAA2C,EAAAZ,MAAA9B,GACAmR,EAAAtX,GAA8BwJ,EAAA,KAAa0N,EAAAlX,GAE3C,OADAZ,KAAAmY,SAAA,iBAAA1O,EAAA+M,GAAA,IAAAA,EAAA0B,EAAA,KACAA,GASAtN,EAAAzK,UAAAyX,eAAA,SAAA1W,GAEA,OADAA,EAAAmN,kBACA,GASAzD,EAAAzK,UAAA6F,YAAA,SAAAkI,GACA,IAAAkK,EAAAlK,EAAArN,QACA,GAAAuX,EAAA,CAUA,IARA,IAAAC,EAAA,CACA,kGACA,4FACA,kGACA,wGACA,oHACA,iFAEA9H,EAAA,EAA2BA,EAAA8H,EAAA5H,OAAkBF,IAC7C8H,EAAA9H,KAAA6H,EAAAE,OACAtY,KAAAuY,kBAAArK,EAAAmK,EAAA9H,GAAA,QAIAvQ,KAAAuY,kBAAArK,EAAA,0CAUAtD,EAAAzK,UAAA4F,cAAA,SAAAmI,GACA,IAAAkK,EAAAlK,EAAArN,QACA,GAAAuX,EAAA,CAUA,IARA,IAAAC,EAAA,CACA,kGACA,4FACA,kGACA,wGACA,oHACA,iFAEA9H,EAAA,EAA2BA,EAAA8H,EAAA5H,OAAkBF,IAC7C8H,EAAA9H,KAAA6H,EAAAE,OACAtY,KAAAwY,aAAAtK,EAAAmK,EAAA9H,IAIAvQ,KAAAwY,aAAAtK,EAAA,uBAYAtD,EAAAzK,UAAAkP,aAAA,SAAAnB,EAAAuK,GACA,IAAAC,EAAAxK,EAAA3G,WAAAkR,GAIA,MAHA,qBAAAC,IACAA,EAAA1Y,KAAAuH,WAAAkR,IAEAC,GAUA9N,EAAAzK,UAAAoS,eAAA,SAAArE,EAAAuK,GACA,IAAAC,EAAAxK,EAAA1G,aAAAiR,GAIA,MAHA,qBAAAC,IACAA,EAAA1Y,KAAAwH,aAAAiR,IAEAC,GAUA9N,EAAAzK,UAAAwY,eAAA,SAAAzK,EAAAuK,GACA,IAAAC,EAAAxK,EAAAzG,aAAAgR,GAIA,MAHA,qBAAAC,IACAA,EAAA1Y,KAAAyH,aAAAgR,IAEAC,GAUA9N,EAAAzK,UAAAyY,kBAAA,SAAA1K,EAAAuK,GACA,IAAAC,EAAAxK,EAAAxG,gBAAA+Q,GAIA,MAHA,qBAAAC,IACAA,EAAA1Y,KAAA0H,gBAAA+Q,IAEAC,GAWA9N,EAAAzK,UAAAuU,iBAAA,SAAAxG,EAAA7N,EAAAoY,GACA,IACAC,EADAG,EAAA3K,EAAA5G,eAAAU,OAAA3H,GAQA,OALAqY,EADAG,GAAuBnO,EAAA,KAAcmO,EAAAJ,IACrCI,EAAAJ,GAGAzY,KAAAsH,eAAAU,OAAA3H,GAAAoY,GAEAC,GAQA9N,EAAAzK,UAAA4S,YAAA,SAAA7E,GAGA,IAFA,IAAApH,EACA9C,EAAA,kBACAuM,EAAA,EAAuBA,EAAAvM,EAAAyM,OAAqBF,IAE5C,GADAzJ,EAAA9C,EAAAuM,GACArC,EAAAlK,SAAAoK,OAAAtH,GAAA,CACA,IAAAyN,EAAArG,EAAAlK,SAAAgE,OAAAlB,GACA,GAAAyN,EAAA,CACAA,EAAArM,UAGA,YAYA0C,EAAAzK,UAAA+T,QAAA,SAAAhG,EAAAzE,GACA,IAAAoI,EAAkBlH,EAAA,OAClB,QAAAlB,EAAAwN,gBAAA/I,EAAA/L,aAGAmP,KAAAwH,IAAArP,EAAAX,WAAA/B,EAAA0C,EAAAZ,MAAA9B,GAAA/G,KAAA2Y,eAAAzK,EAAA,sBACAzE,EAAAsN,UAAAlF,EAAA7R,KAAA2Y,eAAAzK,EAAA,UAcAtD,EAAAzK,UAAAsT,OAAA,SAAAvF,EAAAzE,GACA,IAAAoI,EAAkBlH,EAAA,OAClB,OAAAlB,EAAAwN,gBAGA3F,KAAAwH,IAAArP,EAAAX,WAAAhC,EAAA2C,EAAAZ,MAAA/B,GAAA9G,KAAA2Y,eAAAzK,EAAA,wBACAoD,KAAAwH,IAAArP,EAAAX,WAAA/B,EAAA0C,EAAAZ,MAAA9B,GAAA/G,KAAA2Y,eAAAzK,EAAA,sBACAzE,EAAAsN,UAAAlF,EAAA7R,KAAA2Y,eAAAzK,EAAA,UAcAtD,EAAAzK,UAAA0H,qBAAA,SAAAqG,GAEA,IAAA2K,EAAA3K,EAAAvG,cACA,GAAa+C,EAAA,KAAcmO,EAAAE,WAI3B,QAAAxI,EAAA,EAAuBA,EAAAsI,EAAAE,UAAAtI,OAA8BF,IACzCnG,EAAA,KAAa8D,EAAArN,QAAAgY,EAAAE,UAAAxI,GAAAhM,SAAAsU,EAAAE,UAAAxI,GAAA/L,QAWzBoG,EAAAzK,UAAA8S,qBAAA,SAAA/E,EAAAzE,GAEA,IAAAA,EAAAN,MAAA,CAGA,IAAA6P,EAAA9K,EAAAvG,cAAAqR,UAEA,GAAA9K,EAAA8E,aAAAM,SAAA7J,IAAiDiB,EAAA,KAAcsO,GAE/D,QAAAzI,EAAA,EAA2BA,EAAAyI,EAAAvI,OAAsBF,IACjDvQ,KAAAuY,kBAAAvY,KAAAwM,KAAAwM,EAAAzI,GAAAhM,SAAAyU,EAAAzI,GAAA/L,OACAxE,KAAAuY,kBAAArK,EAAA8K,EAAAzI,GAAAhM,SAAAyU,EAAAzI,GAAA/L,SAWAoG,EAAAzK,UAAAqT,uBAAA,SAAAtF,EAAAzE,GAEA,IAAAA,EAAAN,MAAA,CAGA,IAAA6P,EAAA9K,EAAAvG,cAAAqR,UAEA,GAAA9K,EAAA8E,aAAAM,SAAA7J,IAAiDiB,EAAA,KAAcsO,GAE/D,QAAAzI,EAAA,EAA2BA,EAAAyI,EAAAvI,OAAsBF,IACjDvQ,KAAAwY,aAAAxY,KAAAwM,KAAAwM,EAAAzI,GAAAhM,UACAvE,KAAAwY,aAAAtK,EAAA8K,EAAAzI,GAAAhM,YAUAqG,EAAAzK,UAAA8Y,eAAA,SAAAX,GAGA,IAFA,IAAA9L,EAAA3C,IAAA2C,KACA0M,EAAsBxO,EAAA,KAAa4N,KAAA,CAAAA,GACnC/H,EAAA,EAAuBA,EAAA2I,EAAAzI,OAAmBF,IAC1CvQ,KAAAuY,kBAAA/L,EAAA0M,EAAA3I,GAAAhM,SAAA2U,EAAA3I,GAAA/L,QASAoG,EAAAzK,UAAAgZ,mBAAA,SAAAb,GAGA,IAFA,IAAA9L,EAAA3C,IAAA2C,KACA0M,EAAsBxO,EAAA,KAAa4N,KAAA,CAAAA,GACnC/H,EAAA,EAAuBA,EAAA2I,EAAAzI,OAAmBF,IAC1CvQ,KAAAwY,aAAAhM,EAAA0M,EAAA3I,GAAAhM,WASAqG,EAAAzK,UAAAsO,gBAAA,SAAAP,GACA,OAAAzB,SAAAD,OAAA0B,EAAArN,SAUA+J,EAAAzK,UAAAwT,MAAA,SAAAlK,EAAA2P,EAAAC,QAMA,IAAAA,IAAiCA,EAAA,KAEjC,IAAAnQ,EAAAlJ,KAAAsZ,SAAA7P,GACA,OAAA6H,KAAAwH,IAAA5P,EAAApC,GAAAsS,GAAA9H,KAAAwH,IAAA5P,EAAAnC,GAAAqS,GAWAxO,EAAAzK,UAAAkS,IAAA,SAAA5I,EAAA4P,GAEA,YADA,IAAAA,IAAiCA,EAAA,KAClB1O,EAAA,OAAalB,EAAAsN,UAAAsC,GAS5BzO,EAAAzK,UAAAmZ,SAAA,SAAA7P,GACA,OACA3C,EAAA2C,EAAAX,WAAAhC,EAAA2C,EAAAZ,MAAA/B,EACAC,EAAA0C,EAAAX,WAAA/B,EAAA0C,EAAAZ,MAAA9B,IAUA6D,EAAAzK,UAAAsU,cAAA,SAAAhL,EAAA6N,GAEA,IADA,IAAAoB,EACAnI,EAAA,EAAuBA,EAAA9G,EAAAuN,MAAAvG,OAA0BF,IACjD,GAAA9G,EAAAuN,MAAAzG,GAAA+G,aAAA,CACAoB,EAAAjP,EAAAuN,MAAAzG,GACA,MAGA,OAAAmI,GASA9N,EAAAzK,UAAAoZ,cAAA,SAAAC,EAAA/P,GACA,IAAAgQ,GAAA,EAOA,OANAD,EAAAE,KAAA,SAAAC,GACAA,GAAAlQ,IAGAgQ,EAAAE,EAAA9Q,MAAA/B,GAAA2C,EAAAZ,MAAA/B,GAAA6S,EAAA9Q,MAAA9B,GAAA0C,EAAAZ,MAAA9B,KAEA0S,GAWA7O,EAAAzK,UAAA0J,eAAA,SAAAhJ,GACA,WAAmBmJ,EAAA,KAAiBnJ,IAWpC+J,EAAAzK,UAAAoY,kBAAA,SAAArK,EAAA3J,EAAAC,GAGA,IAAA4T,EAAAlK,EAAArN,QAEY6J,EAAA,KAAc0N,EAAAE,MAAA/T,MAAA2J,EAAAlL,eAAAoL,OAAA7J,IAC1B2J,EAAAlL,eAAAiF,OAAA1D,EAAA6T,EAAAE,MAAA/T,IAGQ6F,EAAA,KAAagO,EAAA7T,EAAAC,IAQrBoG,EAAAzK,UAAAqY,aAAA,SAAAtK,EAAA3J,GAEA2J,EAAAlL,eAAAoL,OAAA7J,IACA2J,EAAArN,QAAAyX,MAAA/T,GAAA2J,EAAAlL,eAAAgF,OAAAzD,GACA2J,EAAAlL,eAAAmF,UAAA5D,WAGA2J,EAAArN,QAAAyX,MAAA/T,IAQAqG,EAAAzK,UAAAsX,iBAAA,SAAAvJ,GACQzD,EAAA,KAAUyD,EAAAlL,eAAAqQ,WAAA,SAAAuG,GAClB,IAAAtZ,EAAAsZ,EAAA,GACApV,EAAAoV,EAAA,GACA1L,EAAArN,QAAAyX,MAAAhY,GAAAkE,EACA0J,EAAAlL,eAAAmF,UAAA7H,MAMAsK,EAAAzK,UAAA+H,QAAA,WACAlI,KAAA6Z,eACAha,EAAAM,UAAA+H,QAAAvH,KAAAX,MACAA,KAAAyX,iBAAAzX,KAAAwM,MACAxM,KAAAuI,gBAIAqC,EAAAzK,UAAA2Z,IAAA,SAAAC,EAAA7Y,EAAAgN,GACA,IAAA8L,GAAA,EACA,GAAAA,EAAA,CAEA,GAAA9Y,EAAAsP,eAAA,CACA,QAAAD,EAAA,EAA+BA,EAAArP,EAAAsP,eAAAC,OAA8BF,IAC7DvQ,KAAAia,SAAAF,EAAA7Y,EAAAb,KAAAa,EAAAsP,eAAAD,IAEA,OAGA,IAAAlQ,EAAA,GACA,GAAAa,EAAAkW,YACA,OAAAlW,EAAAkW,aACA,OACA/W,EAAA,QACA,MACA,OACAA,EAAA,QACA,MACA,QACAA,EAAAa,EAAAkW,YACA,WAIA/W,EADA,oBAAA6Z,YAAAhZ,aAAAgZ,WACA,QAEAhZ,EAAAb,KAAA2M,MAAA,UACA,QAGA,MAGA,IAAAwJ,EAAA,GAEAA,EADgB9L,EAAA,KAAcxJ,EAAAuV,YAC9BvV,EAAAuV,WAEqB/L,EAAA,KAAcxJ,EAAAwV,WACnCxV,EAAAwV,UAGA,MAEAxI,EACAiM,QAAAL,IAAAC,EAAA,KAAA7L,EAAAkM,IAAA,MAAAlZ,EAAAb,KAAA,KAAAA,EAAA,KAAAmW,GAGA2D,QAAAL,IAAAC,EAAA,KAAA7Y,EAAAb,KAAA,KAAAA,EAAA,KAAAmW,KAIA5L,EAAAzK,UAAA8Z,SAAA,SAAAF,EAAA1Z,EAAAa,GACAiZ,QAAAL,IAAAC,EAAA,KAAA1Z,EAAA,YAAAa,EAAAuV,aAEA5R,OAAAC,eAAA8F,EAAA,oBAIA7F,IAAA,WACA,IAAAjF,EAAAE,KACA,SAAAA,KAAAyL,kBAEA,IACA,IAAAoN,EAAAhU,OAAAC,eAAA,GAA0D,WAC1DC,IAAA,WACAjF,EAAA2L,mBAAA,KAGAiB,OAAA5L,iBAAA,OAAA+X,KACAnM,OAAA3L,oBAAA,OAAA8X,KAEA,MAAAwB,GACAra,KAAAyL,mBAAA,EAGA,OAAAzL,KAAAyL,mBAEApG,YAAA,EACAC,cAAA,IAEAsF,EAxiFA,CAyiFEnC,EAAA,MAEFL,EAAA,KAOO,SAAAyB,IAIP,OAHA,MAAAzB,IACAA,EAAA,IAAAwC,GAEAxC,sCC1mFA9I,EAAAC,EAAAC,EAAA,sBAAA8a,IAAA,IAAAC,EAAAjb,EAAA,QAAAkb,EAAAlb,EAAA,QAAAmb,EAAAnb,EAAA,QAkBAgb,EAAA,WAMA,SAAAA,EAAApM,EAAAhN,GAOAlB,KAAA0a,WAAA,EAQA1a,KAAA6P,WAAA,EAQA7P,KAAA4P,WAAA,EACA5P,KAAAoI,YAAA8F,EACAlO,KAAA2a,cAAAzZ,EACAlB,KAAA4a,YAAA,IAAAC,MAAAC,UACQjW,OAAA0V,EAAA,KAAA1V,GAAcqO,iBAAAhF,GACdsM,EAAA,KAAMzR,WAAAxG,KAAAvC,MACdA,KAAA+a,SA0DA,OAjDAT,EAAAna,UAAA4a,OAAA,WAEA,IAAA7M,EAAAlO,KAAAoI,YACAiE,EAAoBxH,OAAA0V,EAAA,KAAA1V,GAAc+T,kBAAA1K,EAAA,SAAA5B,EAAmDzH,OAAA0V,EAAA,KAAA1V,GAAc+T,kBAAA1K,EAAA,iBAAA3B,EAAgE1H,OAAA0V,EAAA,KAAA1V,GAAc+T,kBAAA1K,EAAA,sBAAAhF,EAAA,CACjLpC,EAAA,EACAC,EAAA,GAGA/G,KAAA2a,cAAAK,UACA3O,GAAA,GACAC,EAAA,GAGAtM,KAAA2a,cAAA5E,UACA1J,GAAA,GAGA,IAAA4O,GAAA,IAAAJ,MAAAC,UAAA9a,KAAA4a,WACAM,EAAAD,EAAA1O,EAEA,GAAAD,EAAA,GAAA4O,EAAA,GACA,IAAAC,EAAAF,EAAA1O,EACA0O,EAAA1O,EACArD,EAAApC,GAAA9G,KAAA6P,YAAAxD,EAAAC,EAAA6O,EAAAD,GACAhS,EAAAnC,GAAA/G,KAAA4P,YAAAvD,EAAAC,EAAA6O,EAAAD,GAGAhS,EAAApC,GAAA9G,KAAA6P,YAAAxD,EAAA4O,GACA/R,EAAAnC,GAAA/G,KAAA4P,YAAAvD,EAAA4O,GAEQpW,OAAA0V,EAAA,KAAA1V,GAAc+Q,oBAAA1H,EAAAhF,EAAA,CAAmCpC,EAAA,EAAAC,EAAA,GAAa/G,KAAA2a,eAAA,OAOtEL,EAAAna,UAAA0Z,WAAA,WACA,OAAA7Z,KAAA0a,WAKAJ,EAAAna,UAAA+H,QAAA,WACAlI,KAAA0a,YACY7V,OAAA0V,EAAA,KAAA1V,GAAcwE,gBAAArJ,KAAAoI,aACdqS,EAAA,KAAcD,EAAA,KAAMzR,WAAA/I,QAGhCsa,EA7FA","file":"js/chunk-6871276d.f3aff4f7.js","sourcesContent":["import * as tslib_1 from \"tslib\";\r\nimport { TargetedEventDispatcher } from \"../utils/EventDispatcher\";\r\nimport { MultiDisposer, CounterDisposer } from \"../utils/Disposer\";\r\n/**\r\n * Represents an Event Dispatcher for [[InteractionObject]].\r\n *\r\n * Besides regular [[EventDispatcher]] functionality it adds new events with\r\n * direct application to DOM nodes. Primarily used to handle keyboard events,\r\n * but can turn into something else moving forward.\r\n */\r\nvar InteractionObjectEventDispatcher = /** @class */ (function (_super) {\r\n tslib_1.__extends(InteractionObjectEventDispatcher, _super);\r\n function InteractionObjectEventDispatcher() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n /**\r\n * Holds a list of Disposers for DOM events added.\r\n */\r\n _this._domEvents = {};\r\n return _this;\r\n }\r\n /**\r\n * Adds a DOM event and returns Disposer.\r\n *\r\n * @return Disposer\r\n */\r\n InteractionObjectEventDispatcher.prototype._addDOMEvent = function (type, key, listener, context) {\r\n var _this = this;\r\n if (!this._domEvents[type]) {\r\n var callback_1 = function (e) {\r\n listener.call(context, key, e);\r\n };\r\n this.target.element.addEventListener(type, callback_1, false);\r\n this._domEvents[type] = new CounterDisposer(function () {\r\n delete _this._domEvents[type];\r\n _this.target.element.removeEventListener(type, callback_1, false);\r\n });\r\n }\r\n return this._domEvents[type].increment();\r\n };\r\n InteractionObjectEventDispatcher.prototype._dispatchKeyboardEvent = function (key, ev) {\r\n // TODO use this.dispatchImmediately ?\r\n if (this.target.events.isEnabled(key)) {\r\n this.target.events.dispatchImmediately(key, {\r\n type: key,\r\n target: this.target,\r\n event: ev\r\n });\r\n }\r\n };\r\n InteractionObjectEventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {\r\n var info = _super.prototype._on.call(this, once, type, callback, context, shouldClone, dispatch);\r\n var disposers = [info.disposer];\r\n switch (type) {\r\n case \"hit\":\r\n case \"doublehit\":\r\n case \"rightclick\":\r\n case \"down\":\r\n case \"up\":\r\n this.target.clickable = true;\r\n break;\r\n case \"drag\":\r\n case \"dragstart\":\r\n case \"dragstop\":\r\n this.target.draggable = true;\r\n break;\r\n case \"track\":\r\n this.target.trackable = true;\r\n break;\r\n case \"resize\":\r\n this.target.resizable = true;\r\n break;\r\n case \"swipe\":\r\n case \"swipeleft\":\r\n case \"swiperight\":\r\n this.target.swipeable = true;\r\n break;\r\n case \"wheel\":\r\n case \"wheelup\":\r\n case \"wheeldown\":\r\n case \"wheelleft\":\r\n case \"wheelright\":\r\n this.target.wheelable = true;\r\n break;\r\n case \"over\":\r\n case \"out\":\r\n this.target.hoverable = true;\r\n break;\r\n case \"focus\":\r\n case \"blur\":\r\n case \"focusin\":\r\n case \"focusout\":\r\n this.target.focusable = true;\r\n break;\r\n case \"keydown\":\r\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\r\n break;\r\n case \"keyup\":\r\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\r\n break;\r\n case \"keypress\":\r\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\r\n break;\r\n case \"input\":\r\n disposers.push(this._addDOMEvent(type, type, this._dispatchKeyboardEvent, this));\r\n break;\r\n }\r\n info.disposer = new MultiDisposer(disposers);\r\n return info;\r\n };\r\n return InteractionObjectEventDispatcher;\r\n}(TargetedEventDispatcher));\r\nexport { InteractionObjectEventDispatcher };\r\n//# sourceMappingURL=InteractionObjectEvents.js.map","/**\r\n * Interaction Object module\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { InteractionObjectEventDispatcher } from \"./InteractionObjectEvents\";\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { List } from \"../utils/List\";\r\nimport { Dictionary, DictionaryDisposer } from \"../utils/Dictionary\";\r\nimport { getInteraction } from \"./Interaction\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * Re-exports\r\n */\r\nexport { InteractionObjectEventDispatcher };\r\n/**\r\n * Interaction object represents an object that is subject for any kind of\r\n * interaction with it with any input devices: mouse, touch or keyboard.\r\n *\r\n * Any DOM element can be wrapped into an Internaction object which in turn\r\n * enables attaching various interaction events to it, such as: hit, drag,\r\n * swipe, etc.\r\n *\r\n * To create an [[InteractionObject]] out of a [[Sprite]], use:\r\n * `interaction.getInteractionFromSprite(sprite: Sprite)`\r\n *\r\n * To create an [[InteractionObject]] out of a a regular element:\r\n * `interaction.getInteraction(element: HTMLElement)`\r\n */\r\nvar InteractionObject = /** @class */ (function (_super) {\r\n tslib_1.__extends(InteractionObject, _super);\r\n /**\r\n * Constructor\r\n */\r\n function InteractionObject(element) {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * An [[EventDispatcher]] instance which holds events for this object\r\n */\r\n _this.events = new InteractionObjectEventDispatcher(_this);\r\n /**\r\n * Collection of Disposers for various events. (so that those get disposed\r\n * when the whole InteractionObject is disposed)\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.eventDisposers = new Dictionary();\r\n /**\r\n * A [[Dictionary]] that holds temporarily replaced original style values for\r\n * HTML element, so that they can be restored when the functionality that\r\n * replaced them is done.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.replacedStyles = new Dictionary();\r\n _this._clickable = false;\r\n _this._contextMenuDisabled = false;\r\n _this._hoverable = false;\r\n _this._trackable = false;\r\n _this._draggable = false;\r\n _this._swipeable = false;\r\n _this._resizable = false;\r\n _this._wheelable = false;\r\n _this._inert = false;\r\n /**\r\n * Is element currently hovered?\r\n */\r\n _this._isHover = false;\r\n /**\r\n * Is the element hovered by touch pointer?\r\n */\r\n _this._isHoverByTouch = false;\r\n /**\r\n * Has element got any pointers currently pressing down on it?\r\n */\r\n _this._isDown = false;\r\n /**\r\n * Does element have focus?\r\n */\r\n _this._isFocused = false;\r\n /**\r\n * Is element currently protected from touch interactions?\r\n */\r\n _this._isTouchProtected = false;\r\n /**\r\n * Options used for inertia functionality.\r\n */\r\n _this._inertiaOptions = new Dictionary();\r\n /**\r\n * A collection of different inertia types, currently playing out.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.inertias = new Dictionary();\r\n /**\r\n * Click/tap options.\r\n */\r\n _this._hitOptions = {};\r\n /**\r\n * Hover options.\r\n */\r\n _this._hoverOptions = {};\r\n /**\r\n * Swipe gesture options.\r\n */\r\n _this._swipeOptions = {};\r\n /**\r\n * Keyboard options.\r\n */\r\n _this._keyboardOptions = {};\r\n /**\r\n * Cursor options.\r\n */\r\n _this._cursorOptions = {\r\n \"defaultStyle\": [{\r\n \"property\": \"cursor\",\r\n \"value\": \"default\"\r\n }]\r\n };\r\n _this._element = element;\r\n _this.className = \"InteractionObject\";\r\n _this._disposers.push(new DictionaryDisposer(_this.inertias));\r\n _this._disposers.push(new DictionaryDisposer(_this.eventDisposers));\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(InteractionObject.prototype, \"isHover\", {\r\n /**\r\n * @return Hovered?\r\n */\r\n get: function () {\r\n return this._isHover;\r\n },\r\n /**\r\n * Indicates if this element is currently hovered.\r\n *\r\n * @param value Hovered?\r\n */\r\n set: function (value) {\r\n if (this.isHover != value) {\r\n this._isHover = value;\r\n if (value) {\r\n getInteraction().overObjects.moveValue(this);\r\n }\r\n else {\r\n getInteraction().overObjects.removeValue(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"isHoverByTouch\", {\r\n /**\r\n * @return Hovered?\r\n */\r\n get: function () {\r\n return this._isHoverByTouch;\r\n },\r\n /**\r\n * Indicates if this element is currently hovered.\r\n *\r\n * @param value Hovered?\r\n */\r\n set: function (value) {\r\n if (this.isHoverByTouch != value) {\r\n this._isHoverByTouch = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"overPointers\", {\r\n /**\r\n * A list of pointers currently over the element.\r\n *\r\n * @see {@link Pointer}\r\n * @return List if pointers currently hovering the element\r\n */\r\n get: function () {\r\n if (!this._overPointers) {\r\n this._overPointers = new List();\r\n }\r\n return this._overPointers;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"isDown\", {\r\n /**\r\n * @return Has down pointers?\r\n */\r\n get: function () {\r\n return this._isDown;\r\n },\r\n /**\r\n * Indicates if this element has currently any pointers pressing on it.\r\n *\r\n * @param value Has down pointers?\r\n */\r\n set: function (value) {\r\n if (this.isDown != value) {\r\n this._isDown = value;\r\n if (value) {\r\n getInteraction().downObjects.moveValue(this);\r\n }\r\n else {\r\n getInteraction().downObjects.removeValue(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"downPointers\", {\r\n /**\r\n * A list of pointers currently pressing down on this element.\r\n *\r\n * @see {@link Pointer}\r\n * @return List of down pointers\r\n */\r\n get: function () {\r\n if (!this._downPointers) {\r\n this._downPointers = new List();\r\n }\r\n return this._downPointers;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"isFocused\", {\r\n /**\r\n * @return Focused?\r\n */\r\n get: function () {\r\n return this._isFocused;\r\n },\r\n /**\r\n * Indicates if this element is currently focused.\r\n *\r\n * @param value Focused?\r\n */\r\n set: function (value) {\r\n if (this.isFocused != value) {\r\n this._isFocused = value;\r\n if (value) {\r\n getInteraction().focusedObject = this;\r\n }\r\n else {\r\n getInteraction().focusedObject = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"isTouchProtected\", {\r\n /**\r\n * @ignore\r\n * @return Touch protected?\r\n */\r\n get: function () {\r\n return this._isTouchProtected;\r\n },\r\n /**\r\n * Indicates if this element is currently being protected from touch actions.\r\n *\r\n * @ignore\r\n * @param value Touch protected?\r\n */\r\n set: function (value) {\r\n if (this._isTouchProtected != value) {\r\n this._isTouchProtected = value;\r\n if (value) {\r\n getInteraction().unprepElement(this);\r\n }\r\n else if (this.draggable || this.swipeable || this.trackable || this.resizable) {\r\n getInteraction().prepElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"clickable\", {\r\n /**\r\n * @return Clickable?\r\n */\r\n get: function () {\r\n return this._clickable;\r\n },\r\n /**\r\n * Is element clickable? Clickable elements will generate \"hit\" events when\r\n * clicked or tapped.\r\n *\r\n * @param value Clickable?\r\n */\r\n set: function (value) {\r\n if (this._clickable !== value) {\r\n this._clickable = value;\r\n getInteraction().processClickable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"contextMenuDisabled\", {\r\n /**\r\n * @return Context menu disabled?\r\n */\r\n get: function () {\r\n return this._contextMenuDisabled;\r\n },\r\n /**\r\n * Should element prevent context menu to be displayed, e.g. when\r\n * right-clicked?\r\n *\r\n * @default false\r\n * @param value Context menu disabled?\r\n */\r\n set: function (value) {\r\n if (this._contextMenuDisabled !== value) {\r\n this._contextMenuDisabled = value;\r\n getInteraction().processContextMenu(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"hoverable\", {\r\n /**\r\n * @return Hoverable?\r\n */\r\n get: function () {\r\n return this._hoverable;\r\n },\r\n /**\r\n * Indicates if element should generate hover events.\r\n *\r\n * @param value Hoverable?\r\n */\r\n set: function (value) {\r\n if (this._hoverable !== value) {\r\n this._hoverable = value;\r\n getInteraction().processHoverable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"trackable\", {\r\n /**\r\n * @return Track pointer?\r\n */\r\n get: function () {\r\n return this._trackable;\r\n },\r\n /**\r\n * Indicates if pointer movement over element should be tracked.\r\n *\r\n * @param value Track pointer?\r\n */\r\n set: function (value) {\r\n if (this._trackable !== value) {\r\n this._trackable = value;\r\n getInteraction().processTrackable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"draggable\", {\r\n /**\r\n * @return Draggable?\r\n */\r\n get: function () {\r\n return this._draggable;\r\n },\r\n /**\r\n * Indicates if element can be dragged. (moved)\r\n *\r\n * @param value Draggable?\r\n */\r\n set: function (value) {\r\n if (this._draggable !== value) {\r\n this._draggable = value;\r\n getInteraction().processDraggable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"swipeable\", {\r\n /**\r\n * @return Track swipe?\r\n */\r\n get: function () {\r\n return this._swipeable;\r\n },\r\n /**\r\n * Indicates whether element should react to swipe gesture.\r\n *\r\n * @param value Track swipe?\r\n */\r\n set: function (value) {\r\n if (this._swipeable !== value) {\r\n this._swipeable = value;\r\n getInteraction().processSwipeable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"resizable\", {\r\n /**\r\n * @return Resizeble?\r\n */\r\n get: function () {\r\n return this._resizable;\r\n },\r\n /**\r\n * Indicates if element can be resized.\r\n *\r\n * @param value Resizeable?\r\n */\r\n set: function (value) {\r\n if (this._resizable !== value) {\r\n this._resizable = value;\r\n getInteraction().processResizable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"wheelable\", {\r\n /**\r\n * @return Track wheel?\r\n */\r\n get: function () {\r\n return this._wheelable;\r\n },\r\n /**\r\n * Indicates whether track moouse wheel rotation over element.\r\n *\r\n * @param value Track wheel?\r\n */\r\n set: function (value) {\r\n if (this._wheelable !== value) {\r\n this._wheelable = value;\r\n getInteraction().processWheelable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"inert\", {\r\n /**\r\n * @return Inert?\r\n */\r\n get: function () {\r\n return this._inert;\r\n },\r\n /**\r\n * Indicates if element is inert, i.e. if it should carry movement momentum\r\n * after it is dragged and released.\r\n *\r\n * @param value Inert?\r\n */\r\n set: function (value) {\r\n if (this._inert !== value) {\r\n this._inert = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"focusable\", {\r\n /**\r\n * @return Focusable?\r\n */\r\n get: function () {\r\n return this._focusable;\r\n },\r\n /**\r\n * Indicates if element can gain focus.\r\n *\r\n * @param value Focusable?\r\n */\r\n set: function (value) {\r\n if (this._focusable !== value) {\r\n this._focusable = value;\r\n if (this._focusable && this.tabindex == -1) {\r\n this._tabindex = 1;\r\n }\r\n getInteraction().processFocusable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"tabindex\", {\r\n /**\r\n * @return Tab index\r\n */\r\n get: function () {\r\n return $type.getValueDefault(this._tabindex, -1);\r\n },\r\n /**\r\n * Element's tab index.\r\n *\r\n * @param value Tab index\r\n */\r\n set: function (value) {\r\n if (this._tabindex !== value) {\r\n this._tabindex = value;\r\n if (value > -1) {\r\n this.focusable = true;\r\n }\r\n getInteraction().processFocusable(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"element\", {\r\n /**\r\n * @return Element\r\n */\r\n get: function () {\r\n return this._element;\r\n },\r\n /**\r\n * A DOM element associated with this element.\r\n *\r\n * @param element Element\r\n */\r\n set: function (element) {\r\n this._element = element;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"originalPosition\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Position.\r\n */\r\n get: function () {\r\n return this._originalPosition || { x: 0, y: 0 };\r\n },\r\n /**\r\n * Element's original position.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Position\r\n */\r\n set: function (value) {\r\n this._originalPosition = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"originalScale\", {\r\n /**\r\n * @return Scale\r\n */\r\n get: function () {\r\n return $type.getValueDefault(this._originalScale, 1);\r\n },\r\n /**\r\n * Element's original scale.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Scale\r\n */\r\n set: function (value) {\r\n if (this._originalScale !== value) {\r\n this._originalScale = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"originalAngle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return $type.getValueDefault(this._originalAngle, 0);\r\n },\r\n /**\r\n * Element's original angle.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n if (this._originalAngle !== value) {\r\n this._originalAngle = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"inertiaOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"inertiaOptions\", this._inertiaOptions);\r\n }\r\n else {\r\n return this._inertiaOptions;\r\n }\r\n },\r\n /**\r\n * Inertia options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._inertiaOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"hitOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"hitOptions\", this._hitOptions);\r\n }\r\n else {\r\n return this._hitOptions;\r\n }\r\n },\r\n /**\r\n * Hit options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._hitOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"hoverOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"hoverOptions\", this._hoverOptions);\r\n }\r\n else {\r\n return this._hoverOptions;\r\n }\r\n },\r\n /**\r\n * Hover options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._hoverOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"swipeOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"swipeOptions\", this._swipeOptions);\r\n }\r\n else {\r\n return this._swipeOptions;\r\n }\r\n },\r\n /**\r\n * Swipe options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._swipeOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"keyboardOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"keyboardOptions\", this._keyboardOptions);\r\n }\r\n else {\r\n return this._keyboardOptions;\r\n }\r\n },\r\n /**\r\n * Keyboard options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._keyboardOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(InteractionObject.prototype, \"cursorOptions\", {\r\n /**\r\n * @return Options\r\n */\r\n get: function () {\r\n if (this.sprite) {\r\n return this.sprite.adapter.apply(\"cursorOptions\", this._cursorOptions);\r\n }\r\n else {\r\n return this._cursorOptions;\r\n }\r\n },\r\n /**\r\n * Cursor options.\r\n *\r\n * @param value Options\r\n */\r\n set: function (value) {\r\n this._cursorOptions = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties and related assets from another object of the same\r\n * type.\r\n *\r\n * @param source Source object\r\n */\r\n InteractionObject.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.inertiaOptions = source.inertiaOptions;\r\n this.hitOptions = source.hitOptions;\r\n this.hoverOptions = source.hoverOptions;\r\n this.swipeOptions = source.swipeOptions;\r\n this.keyboardOptions = source.keyboardOptions;\r\n this.cursorOptions = source.cursorOptions;\r\n this.contextMenuDisabled = source.contextMenuDisabled;\r\n getInteraction().applyCursorOverStyle(this);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n InteractionObject.prototype.setEventDisposer = function (key, value, f) {\r\n var disposer = this.eventDisposers.getKey(key);\r\n if (value) {\r\n if (disposer == null) {\r\n this.eventDisposers.setKey(key, f());\r\n }\r\n }\r\n else {\r\n if (disposer != null) {\r\n disposer.dispose();\r\n this.eventDisposers.removeKey(key);\r\n }\r\n }\r\n };\r\n /**\r\n * Disposes object.\r\n */\r\n InteractionObject.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n // Remove from all interaction registries\r\n var interaction = getInteraction();\r\n interaction.overObjects.removeValue(this);\r\n interaction.downObjects.removeValue(this);\r\n interaction.trackedObjects.removeValue(this);\r\n interaction.transformedObjects.removeValue(this);\r\n // Unlock document wheel\r\n if (this.isHover && this.wheelable) {\r\n interaction.unlockWheel();\r\n }\r\n if (interaction.focusedObject === this) {\r\n interaction.focusedObject = undefined;\r\n }\r\n };\r\n return InteractionObject;\r\n}(BaseObjectEvents));\r\nexport { InteractionObject };\r\n//# sourceMappingURL=InteractionObject.js.map","/**\r\n * Functionality related to inertia\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObject } from \"../Base\";\r\nimport { getInteraction } from \"./Interaction\";\r\nimport { AnimationDisposer } from \"../utils/Animation\";\r\nimport * as $type from \"../utils/Type\";\r\n/**\r\n * A point of inertia is to simulate gradually drecreasing motion even after\r\n * actual interaction by user, that caused it, has already ended.\r\n *\r\n * [[Inertia]] object will continue triggering the same [[Sprite]] handlers\r\n * as if the interaction was still happening, gradually reducing\r\n * shift/angle/scale values until full stop.\r\n *\r\n * Basically, from the target element's point of view, while inertia is\r\n * playing, it is still being interacted with by user, albeit with a\r\n * decreasing speed.\r\n */\r\nvar Inertia = /** @class */ (function (_super) {\r\n tslib_1.__extends(Inertia, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Inertia(interaction, type, point, startPoint) {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * List of animations currently playing.\r\n */\r\n _this.animations = [];\r\n _this.className = \"Inertia\";\r\n _this.interaction = interaction;\r\n _this.type = type;\r\n _this.point = point;\r\n _this.startPoint = startPoint;\r\n // Make animations disposable\r\n _this._disposers.push(new AnimationDisposer(_this.animations));\r\n return _this;\r\n }\r\n Object.defineProperty(Inertia.prototype, \"x\", {\r\n /**\r\n * Returns current X coordinate.\r\n *\r\n * @return X\r\n */\r\n get: function () {\r\n return this.point.x;\r\n },\r\n /**\r\n * Sets current X coordinate.\r\n *\r\n * Will trigger \"drag\" event for the target element.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n if ($type.isNumber(value)) {\r\n this.point.x = value;\r\n this.handleMove();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Inertia.prototype, \"y\", {\r\n /**\r\n * Returns current Y coordinate.\r\n *\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.point.y;\r\n },\r\n /**\r\n * Sets current Y coordinate.\r\n *\r\n * Will trigger \"drag\" event for the target element.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n if ($type.isNumber(value)) {\r\n this.point.y = value;\r\n this.handleMove();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Simulates dragging of element.\r\n */\r\n Inertia.prototype.handleMove = function () {\r\n // Prepare {InteractionEvent} object\r\n if (this.interaction.events.isEnabled(\"drag\")) {\r\n var imev = {\r\n type: \"drag\",\r\n target: this.interaction,\r\n shift: {\r\n x: this.x - this.startPoint.x,\r\n y: this.y - this.startPoint.y\r\n },\r\n startPoint: this.startPoint,\r\n point: {\r\n x: this.x,\r\n y: this.y\r\n },\r\n touch: false\r\n };\r\n // Call handler\r\n this.interaction.events.dispatchImmediately(\"drag\", imev);\r\n }\r\n };\r\n /**\r\n * Finishes up the inertia animation. (removes reference to this animation\r\n * object)\r\n */\r\n Inertia.prototype.done = function () {\r\n // Remove inertia animation from the object\r\n this.interaction.inertias.removeKey(this.type);\r\n // Move ended\r\n if (this.type === \"move\") {\r\n getInteraction().processDragStop(this.interaction);\r\n }\r\n // Destroy\r\n this.dispose();\r\n };\r\n return Inertia;\r\n}(BaseObject));\r\nexport { Inertia };\r\n//# sourceMappingURL=Inertia.js.map","/**\r\n * Mouse-related functionality\r\n */\r\n/**\r\n * Defines static methods that hold style list for various mouse cursor styles,\r\n * maintaining browser compatibility.\r\n */\r\nvar MouseCursorStyle = /** @class */ (function () {\r\n function MouseCursorStyle() {\r\n }\r\n /**\r\n * Styles for \"grab\" mouse cursor.\r\n */\r\n MouseCursorStyle.grab = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"move\"\r\n }, {\r\n \"property\": \"cursor\",\r\n \"value\": \"grab\"\r\n }, {\r\n \"property\": \"cursor\",\r\n \"value\": \"-webkit-grab\"\r\n }];\r\n /**\r\n * Styles for \"grabbing\" mouse cursor.\r\n */\r\n MouseCursorStyle.grabbing = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"move\"\r\n }, {\r\n \"property\": \"cursor\",\r\n \"value\": \"grabbing\"\r\n }, {\r\n \"property\": \"cursor\",\r\n \"value\": \"-webkit-grabbing\"\r\n }];\r\n /**\r\n * Styles for \"pointer\" mouse cursor. (usually used for links)\r\n */\r\n MouseCursorStyle.pointer = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"pointer\"\r\n }];\r\n /**\r\n * Styles for default mouse cursor. (browser determines style)\r\n */\r\n MouseCursorStyle.default = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"default\"\r\n }];\r\n /**\r\n * Styles for horizontal bi-directional resize mouse cursor.\r\n */\r\n MouseCursorStyle.horizontalResize = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"ew-resize\"\r\n }];\r\n /**\r\n * Styles for vertical bi-directional mouse cursor.\r\n */\r\n MouseCursorStyle.verticalResize = [{\r\n \"property\": \"cursor\",\r\n \"value\": \"ns-resize\"\r\n }];\r\n return MouseCursorStyle;\r\n}());\r\nexport { MouseCursorStyle };\r\n//# sourceMappingURL=Mouse.js.map","/**\r\n * Interaction manages all aspects of user interaction - mouse move,\r\n * click, hover, drag events, touch gestures.\r\n *\r\n * [[InteractionObject]] elements that want to use certain events, must attach event\r\n * listeners to Interaction instance.\r\n *\r\n * Interaction itself will not modify [[InteractionObject]] elements, it will be up to\r\n * those elements to handle interaction information received via event triggers.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { BaseObjectEvents } from \"../Base\";\r\nimport { List } from \"../utils/List\";\r\nimport { Animation } from \"../utils/Animation\";\r\nimport { MultiDisposer } from \"../utils/Disposer\";\r\nimport { InteractionObject } from \"./InteractionObject\";\r\nimport { InteractionKeyboardObject } from \"./InteractionKeyboardObject\";\r\nimport { Dictionary } from \"../utils/Dictionary\";\r\nimport { Inertia } from \"./Inertia\";\r\nimport { addEventListener } from \"../utils/DOM\";\r\nimport { keyboard } from \"../utils/Keyboard\";\r\nimport { system } from \"./../System\";\r\nimport * as $ease from \"../utils/Ease\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $dom from \"../utils/DOM\";\r\nimport * as $iter from \"../utils/Iterator\";\r\nimport * as $type from \"../utils/Type\";\r\nimport * as $time from \"../utils/Time\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n* Interaction manages all aspects of user interaction - mouse move,\r\n* click, hover, drag events, touch gestures.\r\n*\r\n* [[InteractionObject]] elements that want to use certain events, must attach event\r\n* listeners to Interaction instance.\r\n*\r\n* Interaction itself will not modify [[InteractionObject]] elements, it will be up to\r\n* those elements to handle interaction information received via event triggers.\r\n*\r\n* @see {@link IInteractionEvents} for a list of available events\r\n*/\r\nvar Interaction = /** @class */ (function (_super) {\r\n tslib_1.__extends(Interaction, _super);\r\n /**\r\n * Constructor. Sets up universal document-wide move events to handle stuff\r\n * outside particular chart container.\r\n */\r\n function Interaction() {\r\n var _this = \r\n // Call super\r\n _super.call(this) || this;\r\n /**\r\n * An indicator of global events were already initialized.\r\n */\r\n _this._globalEventsAdded = false;\r\n /**\r\n * Holds which mouse event listeners to use.\r\n */\r\n _this._pointerEvents = {\r\n \"pointerdown\": \"mousedown\",\r\n \"pointerup\": \"mouseup\",\r\n \"pointermove\": \"mousemove\",\r\n \"pointercancel\": \"mouseup\",\r\n \"pointerover\": \"mouseover\",\r\n \"pointerout\": \"mouseout\",\r\n \"wheel\": \"wheel\"\r\n };\r\n /**\r\n * Indicates if Interaction should use only \"pointer\" type events, like\r\n * \"pointermove\", available in all modern browsers, ignoring \"legacy\"\r\n * events, like \"touchmove\".\r\n */\r\n _this._usePointerEventsOnly = false;\r\n /**\r\n * Use only touch events (for touch only devices such as tablets and phones)\r\n */\r\n _this._useTouchEventsOnly = false;\r\n /**\r\n * Add special hover events. Normally, touch device tap will also simulate\r\n * hover event. On some devices (ahem iOS) we want to prevent that so that\r\n * over/out events are not duplicated.\r\n */\r\n _this._addHoverEvents = true;\r\n /**\r\n * Indicates if passive mode options is supported by this browser.\r\n */\r\n _this._passiveSupported = false;\r\n /**\r\n * Holds list of delayed events\r\n */\r\n _this._delayedEvents = { out: [] };\r\n /**\r\n * List of objects that current have a pointer hovered over them.\r\n */\r\n _this.overObjects = new List();\r\n /**\r\n * List of objects that currently has a pressed pointer.\r\n */\r\n _this.downObjects = new List();\r\n /**\r\n * List of objects that need mouse position to be reported to them.\r\n */\r\n _this.trackedObjects = new List();\r\n /**\r\n * List of objects that are currently being dragged.\r\n */\r\n _this.transformedObjects = new List();\r\n /**\r\n * Holds all known pointers.\r\n */\r\n _this.pointers = new Dictionary();\r\n /**\r\n * Inertia options that need to be applied to after element drag, if it's\r\n * `inert = true`.\r\n *\r\n * This is just a default, which can and probably will be overridden by\r\n * actual elements.\r\n */\r\n _this.inertiaOptions = new Dictionary();\r\n /**\r\n * Default options for click events. These can be overridden in\r\n * [[InteractionObject]].\r\n */\r\n _this.hitOptions = {\r\n //\"holdTime\": 1000,\r\n \"doubleHitTime\": 300,\r\n //\"delayFirstHit\": false,\r\n \"hitTolerance\": 10,\r\n \"noFocus\": true\r\n };\r\n /**\r\n * Default options for hover events. These can be overridden in\r\n * [[InteractionObject]].\r\n */\r\n _this.hoverOptions = {\r\n \"touchOutBehavior\": \"leave\",\r\n \"touchOutDelay\": 1000\r\n };\r\n /**\r\n * Default options for detecting a swipe gesture. These can be overridden in\r\n * [[InteractionObject]].\r\n */\r\n _this.swipeOptions = {\r\n \"time\": 500,\r\n \"verticalThreshold\": 75,\r\n \"horizontalThreshold\": 30\r\n };\r\n /**\r\n * Default options for keyboard operations. These can be overridden in\r\n * [[InteractionObject]].\r\n */\r\n _this.keyboardOptions = {\r\n \"speed\": 0.1,\r\n \"accelleration\": 1.2,\r\n \"accellerationDelay\": 2000\r\n };\r\n // Set class name\r\n _this.className = \"Interaction\";\r\n // Create InteractionObject for
\r\n _this.body = _this.getInteraction(document.body);\r\n _this._disposers.push(_this.body);\r\n // Detect browser capabilities and determine what event listeners to use\r\n if (window.hasOwnProperty(\"PointerEvent\")) {\r\n // IE10+/Edge without touch controls enabled\r\n _this._pointerEvents.pointerdown = \"pointerdown\";\r\n _this._pointerEvents.pointerup = \"pointerup\";\r\n _this._pointerEvents.pointermove = \"pointermove\";\r\n _this._pointerEvents.pointercancel = \"pointercancel\";\r\n _this._pointerEvents.pointerover = \"pointerover\";\r\n _this._pointerEvents.pointerout = \"pointerout\";\r\n //this._usePointerEventsOnly = true;\r\n }\r\n else if (window.hasOwnProperty(\"MSPointerEvent\")) {\r\n // IE9\r\n _this._pointerEvents.pointerdown = \"MSPointerDown\";\r\n _this._pointerEvents.pointerup = \"MSPointerUp\";\r\n _this._pointerEvents.pointermove = \"MSPointerMove\";\r\n _this._pointerEvents.pointercancel = \"MSPointerUp\";\r\n _this._pointerEvents.pointerover = \"MSPointerOver\";\r\n _this._pointerEvents.pointerout = \"MSPointerOut\";\r\n //this._usePointerEventsOnly = true;\r\n }\r\n else if ((typeof matchMedia !== \"undefined\") && matchMedia('(pointer:fine)').matches) {\r\n // This is only for Safari as it does not support PointerEvent\r\n // Do nothing and let it use regular `mouse*` events\r\n // Hi Apple ;)\r\n // Additionally disable hover events for iOS devices\r\n if ('ontouchstart' in window) {\r\n _this._addHoverEvents = false;\r\n _this._useTouchEventsOnly = true;\r\n }\r\n }\r\n else if (window.navigator.userAgent.match(/MSIE /)) {\r\n // Oh looky, an MSIE that does not support PointerEvent. Hi granpa IE9!\r\n _this._usePointerEventsOnly = true;\r\n }\r\n else {\r\n // Uses defaults for normal browsers\r\n // We also assume that this must be a touch device that does not have\r\n // any pointer events\r\n _this._useTouchEventsOnly = true;\r\n }\r\n // Detect if device has a mouse\r\n // This is turning out to be not reliable\r\n // @todo remove\r\n /*if (!window.navigator.msPointerEnabled && (typeof matchMedia !== \"undefined\") && !matchMedia('(pointer:fine)').matches && !this.fullFF()) {\r\n this._useTouchEventsOnly = true;\r\n }*/\r\n // Detect proper mouse wheel events\r\n if (\"onwheel\" in document.createElement(\"div\")) {\r\n // Modern browsers\r\n _this._pointerEvents.wheel = \"wheel\";\r\n }\r\n else if ($type.hasValue(document.onmousewheel)) {\r\n // Webkit and IE support at least \"mousewheel\"\r\n _this._pointerEvents.wheel = \"mousewheel\";\r\n }\r\n // Set up default inertia options\r\n _this.inertiaOptions.setKey(\"move\", {\r\n \"time\": 100,\r\n \"duration\": 500,\r\n \"factor\": 1,\r\n \"easing\": $ease.polyOut3\r\n });\r\n _this.inertiaOptions.setKey(\"resize\", {\r\n \"time\": 100,\r\n \"duration\": 500,\r\n \"factor\": 1,\r\n \"easing\": $ease.polyOut3\r\n });\r\n // Set the passive mode support\r\n _this._passiveSupported = Interaction.passiveSupported;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * This is a nasty detection for Firefox. The reason why we have is that\r\n * Firefox ESR version does not support matchMedia correctly.\r\n *\r\n * On iOS, Firefox uses different userAgent, so we don't have to detect iOS.\r\n *\r\n * @return Full Firefox?\r\n */\r\n Interaction.prototype.fullFF = function () {\r\n return (window.navigator.userAgent.match(/Firefox/)) && !(window.navigator.userAgent.match(/Android/));\r\n };\r\n Interaction.prototype.debug = function () { };\r\n /**\r\n * ==========================================================================\r\n * Processing\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Sets up global events.\r\n *\r\n * We need this so that we can track drag movement beyond chart's container.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Interaction.prototype.addGlobalEvents = function () {\r\n var _this = this;\r\n if (!this._globalEventsAdded) {\r\n if (!this._useTouchEventsOnly) {\r\n this._disposers.push(addEventListener(document, this._pointerEvents.pointerdown, function (ev) { _this.handleGlobalPointerDown(ev); }));\r\n this._disposers.push(addEventListener(document, this._pointerEvents.pointermove, function (ev) { _this.handleGlobalPointerMove(ev); }));\r\n this._disposers.push(addEventListener(document, this._pointerEvents.pointerup, function (ev) { _this.handleGlobalPointerUp(ev); }));\r\n this._disposers.push(addEventListener(document, this._pointerEvents.pointercancel, function (ev) { _this.handleGlobalPointerUp(ev, true); }));\r\n }\r\n // No need to duplicate events for hubrid systems that support both\r\n // pointer events and touch events. Touch events are need only for\r\n // some touch-only systems, like Mobile Safari.\r\n if (!this._usePointerEventsOnly) {\r\n this._disposers.push(addEventListener(document, \"touchstart\", function (ev) { _this.handleGlobalTouchStart(ev); }));\r\n this._disposers.push(addEventListener(document, \"touchmove\", function (ev) { _this.handleGlobalTouchMove(ev); }));\r\n this._disposers.push(addEventListener(document, \"touchend\", function (ev) { _this.handleGlobalTouchEnd(ev); }));\r\n }\r\n this._disposers.push(addEventListener(document, \"keydown\", function (ev) { _this.handleGlobalKeyDown(ev); }));\r\n this._disposers.push(addEventListener(document, \"keyup\", function (ev) { _this.handleGlobalKeyUp(ev); }));\r\n this._globalEventsAdded = true;\r\n }\r\n };\r\n /**\r\n * Sets if [[InteractionObject]] is clickable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\r\n Interaction.prototype.processClickable = function (io) {\r\n // Add or remove touch events\r\n this.processTouchable(io);\r\n };\r\n /**\r\n * Sets if [[InteractionObject]] will display context menu when right-clicked.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\r\n Interaction.prototype.processContextMenu = function (io) {\r\n if (io.contextMenuDisabled) {\r\n if (!io.eventDisposers.hasKey(\"contextMenuDisabled\")) {\r\n io.eventDisposers.setKey(\"contextMenuDisabled\", addEventListener(io.element, \"contextmenu\", function (e) {\r\n e.preventDefault();\r\n }));\r\n }\r\n }\r\n else {\r\n if (io.eventDisposers.hasKey(\"contextMenuDisabled\")) {\r\n io.eventDisposers.getKey(\"contextMenuDisabled\").dispose();\r\n }\r\n }\r\n };\r\n /**\r\n * Sets if [[InteractionObject]] is hoverable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io [[InteractionObject]] instance\r\n */\r\n Interaction.prototype.processHoverable = function (io) {\r\n var _this = this;\r\n if (io.hoverable || io.trackable) {\r\n // Add global events\r\n this.addGlobalEvents();\r\n // Add hover styles\r\n this.applyCursorOverStyle(io);\r\n // Add local events\r\n if (!io.eventDisposers.hasKey(\"hoverable\") && this._addHoverEvents) {\r\n io.eventDisposers.setKey(\"hoverable\", new MultiDisposer([\r\n addEventListener(io.element, this._pointerEvents.pointerout, function (e) { return _this.handlePointerOut(io, e); }),\r\n addEventListener(io.element, this._pointerEvents.pointerover, function (e) { return _this.handlePointerOver(io, e); })\r\n ]));\r\n }\r\n if (io.trackable) {\r\n //sprite.addEventListener(\"touchmove\", this.handleTouchMove, false, this);\r\n }\r\n }\r\n else {\r\n var disposer = io.eventDisposers.getKey(\"hoverable\");\r\n if (disposer != null) {\r\n disposer.dispose();\r\n io.eventDisposers.removeKey(\"hoverable\");\r\n }\r\n }\r\n // Add or remove touch events\r\n this.processTouchable(io);\r\n };\r\n /**\r\n * Sets up [[InteractionObject]] as movable. Movable can be any\r\n * transformation, e.g. drag, swipe, resize, track.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processMovable = function (io) {\r\n // Add unified events\r\n if (io.draggable || io.swipeable || io.trackable || io.resizable) {\r\n // Prep the element\r\n if (!this.isGlobalElement(io) && !io.isTouchProtected) {\r\n this.prepElement(io);\r\n }\r\n // Add hover styles\r\n this.applyCursorOverStyle(io);\r\n }\r\n // Add or remove touch events\r\n this.processTouchable(io);\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is trackable and sets relative events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processTrackable = function (io) {\r\n this.processHoverable(io);\r\n this.processMovable(io);\r\n if (io.trackable) {\r\n this.trackedObjects.moveValue(io);\r\n }\r\n else {\r\n this.trackedObjects.removeValue(io);\r\n }\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is draggable.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processDraggable = function (io) {\r\n this.processMovable(io);\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is swipeable and sets relative events.\r\n *\r\n * A swipe event is triggered when a horizontal drag of 75px or more (and\r\n * less than 30px vertically) occurs within 700 milliseconds. This can be\r\n * overridden in sprites [[swipeOptions]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processSwipeable = function (io) {\r\n this.processMovable(io);\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is resizable and attaches required events\r\n * to it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processResizable = function (io) {\r\n this.processMovable(io);\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is supposed to capture mouse wheel events\r\n * and prepares it to catch those events.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processWheelable = function (io) {\r\n var _this = this;\r\n if (io.wheelable) {\r\n //io.hoverable = true;\r\n if (!io.eventDisposers.hasKey(\"wheelable\")) {\r\n io.eventDisposers.setKey(\"wheelable\", new MultiDisposer([\r\n addEventListener(io.element, this._pointerEvents.wheel, function (e) { return _this.handleMouseWheel(io, e); }, this._passiveSupported ? { passive: false } : false),\r\n io.events.on(\"out\", function (e) {\r\n if (io.wheelable) {\r\n _this.unlockWheel();\r\n }\r\n }),\r\n io.events.on(\"over\", function (e) {\r\n if (io.wheelable) {\r\n _this.lockWheel();\r\n }\r\n })\r\n ]));\r\n }\r\n }\r\n else {\r\n var disposer = io.eventDisposers.getKey(\"wheelable\");\r\n if (disposer != null) {\r\n disposer.dispose();\r\n io.eventDisposers.removeKey(\"wheelable\");\r\n }\r\n }\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is focusable. A focusable element is an\r\n * element that will be highlighted when users presses TAB key. If the\r\n * element is focusable, this function will attach relative focus/blur\r\n * events to it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processFocusable = function (io) {\r\n var _this = this;\r\n if (io.focusable === true && (io.tabindex > -1) && !this._useTouchEventsOnly) {\r\n if (!io.eventDisposers.hasKey(\"focusable\")) {\r\n io.eventDisposers.setKey(\"focusable\", new MultiDisposer([\r\n addEventListener(io.element, \"focus\", function (e) { return _this.handleFocus(io, e); }),\r\n addEventListener(io.element, \"blur\", function (e) { return _this.handleBlur(io, e); }),\r\n addEventListener(io.element, this._pointerEvents.pointerdown, function (e) { return _this.handleFocusBlur(io, e); }),\r\n addEventListener(io.element, \"touchstart\", function (e) { return _this.handleFocusBlur(io, e); }, this._passiveSupported ? { passive: false } : false)\r\n ]));\r\n }\r\n }\r\n else {\r\n var disposer = io.eventDisposers.getKey(\"focusable\");\r\n if (disposer != null) {\r\n disposer.dispose();\r\n io.eventDisposers.removeKey(\"focusable\");\r\n }\r\n }\r\n };\r\n /**\r\n * Checks if [[InteractionObject]] is \"touchable\". It means any interaction\r\n * whatsoever: mouse click, touch screen tap, swipe, drag, resize, etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n */\r\n Interaction.prototype.processTouchable = function (io) {\r\n var _this = this;\r\n // Add unified events\r\n if (io.clickable || io.hoverable || io.trackable || io.draggable || io.swipeable || io.resizable) {\r\n // Add global events\r\n this.addGlobalEvents();\r\n // Add local events\r\n if (!io.eventDisposers.hasKey(\"touchable\")) {\r\n if (!this._useTouchEventsOnly && !this._usePointerEventsOnly) {\r\n io.eventDisposers.setKey(\"touchable\", new MultiDisposer([\r\n addEventListener(io.element, this._pointerEvents.pointerdown, function (e) { return _this.handlePointerDown(io, e); }),\r\n addEventListener(io.element, \"touchstart\", function (e) { return _this.handleTouchDown(io, e); }, this._passiveSupported ? { passive: false } : false)\r\n ]));\r\n }\r\n else if (!this._useTouchEventsOnly) {\r\n io.eventDisposers.setKey(\"touchable\", addEventListener(io.element, this._pointerEvents.pointerdown, function (e) { return _this.handlePointerDown(io, e); }));\r\n }\r\n else if (!this._usePointerEventsOnly) {\r\n io.eventDisposers.setKey(\"touchable\", addEventListener(io.element, \"touchstart\", function (e) { return _this.handleTouchDown(io, e); }, this._passiveSupported ? { passive: false } : false));\r\n }\r\n }\r\n }\r\n else {\r\n var disposer = io.eventDisposers.getKey(\"touchable\");\r\n if (disposer != null) {\r\n disposer.dispose();\r\n io.eventDisposers.removeKey(\"touchable\");\r\n }\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Non-pointer events\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Dispatches \"focus\" event when element gains focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleFocus = function (io, ev) {\r\n if (!io.focusable) {\r\n ev.preventDefault();\r\n return;\r\n }\r\n io.isFocused = true;\r\n if (io.events.isEnabled(\"focus\") && !system.isPaused) {\r\n var imev = {\r\n type: \"focus\",\r\n target: io,\r\n event: ev\r\n };\r\n io.events.dispatchImmediately(\"focus\", imev);\r\n }\r\n };\r\n /**\r\n * Used by regular click events to prevent focus if \"noFocus\" is set.\r\n *\r\n * This should not be called by \"focus\" handlers.\r\n *\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleFocusBlur = function (io, ev) {\r\n if (io.focusable !== false && this.getHitOption(io, \"noFocus\")) {\r\n io.events.once(\"focus\", function () {\r\n io.events.disableType(\"blur\");\r\n $dom.blur();\r\n if (io.sprite) {\r\n io.sprite.handleBlur();\r\n }\r\n io.events.enableType(\"blur\");\r\n });\r\n }\r\n };\r\n /**\r\n * Dispatches \"blur\" event when element loses focus.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleBlur = function (io, ev) {\r\n if (!io.focusable) {\r\n ev.preventDefault();\r\n return;\r\n }\r\n io.isFocused = false;\r\n if (io.events.isEnabled(\"blur\") && !system.isPaused) {\r\n var imev = {\r\n type: \"blur\",\r\n target: io,\r\n event: ev\r\n };\r\n io.events.dispatchImmediately(\"blur\", imev);\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Global keyboard-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Checks if there is an item that has currently focus and that they key is\r\n * one of the directional keys. If both of the conditions are true, it\r\n * creates an object to simulate movement of dragable element with keyboard.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev An original keyboard event\r\n */\r\n Interaction.prototype.handleGlobalKeyDown = function (ev) {\r\n if (this.focusedObject) {\r\n if (keyboard.isKey(ev, \"esc\")) {\r\n // ESC removes focus\r\n $dom.blur();\r\n }\r\n else if (this.focusedObject.draggable && keyboard.isKey(ev, [\"up\", \"down\", \"left\", \"right\"])) {\r\n // Prevent scrolling of the document\r\n ev.preventDefault();\r\n // Get focused object\r\n var io = this.focusedObject;\r\n // Get particular key\r\n var disposerKey = \"interactionKeyboardObject\";\r\n // If such disposer already exists we know the event is going on so we\r\n // just move on\r\n if (io.eventDisposers.hasKey(disposerKey)) {\r\n return;\r\n }\r\n // Create a keyboard mover\r\n var ko = new InteractionKeyboardObject(io, ev);\r\n io.eventDisposers.setKey(disposerKey, ko);\r\n switch (keyboard.getEventKey(ev)) {\r\n case \"up\":\r\n ko.directionY = -1;\r\n break;\r\n case \"down\":\r\n ko.directionY = 1;\r\n break;\r\n case \"left\":\r\n ko.directionX = -1;\r\n break;\r\n case \"right\":\r\n ko.directionX = 1;\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Dispatches related events when the keyboard key is realeasd.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev An original keyboard event\r\n */\r\n Interaction.prototype.handleGlobalKeyUp = function (ev) {\r\n var disposerKey = \"interactionKeyboardObject\";\r\n if (this.focusedObject) {\r\n var disposer = this.focusedObject.eventDisposers.getKey(disposerKey);\r\n if (disposer != null) {\r\n // Prevent scrolling of the document\r\n ev.preventDefault();\r\n // Dispose stuff\r\n disposer.dispose();\r\n this.focusedObject.eventDisposers.removeKey(disposerKey);\r\n }\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Global pointer-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Handler for a global \"pointermove\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalPointerMove = function (ev) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Update current point position\r\n pointer.point = this.getPointerPoint(ev);\r\n // Prepare and fire global event\r\n if (this.events.isEnabled(\"track\") && !system.isPaused) {\r\n var imev = {\r\n type: \"track\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"track\", imev);\r\n }\r\n // Track\r\n this.addBreadCrumb(pointer, pointer.point);\r\n // Process further\r\n this.handleGlobalMove(pointer, ev);\r\n };\r\n /**\r\n * Handler for a global \"pointerdown\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalPointerDown = function (ev) {\r\n // Remove delayed hovers\r\n this.processDelayed();\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Prepare and fire global event\r\n if (this.events.isEnabled(\"down\") && !system.isPaused) {\r\n var imev = {\r\n type: \"down\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"down\", imev);\r\n }\r\n };\r\n /**\r\n * Prevents touch action from firing.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event\r\n */\r\n Interaction.prototype.preventTouchAction = function (ev) {\r\n if (!ev.defaultPrevented) {\r\n ev.preventDefault();\r\n }\r\n };\r\n /**\r\n * Handler for a global \"pointerup\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalPointerUp = function (ev, cancelled) {\r\n if (cancelled === void 0) { cancelled = false; }\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Prepare and fire global event\r\n if (this.events.isEnabled(\"up\") && !system.isPaused) {\r\n var imev = {\r\n type: \"up\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"up\", imev);\r\n }\r\n // Process further\r\n this.handleGlobalUp(pointer, ev, cancelled);\r\n };\r\n /**\r\n * ==========================================================================\r\n * Global touch-related even handlers\r\n * ==========================================================================\r\n */\r\n /**\r\n * Handler for a global \"touchmove\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalTouchMove = function (ev) {\r\n // Process each changed touch point\r\n for (var i = 0; i < ev.changedTouches.length; i++) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev.changedTouches[i]);\r\n // Update current point position\r\n pointer.point = this.getPointerPoint(ev.changedTouches[i]);\r\n // Prepare and fire global event\r\n if (this.events.isEnabled(\"track\") && !system.isPaused) {\r\n var imev = {\r\n type: \"track\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"track\", imev);\r\n }\r\n // Track\r\n this.addBreadCrumb(pointer, pointer.point);\r\n // Process further\r\n this.handleGlobalMove(pointer, ev);\r\n }\r\n };\r\n /**\r\n * Handler for a global \"touchstart\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalTouchStart = function (ev) {\r\n // Remove delayed hovers\r\n this.processDelayed();\r\n // Process each changed touch point\r\n for (var i = 0; i < ev.changedTouches.length; i++) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev.changedTouches[i]);\r\n // Prepare and fire global event\r\n if (!this._usePointerEventsOnly && this.events.isEnabled(\"down\") && !system.isPaused) {\r\n var imev = {\r\n type: \"down\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"down\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Handler for a global \"touchend\" event.\r\n *\r\n * @ignore Exclude from docs\r\n * @param ev Event object\r\n */\r\n Interaction.prototype.handleGlobalTouchEnd = function (ev) {\r\n // Process each changed touch point\r\n for (var i = 0; i < ev.changedTouches.length; i++) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev.changedTouches[i]);\r\n // Prepare and fire global event\r\n if (this.events.isEnabled(\"up\") && !system.isPaused) {\r\n var imev = {\r\n type: \"up\",\r\n target: this,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n this.events.dispatchImmediately(\"up\", imev);\r\n }\r\n // Handle element-related events\r\n this.handleGlobalUp(pointer, ev);\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Element-specific pointer-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Handles event when pointer is over [[InteractionObject]] and button is\r\n * pressed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handlePointerDown = function (io, ev) {\r\n // Stop further propagation so we don't get multiple triggers on hybrid\r\n // devices (both mouse and touch capabilities)\r\n //ev.preventDefault();\r\n //ev.stopPropagation();\r\n //if (ev.defaultPrevented) {\r\n //}\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Ignore if it's anything but mouse's primary button\r\n if (!pointer.touch && ev.which != 1 && ev.which != 3) {\r\n return;\r\n }\r\n // Set mouse button\r\n pointer.button = ev.which;\r\n // Reset pointer\r\n this.resetPointer(pointer, ev);\r\n // Process down\r\n this.handleDown(io, pointer, ev);\r\n };\r\n /**\r\n * Handles event when [[InteractionObject]] is hovered by a mouse pointer.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handlePointerOver = function (io, ev) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Process down\r\n this.handleOver(io, pointer, ev);\r\n };\r\n /**\r\n * Handles event when [[InteractionObject]] loses hover from a mouse pointer.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handlePointerOut = function (io, ev) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Process down\r\n this.handleOut(io, pointer, ev);\r\n };\r\n /**\r\n * Handles event when mouse wheel is crolled over the [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n * @todo Investigate more-cross browser stuff https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n */\r\n Interaction.prototype.handleMouseWheel = function (io, ev) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev);\r\n // Update current point position\r\n pointer.point = this.getPointerPoint(ev);\r\n // Init delta values\r\n var deltaX = 0, deltaY = 0;\r\n // Set up modifier\r\n // This is needed because FireFox reports wheel deltas in \"lines\" instead\r\n // of pixels so we have to approximate pixel value\r\n var mod = 1;\r\n if (ev.deltaMode == 1) {\r\n mod = 50;\r\n }\r\n // Calculate deltas\r\n if (ev instanceof WheelEvent) {\r\n deltaX = Math.round((-1 * ev.wheelDeltaX) || ev.deltaX) * mod;\r\n deltaY = Math.round((-1 * ev.wheelDeltaY) || ev.deltaY) * mod;\r\n }\r\n else {\r\n throw new Error(\"Invalid event type\");\r\n }\r\n // Handle the event\r\n this.handleWheel(io, pointer, deltaX, deltaY, ev);\r\n };\r\n /**\r\n * ==========================================================================\r\n * Element-specific touch-related even handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Handles an event when an [[InteractionObject]] is touched on a touch\r\n * device.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleTouchDown = function (io, ev) {\r\n // Stop further propagation so we don't get multiple triggers on hybrid\r\n // devices (both mouse and touch capabilities)\r\n //this.maybePreventDefault(io, ev);\r\n //return;\r\n // Process each changed touch point\r\n for (var i = 0; i < ev.changedTouches.length; i++) {\r\n // Get pointer\r\n var pointer = this.getPointer(ev.changedTouches[i]);\r\n this.maybePreventDefault(io, ev, pointer);\r\n // Reset pointer\r\n this.resetPointer(pointer, ev.changedTouches[i]);\r\n // Process down\r\n this.handleDown(io, pointer, ev);\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Universal handlers\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Handles click/tap. Checks for doublehit.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleHit = function (io, pointer, ev) {\r\n // Check if this is a double-hit\r\n var now = $time.getTime();\r\n if (io.lastHit && (io.lastHit >= (now - this.getHitOption(io, \"doubleHitTime\")))) {\r\n // Yup - it's a double-hit\r\n // Cancel the hit\r\n //clearTimeout(io.lastHitPointer.hitTimeout);\r\n // If it happened too fast it probably means that hybrid device just\r\n // generated two events for the same tap\r\n if ((now - io.lastHit) < 100) {\r\n // Ignore\r\n return;\r\n }\r\n // Clear last hit\r\n io.lastHit = undefined;\r\n io.lastHitPointer = undefined;\r\n // Dispatch event\r\n if (io.events.isEnabled(\"doublehit\") && !system.isPaused) {\r\n var imev = {\r\n type: \"doublehit\",\r\n target: io,\r\n point: pointer.point,\r\n event: ev,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"doublehit\", imev);\r\n }\r\n }\r\n else {\r\n // Log last hit\r\n io.lastHit = now;\r\n io.lastHitPointer = pointer;\r\n if (pointer.button === 3) {\r\n // Execute HIT now\r\n if (io.events.isEnabled(\"rightclick\") && !system.isPaused) {\r\n var imev = {\r\n type: \"rightclick\",\r\n target: io,\r\n event: ev\r\n };\r\n io.events.dispatchImmediately(\"rightclick\", imev);\r\n }\r\n }\r\n else {\r\n if (io.events.isEnabled(\"hit\") && !system.isPaused) {\r\n var imev = {\r\n type: \"hit\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"hit\", imev);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Handles pointer hovering over [[InteractionObject]].\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param soft Invoked by helper function\r\n */\r\n Interaction.prototype.handleOver = function (io, pointer, ev, soft) {\r\n if (soft === void 0) { soft = false; }\r\n if (!io.hoverable) {\r\n return;\r\n }\r\n // Remove any delayed outs\r\n this.processDelayed();\r\n // Add pointer\r\n io.overPointers.moveValue(pointer);\r\n // Check if object is not yet hovered\r\n if (!io.isHover) {\r\n // Set element as hovered\r\n io.isHover = true;\r\n this.overObjects.moveValue(io);\r\n // Generate body track event. This is needed so that if element loads\r\n // under unmoved mouse cursor, we still need all the actions that are\r\n // required to happen to kick in.\r\n this.handleTrack(this.body, pointer, ev, true);\r\n // Event\r\n if (io.events.isEnabled(\"over\") && !system.isPaused) {\r\n var imev = {\r\n type: \"over\",\r\n target: io,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"over\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Handles when [[InteractionObject]] is no longer hovered.\r\n *\r\n * If `soft = true`, this means that method is being invoked by some other\r\n * code, not hard \"out\" function, like `handleUp` which implies we need to\r\n * run additional checks before unhovering the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param soft Invoked by helper function\r\n * @param force Force imediate out\r\n */\r\n Interaction.prototype.handleOut = function (io, pointer, ev, soft, force) {\r\n var _this = this;\r\n if (soft === void 0) { soft = false; }\r\n if (force === void 0) { force = false; }\r\n if (!io.hoverable) {\r\n return;\r\n }\r\n // Remove pointer\r\n io.overPointers.removeValue(pointer);\r\n // Check if element is still hovered\r\n if (io.isHover && (!io.hasDelayedOut || force)) {\r\n // Should we run additional checks?\r\n if (soft && io.overPointers.length) {\r\n // There are still pointers hovering - don't do anything else and\r\n // wait until either no over pointers are there or we get a hard out\r\n // event.\r\n return;\r\n }\r\n // Should we delay \"out\" if this is happening on a touch device?\r\n if (pointer.touch && !force && !this.old(pointer)) {\r\n // This is a touch pointer, and it hasn't moved, let's pretend\r\n // the object is still hovered, and act as per \"behavior\" setting\r\n var behavior = this.getHoverOption(io, \"touchOutBehavior\");\r\n if (behavior == \"leave\") {\r\n // Set to \"leave\", so we do not execute any \"out\" event.\r\n // It will be handled by any other interaction that happens\r\n // afterwards.\r\n this._delayedEvents.out.push({\r\n type: \"out\",\r\n io: io,\r\n pointer: pointer,\r\n event: ev,\r\n keepUntil: $time.getTime() + 500\r\n });\r\n io.hasDelayedOut = true;\r\n return;\r\n }\r\n else if (behavior == \"delay\" && this.getHoverOption(io, \"touchOutDelay\")) {\r\n this._delayedEvents.out.push({\r\n type: \"out\",\r\n io: io,\r\n pointer: pointer,\r\n event: ev,\r\n keepUntil: $time.getTime() + 500,\r\n timeout: this.setTimeout(function () {\r\n _this.handleOut(io, pointer, ev, true);\r\n }, this.getHoverOption(io, \"touchOutDelay\"))\r\n });\r\n return;\r\n }\r\n else {\r\n // Nothing for \"remove\" - that's how it works \"out-of-the-box\"\r\n }\r\n }\r\n // Set element as not hovered\r\n io.isHover = false;\r\n this.overObjects.removeValue(io);\r\n // Invoke event\r\n if (io.events.isEnabled(\"out\") && !system.isPaused) {\r\n var imev = {\r\n type: \"out\",\r\n target: io,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"out\", imev);\r\n }\r\n // Reset object from lefover delayed outs, pointers\r\n io.overPointers.clear();\r\n io.hasDelayedOut = false;\r\n // @todo (clean delayed)\r\n }\r\n };\r\n /**\r\n * Processes dalyed events, such as \"out\" event that was initiated for\r\n * elements by touch.\r\n */\r\n Interaction.prototype.processDelayed = function () {\r\n var delayedEvent;\r\n while (true) {\r\n delayedEvent = this._delayedEvents.out.pop();\r\n if (!delayedEvent) {\r\n break;\r\n }\r\n if (delayedEvent.timeout) {\r\n delayedEvent.timeout.dispose();\r\n }\r\n this.handleOut(delayedEvent.io, delayedEvent.pointer, delayedEvent.event, false, true);\r\n }\r\n };\r\n /**\r\n * Performs tasks on pointer down.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleDown = function (io, pointer, ev) {\r\n // Need to prevent default event from happening on transformable objects\r\n this.maybePreventDefault(io, ev, pointer);\r\n // Stop inertia animations if they're currently being played out\r\n if (io.inert) {\r\n this.stopInertia(io);\r\n }\r\n // Trigger hover because some touch devices won't trigger over events\r\n // on their own\r\n this.handleOver(io, pointer, ev, true);\r\n // Add pointer to list\r\n io.downPointers.moveValue(pointer);\r\n // Apply styles if necessary\r\n this.applyCursorDownStyle(io, pointer);\r\n // Check if object is already down\r\n if (!io.isDown) {\r\n // Lose focus if needed\r\n if (io.focusable !== false && this.getHitOption(io, \"noFocus\") && this.focusedObject) {\r\n $dom.blur();\r\n }\r\n // Set object as hovered\r\n io.isDown = true;\r\n this.downObjects.moveValue(io);\r\n // Prep object for dragging and/or resizing\r\n if (io.draggable) {\r\n this.processDragStart(io, pointer, ev);\r\n }\r\n if (io.resizable) {\r\n this.processResizeStart(io, pointer, ev);\r\n }\r\n }\r\n // Dispatch \"down\" event\r\n if (io.events.isEnabled(\"down\") && !system.isPaused) {\r\n var imev = {\r\n type: \"down\",\r\n target: io,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"down\", imev);\r\n }\r\n };\r\n /**\r\n * Performs tasks on pointer up.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleGlobalUp = function (pointer, ev, cancelled) {\r\n var _this = this;\r\n if (cancelled === void 0) { cancelled = false; }\r\n // Process all down objects\r\n $iter.each(this.downObjects.backwards().iterator(), function (io) {\r\n // Check if this particular pointer is pressing down\r\n // on object\r\n if (io && io.downPointers.contains(pointer)) {\r\n _this.handleUp(io, pointer, ev, cancelled);\r\n }\r\n });\r\n };\r\n /**\r\n * Handles when [[InteractionObject]] is no longer hovered.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Interaction object\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleUp = function (io, pointer, ev, cancelled) {\r\n if (cancelled === void 0) { cancelled = false; }\r\n // Restore cursor style\r\n this.restoreCursorDownStyle(io, pointer);\r\n // Remove pointer from the list\r\n io.downPointers.removeValue(pointer);\r\n // Trigger out because some touch devices won't trigger out events\r\n // on their own\r\n if (pointer.touch || this._useTouchEventsOnly) {\r\n this.handleOut(io, pointer, ev, true);\r\n }\r\n // Check if object still down\r\n if (io.isDown) {\r\n // Check if there are no other pointers hovering this element\r\n if (io.downPointers.length == 0) {\r\n // Set element as no longer down\r\n io.isDown = false;\r\n this.downObjects.removeValue(io);\r\n }\r\n // Dispatch \"up\" event\r\n if (io.events.isEnabled(\"up\") && !system.isPaused) {\r\n var imev = {\r\n type: \"up\",\r\n target: io,\r\n event: ev,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"up\", imev);\r\n }\r\n // Check if this was not a cancelled event.\r\n // If event was canelled (which might happen if gesture resulted in\r\n // navigation or page scroll) there's no point in triggering hit and\r\n // other actions.\r\n if (!cancelled) {\r\n // Handle swiping-related stuff\r\n if (io.swipeable && this.swiped(io, pointer)) {\r\n // Swiped - nothing else should happen\r\n this.handleSwipe(io, pointer, ev);\r\n }\r\n else {\r\n // Check if it maybe a click\r\n if (io.clickable && !this.moved(pointer, this.getHitOption(io, \"hitTolerance\"))) {\r\n this.handleHit(io, pointer, ev);\r\n }\r\n // Handle inertia\r\n if (io.inert && this.moved(pointer, this.getHitOption(io, \"hitTolerance\"))) {\r\n this.handleInertia(io, pointer);\r\n }\r\n else if (io.draggable) {\r\n this.processDragStop(io, pointer, ev);\r\n }\r\n if (io.resizable) {\r\n this.processResizeStop(io, pointer, ev);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Checks if event needs to be prevented on draggable and such items, so that\r\n * touch gestures like navigation and scroll do not kick in.\r\n *\r\n * @param io Object\r\n * @param ev Event\r\n */\r\n Interaction.prototype.maybePreventDefault = function (io, ev, pointer) {\r\n if ($type.hasValue(ev)\r\n && (io.draggable || io.swipeable || io.trackable || io.resizable)\r\n && !this.isGlobalElement(io)\r\n && ev.cancelable !== false\r\n && (!io.isTouchProtected || !pointer || !pointer.touch)) {\r\n ev.preventDefault();\r\n }\r\n };\r\n /**\r\n * Handles pointer move.\r\n *\r\n * @ignore Exclude from docs\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleGlobalMove = function (pointer, ev) {\r\n var _this = this;\r\n // Process hovered elements\r\n // We check if the element became unhovered without reporting the mouseout\r\n // event. (it happens in some cases)\r\n if (!pointer.touch) {\r\n var target_1 = $dom.eventTarget(pointer.lastEvent);\r\n $iter.each(this.overObjects.backwards().iterator(), function (io) {\r\n // Is this pointer relevant to element?\r\n if (io && io.overPointers.contains(pointer) && io.hoverable) {\r\n // Check if the element is still hovered\r\n var reset = false;\r\n if (io.element && pointer.lastEvent) {\r\n if (!$dom.contains(io.element, target_1)) {\r\n reset = true;\r\n }\r\n }\r\n else {\r\n reset = true;\r\n }\r\n if (reset) {\r\n _this.handleOut(io, pointer, ev, true);\r\n }\r\n }\r\n });\r\n }\r\n // Process down elements\r\n $iter.each(this.transformedObjects.backwards().iterator(), function (io) {\r\n // Is this pointer relevant to element?\r\n if (io.downPointers.contains(pointer) &&\r\n // Swipe still happening?\r\n !(io.swipeable && _this.swiping(io, pointer)) &&\r\n (io.draggable || io.resizable)) {\r\n _this.handleTransform(io, ev);\r\n }\r\n });\r\n // Process tracked elements\r\n $iter.each(this.trackedObjects.backwards().iterator(), function (io) {\r\n // Is this pointer relevant to element?\r\n if (!io.overPointers.contains(pointer)) {\r\n _this.handleTrack(io, pointer, ev);\r\n }\r\n });\r\n };\r\n /**\r\n * Handles reporting of pointer movement.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n * @param skipCheck Sould we skip check if cursor actually moved\r\n */\r\n Interaction.prototype.handleTrack = function (io, pointer, ev, skipCheck) {\r\n if (skipCheck === void 0) { skipCheck = false; }\r\n // Do nothing if the cursor did not actually move\r\n if (!skipCheck && !this.moved(pointer, 0)) {\r\n return;\r\n }\r\n // Initiate TRACK event\r\n if (io.events.isEnabled(\"track\") && !system.isPaused) {\r\n var imev = {\r\n type: \"track\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n pointer: pointer,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"track\", imev);\r\n }\r\n };\r\n /**\r\n * Handles swipe action.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleSwipe = function (io, pointer, ev) {\r\n // We pass in InteractionEvent with shift in mouse coordinates\r\n // between when the drag started and ended\r\n if (io.events.isEnabled(\"swipe\") && !system.isPaused) {\r\n var imev = {\r\n type: \"swipe\",\r\n target: io,\r\n event: ev,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"swipe\", imev);\r\n }\r\n if (pointer.startPoint.x < pointer.point.x) {\r\n if (io.events.isEnabled(\"swiperight\") && !system.isPaused) {\r\n var imev = {\r\n type: \"swiperight\",\r\n target: io,\r\n event: ev,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"swiperight\", imev);\r\n }\r\n }\r\n else {\r\n if (io.events.isEnabled(\"swipeleft\") && !system.isPaused) {\r\n var imev = {\r\n type: \"swipeleft\",\r\n target: io,\r\n event: ev,\r\n touch: pointer.touch\r\n };\r\n io.events.dispatchImmediately(\"swipeleft\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Handles event triggering for wheel rotation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param deltaX Horizontal shift\r\n * @param deltaY Vertical shift\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleWheel = function (io, pointer, deltaX, deltaY, ev) {\r\n var shift = {\r\n x: deltaX,\r\n y: deltaY\r\n };\r\n // Trigger generic WHEEL event\r\n if (io.events.isEnabled(\"wheel\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"wheel\", {\r\n type: \"wheel\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n shift: shift\r\n });\r\n }\r\n // Trigger direction-specific events\r\n // Horizontal\r\n if (deltaX < 0) {\r\n if (io.events.isEnabled(\"wheelleft\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"wheelleft\", {\r\n type: \"wheelleft\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n shift: shift\r\n });\r\n }\r\n }\r\n else if (deltaX > 0) {\r\n if (io.events.isEnabled(\"swiperight\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"wheelright\", {\r\n type: \"wheelright\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n shift: shift\r\n });\r\n }\r\n // Vertical\r\n }\r\n else if (deltaY < 0) {\r\n if (io.events.isEnabled(\"wheelup\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"wheelup\", {\r\n type: \"wheelup\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n shift: shift\r\n });\r\n }\r\n }\r\n else if (deltaY > 0) {\r\n if (io.events.isEnabled(\"wheeldown\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"wheeldown\", {\r\n type: \"wheeldown\",\r\n target: io,\r\n event: ev,\r\n point: pointer.point,\r\n shift: shift\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Initiates inertia checking sub-routines for different movement types:\r\n * drag, resize.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprite\r\n * @param pointer\r\n */\r\n Interaction.prototype.handleInertia = function (io, pointer) {\r\n if (io.draggable && io.downPointers.length === 0) {\r\n this.handleMoveInertia(io, pointer);\r\n }\r\n if (io.resizable && io.downPointers.length > 1) {\r\n this.handleResizeInertia(io, pointer);\r\n }\r\n };\r\n /**\r\n * Continues moving the element to simulate the effect of inertia. Happens\r\n * when `inert` and `draggable` object is dragged and then released.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\r\n Interaction.prototype.handleMoveInertia = function (io, pointer) {\r\n var interaction = io;\r\n var type = \"move\";\r\n var point = {\r\n \"x\": pointer.point.x,\r\n \"y\": pointer.point.y\r\n };\r\n var startPoint = {\r\n \"x\": pointer.startPoint.x,\r\n \"y\": pointer.startPoint.y\r\n };\r\n // Init inertia object\r\n var inertia = new Inertia(interaction, type, point, startPoint);\r\n // Get inertia data\r\n var ref = this.getTrailPoint(pointer, $time.getTime() - this.getInertiaOption(io, \"move\", \"time\"));\r\n if (typeof ref === \"undefined\") {\r\n this.processDragStop(io, pointer, pointer.lastUpEvent);\r\n return;\r\n }\r\n // Init animation options\r\n var factor = this.getInertiaOption(io, \"move\", \"factor\");\r\n var animationOptions = [{\r\n \"to\": pointer.point.x + (pointer.point.x - ref.point.x) * factor,\r\n \"property\": \"x\"\r\n }, {\r\n \"to\": pointer.point.y + (pointer.point.y - ref.point.y) * factor,\r\n \"property\": \"y\"\r\n }];\r\n // Start animation\r\n var animation = new Animation(inertia, animationOptions, this.getInertiaOption(io, \"move\", \"duration\"), this.getInertiaOption(io, \"move\", \"easing\")).start();\r\n this._disposers.push(animation.events.on(\"animationended\", function (ev) {\r\n inertia.done();\r\n }));\r\n // Add inertia object\r\n io.inertias.setKey(\"move\", inertia);\r\n };\r\n /**\r\n * Continues resizing of a `resizable` element after it is resized and\r\n * released.\r\n *\r\n * **NOTE:** this is is just a placeholder function. No actual fucntionality\r\n * is implemented, yet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\r\n Interaction.prototype.handleResizeInertia = function (io, pointer) {\r\n // Some day, folks. Some day...\r\n };\r\n /**\r\n * Recalculates element's position and size based on position of\r\n * all its related pointers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.handleTransform = function (io, ev) {\r\n // Get primary pointer and its respective points\r\n var pointer1 = io.downPointers.getIndex(0);\r\n var point1 = null;\r\n var startPoint1 = null;\r\n if (pointer1) {\r\n point1 = pointer1.point;\r\n startPoint1 = pointer1.startPoint;\r\n }\r\n // Init secondary pointer\r\n var pointer2;\r\n var point2;\r\n var startPoint2;\r\n // Use center of the sprite to simulate \"second\" point of touch\r\n point2 = {\r\n \"x\": io.originalPosition.x,\r\n \"y\": io.originalPosition.y\r\n };\r\n startPoint2 = point2;\r\n // Determine if it's a sinngle pointer or multi\r\n var singlePoint = true;\r\n for (var i = 1; i < io.downPointers.length; i++) {\r\n // Get pointer\r\n var nextPointer = io.downPointers.getIndex(i);\r\n // Doublecheck if it's not the same pointer by comparing original position\r\n if (startPoint1.x != nextPointer.startPoint.x && startPoint1.y != nextPointer.startPoint.y) {\r\n // Several pointers down\r\n singlePoint = false;\r\n // Get second pointer\r\n pointer2 = nextPointer;\r\n point2 = pointer2.point;\r\n startPoint2 = pointer2.startPoint;\r\n // Stop looking\r\n break;\r\n }\r\n }\r\n // Primary touch point moved?\r\n var pointer1Moved = pointer1 && this.moved(pointer1, 0);\r\n // Report DRAG_START if necessary\r\n if (io.draggable && pointer1 && pointer1.dragStartEvents && pointer1.dragStartEvents.length && pointer1Moved) {\r\n if (io.events.isEnabled(\"dragstart\") && !system.isPaused) {\r\n io.events.dispatchImmediately(\"dragstart\", pointer1.dragStartEvents.shift());\r\n }\r\n //delete pointer1.dragStartEvents;\r\n }\r\n // Determine what we do in order of superiority\r\n if (singlePoint && io.draggable) {\r\n // We have only one pointer and the Sprite is draggable\r\n // There's nothing else to be done - just move it\r\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved, pointer1.touch);\r\n }\r\n else {\r\n // Check if second touch point moved\r\n var pointer2Moved = pointer2 && this.moved(pointer2, 0);\r\n if (io.draggable && io.resizable) {\r\n //this.handleTransformAll(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved);\r\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved && pointer2Moved, pointer1.touch);\r\n this.handleTransformResize(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved, pointer1.touch);\r\n }\r\n else {\r\n if (io.draggable) {\r\n this.handleTransformMove(io, point1, startPoint1, ev, pointer1Moved, pointer1.touch);\r\n }\r\n if (io.resizable && (!singlePoint || ev.ctrlKey)) {\r\n this.handleTransformResize(io, point1, startPoint1, point2, startPoint2, ev, pointer1Moved && pointer2Moved, pointer1.touch);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Handles movement of the dragged element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param point Current point of the pointer\r\n * @param startPoint Starting point of the pointer\r\n * @param ev Original event\r\n * @param pointerMoved Did pointer move?\r\n */\r\n Interaction.prototype.handleTransformMove = function (io, point, startPoint, ev, pointerMoved, touch) {\r\n if (pointerMoved) {\r\n if (io.events.isEnabled(\"drag\") && !system.isPaused && (!io.isTouchProtected || !touch)) {\r\n var imev = {\r\n type: \"drag\",\r\n target: io,\r\n event: ev,\r\n shift: {\r\n \"x\": point.x - startPoint.x,\r\n \"y\": point.y - startPoint.y\r\n },\r\n startPoint: startPoint,\r\n point: point,\r\n touch: touch\r\n };\r\n io.events.dispatchImmediately(\"drag\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Handles resizing of the element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param point1 Current position of reference point #1\r\n * @param startPoint1 Original position of reference point #1\r\n * @param point2 Current position of reference point #2\r\n * @param startPoint2 Original position of reference point #2\r\n * @param ev Original event\r\n * @param pointerMoved Did pointer move?\r\n */\r\n Interaction.prototype.handleTransformResize = function (io, point1, startPoint1, point2, startPoint2, ev, pointerMoved, touch) {\r\n if (io.events.isEnabled(\"resize\") && !system.isPaused && (!io.isTouchProtected || !touch)) {\r\n var imev = {\r\n type: \"resize\",\r\n target: io,\r\n event: ev,\r\n scale: $math.getScale(point1, startPoint1, point2, startPoint2),\r\n startPoint1: startPoint1,\r\n point1: point1,\r\n startPoint2: startPoint2,\r\n point2: point2,\r\n touch: touch\r\n };\r\n io.events.dispatchImmediately(\"resize\", imev);\r\n }\r\n };\r\n /**\r\n * Handles all the preparations of the element when it starts to be dragged.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.processDragStart = function (io, pointer, ev) {\r\n // Add to draggedObjects\r\n this.transformedObjects.moveValue(io);\r\n // Report \"dragstart\"\r\n var imev = {\r\n type: \"dragstart\",\r\n target: io,\r\n event: ev,\r\n touch: pointer ? pointer.touch : false\r\n };\r\n // Log object that we are starting to drag, so we can check against and\r\n // avoid hovers on other objects that might be in the path of movement.\r\n if (pointer) {\r\n pointer.dragTarget = io;\r\n //pointer.startPoint = pointer.point;\r\n }\r\n /**\r\n * If pointer is set we will not fire the event until the pointer has\r\n * actually moved. If it's not set we don't have to wait for anything, so we\r\n * just fire off the event right away.\r\n */\r\n if (pointer && pointer.dragStartEvents) {\r\n pointer.dragStartEvents.push(imev);\r\n }\r\n else {\r\n if (!system.isPaused) {\r\n io.dispatchImmediately(\"dragstart\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Finishes up element drag operation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.processDragStop = function (io, pointer, ev) {\r\n // Pointer set?\r\n if (!pointer) {\r\n pointer = this.getDragPointer(io);\r\n }\r\n // Unset drag object\r\n if (pointer) {\r\n pointer.dragTarget = undefined;\r\n }\r\n // Removed from transformedObjects\r\n this.transformedObjects.removeValue(io);\r\n // Unlock document\r\n //this.unlockDocument();\r\n // Report dragstop\r\n if (!pointer || this.moved(pointer, 0)) {\r\n if (io.events.isEnabled(\"dragstop\") && !system.isPaused) {\r\n var imev = {\r\n type: \"dragstop\",\r\n target: io,\r\n touch: pointer ? pointer.touch : false\r\n };\r\n io.events.dispatchImmediately(\"dragstop\", imev);\r\n }\r\n }\r\n };\r\n /**\r\n * Handles all the preparations of the element when it starts to be resized.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.processResizeStart = function (io, pointer, ev) {\r\n // Add to draggedObjects\r\n this.transformedObjects.moveValue(io);\r\n };\r\n /**\r\n * Finishes up element drag operation.\r\n *\r\n * @ignore Exclude from docs\r\n * @param io Element\r\n * @param pointer Pointer\r\n * @param ev Original event\r\n */\r\n Interaction.prototype.processResizeStop = function (io, pointer, ev) {\r\n // Removed from transformedObjects\r\n this.transformedObjects.removeValue(io);\r\n };\r\n /**\r\n * ==========================================================================\r\n * Controls for InteractionObjects initiating directly\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Manually triggers drag start on the element. Could be useful in cases\r\n * where tracking or dragging one element can also influence dragging another\r\n * element.\r\n *\r\n * Passing in `pointer` reference is advisable. If not passed in it will try\r\n * to determine which pointer to attach to. However, it's better to specify\r\n * it explicitly.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\r\n Interaction.prototype.dragStart = function (io, pointer) {\r\n if (!pointer) {\r\n pointer = this.getDragPointer(io);\r\n }\r\n if (pointer) {\r\n this.handleDown(io, pointer, pointer.lastDownEvent);\r\n }\r\n };\r\n /**\r\n * Manually ends drag on the element.\r\n *\r\n * @param io Element\r\n * @param pointer Pointer\r\n */\r\n Interaction.prototype.dragStop = function (io, pointer) {\r\n if (!pointer) {\r\n pointer = this.getDragPointer(io);\r\n }\r\n if (pointer) {\r\n this.handleGlobalUp(pointer, pointer.lastUpEvent);\r\n }\r\n };\r\n /**\r\n * This method uses a fuzzy logic to find the pointer to be used for dragging.\r\n * Beware that this is not a rock-solid solution. If there are a few objects\r\n * being dragged at the same time, you may get unexepected results.\r\n *\r\n * @param io InteractionObject to get pointers from\r\n * @return Pointer currently being used for dragging\r\n */\r\n Interaction.prototype.getDragPointer = function (io) {\r\n if (io) {\r\n // InteractionObject is supplied\r\n // Use it's first down pointer\r\n return io.downPointers.getIndex(0);\r\n }\r\n else if (this.transformedObjects.length) {\r\n // Use first dragged object\r\n return this.getDragPointer(this.transformedObjects.getIndex(0));\r\n }\r\n else {\r\n return undefined;\r\n }\r\n };\r\n /**\r\n * ==========================================================================\r\n * Utils\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * Returns pointer id for the given event object.\r\n *\r\n * @param ev Event\r\n * @return Pointer ID\r\n */\r\n Interaction.prototype.getPointerId = function (ev) {\r\n var id = \"\";\r\n if ($type.hasValue(ev.identifier)) {\r\n id = \"\" + ev.identifier;\r\n }\r\n else if ($type.hasValue(ev.pointerId)) {\r\n id = \"\" + ev.pointerId;\r\n }\r\n else {\r\n id = \"m\";\r\n }\r\n return id.replace(\"-\", \"\");\r\n };\r\n /**\r\n * Returns a cursor position of the event.\r\n *\r\n * @param ev Original event\r\n * @return Event point\r\n */\r\n Interaction.prototype.getPointerPoint = function (ev) {\r\n return {\r\n \"x\": ev.clientX,\r\n \"y\": ev.clientY\r\n };\r\n };\r\n /**\r\n * Returns [[Pointer]] object that is associated with the Event.\r\n *\r\n * If no such [[Pointer]] object exists, it is created.\r\n *\r\n * @param ev Event\r\n * @return Pointer\r\n */\r\n Interaction.prototype.getPointer = function (ev) {\r\n // Get pointer id\r\n var id = this.getPointerId(ev);\r\n // Get current coordinates\r\n var point = this.getPointerPoint(ev);\r\n // Look for the pointer in the Dictionary if it maybe already exists\r\n var pointer;\r\n if (this.pointers.hasKey(id)) {\r\n // We already have such pointer\r\n pointer = this.pointers.getKey(id);\r\n // We need this, because Edge reuses pointer ids across touch and mouse\r\n pointer.touch = this.isPointerTouch(ev);\r\n // Reset pointer\r\n //pointer.point = point;\r\n }\r\n else {\r\n // Init pointer\r\n pointer = {\r\n \"id\": id,\r\n //\"touch\": !(ev instanceof MouseEvent) || ((